Найти max элементы в матрицах А и В (MaxA и MaxB соответственно) - Free Pascal
Формулировка задачи:
Найти max элементы в матрицах А и В (MaxA и MaxB соответственно). Если MaxA>MaxB, то вычислить C=A*B, иначе вычислить C=B*A. Вывести: А, В, А1, В1, S.
В4х4, где Вij={0, если i не равно j
1, иначе i=1..4, j=1..4
Решение задачи: «Найти max элементы в матрицах А и В (MaxA и MaxB соответственно)»
textual
Листинг программы
const
n=4;
type tarray=array[1..n,1..n] of integer;
var a,b,c:tarray;
i,j,max1,max2:integer;
begin
max1:=-999;
randomize;
writeln('massiv A');
for i:=1 to n do begin
for j:=1 to n do begin
a[i,j]:=random(18)-9;
write(a[i,j],' ');
if a[i,j]>max1 then max1:=a[i,j];
end;
writeln;
end;
writeln('max1=',max1,'');
writeln('massiv B');
for i:=1 to n do
for j:=1 to n do
b[i,j]:=0;
for i:=1 to n do begin
for j:=1 to n do begin
if i=j then begin
b[i,j]:=1;
end;
write(b[i,j],' ');
max2:=1;
end;
writeln;
end;
writeln('max2=',max2,'');
if max1=max2 then writeln('max1=max2') else begin
if max1>max2 then begin
writeln('max1>max2');
writeln('massiv C');
for i:=1 to n do begin
for j:=1 to n do begin
c[i,j]:=a[i,1]*b[1,j]+a[i,2]*b[2,j]+a[i,3]*b[3,j]+a[i,4]*b[4,j];
write(c[i,j],' ');
end;
writeln;
end;
end else begin
writeln('max1<max2');
writeln('massiv C');
for i:=1 to n do begin
for j:=1 to n do begin
c[i,j]:=b[i,1]*a[1,j]+b[i,2]*a[2,j]+b[i,3]*a[3,j]+b[i,4]*a[4,j];
write(c[i,j],' ');
end;
writeln;
end;
end;
end;
readln;
end.
Объяснение кода листинга программы
- В начале программы объявляются константы и переменные:
n- размерность матрицы (4х4).tarray- тип матрицы (массив размерности 1..n,1..n).a,b,c- переменные этого типа.i,j,max1,max2- целочисленные переменные для работы с циклами.
- Инициализация:
max1устанавливается в-999, чтобы начальное значение максимального элемента было некорректным.randomizeдля инициализации генератора случайных чисел.writeln('massiv A')- вывод заголовка для первой матрицы.for i:=1 to n do begin- внешний цикл по строкам матрицы.for j:=1 to n do begin- внутренний цикл по столбцам матрицы.a[i,j]:=random(18)-9;- генерация случайного числа от -9 до 18 для элемента матрицы.write(a[i,j],' ');- вывод элемента матрицы с пробелом после него.if a[i,j]>max1 then max1:=a[i,j];- проверка, является ли текущий элемент максимальным и обновление значенияmax1, если это так.end;- выход из внутреннего цикла.writeln;- переход на новую строку после вывода всех элементов строки.end;- выход из внешнего цикла.writeln('max1=',max1,'');- вывод значенияmax1и завершающего символа.- Аналогично вышеуказанному алгоритму, обрабатывается вторая матрица
b, но вместо случайных чисел используются единицы для элементов по диагонали. max2:=1;- инициализацияmax2единицей, так как все элементы матрицыbравны единице.writeln('max2=',max2,'');- вывод значенияmax2и завершающего символа.- Если
max1не равноmax2, то выполняется одна из двух ветвей условного оператора: - Если
max1большеmax2, то выполняется первая ветвь: writeln('max1>max2');- вывод сообщения о том, чтоmax1большеmax2.writeln('massiv C');- вывод заголовка для третьей матрицы.for i:=1 to n do begin- внешний цикл по строкам матрицы.for j:=1 to n do begin- внутренний цикл по столбцам матрицы.c[i,j]:=a[i,1]*b[1,j]+a[i,2]*b[2,j]+a[i,3]*b[3,j]+a[i,4]*b[4,j];- вычисление элемента третьей матрицы как сумма произведений соответствующих элементов первых двух матриц.write(c[i,j],' ');- вывод элемента матрицы с пробелом после него.end;- выход из внутреннего цикла.writeln;- переход на новую строку после вывода всех элементов строки.end;- выход из внешнего цикла.readln;- чтение строки от пользователя для завершения программы.
- Ввод и вывод управляются функциями
readlnиwriteln, которые обеспечивают корректный обмен данными между программой и пользователем.