
- •Тема 8 Двумерные массивы данных
- •1.Описание двумерных массивов
- •2). Type
- •3). Type
- •Var X, y, z: matr; {матрицы 4х5}
- •3). Type
- •7). Вычислить средние значения элементов для строк матрицы a[n, m], имеющих нечетные номера.
- •8). Напечатать число элементов в первой строке матрицы, значения которых больше среднего по строке.
- •9).Указать номер строки, имеющей наибольшее среднее значение.
- •12). Найти суммy элементов строк матрицы a(4x5), начиная с первого отрицательного элемента строки .
- •12A). Найти сумму вектора b( 2, -5, 6, -4, 3 ),
- •12). Найти суммy элементов строк матрицы a(4x5), начиная с первого отрицательного элемента строки .
- •Var I, j, k, s, n: integer;
- •13). Найти первую сумму строки большей числа n , напечатать эту сумму и номер ее строки .
- •Var I, j, k, s: integer;
- •Умножение двух матриц.
- •Var sr:array[1..3] of real;
- •I,j:integer; X,y,z:matr; maxsr:real; f:text;
- •Var s:real;
Тема 8 Двумерные массивы данных
Двумерные массивы данных (матрицы) задаются по тем же правилам, что и одномерные массивы.
1.Описание двумерных массивов
1). VAR
A = array[1..5,1..3] of integer;
B = array[1..4,1..6] of real;
2). Type
Atype = Array[1..5,1..3] of integer;
Btype = array[1..4,1..6] of real;
Var
A : Atype; B : Btype;
3). Type
mass = array[1..5] of real; {5 элем строки}
matr = array[1..4] of mass; {4 строки по 5 эл}
Var X, y, z: matr; {матрицы 4х5}
S: mass; {одномерный массив}
Матpица pассматривается как совокупность одномерных массивов.
mass- это одномерный массив из 5 элементов.
matr- это совокупность 4 массивов по 5 элементов в каждом.
При описании матриц a и b пользовательским типом Type для переприсваивания значения строк матрицы достаточно написать следующие операторы:
A[1]:= A[3];
B[3]:= A[2];
2. Ввод элементов матрицы
Ввод матрицы A[m, n].
1. Ввод матрицы с клавиатуры:
1). Ввод матрицы по строкам
FOR i:=1 TO n DO
FOR j:=1 TO m DO
READ (A[i, j]);
2). Ввод матрицы по столбцам
1. FOR j:=1 TO 3 DO
FOR i:=1 TO 5 DO
READ (A[i, j]);
2. Ввод матрицы типизированной константой:
3). Type
matr = array [1..3, 1..3] of integer;
CONST
A: matr = ((1, 1, 1),(2, 2, 2),(3, 3, 3));
B: array[1..3,1..2] of real= ((2.1, 4.2),
(1.5, 5.3),
(3.0, 2.0));
Все компоненты массива должны быть заполнены.
Матрица заполняется по строкам
3. Ввод матрицы из файла:
3. Вывод элементов матрицы
1. Вывод элементов матрицы на экран
1). по строкам
FOR i:=1 TO 5 DO
begin
FOR j:=1 TO 3 DO
WRITE (' ', A[i, j]:3);
WRITELN;
end;
1). по столбцам
FOR j:=1 TO 3 DO
begin
FOR i:=1 TO 5 DO
WRITE (' ',A[i, j]:3);
WRITELN;
end;
Обработка двумерных массивов.
Примеры: (фрагменты программ)
Сформировать матрицу:
n = m =3
1). Найти первый по возрастанию строк
элемент, принимающий максимальное значение, зафиксировать его координаты.
max:=a[1, 1]; p:= 1; q:= 1; for i:=1 to 6 do for j:=1 to 4 do if a[i, j] > max then begin max:= a[i, j]; {это первый max } p:= i; q:= j; {индексы элемента} end; Если поставить знак >= , то получим координаты последнего max (если в матрице несколько одинаковых max чисел)
2).Поменять местами 1-ю строку со строкой, содержащей max элемент матрицы.
p – номер строки максимального элемента
for j:=1 to 4 do
begin
buf:= a[1, j]; a[1, j]:=a[p, j]; a[p, j]:= buf; end;
3). Поменять местами 2-й столбец со столбцом, содержащим max элемент матрицы.
q – номер столбца максимального элемента
for i:=1 to 6 do
begin
buf:= a[i, 2]; a[i, 2]:=a[i, q]; a[i, q]:= buf; end;
4).Найти максимальные элементы в каждой строке матрицы A(4x5).
for i:=1 to 4 do
begin { фиксируем строку }
max:=a[i,1]; {первый элемент строки принимаем за max}
for j:=1 to 5 do
if a[i, j]> max then max:=a[i, j];
writeln('строка ', i ,': max=',max);
end;
5).Найти максимальные элементы в каждом столбце матрицы A(4x5), зафиксировать их координаты.
for j:=1 to 5 do
begin { фиксируем столбец }
max:=a[1, j]; {первый элемент столбца принимаем за max}
for i:=1 to 4 do
if a[i, j]> max then begin
max:=a[i, j]; p:=i; q:=j
end;
writeln(‘a[‘, p, ‘,’, q, ‘]= max=',max);
end;
6).В каждой строке матрицы А[4x5] определить количество элементов, значения которых находятся в интервале [2;9]. Распечатать эти элементы.
for i:=1 to 4 do
Begin { фиксируем строку }
k:=0; for j:=1 to 5 do
if (a[i, j] >= 2) AND (a[i, j] <= 9) then
begin k:=k + 1; writeln(a[i, j]); end; writeln(‘в строке ‘, i , ‘ ‘, k, ‘ элементов’);
End;