Алгоритмы действий над элементами двумерного массива
Задача 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. ..................................................................................................................................... Практические задания ..................................................................................................................................... 1. Найти произведение элементов К-го и Р-го столбцов квадратной матрицы, размерностью 6х6. 2. Дан двумерный массив размерностью 5х3, заполненный целыми числами. Найти произведение элементов нечетных строк матрицы. 3. Дан двумерный массив размерностью 5х6, заполненный целыми числами и величина К. Найти количество элементов, равных К и их сумму. 4. Дан двумерный массив размерностью NхM, заполненный целыми числами. Определить, есть ли в данном массиве столбец, в котором имеются одинаковые элементы.
|