Двумерные массивы.
Двумерный массив можно представить в
виде матрицы.
.
Описание двумерных массивов:
a - имя массива;
n, m - количество строк и столбцов в массиве.
Размер массива - nm.
a[i, j] - элемент стоящий на пересечении i-ой строки и j-го столбца.
Каждый элемент определяется двумя индексами.
a[i, i] - элементы главной диагонали.
a[i, 2] - элементы второго стлбца.
------------------------------------------------------------------------------------------------------------
Задача 1.
Составить программу подсчета суммы элементов над главной диагональю в двумерном массиве.
Program matrix;
const
n=10;
m=10;
var
a: array [1…n, 1…m] of real;
i, j: integer; nk, mk: integer;
s: real;
begin s:=0;
writeln (' введите размер массива m, n);
readln (nk, mk);
{Ввод массива:}
for i:=1 to nk do
for j:=1 to mk do
begin
writeln ('a(', i, ', ', j, ')=');
readln (a[i, j]);
end;
for i:=1 to nk do
for j:=i to mk do
s: s+a[i, j];
writeln('s=', s);
end.
Для ввода элементов массива используются вложенные циклы.
i - параметр внешнего цикла;
j - параметр внутреннего цикла;
i - меняется медленнее j.
Элементы массива необходимо вводить по строкам.
Задача 2:
Поменять местами элементы первого и последнего столбцов.
Program prim;
var
a: array [1...10, 1...10] of real;
i, j, n, m: integer; p:=real;
begin
readln
{ввод}
for i:=1 to n do
for j:=1 to m do readln (a[i, j]);
for i:=1to n do
{обмен}
begin
p:=a[i, 1];
a[i, 1]: a[i, m];
a[i, m]:=p;
end;
{вывод}
for i:=1 to n do
for j:=1 to mj do
begin
writeln (a[i, j]);
writeln;
end;
end.
Элементы необходимо вводить по строкам. Элементы выводим по строкам, между строками - пробел.
------------------------------------------------------------------------------------------------------------
Задача3.
Задана целочисленная матрица (квадратная)
a(n
n).
Определить является ли она симметричной
относительно главной диагонали. f = 0 -
признак симметричности.
Program pr;
var
a: array [1...10, 1...10] of integer;
f, i, j, n: integer;
begin
readln (n);
for i:=1to 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 (‘матрица не симметрична’);
end.
Задача 4.
Задана целочисленная матрица a (m
n).
Образовать одномерный b(m), где каждый
b( j ) = произведению элементов j-ого
столбца.
program ...;
var
a: array [1...10, 1...10] of integer;
b: array [1...10] of integer;
i, j, n, m: integer;
begin
readln (m, n);
for i:=1 to n do
for j:=1 to m do begin
writeln (‘введите элементы’,i,’стр.’);
readln (a[i, j]);
end;
for j:=1 to m do
begin
накапливается произведение элементов одного столбца
b[ j]:=1;
for i:=1 to n do
b[ j]:= b[ j] * a[i, j];
end;
for j:=1 to m do
writeln (b[ j]);
end.
---------------------------------------------------------------------------------------------------------------
Задача 5.
Задана целочисленная матрица a(m
n).
Упорядочить элементы каждой строки по
возрастанию.
Program pr1;
var
a: array [1...10, 1...10] of integer;
i, j, m, n, f, p: integer;
begin
readln (n, m);
for i:=1 to n do
for j:=1 to m do readln (a[i, j]);
{внешний цикл}
for i:=1 to n do
{внутренний цикл}
repeat
f:=0
for j:=1 to 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;
for i:=1 to n do
for j:=1 to m do
writeln (a[i, j]);
end.
Во внешнем цикле переходим от строки к строке. Во внутреннем цикле упорядочиваются элементы одной строки.
f =0 - признак того, что всае элементы данной строки упорядочены.
