Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
_МЕТ№1.DOC
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
180.74 Кб
Скачать

Обработка многомерных массивов

Многомерные массивы имеют 2 и более индексов. Для их обработки организуют обычно несколько циклов, причем один вкладывается в другой. Такие циклы называются вложенными или циклами в цикле. При этом в каждом цикле параметром будет соответствующий индекс. Для составления алгоритма и программы необходимо определить, как они меняются.

Пример 1.

Ввести матрицу D размерностью m*n (n<=8, m<=5). Подсчитать количество отрицательных чисел в ней и заменить эти числа нулями. Отпечатать новую матрицу.

Алгоритм

1. Ввести матрицу.

2. Подсчитать количество нулей и заменить.

3. Вывести матрицу.

4. Закончить.

Для уточнения распишем матрицу

Нужно ввести и просмотреть все элементы, т.е. индексы будут меняться следующим образом:

номер строки (обозначим i), изменяется от 1 до 8

номер столбца (j), изменяется от 1 до 5

Алгоритм

1.1. Для i от 1 до 8

Для j от 1 до 5

ввести dij

2.1.Положить количество отрицательных чисел =0

2.2. Для i от 1 до 8

Для j от 1 до 5

Если dij<0, то

кол.тр.=кол.отр.+1 и

dij=0

Программа для этого алгоритма будет иметь вид:

PROGRAM MATR;

VAR

D:ARRAY [1..8, 1..5] OF REAL;

K,I,J:INTEGER;

BEGIN

{п.1.1}

Writeln('Введите матрицу чисел');

FOR I:=1 TO 8 DO

FOR J:=1 TO 5 DO

READ (D[I,J]);

K:=0; {п.2.1}

{п.2.2}

FOR I:=1 O 8 DO

FOR J:=1 TO 5 DO

IF D[I,J]<0 THEN

BEGIN

K:=K+1;

D[I,J]:=0

END;

{п.3}

Writeln('Результирующая матрица');

FOR I:=1 TO 8 DO

Begin

FOR J:=1 TO 5 DO

WRITE(D[I,J]);

Writeln; {переход на новую строку}

End;

WRITELN('Количество отицательных чисел в матрице - ',K);

END.

Пример 2.

Ввести матрицу A размерностью m*n (n<=10, m<=8). Подсчитать суммы чисел по строкам и отпечатать матрицу, а в конце каждой строки – сумму.

Для разработки алгоритма распишем матрицу и выясним, как меняются индексы обрабатываемых элементов и сколько будет сумм.

Количество сумм равно числу строк (8). Обозначим i-номер строки, j - номер столбца.

Алгоритм

1. Для i от 1 до 8

для j от 1 до 10

ввести aij

2. Для i от 1 до 8

2.1. Положить сумма[i] = 0

2.2. Для j от 1 до 10

вычислить сумма[i]=сумма[i]+aij

вывести aij

2.3. Вывести сумма[i]

3. Закончить

Программа для этого алгоритма будет иметь вид:

PROGRAM SUMMATR;

CONST

M=8;

N=10;

VAR

A:ARRAY [1..M, 1..N] OF REAL;

I,J:INTEGER;

S:ARRAY[1..M] OF REAL;

BEGIN

{ п.1 }

Writeln('Введите матрицу чисел');

FOR I:=1 TO M DO

FOR J:=1 TO N DO

READ(A[I,J]);

{ п.2 }

FOR I:=1 TO M DO

BEGIN

{ п.2.1 }

S[I]:=0;

{ п.2.2 }

FOR J:=1 TO N DO

BEGIN

S[I]:=S[I]+A[I,J];

WRITE(A[I,J]:8:3);

END;

{ п.2.3 }

WRITELN(S[I]:10);

END;

END.

В некоторых случаях при обработке матриц достаточно организовать только 1 цикл. Это, как правило задачи, в которых обрабатываются диагонали матриц.

Пример 3.

Ввести матрицу В размерностью n*n (n<10). Вывести элементы ее главной и побочной диагоналей.

Запишем матрицу

1. Элементы главной диагонали имеют одинаковые индексы. Это можно записать так:

1) bij, причем j=i, что не рационально;

2) bii – проще и рациональнее.

2. Побочная диагональ имеет вид:

b1,10 b2,9 b3,8 ... b10,1

Если первый индекс i, то второй: n-i+1.

Алгоритм.

1. Ввести матрицу.

2. Для i от 1 до n

вывести bii

3. Для i от 1 до n

вывести bi,n-i+1

4. Закончить.

Программа для этого алгоритма будет иметь вид:

PROGRAM DIAG;

CONST

N=10;

VAR

B:ARRAY [1..N, 1..N] REAL;

I,J:INTEGER;

BEGIN

{ п.1 }

WRITELN ('Введите матрицу');

FOR I:=1 TO N DO

FOR J :=1 TO N DO

READ(B[I,J]);

{ п.2 }

WRITELN('Главная диагональ');

FOR I:= 1 TO N DO

Write(B[I,I]:8:4);

{ п.3 }

WRITELN('Побочная диагональ');

FOR I:= 1 TO N DO

Write(B[I,N+1-I]:8:4);

End.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]