Если максимальный элемент квадратной матрицы находится выше главной диагонали, транспонировать ее - Pascal ABC
Формулировка задачи:
задача легкая,но я встретил трудности со знанием синтаксиса паскаля,а вот собственно и задача
Если максимальный элемент квадратной матрицы находится выше главной диагонали,транспонировать матрицу,иначе определить сумму элементов строки и столбца с номерами,равными индексам максимального элемента
Решение через подпрограммы обязательно,хотя смысла в них 0,буду благодарен.А то что сверху,я как-то попытался побрыкаться,но так и не понял как описывать массивы
Решение задачи: «Если максимальный элемент квадратной матрицы находится выше главной диагонали, транспонировать ее»
textual
Листинг программы
const n=5;
type matrix= array [1..n, 1..n] of byte;
procedure vvod(var a:matrix);
var i,j:byte;
begin
randomize;
writeln('Исходная матрица');
for i:=1 to n do
begin
for j:=1 to n do
begin
a[i,j]:=random(100);
write(a[i,j]:3);
end;
writeln;
end;
end;
procedure poisk(a:matrix;var imx,jmx:byte);
var i,j:byte;
begin
imx:=1;
jmx:=1;
for i:=1 to n do
for j:=1 to n do
if a[i,j]>a[imx,jmx] then
begin
imx:=i;
jmx:=j;
end;
writeln('Максимальный элемент=',a[imx,jmx],' его координаты [',imx,',',jmx,']');
end;
procedure transponirovka(var a:matrix);
var i,j,k:byte;
begin
for i:=2 to n do
for j:=1 to i-1 do
begin
k:=a[i,j];
a[i,j]:=a[j,i];
a[j,i]:=k;
end;
writeln('Транспонированная матрица');
for i:=1 to n do
begin
for j:=1 to n do
write(a[i,j]:3);
writeln;
end;
end;
procedure summa(a:matrix;imx,jmx:byte;var s:integer);
var i,j:byte;
begin
s:=0;
for i:=1 to n do
s:=s+a[imx,i]+a[i,jmx];
s:=s-a[imx,jmx];
writeln('Сумма элементов строки номер ',imx,' и столбца номер ',jmx,'=',s);
end;
var a: matrix;
imx,jmx:byte;
s: integer;
begin
vvod(a);
poisk(a,imx,jmx);
if jmx>imx then
begin
writeln('Максимальный элемент выше главной диагонали');
transponirovka(a);
end
else
begin
writeln('Максимальный элемент не выше главной диагонали');
summa(a,imx,jmx,s);
end;
end.
Объяснение кода листинга программы
- const n=5; — задает значение переменной n равное 5
- type matrix= array [1..n, 1..n] of byte; — определяет тип массива a как массив байтов размером n на n
- procedure vvod(var a:matrix); — объявляет процедуру vvod, которая принимает массив a в качестве параметра и выполняет следующие действия: — randomize — инициализирует генератор случайных чисел — writeln('Исходная матрица'); — for i:=1 to n do — for j:=1 to n do — begin — a[i,j]:=random(100); — присваивает случайное значение элементу a[i,j] — write(a[i,j]:3); — выводит значение a[i,j] — end; — writeln; — end; — end;
- procedure poisk(a:matrix;var imx,jmx:byte); — объявляет процедуру poisk, которая принимает массив a в качестве параметра и выполняет следующие действия: — imx:=1; — jmx:=1; — for i:=1 to n do — for j:=1 to n do — if a[i,j]>a[imx,jmx] then — begin — imx:=i; — jmx:=j; — end; — writeln('Максимальный элемент=',a[imx,jmx],' его координаты [',imx,',',jmx,']');
- procedure transponirovka(var a:matrix); — объявляет процедуру transponirovka, которая принимает массив a в качестве параметра и выполняет следующие действия: — for i:=2 to n do — for j:=1 to i-1 do — begin — k:=a[i,j]; — a[i,j]:=a[j,i]; — a[j,i]:=k; — end; — writeln('Транспонированная матрица'); — for i:=1 to n do — for j:=1 to n do — write(a[i,j]:3); — writeln; — end; — end;
- procedure summa(a:matrix;imx,jmx:byte;var s:integer); — объявляет процедуру summa, которая принимает массив a в качестве параметра, значения imx и jmx в качестве параметров и выполняет следующие действия: — s:=0; — for i:=1 to n do — s:=s+a[imx,i]+a[i,jmx]; — s:=s-a[imx,jmx]; — writeln('Сумма элементов строки номер ',imx,' и столбца номер ',jmx,'=',s);
- var a: matrix; — объявляет переменную a типа matrix
- begin — vvod(a); — poisk(a,imx,jmx); — if jmx>imx then — begin — writeln('Максимальный элемент выше главной диагонали'); — transponirovka(a); — end — else — begin — writeln('Максимальный элемент не выше главной диагонали'); — summa(a,imx,jmx,s); — end; — end;
- end.