
- •Тема 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;
12). Найти суммy элементов строк матрицы a(4x5), начиная с первого отрицательного элемента строки .
Program Lab6_pr12;
Uses CRT;
TYPE matr = array[1..4,1..5] of integer;
CONST a: matr = ((0, -4, -3, 5, 6),
(1, 0, -3, 6, -7),
(-1, 5, 0, 3, 6),
(6, 7, 9, 2, 4 ));
Var I, j, k, s, n: integer;
BEGIN
{ 1- й способ нахождения первого отр. эл-та: }
for i:=1 to 4 do { фиксируем строку }
Begin
j:=1;
REPEAT {перебираем эл-ты строки, ищем 1-й отрицат. эл-т }
K:=0; S:=0;
if a[i, j]<0 then
begin
k:= j; {если нашли первый отрицательный элемент, то k = номеру этого элемента,k<>0}
for n:= k to 5 do S:=S + a[i, n];
{S-сумма i-й строки, начиная с первого отриц.элемента}
end;
j:=j+1;
UNTIL (j>5) or (k<>0);
{выход из цикла: если перебрали все элементы строки (j>5) или встретили первый отрицательный элемент (k<>0)}
if K<>0 then { печать результатов}
writeln('Сумма строки ', i , '=', S)
else
writeln('В строке ', i, ' нет отрицательных элементов');
End;
{ 2-й способ }
BEGIN
for i:=1 to 4 do { фиксируем строку }
begin
k:=0; S:=0;
for j:=5 downto 1 do
if a[i, j]<0 then k:=j;
{ в цикле j анализируются все элементы строки i с последнего до первого; в конце цикла k = номеру первого от начала отрицательного элемента строки i, т.е. последнего от конца массива }
for n:= k to 5 do
S:=S + a[i, n]; { S-сумма i-й строки, начиная с первого отрицательного элемента }
end;
END.
13). Найти первую сумму строки большей числа n , напечатать эту сумму и номер ее строки .
Program s_stroki;
uses crt;
CONST N=10;
CONST
a:array[1..3,1..4]of integer=((2,1,5,7), (1,4,8,6),
(2,3,4,7));
Var I, j, k, s: integer;
BEGIN
clrscr;
k:=0; i:=1;
REPEAT
S:=0;
for j:=1 to 4 do
s:=s+ a[i, j];
if s > N then k:=i;
i:=i+1;
UNTIL (i>3) OR (k<>0); writeln (s,' ',k);
END.
{ k становится <> 0 после первой встретившейся суммы >N, при этом UNTIL остановит цикл. Если такой суммы не найдено, то цикл закончится по условию i >3}
Умножение двух матриц.
Var A : array[1..N, 1..M] of real;
B : array[1..M, 1..P ] of real;
С : array[1..N, 1..P ] of real;
Элемент Ci,j является произведением i-й строки матрицы A на j-й столбец матрицы B. Такое произведение программируется следующим образом:
For i:= 1 to N do
For j:= 1 to P do
begin
C[i,j] := 0;
For k:= 1 to M do
C[i,j] := c[i,j] + a[i,k] * b[k,j];
End;
Пример. Заданы 3 матрицы
Определить матрицу, имеющую максимальное среднее значение элементов.
uses crt;
const n=3;
type matr=array[1..n,1..n] of real;