- •1.Пример выполнения упражнения тренинга на умение 1 Задание
- •2.Пример выполнения упражнения тренинга на умение 2 Задание
- •3.Пример выполнения упражнения тренинга на умение 3 Задание
- •4.Пример выполнения упражнения тренинга на умение 4 Задание
- •5.Пример выполнения упражнения тренинга на умение 5 Задание
- •6.Пример выполнения упражнения тренинга на умение 6 Задание
- •7.Пример выполнения упражнения тренинга на умение 7 Задание
- •8.Пример выполнения упражнения тренинга на умение 8 Задание
- •9.Пример выполнения упражнения тренинга на умение 9 Задание
- •Int Vs(char *s,char *sl, int Mdl);
8.Пример выполнения упражнения тренинга на умение 8 Задание
Разработать функцию, которая для заданной вещественной матрицы определяет для каждого ее столбца сумму его элементов и максимальное значение элемента в столбце. Результаты обработки каждого столбца хранятся в виде двух массивов: первый хранит сумму элементов столбца, второй – максимальное значение элемента в столбце.
Дано: вещественная матрицаХ(N, M). Определить: Y(j) = j = 1,…M SX[j] = max Xi,j i i = 1,…N; j = 1,…M
Разработаем алгоритм обработки массива, учитывая, что 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 Выход
Дадим функции имя, определим список формальных параметров и тип возвращаемого функцией значения, определить параметры, вызываемые «по значению» и «по наименованию»: Имя функции – ObrMatr Формальные параметры: X – указатель на поле типа float[M], параметр, заменяемый “по наименованию”; Y - указатель на поле типа float, параметр, заменяемый “по наименованию” и предназначенный для передачи в вызывающую программу S; SX - указатель на поле типа float, параметр, заменяемый “по наименованию” и предназначенный для передачи в вызывающую программу MaxSt;N – параметр, заменяемый «по значению» (количество строк в матрице). Функция не возвращает значение, поэтому тип возвращаемого значения –void
Напишем текст функции: 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; } }
Напишем программу, обеспечивающую ввод исходных данных, обращение к функции и выдачу результатов: # 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 (); }
Оформим окончательно программу: # 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]. Остальные формальные параметры очевидны.