Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МАССИВЫ (ШАБЛОНЫ АЛГОРИТМОВ).DOC
Скачиваний:
4
Добавлен:
01.03.2025
Размер:
4.23 Mб
Скачать

2.2. Обработка двумерных массивов в(n,m)

Описание матрицы

CONST

N1 = 20; {МАКСИМАЛЬНОЕ КОЛ-ВО СТРОК}

М1 = 20; {МАКСИМАЛЬНОЕ КОЛ-ВО СТОЛБЦОВ}

TYPE

MAS2 = ARRAY[1..N1,1..M1] OF INTEGER;

VAR

B : MAS2;

N,M : INTEGER; {РЕАЛЬНЫЕ РАЗМЕРЫ}

I,J : INTEGER; {ИНДЕКСЫ}

Ввод массива

WRITELN(‘ВВЕДИТЕ КОЛ-ВО СТРОК N = ’);

READ(N);

WRITELN(‘ВВЕДИТЕ КОЛ-ВО СТОЛБЦОВ M = ’);

READ(M);

FOR I:=1 TO N DO

FOR J:=1 TO M DO

BEGIN

WRITE(‘B[‘, I , ‘,’, J, ’]= ‘);

READ(B[I,J]);

END;

Вывод массива

FOR I:=1 TO N DO

BEGIN

FOR J := 1 TO M DO

WRITE( B[I]);

WRITELN;

END;

ПРИМЕЧАНИЕ: Алгоритмы поиска произведения, количества, суммы, средних арифметических и геометрических, максимальных и минимальных значений соответствуют алгоритмам для векторов, только необходимо завести еще цикл для столбцов.

Рассмотрим далее несколько специфических алгоритмов для матриц.

Найти минимальный элемент в каждом столбце

FOR J := 1 TO M DO

BEGIN

MIN := B[1,J];

FOR I := 1 TO N DO

IF B[I,J] < MIN THEN

MIN := B[I,J];

WRITELN(MIN);

END;

Найти минимальный элемент в каждой строке и записать их в одномерный массив А

FOR I := 1 TO N DO

BEGIN

MIN := B[I,1];

FOR J := 1 TO M DO

IF B[I,J] < MIN THEN

MIN := B[I,J];

A[I] := MIN;

END;

Найти максимальный элемент среди отрицательных элементов каждой нечетной строки

I:=1;

WHILE I <= N DO

BEGIN

MAX := -10000;

J:= 1;

WHILE J <= M DO

BEGIN

IF ( B[I,J] < 0) AND (B[I,J] > MAX) THEN

MAX := B[I,J];

J := J+1;

END;

I := I+2;

END;

Построчная сортировка матрицы

FOR I := 1 TO N D0

REPEAT

FLAG:=0;

FOR J= 1 TO M –1 DO

IF A[I,J]>A[I,J+1] THEN

BEGIN

C := A[I,J];

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

A[I,J+1] := C;

FLAG := 1;

END;

UNTIL FLAG=0;

Обменять местами элементы главной и побочной диагоналей

FOR I := 1 TO N DO

BEGIN

V := A[I,I];

A[I,I] := A[I,N+1-I];

A[I,N+1-I] := V;

END;

Что-то сделать над главной диагональю( диаг. не включать)

FOR I :=1 TO N-1 DO

FOR J := I+1 TO N DO

……………….

Что-то сделать под главной диагональю( диаг. не включать)

FOR I :=2 TO N DO

FOR J := 1 TO I-1 DO

……………….

Что-то сделать над побочной диагональю( диаг. не включать)

FOR I :=1 TO N-1 DO

FOR J := 1 TO N-I DO

……………….

Что-то сделать под побочной диагональю( диаг. не включать)

FOR I :=2 TO N DO

FOR J := N+2-I TO N DO

……………….

  1. Примеры решения задач

Задача 1

Дан одномерный массив T(N). Найти в массиве минимальный элемент и сумму четных элементов. Затем заменить этой суммой все отрицательные элементы, стоящие после минимального элемента.

Тестовый пример

Ввод:

Размерность массива N=10.

Массив Т: {13; 15; 11; –100; 8; 4; –7; 6; –5; 78}

Вывод:

Минимальный элемент массива: –100.

Сумма четных элементов массива: –4.

Массив Т после преобразования: {13; 15; 11; –100; 8; 4; –4; 6; –4; 78}

Б лок-схема с пошаговой детализацией:

Программа на ЯВУ ТР7.0

PROGRAM ZADACHA1;

CONST

N1=50;

TYPE

MAS1=ARRAY[1..N1] OF INTEGER;

VAR

T:MAS1;

IMIN,MIN,S:INTEGER;

I:INTEGER;

N:INTEGER;

BEGIN

{ШАГ 1-2}

WRITE('ВВЕДИТЕ РАЗМЕР N=');

READ(N);

FOR I:=1 TO N DO

BEGIN

WRITE('T[',I,']= ');

READ(T[I]);

END;

{--------------------------------------------------------}

{ШАГ 2-3}

