Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
14
Добавлен:
09.04.2015
Размер:
212.99 Кб
Скачать

Задача – 2

Для заданной матрицы вещественных чисел c4 строками и 3 столбцами рассчитать сумму элементов в каждом столбце. Результат выдать на экран вместе с исходной матрицей и сохранить как одномерный массив.

Математическая постановка задачи

Д

Программа на Си // program – 5

# include<stdio.h>

# include<conio.h>

# define N 4 # define M 3

void main ()

{int i,j;

float Z[N][M], X[M]; clrscr();

for (i=0; i <N; i++) for (j=0; j <M; j++) { printf (“Z[%d][%d] = ”, i, j); scanf (“%f”, &Z[i][j]);

}

for (j=0; j <M; j++) { X[j] = 0; for (i=0; i <N; i++)

X[j] += Z[i][j];

} printf( “Исходнаяматрица\n”); for (i=0; i <N; i++)

{ for (j=0; j <M; j++) printf (“%7.2f ”, Z[i][j]); printf (“\n”);

} printf( “Результат решения\n”);

for (j=0; j <M; j++)

printf (“%7.2f ”, X[j]);

getch ( );

}

ано:Матрица вещественных чиселZ[N][M],N= 4,M= 3Определить:

Алгоритм на АЯРН Начало цикл по iот 0 с шагом 1 доN–1 цикл поjот 0 с шагом 1 доM–1 вводZ[i][j] конец-цикла поj

конец-цикла по I

цикл по jот 0 с шагом 1 доM–1Xj= 0

цикл по iот 0 с шагом 1 доN–1Xj =Xj+Z[i][j] конец-цикла поi

конец-цикла по j

цикл по iот 0 с шагом 1 доN–1 цикл поjот 0 с шагом 1 доM–1

вывод Z[i][j]

конец-цикла по jперевести курсор на новую строку

конец-цикла по iцикл поjот 0 с шагом 1 доM–1 выводXj

конец-цикла по j

конец

В этой программе использованы препроцессорные операторы # define N 4# define M 3. При выполнении этих операторов в текст программы вместо буквNиMвставляются соответственно числа 4 и 3. Дело в том, что хотя в постановке задачи жестко указано, чтоN= 4, aM= 5, возможно возникнет необходимость выполнить программу при других значенияхNиM. В этом случае нам достаточно будет поменять только два значения в операторе# define, и не будет нужно просматривать всю программу, находить в ней соответствующие константы и изменять их. Программисту всегда полезно сделать программу более универсальной, чем требуется в настоящий момент. Но любознательный читатель может спросить: «А нельзя ли сделать так, чтобы число элементов массива можно было вводить с клавиатуры?». В принципе это возможно, если использовать указатели (в таком случае необходимо реализовать динамический массив). Однако этот метод мы рассмотрим позднее.

Пусть исходная матрица задана в следующем виде:

1 2.1 3.1 2 3.2 4.2

1 1 1

2 2 2

Тогда при выполнении программы на экране получим следующую информацию:

Z[0][0]=1 Z[0][1]=2.1 Z[0][2]=3.1

Z[1][0]=2 Z[1][1]=3.2 Z[1][2]=4.2 Z[2][0]=1 Z[2][1]=1 Z[2][2]=1 Z[3][0]=2 Z[3][1]=2 Z[3][2]=2 Исходная матрица

1.00 2.10 3.10 2.00 3.20 4.20

1.00 1.00 1.00

2.00 2.00 2.00

Результатрешения6.00 8.30 9.30

В заключение одно замечание. Некоторые версии трансляторов Си не воспринимают операторы типа:

scanf (“%f”, &X[i]); scanf (“%f”, &Z[i][j]);

В этом случае следует использовать вспомогательную переменную для ввода элемента массива:

scanf (“%f”, &vp1); X[i] = vp1; scanf (“%f”, &vp2);

Z[i][j] = vp2;

В этом фрагменте vp1 – вспомогательная переменная того же типа, что и элементы массиваХ, аvp2 -вспомогательная переменная того же типа, что и элементы массиваZ.

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