Найти первый положительный элемент главной диагонали в каждом массиве - Pascal ABC
Формулировка задачи:
Помогите пожалуйста , со всем не бум-бум с этим Паскалем !
Заданы три двумерных массива одинаковой размерности. Организовать ввод и вывод на экран массивов с использованием процедур программиста
Найти первый положительный элемент главной диагонали в каждом массиве, используя функцию программиста.
В том массиве, где значение первого положительного элемента больше всего, обнулить положительный элементы главной диагонали при помощи процедуры.
Заранее благодарен!!!!!
Решение задачи: «Найти первый положительный элемент главной диагонали в каждом массиве»
textual
Листинг программы
program dev9tb; uses crt; const n1=100;n2=100; type matrix=array[1..n1,1..n2] of integer; var n,m,k1,k2,k3:integer; a,b,c:matrix; procedure RandomMatrix(var a:matrix; var n,m:integer); var i,j:integer; begin for i:=1 to n do for j:=1 to m do a[i,j]:=-25+random(50); end; procedure PrintMatrix(a:matrix; n,m:integer); var i,j:integer; begin for i:=1 to n do begin for j:=1 to m do write(a[i,j]:5); writeln; end; end; function aa(a:matrix; n,m:integer):integer; var i,j,p,k:integer; begin k:=0; p:=0; for i:=1 to n do begin for j:=1 to m do begin if (i=j)and(a[i,j]>p) then begin k:=1; p:=a[i,j]; break; end; end; if (k=1) then break; end; aa:=p; end; procedure formagain(var a:matrix; n,m:integer); var i,j,k:integer; begin for i:=1 to n do begin for j:=1 to m do begin if (i=j) and (a[i,j]>0) then begin a[i,j]:=0;k:=1; break; end; end; if (k=1) then break; end; end; begin randomize; write('Введите кол-во строк матриц '); readln(n); write('Введите кол-во столбцов матриц '); readln(m); RandomMatrix(a,n,m); writeln('матрица А'); PrintMatrix(a,n,m); RandomMatrix(b,n,m); writeln('матрица B'); PrintMatrix(b,n,m); RandomMatrix(c,n,m); writeln('матрица C'); PrintMatrix(c,n,m); writeln(); k1:=aa(a,n,m); k2:=aa(b,n,m); k3:=aa(c,n,m); if (k1=0)and(k2=0)and(k3=0) then writeln('в матрицах нет положительных элементов на главной диагонали') else begin if (k1>k2) and (k1>k3) then begin formagain(a,n,m); writeln('изменили матрицу А: '); PrintMatrix(a,n,m); end; if (k2>k1) and (k2>k3) then begin formagain(b,n,m); writeln('изменили матрицу B: '); PrintMatrix(b,n,m); end; if (k3>k1) and (k3>k2) then begin formagain(c,n,m); writeln('изменили матрицу C: '); PrintMatrix(c,n,m); end; end; end.
Объяснение кода листинга программы
Этот код написан на языке Pascal ABC и выполняет следующие действия:
- Запрашивает у пользователя количество строк и столбцов матрицы.
- Генерирует случайные значения для каждой строки матрицы.
- Выводит матрицу А, Б и С.
- Рекурсивно ищет первый положительный элемент на главной диагонали каждой матрицы.
- Если такой элемент найден, то изменяет соответствующую матрицу и выводит измененную матрицу.
- Выводит сообщение о том, есть ли положительные элементы на главной диагонали или нет.
- Если положительные элементы есть, то рекурсивно вызывает функцию для поиска таких элементов в матрице, которая их обнаружила.
- Выводит измененную матрицу в случае, если были найдены положительные элементы. Примечание: В этом коде используется рекурсия для поиска положительных элементов на главной диагонали. Это может быть неэффективным для больших матриц, так как каждый раз выполняется полный перебор матрицы.