Фрагменты программ по обработке 2-х мерных массивов
Определение наименьшего элемента каждой строки матрицы:
…
FOR I := 1 TO 5 DO
BEGIN
MIN := A[I,1];
FOR J := 2 TO 5 DO
IF A[I,J] < MIN THEN MIN := A[I,J];
C[I] := MIN;
END;
FOR I := 1 TO 5 DO WRITELN (‘В ’,I, ‘ строке наименьший элемент равен ’, C[I]:2);
…
Определение наибольшего элемента каждого столбца матрицы:
…
FOR J := 1 TO 5 DO
BEGIN
MAX := A[1,J];
FOR I := 2 TO 5 DO
IF A[I,J] > MAX THEN MAX := A[I,J];
Z[I] := MAX;
END;
FOR J := 1 TO 5 DO WRITELN (‘В ’,J, ‘ строке наименьший элемент равен ’, Z[J]:2);
…
Сумма элементов побочной диагонали:
…
S := 0;
J := 5;
FOR I := 1 TO 5 DO
BEGIN
S := S + A[I,J];
J := J–1; {или DEC(J);}
END;
…
Вывод элементов главной диагонали:
…
WRITELN (‘Элементы главной диагонали: ’);
FOR I := 1 TO 5 DO
BEGIN
FOR J := 1 TO 5 DO
IF I = J THEN WRITE (A[I,J]:3,’’:2);
WRITELN;
END;
…
Вывод элементов побочной диагонали:
…
WRITELN (‘Элементы побочной диагонали: ’);
J := 1;
FOR I := 1 TO 5 DO
BEGIN
B[J] := A[I, 5+1-i];
INC (J);
END;
FOR J := 1 TO 5 DO WRITELN (B[J]:3); …
Элементы побочной диагонали расположить по возрастанию:
FOR K := 1 TO 5-1 DO
FOR J := K +1 TO 5 DO
BEGIN
IF B[K] > B[J] THEN
BEGIN
M := B[K];
B[K] := B[J];
B[J] := M;
END;
END;
WRITELN (‘Элементы побочной диагонали, расположенные по возрастанию: ’);
FOR J :=1 TO 5 DO WRITELN (B[J]:3);
Задача 7.5. Сформировать квадратную матрицу размерностью 5´5. Вывести матрицу в общем виде и посчитать сумму элементов, расположенных на главной диагонали.
Блок-схема алгоритма:
Листинг программы
PROGRAM TASK1;
USES CRT;
VAR
A : ARRAY [1..5, 1..5] OF INTEGER;
I, J, S : INTEGER;
BEGIN
CLRSCR;
RANDOMIZE;
{формирование матрицы случайным образом}
FOR I := 1 TO 5 DO
FOR J :=1 TO 5 DO
A[I,J] := RANDOM (51);
{вывод элементов матрицы. на экран}
FOR I := 1 TO 5 DO
BEGIN
FOR J :=1 TO 5 DO
WRITELN (A[I,J]);
WRITELN;
END;
{вычисление суммы элементов,
расположенных на главной диагонали}
S := 0;
FOR I := 1 TO 5 DO
FOR J :=1 TO 5 DO
IF I = J THEN
S := S + A [I, J];
WRITELN (‘’, S:4);
END.
Задача 7.6. Дана квадратная матрица. Определить количество отрицательных элементов каждой строки матрицы.
Блок-схема алгоритма:
Листинг программы:
PROGRAM TASK2;
USES CRT;
CONST L=5;
VAR
A : ARRAY[1..L, 1..L] OF INTEGER;
I, J, K : INTEGER;
BEGIN
CLRSCR;
RANDOMIZE;
{формирование матрицы случайным образом}
FOR I := 1 TO L DO
FOR J :=1 TO L DO
A[I,J] := RANDOM (51);
{вывод элементов матрицы. на экран}
FOR I := 1 TO L DO
BEGIN
FOR J :=1 TO L DO
WRITELN (A[I,J]);
WRITELN;
END;
FOR I:=1 TO L DO
BEGIN
K:=0;
FOR J:=1 TO L DO
IF A[I, J] <0 THEN K := K+1;
WRITELN (‘Количество элементов <0 в ‘, I, ‘строке равно ‘, K);
END;
READLN;
END.
Задача 7.7. Вычислить сумму положительных элементов каждого столбца матрицы (см. Задача 2).
Блок-схема алгоритма:
Листинг программы:
PROGRAM TASK2;
USES CRT;
CONST L=5;
VAR
A : ARRAY[1..L, 1..L] OF INTEGER;
I, J, S : INTEGER;
BEGIN
CLRSCR;
RANDOMIZE;
{формирование матрицы случайным образом}
FOR I := 1 TO L DO
FOR J :=1 TO L DO
A[I,J] := RANDOM (51);
{вывод элементов матрицы на экран}
FOR I := 1 TO L DO
BEGIN
FOR J :=1 TO L DO
WRITELN (A[I,J]);
WRITELN;
END;
FOR J:=1 TO L DO
BEGIN
S:=0;
FOR I:=1 TO L DO
IF A[I, J] >0 THEN S := S+A[I,J];
WRITELN (‘Сумма элементов >0 в ‘, J, ‘столбце равна ‘, S);
END;
READLN;
END.
Задача 7.8. Вычислить сумму элементов каждой строки матрицы A, определить наименьшее значение этих сумм и номер соответствующей строки нового сформированного массива B.
Блок-схема алгоритма:
Листинг программы:
PROGRAM TASK2;
USES CRT;
CONST L=5;
VAR
B : ARRAY[1..L] OF INTEGER;
A : ARRAY[1..L, 1..L] OF INTEGER;
I, J, MIN, INDEX: INTEGER;
BEGIN
CLRSCR;
RANDOMIZE;
{формирование матрицы случайным образом}
FOR I := 1 TO L DO
FOR J :=1 TO L DO
A[I,J] := RANDOM (51);
{вывод элементов матрицы на экран}
FOR I := 1 TO L DO
BEGIN
FOR J :=1 TO L DO
WRITELN (A[I,J]);
WRITELN;
END;
FOR I:=1 TO L DO
BEGIN
B[I]:=0;
FOR J:=1 TO L DO B[I] := B[I]+A[I,J];
END;
FOR I:=1 TO L DO
WRITELN (‘Сумма элементов ‘, I, ‘строки равно ‘, B[I]);
MIN:= B[1];
INDEX := 1;
FOR I:=2 TO L DO
IF B[I] < MIN THEN
BEGIN
MIN := B[I];
INDEX := I;
END;
WRITELN (‘Наименьшее значение сумм каждой строки равно - ’, MIN);
WRITELN (‘Номер соответствующей строки равен - ’, INDEX);
READLN;
END.
Задача 7.9.Вычислить количество точек, попавших в круг с радиусом R, с центом в начале координат (0,0).
Блок-схема алгоритма:
Листинг программы
PROGRAM TASK;
USES CRT;
CONST
N=80;
TYPE
VECTOR=ARRAY[1..N] OF REAL;
VAR
X, Y, R1 : VECTOR;
I, K, KXR, KYR: INTEGER;
R: REAL;
BEGIN
CLRSCR;
RANDOMIZE;
WRITELN (‘Введите длину радиуса R’);
READLN (R);
KXR:= 0;
KYR:= 0;
FOR I:=1 TO N DO
BEGIN
X[I]:=RANDOM(11)/2;
Y[I]:=RANDOM(11)/2;
END;
FOR I:=1 TO N DO
WRITELN (X[I], Y[I]);
FOR I:=1 TO N DO
BEGIN
R[I]:=SQRT(SQR(X[I]-KXR)+SQR(Y[I]-KYR));
WRITELN(R[I]);
END;
K := 0;
FOR I:=1 TO N DO
IF R[I]<R THEN K:= K+1;
WRITELN(K);
READLN;
END.
Вопросы для самопроверки
1. Дайте определение матрицы?
2. Каков формат объявления матрицы в разделе Var (1 способ)?
3. Каков формат объявления матрицы в разделе Var, если создан новый тип матрицы в разделе Type (2 способ)?
4. Что необходимо знать, чтобы обратиться к определённому элементу матрицы?
5. Какого назначение 2-го способа объявления матрицы?
6. При каком условии элементы матрицы будут принадлежать главной диагонали?
7. При каком условии элементы матрицы будут принадлежать побочной диагонали?
8. При каком условии элементы матрицы будут находиться над главной диагональю?
9. При каком условии элементы матрицы будут находиться под главной диагональю?
Лабораторная работа №7_2