Лабораторная работа № 5. Двумерные массивы
Задание 1. Заполните пустые места в алгоритме поиска минимального элемента в двумерном массиве.
Задание 2. Составьте блок-схему к программе, вычисляющей произведение элементов двумерного массива.
Листинг программы:
Program Example10;
Uses crt;
Var a: array[1..100,1..100] of integer;
i,j,n,m: integer;
P: longint;
Begin
Clrscr;
Write('n='); Readln(n);
Write('m='); Readln(m);
for i:=1 to n do
for j:=1 to m do Begin
Write('a[',i,',',j,']=');
Readln(a[i,j]);
End;
P:=1;
for i:=1 to n do
for j:=1 to m do P:=P*a[i,j];
Write('P=',P);
Readkey
End.
Доработайте программу, чтобы на экран выводился массив в виде матрицы.
Листинг программы:
Program Example10;
Uses crt;
Var a: array[1..100,1..100] of integer;
i,j,n,m: integer;
P: longint;
Begin
Clrscr;
Write('n='); Readln(n);
Write('m='); Readln(m);
for i:=1 to n do
for j:=1 to m do Begin
Write('a[',i,',',j,']=');
Readln(a[i,j]);
End;
for i:=1 to n do Begin
for j:=1 to m do Write(a[i,j]:4);
Writeln;
End;
P:=1;
for i:=1 to n do
for j:=1 to m do P:=P*a[i,j];
Write('P=',P);
Readkey
End.
Протокол выполнения программы:
n=2
m=3
a[1,1]=2
a[1,2]=1
a[1,3]=3
a[2,1]=5
a[2,2]=4
a[2,3]=5
2 1 3
5 4 5
P=600
Задание 3. Составьте программу для поиска максимального элемента и его индексов.
Листинг программы:
Program z53;
Uses crt;
Var a: array[1..100,1..100] of integer;
i,j,n,m,max,imax,jmax: integer;
Begin
Clrscr;
Write('n='); Readln(n);
Write('m='); Readln(m);
for i:=1 to n do
for j:=1 to m do Begin
Write('a[',i,',',j,']=');
Readln(a[i,j]);
End;
for i:=1 to n do Begin
for j:=1 to m do Write(a[i,j]:4);
Writeln;
End;
max:=a[1,1];imax:=1;j:=1;
for i:=1 to n do
for j:=1 to m do
if max<a[i,j] then Begin
max:=a[i,j];
imax:=i;
jmax:=j;
End;
Write('max=',max,' imax=',imax,' jmax=',jmax);
Readkey
End.
Протокол выполнения программы:
n=2
m=3
a[1,1]=6
a[1,2]=2
a[1,3]=8
a[2,1]=1
a[2,2]=3
a[2,3]=7
6 2 8
1 3 7
max=8 imax=1 jmax=3
Задание 4. Заполните пустые места в программе, вычисляющей сумму элементов, расположенных на главной диагонали.
Листинг программы:
Program z54;
Uses crt;
Var a: array[1..100,1..100] of integer;
i,j,n,S: integer;
Begin
Clrscr;
Write('n='); Readln(n);
for i:=1 to n do
for j:=1 to n do Begin
Write('a[',i,',',j,']=');
Readln(a[i,j]);
End;
S:=0;
for i:=1 to n do
for j:=1 to n do if i=j then S:=S+a[i,j];
for i:=1 to n do
Begin
for j:=1 to n do
Write(a[i,j]:5);
Writeln;
End;
Writeln('S=',S);
Readkey
End.
Протокол выполнения программы:
n=3
a[1,1]=1
a[1,2]=2
a[1,3]=3
a[2,1]=4
a[2,2]=5
a[2,3]=6
a[3,1]=4
a[3,2]=5
a[3,3]=6
1 2 3
4 5 6
7 8 9
S=15
Доработайте программу, чтобы считалась сумма элементов, расположенных на побочной диагонали.
Листинг программы:
Program z54;
Uses crt;
Var a: array[1..100,1..100] of integer;
i,j,n,S1,S2: integer;
Begin
Clrscr;
Write('n='); Readln(n);
for i:=1 to n do
for j:=1 to n do Begin
Write('a[',i,',',j,']=');
Readln(a[i,j]);
End;
S1:=0;
for i:=1 to n do
for j:=1 to n do if i=j then S1:=S1+a[i,j];
S2:=0;
for i:=1 to n do
for j:=1 to n do if i+j=n+1 then S2:=S2+a[i,j];
for i:=1 to n do
Begin
for j:=1 to n do
Write(a[i,j]:5);
Writeln;
End;
Writeln('S1=',S1);
Writeln('S2=',S2);
Readkey
End.
Протокол выполнения программы:
n=3
a[1,1]=6
a[1,2]=2
a[1,3]=9
a[2,1]=1
a[2,2]=3
a[2,3]=7
a[3,1]=4
a[3,2]=8
a[3,3]=5
6 2 9
1 3 7
4 8 5
S1=14
S2=16
Задание 5. Составьте программу для поиска максимального элемента на побочной диагонали. Для заполнения массива воспользуйтесь датчиком случайных чисел.
Листинг программы:
Program z55;
Uses crt;
Var a: array[1..100,1..100] of integer;
i,j,n,max: integer;
Begin
Clrscr;
Write('n='); Readln(n);
Randomize;
for i:=1 to n do Begin
for j:=1 to n do Begin
a[i,j]:=random(100);
write(a[i,j]:5);
End;
Writeln;
End;
max:=a[1,n];
for i:=1 to n do
for j:=1 to n do
if i+j=n+1 then if max<a[i,j] then max:=a[i,j];
Writeln('max=',max);
Readkey
End.
Протокол выполнения программы:
n=3
0 3 86
20 27 67
31 16 37
max=86
Задание 6. Составьте программу для поиска минимального элемента среди элементов, расположенных выше главной диагонали.
Листинг программы:
Program z56;
Uses crt;
Var a: array[1..100,1..100] of integer;
i,j,n,min: integer;
Begin
Clrscr;
Write('n='); Readln(n);
Randomize;
for i:=1 to n do Begin
for j:=1 to n do Begin
a[i,j]:=random(100);
write(a[i,j]:5);
End;
Writeln;
End;
min:=a[1,2];
for i:=1 to n do
for j:=1 to n do
if i<j then if min>a[i,j] then min:=a[i,j];
Writeln('min=',min);
Readkey
End.
Протокол выполнения программы:
n=3
85 81 88
82 22 57
26 98 47
min=57
Задание 7. Составьте программу, которая подсчитывает количество строк в двумерном массиве, содержащих отрицательные элементы.
Листинг программы:
Program z57;
Uses crt;
Var a: array[1..100,1..100] of integer;
i,j,n,k: integer;
f:boolean;
Begin
Clrscr;
Write('n='); Readln(n);
Randomize;
for i:=1 to n do Begin
for j:=1 to n do Begin
a[i,j]:=random(100)-50;
write(a[i,j]:5);
End;
Writeln;
End;
k:=0;
for i:=1 to n do Begin
f:=false;
for j:=1 to n do if a[i,j]<0 then f:=true;
if f then k:=k+1;
End;
Writeln('k=',k);
Readkey
End.
Протокол выполнения программы:
n=4
1 30 19 -34
35 10 48 36
15 0 37 28
-25 23 37 40
k=2
Задание 8. Составьте программу, которая вычисляет сумму элементов по столбцам.
Листинг программы:
Program z58;
Uses crt;
var a: array[1..100,1..100] of integer; s: array[1..100] of integer;
i,j,n: integer;
Begin
Clrscr;
Write('n='); Readln(n);
Randomize;
for i:=1 to n do Begin
for j:=1 to n do Begin
a[i,j]:=random(10);
write(a[i,j]:5);
End;
Writeln;
End;
for j:=1 to n do Begin
s[j]:=0;
for i:=1 to n do s[j]:=s[j]+a[i,j];
End;
Writeln;
for i:=1 to n do Write(s[i]:5);
Readkey
End.
Протокол выполнения программы:
n=4
2 0 8 1
1 6 9 6
8 9 5 1
8 4 6 2
19 19 28 10