MIN:=T[1];

IMIN:=1;

FOR I:=2 TO N DO

IF T[I]<MIN THEN

BEGIN

MIN:=T[I];

IMIN:=I;

END;

WRITELN('МИНИМАЛЬНЫЙ ЭЛЕМЕНТ МАССИВА: ',MIN);

{--------------------------------------------------------}

{ШАГ 3-4}

S:=0;

FOR I:=1 TO N DO

IF T[I] mod 2=0 THEN

S:=S+T[I];

WRITELN('СУММА ЧЕТНЫХ ЭЛЕМЕНТОВ МАССИВА: ',S);

{--------------------------------------------------------}

IF IMIN<N THEN

BEGIN

{ШАГ 4-5}

FOR I:=IMIN+1 TO N DO

IF T[I]<0 THEN

T[I]:=S;

{--------------------------------------------------------}

{ШАГ 5-6}

FOR I:=1 TO N DO

WRITELN('T[',I,']=',T[I]:4);

END

{--------------------------------------------------------}

ELSE

WRITE('МИНИМАЛЬНЫЙ ЭЛЕМЕНТ ПОСЛЕДНИЙ');

WRITELN;

END.

Задача 2

В массиве В(N) найти максимальный элемент. Если максимальный элемент находится в первой половине массива, то сформировать массив К, переписав в него все отрицательные элементы массива В, и массив Р, переписав в него все положительные элементы массива В. Массивы К и Р отпечатать.

Тестовый пример

Ввод:

Размерность массива N=15.

Массив Т: {13; -15; -11; 100; 8; 4; 0; 6; –5; 0; 3; -8; 4; -3; 1}

Вывод:

Номер максимального элемента массива В: 4.

Массив К: {-15; -11; -5; -8; –3} Массив К: {13; 100; 8; 4; 6; 3; 4; 1}

Блок-схема с пошаговой детализацией:

П рограмма на ЯВУ ТР7.0

PROGRAM ZADACHA2;

CONST

N1=50;

TYPE

MAS1=ARRAY[1..N1] OF REAL;

VAR

B,K,P:MAS1;

MAX:REAL;

IMAX,K1,K2:INTEGER;

I:INTEGER;

N:INTEGER;

BEGIN

{ШАГ 1-2}

WRITE('ВВЕДИТЕ РАЗМЕР N=');

READ(N);

FOR I:=1 TO N DO

BEGIN

WRITE('B[',I,']= ');

READ(B[I]);

END;

{-----------------------------------------------------------------------}

{ШАГ 2-3}

MAX:=B[1];

IMAX:=1;

FOR I:=2 TO N DO

IF B[I]>MAX THEN

BEGIN

MAX:=B[I];

IMAX:=I;

END;

{-----------------------------------------------------------------------}

IF IMAX<(N div 2)+1 THEN

BEGIN

{ШАГ 3-4}

K1:=0;

K2:=0;

FOR I:=1 TO N DO

IF B[I]<0 THEN

BEGIN

K1:=K1+1;

K[K1]:=B[I];

END

ELSE

IF B[I]>0 THEN

BEGIN

K2:=K2+1;

P[K2]:=B[I];

END;

{-----------------------------------------------------------------------}

{ШАГ 4-5}

FOR I:=1 TO K1 DO

WRITELN('K[',I,']=',K[I]:6:2);

{-----------------------------------------------------------------------}

{ШАГ 5-6}

FOR I:=1 TO K2 DO

WRITELN('P[',I,']=',P[I]:6:2);

{-----------------------------------------------------------------------}

END;

END.

Задача 3

Дана матрица K(N,M). Найти среднее арифметическое в каждой строке матрицы и переписать в одномерный массив Т. Затем в массиве изменить порядок следования элементов на обратный.

Тестовый пример

Ввод:

Размерность массива N=4, М=3.

Матрица К: 13 –15 8

6 0 3

-1 8 5

11 13 6

Вывод:

Массив Т: {2; 3; 4; 10}

Массив Т после перестановки: {10; 4; 3; 2}

Блок-схема с пошаговой детализацией:

Программа на ЯВУ ТР7.0

PROGRAM ZADACHA3;

CONST

N1=20;

M1=25;

TYPE

MAS2=ARRAY[1..N1,1..M1] OF REAL;

MAS1=ARRAY[1..N1] OF REAL;

VAR

K:MAS2;

T:MAS1;

C,S:REAL;

I,J:INTEGER;

N,M:INTEGER;

BEGIN

{ШАГ 1-2}

WRITE('ВВЕДИТЕ КОЛ-ВО СТОРОК N=');

READ(N);

WRITE('ВВЕДИТЕ КОЛ-ВО СТОЛБЦОВ M=');

READ(M);

FOR I:=1 TO N DO

FOR J:=1 TO M DO

BEGIN

WRITE('K[',I,',',J,']= ');

READ(K[I,J]);

END;

{------------------------------------------}

{ШАГ 2-3}

FOR I:=1 TO N DO

BEGIN

S:=0;

FOR J:=1 TO M DO

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

