Обработка массивов
Двумерные массивы
Алгоритмы действий над элементами двумерного массива
Задача 1. В течение недели измерялась температура три раза в день: утром, в обед и вечером. Показания записали в таблицу размерностью 7х3. Определить среднюю температуру за каждый день.
USES Crt;
VAR
T:ARRAY[0..7,0..3] OF INTEGER;
I,J:BYTE; S:INTEGER; ST:REAL; A:STRING[12];
BEGIN
ClrScr; WriteLn;
{ Заполнение таблицы }
FOR I:=1 TO 7 DO Begin
WriteLn(' Введите показания за ',I,' день');
FOR J:=1 TO 3 DO Begin
CASE J OF
1: A:=' Утром - ';
2: A:=' В обед - ';
3: A:=' Вечером - ';
End;
Write(A); ReadLn(T[I,J]);
End;
End; WriteLn;
{ Подсчет средней температуры за каждый день }
FOR I:=1 TO 7 DO Begin
S:=0;
FOR J:=1 TO 3 DO
S:=S+T[I,J];
ST:=S/3;
WriteLn('Средняя температура за ',I,' день = ',ST:4:1);
End;
END.
Задача 2. Группа из 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.
Задача 3. Поменять местами значения К-ого и Р-ого столбцов матрицы В, размерностью 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.
Задача 4. Дан двумерный массив размерностью 6х3, заполненный целыми числами. Подсчитать количество строк, в которых первый элемент строки меньше нуля.
USES Crt;
VAR
M:ARRAY[0..6,0..3] OF INTEGER;
I,J,K:BYTE;
BEGIN
ClrScr; Randomize;
{ Заполнение двумерного массива случайным образом и вывод в виде прямоугольной матрицы }
WriteLn(' Значения двумерного массива');
FOR I:=1 TO 6 DO Begin
FOR J:=1 TO 3 DO Begin
M[I,J]:=Random(23)-10; Write(M[I,J]:3);
End; WriteLn;
End; WriteLn; K:=0;
{ Подсчет количества строк, в которых первый элемент строки меньше 0 }
FOR I:=1 TO 6 DO
IF M[I,1]<0 THEN Inc(K);
Write(' Количество строк, в которых первый элемент строки меньше 0 = ',K);
END.
Задача 5. Дан двумерный массив размерностью 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.
Задача 6. Дан двумерный массив размерностью NхM, заполненный случайным образом. Определить, есть ли в данном массиве столбец, в котором равное количество положительных и отрицательных элементов.
USES Crt;
CONST N=6; M=8;
VAR
A:ARRAY[0..N,0..M] OF INTEGER;
I,J,KO,KP,FL:BYTE;
BEGIN
ClrScr; Randomize;
{ Заполнение двумерного массива случайным образом и вывод в виде прямоугольной матрицы }
WriteLn(' Значения элементов двумерного массива');
FOR I:=1 TO N DO Begin
FOR J:=1 TO M DO Begin
A[I,J]:=Random(20)-10; Write(A[I,J]:3);
End; WriteLn;
End; WriteLn;
FOR J:=1 TO M DO Begin
KP:=0; KO:=0;
FOR I:=1 TO N DO Begin
IF A[I,J]>0 THEN Inc(KP);
IF A[I,J]<0 THEN Inc(KO);
End;
IF KP=KO THEN Begin
WriteLn(' В ',J,' столбце равное количество положительных и отрицательных элементов'); FL:=1;
End;
End;
IF FL=0 THEN WriteLn(' Нет столбцов, в которых равное количество положительных и отрицательных элементов');
END.
Задача 7. Дан двумерный массив размерностью NхM, заполненный случайным образом. Определить, есть ли в данном массиве строка, в которой ровно два отрицательных элемента.
USES Crt;
CONST N=6; M=8;
VAR
A:ARRAY[0..N,0..M] OF INTEGER;
I,J,K,FL:BYTE;
BEGIN
ClrScr; Randomize;
{ Заполнение двумерного массива случайным образом и вывод в виде прямоугольной матрицы }
WriteLn(' Значения элементов двумерного массива');
FOR I:=1 TO N DO Begin
FOR J:=1 TO M DO Begin
A[I,J]:=Random(40)-15; Write(A[I,J]:3);
End; WriteLn;
End; WriteLn; FL:=0;
{ Определение строк, в которых ровно два отрицательных элемента }
FOR I:=1 TO N DO Begin
K:=0;
FOR J:=1 TO M DO
IF A[I,J]<0 THEN Inc(K);
IF K=2 THEN Begin WriteLn('В ',I,' строке ровно два отрицательных элемента');FL:=1; End;
End;
IF FL=0 THEN Writeln(' Нет строк, в которых ровно два отрицательных элемента');
END.
Задача 8. Дан двумерный массив размерностью 4х6 и величина N. Подсчитать количество строк, в которых есть элемент равный N.
USES Crt;
LABEL M1;
VAR
M:ARRAY[0..4,0..6] OF INTEGER;
I,J,K:BYTE; N:INTEGER;
BEGIN
ClrScr; Randomize;
{ Заполнение двумерного массива случайным образом и вывод в виде прямоугольной матрицы }
WriteLn(' Значения элементов двумерного массива');
FOR I:=1 TO 4 DO Begin
FOR J:=1 TO 6 DO Begin
M[I,J]:=Random(50); Write(M[I,J]:3);
End; WriteLn;
End; WriteLn;
Write(' Введите значение величины N '); ReadLn(N);
K:=0;
{ Нахождение строк, в которых имеется величина N }
FOR I:=1 TO 4 DO Begin
FOR J:=1 TO 6 DO
IF M[I,J]=N THEN Begin K:=K+1; GOTO M1; End;
M1: End;
WriteLn(' Количество строк, в которых есть элемент равный ',N,' = ',K);
END.
.....................................................................................................................................
Практические задания
.....................................................................................................................................
- Найти произведение элементов К-го и Р-го столбцов квадратной матрицы, размерностью 6х6.
- Дан двумерный массив размерностью 5х3, заполненный целыми числами. Найти произведение элементов нечетных строк матрицы.
- Дан двумерный массив размерностью 5х6, заполненный целыми числами и величина К. Найти количество элементов, равных К и их сумму.
- Дан двумерный массив размерностью NхM, заполненный целыми числами. Определить, есть ли в данном массиве столбец, в котором имеются одинаковые элементы.