Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ИНФ_ЛЕКЦИИ_(1 С)_2011.doc
Скачиваний:
5
Добавлен:
16.04.2019
Размер:
898.56 Кб
Скачать

Var c:array [-1..8,0..19] of real;

I,j:integer;

begin

.

.

.

for i:= -1 to 8 do

begin

for j:=0 to 19 do write(c[i,j]:8:3);

writeln

end

end.

Тело внутреннего цикла содержит два оператора: for и writeln. После того, как оператор for выведет очередную строку матрицы, оператор writeln осуществляет переход на новую строку.

5.4. Примеры задач с двумерными массивами

Пример 5.13. Дана матрица MAT размера 5 на 5, состоящая из вещественных элементов. Поменять местами строки матрицы, содержащие максимальный и минимальный элементы.

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

Первая задача является разновидностью типовой задачи поиска максимума или минимума. Отличие от типовой заключается в том, что определяются не сами максимальный и минимальный элементы матрицы, а их индексы. Для хранения номеров строк в процессе счета используются переменные i1 – для минимального элемента и i2 для максимального.

Для решения второй задачи используются три оператора присваивания, в которых участвуют элементы строк матрицы с максимальным и минимальным элементами и вспомогательная переменная b.

const n=5;

Var mat : array [1..N, 1..N] of real ;

I, j, i1, i2 : integer ;

max, min, b : real;

begin

write (‘введите матрицу ‘);

for i:=1 to n do

for j:=1 to n do read (mat[i,j]);

max:= mat[1,1]; i1:=1; { индекс минимального элемента }

min:=mat[1,1]; i2:=1; { индекс максимального элемента }

for i:=1 to n do

for j:=1 to n do

if mat [ i, j] > max then

begin max:=mat[i,j];

i2 := i; {Запомнить номер строки

нового максимума }

end

else

if mat [i, j] < min then

begin min:=mat[i,j];

i1 := i; { Запомнить номер строки

нового минимума }

end;

for j:=1 to n do

begin b:=mat[i1,j]; mat[i1,j]:=mat[i2,j]; mat[i2,j]:=b;

end;

for i:=1 to n do { Вывести измененный массив }

begin

for j:=1 to n do write (mat[i,j]:10:5);

writeln

end

end.

Пример 5.14. Дана матрица A размера 55, состоящая из вещественных элементов. Вычислить суммы элементов, лежащих на главной и побочной диагоналях матрицы.

Для решения этой задачи необходимо определить, какому условию удовлетворяют индексы элементов диагоналей квадратной матрицы. Несложно заметить, что для элементов главной диагонали должно выполняться равенство i = j, а для элементов побочной – равенство i + j = n + 1, или j = n + 1 – i, где n – размер матрицы, в данном случае n = 5. Таким образом, элемент главной диагонали, находящийся в i-й строке – это a[i, i], а элемент побочной диагонали, стоящий в i-й строке – это a[i, n+1–i]. Для просмотра всех элементов каждой диагонали надо организовать цикл вида for i:=1 to n.

Имеем следующую программу.

const n = 5;

Var I, j : integer;

A : array[1..n, 1..n] of real;

sGlavn, sPoboch : real;

begin writeln (‘Введите матрицу ’);

for i:= 1 to n do

for j:=1 to n do read(A[i, j]);

sGlavn:=0; sPoboch:=0;

for i:=1 to n do

begin sGlavn:= sGlavn + A[i, i];

sPoboch := sPoboch + A[i, n+1–i];

end;

writeln(‘Сумм. главн. = ’, sGlavn:10:5,

Сумм. побочн. = ’, sPoboch:10:5);

end.