Обработка двумерных массивов
Рассмотрим типовые задачи обработки двумерных массивов с использованием вложенных циклов.
Задача.
Составить программу подсчета суммы и произведения элементов двумерного массива вещественных чисел.
Таблица идентификаторов
№ | Наименование переменной | Обозначения в программе |
Имя массива | a | |
Количество строк | n | |
Количество столбцов | m | |
Индексы массива | I,j | |
Сумма элементов | s | |
Произведение элементов | p |
program matr;
uses
crt;
var
a:array [1...10, 1...10] of real;
i, j, n, m: integer;
s,p :real;
begin
clrscr;
writeln(‘ Введите n<=10 , m<=10 ’);
readln (n,m);
writeln(‘ Введите элементы массива по строкам ’);
for i:=1 to n do
for j:=1 to m do
readln(a[i, j]);
s:=0; p:=1;
{ поиск суммы и произведения }
for i:=1 to n do
for j:=1 to m do
begin
s:=s + a[i,j];
p:=p * a[i,j];
end;
writeln(‘ Сумма элементов s=’,s:8:3);
writeln(‘ Произведение элементов p=’,p:8:3);
readln;
end.
Задача.
Задана квадратная матрица целых чисел. Составить программу подсчета суммы элементов, расположенных над главной диагональю.
Таблица идентификаторов
№ | Наименование переменной | Обозначения в программе |
Имя массива | a | |
Количество строк и столбцов | n | |
Индексы массива | I,j | |
Сумма элементов над главной диагональю | s |
program matr_1;
uses
crt;
var
a:array [1...10, 1...10] of real;
i, j, n, m: integer;
s,p :real;
begin
clrscr;
writeln(‘ Введите n<=10 , m<=10 ’);
readln (n,m);
writeln(‘ Введите элементы массива по строкам ’);
for i:=1 to n do
for j:=1 to m do
readln(a[i,j]);
for i:=1 to 3 do
for j:=i +1 to 3 do
s:=s+a[i,j];
writeln('Сумма элементов s=', s);
readln;
end.
Для ввода элементов массива используются вложенные циклы с указанием номера вводимого элемента.
Для поиска суммы элементов над главной диагональю во внутреннем цикле задан закон изменения параметра внутреннего цикла:
j:=i+1
Задача.
Задана целочисленная квадратная матрица. Определить является ли она симметричной относительно главной диагонали.
Таблица идентификаторов
№ | Наименование переменной | Обозначения в программе |
Имя массива | a | |
Количество строк и столбцов | n | |
Индексы массива | I,j | |
Флажок | f |
program matr_2;
uses
crt;
var
a: array [1...10, 1...10] of integer;
i, j, n, f : integer;
begin
clrscr;
writeln(‘ Введите n<=10 ’);
readln (n,m);
writeln(‘ Введите элементы массива по строкам ’);
for i:=1 to n do
for j:=1 to n do
readln(a[i,j]);
f:=0
for i:=1 to n do
for j:=i to n do
if a[i,j]<>a[j,i] then f:=1;
if f=0 then writeln(‘ матрица симметрична’)
else writeln (‘матрица не симметрична’);
readln;
end.
При решении этой задачи сравниваются элементы расположенные над главной диагональю ( a[ i,j ] ) с элементами, расположенными под главной диагональю ( a[ j,i ] ) .
Задача.
Задана матрица вещественных чисел. Образовать одномерный массив, где каждый j – й элемент равен произведению элементов j-ого столбца двумерного массива.
Таблица идентификаторов
№ | Наименование переменной | Обозначения в программе |
Имя двумерного массива | a | |
Имя одномерного массива | b | |
Количество строк | n | |
Количество столбцов | m | |
Индексы массива | I,j |
program matr_3;
uses crt;
var
a: array [1...10, 1...10] of integer;
b: array [ 1..10 ] of integer;
i, j, n, f : integer;
begin
clrscr;
writeln(‘ Введите n<=10 , m<=10 ’); readln (n,m);
writeln(‘ Введите элементы массива по строкам ’);
for i:=1 to n do
for j:=1 to m do
readln (a[i, j]);
writeln(‘ Исходная матрица ’);
for i:=1 to n do
begin
for j:= 1 to n do
write( a[I,j] , ‘ ‘);
writeln;
end;
writeln(‘ Образованный одномерный массив ’);
for j:=1 to m do
begin
b[ j ]:=1;
{ накапливается произведение элементов j столбца }
for i:=1 to n do
b[ j ]:= b[ j ] * a[ i, j ];
write( b[ j] , ‘ ‘);
end;
readln;
end.
Задача.
Задана целочисленная матрица a(m*n). Упорядочить элементы каждой строки по возрастанию.
Таблица идентификаторов
№ | Наименование переменной | Обозначения в программе |
Имя двумерного массива | a | |
Количество строк, столбцов | n, m | |
Индексы массива | I,j | |
Флажок | f | |
Дополнительная переменная для обмена соседних элементов | p |
program mart_4;
uses crt;
var
a: array[1...10, 1...10] of integer;
i,j,n,f : integer;
begin clrscr;
writeln(‘ Введите n<=10 , m<=10 ’); readln (n,m);
writeln(‘ Введите элементы массива по строкам ’);
for i:=1 to n do
for j:=1 to m do
readln(a[i, j]);
writeln(‘ Исходная матрица ’);
for i:=1 to n do
begin
for j:=1 to n do
write(a[I,j],‘ ‘);
writeln;
end;
{ переход от строки к строке }
for i:=1 to n do
{ сортировка i-ой строки }
repeat
f:=0;
for j:=1to m-1 do
if a[i,j]>a[i,j+1] then
begin p:=a[i,j]; a[i,j]=a[i,j+1]; a[i,j+1]:=p; f:=1; end;
until f=0;
writeln(‘ Преобразованная матрица ’);
for i:=1 to n do
begin
for j:= 1 to n do
write( a[I,j] , ‘ ‘);
writeln;
end;
readln;
end.
f =0 - признак того, что все элементы данной строки упорядочены.
Дата добавления: 2015-05-21; просмотров: 1146;