T[I]:=S/M;

END;

{------------------------------------------}

{ШАГ 3-4}

FOR I:=1 TO N DO

WRITELN('T[',I,']=',T[I]:6:2);

{------------------------------------------}

{ШАГ 4-5}

FOR I:=1 TO N DIV 2 DO

BEGIN

C:=T[I];

T[I]:=T[N+1-I];

T[N+1-I]:=C;

END;

{------------------------------------------}

{ШАГ 6-7}

FOR I:=1 TO N DO

WRITELN('T[',I,']=',T[I]:6:2);

END.

Задача 4

Даны матрицы F(N,N) и D(N,N). Поменять местами главные диагонали матриц F и D. Затем найти максимальный элемент под побочной диагональю матрицы F и минимальный элемент всей матрицы D и поменять их местами.

Тестовый пример

Ввод:

Размерность массива N=3.

Матрица F: 13 –15 8 Матрица D: 14 10 18

6 0 3 16 2 13

-1 8 5 -1 18 -5

Вывод:

После смены диагоналей:

Матрица F: 14 –15 8 Матрица D: 13 10 18

6 2 3 16 0 13

-1 8 -5 -1 18 5

Максимальный элемент матрицы F: 8

Минимальный элемент матрицы D: -1

После смены местами максимального и минимального элементов:

Матрица F: 14 –15 8 Матрица D: 13 10 18

6 2 3 16 0 13

-1 -1 -5 8 18 5

Блок-схема:

Пошаговую детализацию предлагается выполнить студентам самостоятельно.

Программа на ЯВУ ТР7.0

PROGRAM ZADACHA4;

CONST

N1=20;

TYPE

MAS2=ARRAY[1..N1,1..N1] OF REAL;

VAR

F,D:MAS2;

MAX,MIN,C:REAL;

IMAX,JMAX:INTEGER;

IMIN,JMIN:INTEGER;

I,J:INTEGER;

N:INTEGER;

BEGIN

{ШАГ 1-2}

WRITE('ВВЕДИТЕ РАЗМЕРНОСТЬ КВАДРАТНЫХ МАТРИЦ N=');

READ(N);

FOR I:=1 TO N DO

FOR J:=1 TO N DO

BEGIN

WRITE('F[',I,',',J,']= ');

READ(F[I,J]);

END;

{---------------------------------------------------------}

{ШАГ 2-3}

FOR I:=1 TO N DO

FOR J:=1 TO N DO

BEGIN

WRITE('D[',I,',',J,']= ');

READ(D[I,J]);

END;

{---------------------------------------------------------}

{ШАГ 3-4}

FOR I:=1 TO N DO

BEGIN

C:=F[I,I];

F[I,I]:=D[I,I];

D[I,I]:=C;

END;

{---------------------------------------------------------}

{ШАГ 4-5}

WRITELN('ВЫВОД МАТРИЦЫ F');

FOR I:=1 TO N DO

BEGIN

FOR J:=1 TO N DO

WRITE(F[I,J]:6:3);

WRITELN;

END;

{---------------------------------------------------------}

{ШАГ 5-6}

WRITELN('ВЫВОД МАТРИЦЫ D');

FOR I:=1 TO N DO

BEGIN

FOR J:=1 TO N DO

WRITE(D[I,J]:6:3);

WRITELN;

END;

{---------------------------------------------------------}

{ШАГ 6-7}

MAX:=-9999;

IMAX:=0;

JMAX:=0;

FOR I:=2 TO N DO

FOR J:=N+2-I TO N DO

IF F[I,J]>MAX THEN

BEGIN

MAX:=F[I,J];

IMAX:=I;

JMAX:=J;

END;

WRITELN('МАКСИМАЛЬНЫЙ ЭЛЕМЕНТ МАТРИЦЫ F',MAX:8:3);

{---------------------------------------------------------}

{ШАГ 7-8}

MIN:=D[1,1];

IMIN:=1;

JMIN:=1;

FOR I:=1 TO N DO

FOR J:=1 TO N DO

IF D[I,J]<MIN THEN

BEGIN

MIN:=D[I,J];

IMIN:=I;

JMIN:=J;

END;

WRITELN('МИНИМАЛЬНЫЙ ЭЛЕМЕНТ МАТРИЦЫ D',MIN:8:3);

{---------------------------------------------------------}

{ШАГ 8-9}

F[IMAX,JMAX]:=MIN;

D[IMIN,JMIN]:=MAX;

{---------------------------------------------------------}

{ШАГ 9-10}

WRITELN('ВЫВОД МАТРИЦЫ F');

FOR I:=1 TO N DO

BEGIN

FOR J:=1 TO N DO

WRITE(F[I,J]:6:3);

WRITELN;

END;

{---------------------------------------------------------}

{ШАГ 10-11}

WRITELN('ВЫВОД МАТРИЦЫ D');

FOR I:=1 TO N DO

BEGIN

FOR J:=1 TO N DO

WRITE(D[I,J]:6:3);

WRITELN;

END;

END.

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