Двумерные массивы
Алгоритмы действий над элементами двумерного массива
Задача 1.Группа из 10 учащихся сдавала экзамен по 4 предметам. Результаты экзаменов записали в таблицу размерностью 10х4. Определить средний балл по каждому предмету.
USES Crt;
VAR
E:ARRAY[0..10,0..4] OF INTEGER;
I,J:BYTE; S:INTEGER; SB:REAL; A:STRING[16];
BEGIN
ClrScr; WriteLn;
{ Заполнение таблицы }
FOR I:=1 TO 10 DO Begin
WriteLn(' Введите оценки ',I,' учащегося');
FOR J:=1 TO 4 DO Begin
CASE J OF
1: A:=' Математика - ';
2: A:=' Физика - ';
3: A:=' Химия - ';
4: A:=' Информатика - ';
End;
Write(A); ReadLn(E[I,J]);
End;
End; WriteLn;
{ Подсчет среднего балла по каждому предмету. Циклы меняются местами.' }
FOR J:=1 TO 4 DO Begin
S:=0;
FOR I:=1 TO 10 DO
S:=S+E[I,J];
SB:=S/10;
CASE J OF
1: A:=' математике - ';
2: A:=' физике - ';
3: A:=' химии - ';
4: A:=' информатике - ';
End;
WriteLn(' Средний балл по ',A,' = ',SB:4:1);
End;
END.
Задача 2.Поменять местами значения К-ого и Р-ого столбцов матрицы В, размерностью MхM, заполненную случайным образом.
USES Crt;
LABEL M1;
CONST M=8;
VAR
A:ARRAY[0..M,0..M] OF INTEGER;
I,J,K,P:BYTE; PP:INTEGER;
BEGIN
ClrScr;
{ Заполнение двумерного массива случайным образом и вывод в виде прямоугольной матрицы }
WriteLn(' Значения двумерного массива');
FOR I:=1 TO M DO Begin
FOR J:=1 TO M DO Begin
A[I,J]:=Random(23); Write(A[I,J]:3);
End; WriteLn;
End; WriteLn;
WriteLn(' Введите номера столбцов, которые необходимо поменять');
WriteLn(' Их значения не должны превышать ',M);
M1:ReadLn(K,P);
IF (K>M) OR (P>M) THEN GOTO M1;
{ Перестановка значений введенных столбцов }
FOR I:=1 TO M DO Begin
PP:=A[I,K]; A[I,K]:=A[I,P]; A[I,P]:=PP;
End;
WriteLn(' Измененный двумерный массив');
FOR I:=1 TO M DO Begin
FOR J:=1 TO M DO Begin
Write(A[I,J]:3);
End; WriteLn;
End;
END.
Задача 3.Дан двумерный массив размерностью Nх2N, заполненный целыми числами. Найти среднее арифметическое элементов, имеющие четные номера строк.
USES Crt;
CONST N=5;
VAR
H:ARRAY[0..N,0..2*N] OF INTEGER;
I,J,K:BYTE; S:LongInt; SA:REAL;
BEGIN
ClrScr; Randomize;
{ Заполнение двумерного массива случайным образом и вывод в виде прямоугольной матрицы }
WriteLn(' Значения элементов двумерного массива'); WriteLn;
FOR I:=1 TO N DO Begin
FOR J:=1 TO 2*N DO Begin
H[I,J]:=Random(23); Write(H[I,J]:3);
End; WriteLn;
End; WriteLn;
{ Нахождение суммы значений элементов, имеющих четные номера строк }
I:=2; K:=0;
WHILE I<=N DO Begin
FOR J:=1 TO 2*N DO Begin
S:=S+H[I,J]; Inc(K);
End; I:=I+2;
End;
SA:=S/K;
Write(' Среднее арифметическое элементов, имеющих четные номера строк =',SA:4:1);
END.
Алгоритмы нахождения наибольшего и наименьшего элементов двумерного массива
Задача 1.Дан двумерный массив размерностью 5х6, заполненный целыми числами. Сформировать одномерный массив, каждый элемент которого равен наибольшему по модулю элементу соответствующего столбца.
USES Crt;
VAR
M:ARRAY[0..5,0..6] OF INTEGER; MAX:ARRAY[0..6] OF INTEGER;
I,J:BYTE;
BEGIN
ClrScr; Randomize;
{ Заполнение двумерного массива случайным образом и вывод в виде прямоугольной матрицы }
WriteLn(' Значения элементов двумерного массива');
FOR I:=1 TO 5 DO Begin
FOR J:=1 TO 6 DO Begin
M[I,J]:=Random(20)-8; Write(M[I,J]:3);
End; WriteLn;
End; WriteLn;
{ Формирование одномерного массива}
WriteLn(' Значения элементов одномерного массива');
FOR J:=1 TO 6 DO Begin
MAX[J]:=ABS(M[1,J]);
FOR I:=2 TO 5 DO
IF ABS(M[I,J]) > MAX[J] THEN MAX[J]:=ABS(M[I,J]);
Write(MAX[J]:3);
End;
END.
Задача 2.Дан двумерный массив размерностью NхM, заполненный случайным образом. Определить, есть ли в данном массиве строка, в которой имеется два элемента массива, имеющие наибольшее значение.
USES Crt;
CONST N=6; M=8;
VAR
A:ARRAY[0..N,0..M] OF INTEGER;
I,J,K,FL:BYTE; MAX:INTEGER;
BEGIN
ClrScr; Randomize;
{ Заполнение двумерного массива случайным образом и вывод в виде прямоугольной матрицы }
WriteLn(' Значения элементов двумерного массива');
FOR I:=1 TO N DO Begin
FOR J:=1 TO M DO Begin
A[I,J]:=Random(20); Write(A[I,J]:3);
End; WriteLn;
End; WriteLn;
{ Нахождение наибольшего значения }
MAX:=A[1,1];
FOR I:=1 TO N DO
FOR J:=1 TO M DO
IF A[I,J]>MAX THEN MAX:=A[I,J];
WriteLn(' Максимальное значение = ',MAX);
{ Нахождение строки, в которой два элемента имеют наибольшее значение }
FL:=0;
FOR I:=1 TO N DO Begin
K:=0;
FOR J:=1 TO M DO
IF A[I,J]=MAX THEN Inc(K);
IF K=2 THEN Begin WriteLn('В ',I,' строке два элемента имеют наибольшее значение');
FL:=1;
End;
End;
IF FL=0 THEN WriteLn(' Нет строк, в которых два элемента имеют наибольшее значение');
END.
Алгоритмы удаления, вставки и перестановки элементов
Задача 1.Дан двумерный массив размерностью 8х7, заполненный случайным образом.
· Поменять местами средние строки с первой и последней.
· Вставить между средними строками первую строку.
· Удалить все столбцы, в которых первый элемент больше последнего.
· Заменить все элементы первых трех столбцов на их квадраты.
USES Crt;
VAR
A:ARRAY[0..8,0..7] OF INTEGER; A1:ARRAY[0..9,0..7] OF INTEGER;
A2:ARRAY[0..8,0..7] OF INTEGER;
I,J,K:BYTE; PP:INTEGER;
BEGIN
ClrScr; Randomize;
{ Заполнение двумерного массива случайным образом и вывод в виде прямоугольной матрицы }
WriteLn(' Значения элементов двумерного массива');
FOR I:=1 TO 8 DO Begin
FOR J:=1 TO 7 DO Begin
A[I,J]:=Random(15); Write(A[I,J]:3);
End; WriteLn;
End; WriteLn;
{ 1. Поменять местами строки }
WriteLn(' Средние строки поменялись местами с первой и последней');
FOR J:=1 TO 7 DO Begin
PP:=A[1,J]; A[1,J]:=A[4,J]; A[4,J]:=PP;
PP:=A[5,J]; A[5,J]:=A[8,J]; A[8,J]:=PP;
End;
{ Вывод измененного массива }
FOR I:=1 TO 8 DO Begin
FOR J:=1 TO 7 DO
Write(A[I,J]:3);
WriteLn;
End; ReadLn;
{ 2. Вставка }
WriteLn(' Первая строка вставлена между средними строками');
K:=0;
FOR I:=1 TO 8 DO Begin
Inc(K);
FOR J:=1 TO 7 DO Begin
A1[K,J]:=A[I,J]; Write(A1[K,J]:3);
End; WriteLn;
IF I=4 THEN Begin
Inc(K);
FOR J:=1 TO 7 DO Begin
A1[K,J]:=A[1,J]; Write(A1[K,J]:3);
End; WriteLn;
End;
End; Writeln; ReadLn;
{ 3. Удаление}
WriteLn(' Столбцы, в которых первый элемент > последнего, удалены');
K:=0;
FOR J:=1 TO 7 DO
IF A[1,J]<=A[8,J] THEN Begin
Inc(K);
FOR I:=1 TO 8 DO
A2[I,K]:=A[I,J];
End;
{ Вывод измененного массива }
FOR I:=1 TO 8 DO Begin
FOR J:=1 TO K DO
Write(A2[I,J]:3);
WriteLn;
End; ReadLn;
{ 4. Замена }
WriteLn(' Элементы первых трех столбцов заменены на их квадраты');
FOR I:=1 TO 8 DO Begin
FOR J:=1 TO 7 DO Begin
IF J<=3 THEN A[I,J]:=Sqr(A[I,J]); Write(A[I,J]:4);
End; WriteLn;
End;
End.
.....................................................................................................................................