Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
attachments_05-09-2012_18-55-54 / ТРЕНИНГ УМЕНИЙ.doc
Скачиваний:
10
Добавлен:
09.04.2015
Размер:
118.78 Кб
Скачать

8.Пример выполнения упражнения тренинга на умение 8 Задание

Разработать функцию, которая для заданной вещественной матрицы определяет для каждого ее столбца сумму его элементов и максимальное значение элемента в столбце. Результаты обработки каждого столбца хранятся в виде двух массивов: первый хранит сумму элементов столбца, второй – максимальное значение элемента в столбце.

  1. Дано: вещественная матрицаХ(N, M). Определить: Y(j) = j = 1,…M SX[j] = max Xi,j i i = 1,…N; j = 1,…M

  2. Разработаем алгоритм обработки массива, учитывая, что X,Y,SX - внешние массивы: Вход X – объект, соответствующий исходной матрице цикл по j от 0 до M - 1S = 0 MaxSt = X[0][j] цикл по i от 0 до N – 1 S = S + X[i][j] Если X[i][j] > MaxSt то MaxSt = X[i][j] конец если конец цикла по i передаем во внешний массивY: Y[j] = S передаем во внешний массивSX: SX[j] = MaxSt конец цикла по j Выход

  3. Дадим функции имя, определим список формальных параметров и тип возвращаемого функцией значения, определить параметры, вызываемые «по значению» и «по наименованию»: Имя функции – ObrMatr Формальные параметры: Xуказатель на поле типа float[M], параметр, заменяемый “по наименованию”; Y - указатель на поле типа float, параметр, заменяемый “по наименованию” и предназначенный для передачи в вызывающую программу S; SX - указатель на поле типа float, параметр, заменяемый “по наименованию” и предназначенный для передачи в вызывающую программу MaxSt;N – параметр, заменяемый «по значению» (количество строк в матрице). Функция не возвращает значение, поэтому тип возвращаемого значения –void

  4. Напишем текст функции: void ObrMatr ( float X[][M], float * Y, float * SX, int N) { int i,j; float S, MaxSt; for (j = 0; j < M ; j++) { S = 0; MaxSt = X[0][j]; for (i = 0; i < N ; i++) { S = S + X[i][j] if (X[i][j] > MaxSt) MaxSt = X[i][j]; } Y[j] = S; SX[j] = MaxSt; } }

  5. Напишем программу, обеспечивающую ввод исходных данных, обращение к функции и выдачу результатов: # define M 5 # define n 4 void ObrMatr ( float X[][M], float * Y, float * SX, int N); void main () { int i,j; float Z[n][M]; float Sum[M], MaxS[M]; clrscr(); printf (“Введите исходную матрицу\n”); for (i= 0; i < n; i++) for (j= 0; j < M; j++) { printf ( “Z[%d][%d] = ”, i, j); scanf (“%f”, &Z[i][j]); } ObrMatr ( Z, Sum, MaxS, n); printf (“Введенная матрица\n”); for (i= 0; i < n; i++) { for (j= 0; j < M; j++) printf ( “%f ”, Z[i][j] ); printf (“\n”); } printf (“Результат выполнения функции \n”); printf (“ Суммы столбцов \n”); for (j= 0; j < M; j++) printf ( “%f ”, Y[j] ); printf (“\n”); printf (“ максимальные элементы в столбцах \n”); for (j= 0; j < M; j++) printf ( “%f ”, MaxS[j] ); printf (“\n”); getch (); }

  6. Оформим окончательно программу: # include <conio.h> # include <stdio.h> # define M 5 # define n 4 void ObrMatr ( float X[][M], float * Y, float * SX, int N); void main () { int i,j; float Z[n][M]; float Sum[M], MaxS[M]; clrscr(); printf (“Введите исходную матрицу\n”); for (i= 0; i < n; i++) for (j= 0; j < M; j++) { printf ( “Z[%d][%d] = ”, i, j); scanf (“%f”, &Z[i][j]); } ObrMatr ( Z, Sum, MaxS, n); printf (“Введенная матрица\n”); for (i= 0; i < n; i++) { for (j= 0; j < M; j++) printf ( “%f ”, Z[i][j] ); printf (“\n”); } printf (“Результат выполнения функции \n”); printf (“ Суммы столбцов \n”); for (j= 0; j < M; j++) printf ( “%f ”, Sum[j] ); printf (“\n”); printf (“ максимальные элементы в столбцах \n”); for (j= 0; j < M; j++) printf ( “%f ”, MaxS[j] ); printf (“\n”); getch (); } void ObrMatr ( float X[][M], float * Y, float * SX, int N) { int i,j; float S, MaxSt; for (j = 0; j < M ; j++) { S = 0; MaxSt = X[0][j]; for (i = 0; i < N ; i++) { S = S + X[i][j]; if (X[i][j] > MaxSt) MaxSt = X[i][j]; } Y[j] = S; SX[j] = MaxSt; } }

В этой программе испытание функции ObrMatr осуществляется для матрицыZ[n][M], значенияnиMопределены операторомdefine в препроцессорной части. Обратите внимание на первый формальный параметр функции -float X[][M]. Это указатель на массивfloat X [M], аМ – это константа в программе. Вспомним, что такой указатель можно было также объявит следующим образом:float ( *X )[M]. Остальные формальные параметры очевидны.

Соседние файлы в папке attachments_05-09-2012_18-55-54