Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОСНОВЫ АЛГОРИТМИЗАЦИИ.doc
Скачиваний:
14
Добавлен:
16.08.2019
Размер:
1.8 Mб
Скачать

7.2. Двумерные массивы

Размерность массива определяется количеством символов. Двумерный массив или матрица представляет собой таблицу значений, состоящих из строк и столбцов.

Местоположение элементов матрицы определяется двумя номерами-индексами: номером строки (i) и номером столбца (j).

Н

Главная диагональ

апример,

A [i, j] или A [i][j], nm

A 11

A12

A13

A14

A21

A22

A23

A

Строки i

24

A31

A32

A33

A34

A41

A32

A43

A

Побочная диагональ

44

Столбцы j

Элементы, оба индекса которых равны, образуют главную диагональ матрицы: i=j;

Если i < j, элементы матрицы расположены над главной диагональю матрицы;

Если j < i, элементы расположены под главной диагональю матрицы;

Элементы, сумма индексов которых на единицу больше числа строк, образуют побочную диагональ матрицы: (i + j) = n + 1;

Матрица называется симметричной, если элементы, расположенные симметрично относительно главной диагонали, равны: A[i, j]=A[j, i], где A[i,j] – элементы матрицы A.

Краткое описание матрицы:

Var

A : array [1..5, 1..5] of integer;

i, j : integer;

Полная форма описания матрицы:

Type

Matrix = array [1..5, 1..5] of integer;

Var

A : Matrix;

Формирование элементов случайным образом:

For I := 1 to 5 do

For j := 1 to 5 do

A[i, j] := random (11);

Формирование элементов матрицы при вводе с клавиатуры:

For I := 1 to 5 do

For j := 1 to 5 do

Readln (A[i, j]);

Ввод элементов матрицы:

For I := 1 to 5 do

For j := 1 to 5 do

Writeln (A[i, j]);

Фрагменты программ по обработке 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.