Const
m=5;
n=7;
var
a:array[1..m,1..n] of integer;
i,j,amax:integer;
p:real;
begin
Randomize;
Writeln('Исходный массивэ');
for i:=1 to m do begin
for j:=1 to n do begin
a[i,j]:=Random(90)+10;
Write(a[i,j]:3)
end;
Writeln
end;
{Задача 1}
amax:=a[1,1];
for i:=1 to m do
for j:=1 to n do
if a[i,j]>amax then amax:=a[i,j];
Writeln('Максимальный элемент равен ',amax);
{Задача 2}
p:=1;
for i:=1 to m do
for j:=1 to n do
if a[i,j] mod 2=0 then p:=p*a[i,j];
Writeln('Произведение четных элементов равно ',p);
end.
Пример работы
Исходный массивэ
94 20 49 80 70 55 40
62 74 71 51 88 10 76
68 11 11 74 96 50 69
98 34 25 93 52 53 61
68 85 35 15 77 78 97
Максимальный элемент равен 98
Произведение четных элементов равно 2.86826492979212E+33
, Первоначально (после первого цикла): A = 0 1 2 ... 10
Посмотрим, что делает второй цикл.
Заметим, что переменная k здесь бесполезна - ей присваивают какие-то значения, а потом ничего с ними не делают. Тогда про неё можно забыть. Остаётся только одна команда: A[i] = A[10-i]
Для i = 0, 1, 2, 3, 4 она просто заменяет A[i] на значение, симметричное относительно центра A[5]; A[0]=10, A[1]=9; A[2]=8; A[3]=7; A[4]=6.
С i=5 не происходит ничего: присвоение имеет вид A[5]=A[5]
Для последующих i опять A[i] меняется на симметричное. Но после i=4 массив и так "симметричен", так что все эти команды ничего не делают.
A = [10, 9, 8, 7, 6, 5, 6, 7, 8, 9, 10]
Запишем умножение "в столбик".
11
x 11
----------
11
+ 11
---------
1001
Видно, что во втором справа разряде 1+1 дает в результате 0, т.е. значение, меньшее, чем любое из слагаемых. Такое возможно только если сумма равна или превышает основание системы счисления. В частности, ноль получается тогда, когда сумма точно равна основанию системы счисления. Но мы знаем, что 1+1=2, следовательно система счисления - двоичная.