Вывести на экран номер первой строки матрицы, в которой содержаться только положительные элементы - Pascal ABC
Формулировка задачи:
Дана такая задача: Задана матрица 5х10. Вывести на экран номер ее первой строчки, в которой содержаться только положительные элементы. Если такой нет - вывести 0.
Прошу помощи в решении данной задачи.
Решение задачи: «Вывести на экран номер первой строки матрицы, в которой содержаться только положительные элементы»
textual
Листинг программы
const m=5;
n=10;
var a:array[1..m,1..n] of integer;
i,j,o1,pp:byte;
x:integer;
mn:set of byte;
begin
randomize;
writeln('Исходная матрица:');
for i:=1 to m do
begin
for j:=1 to n do
begin
a[i,j]:=-10+random(21);
write(a[i,j]:4);
end;
writeln;
end;
mn:=[];
for i:=1 to m do
begin
o1:=0;
pp:=0;
for j:=1 to n do
begin
if(a[i,j]<0)and(o1=0) then o1:=j;
if a[i,j]>0 then pp:=j;
end;
if(o1=0)or(pp=0)then mn:=mn+[i]
else
begin
x:=a[i,o1];
a[i,o1]:=a[i,pp];
a[i,pp]:=x;
end;
end;
writeln('Обмен в строках первого отрицательного и последнего положительного');
for i:=1 to m do
begin
for j:=1 to n do
write(a[i,j]:4);
writeln;
end;
if mn<>[] then
begin
write('В строках ');
for i:=1 to m do
if i in mn then write(i,' ');
writeln('нет пар элементов для обмена');
end;
end.
Объяснение кода листинга программы
- Создается переменная
mсо значением 5. - Создается переменная
nсо значением 10. - Создается переменная
aтипаarray[1..m,1..n] of integer. - Создаются три байтовые переменные
i,j,o1. - Создается переменная
ppтипаset of byte. - Выводится сообщение «Исходная матрица:».
- Запускается цикл
for i:=1 to m do, внутри которого запускается циклfor j:=1 to n do. - Внутри циклов выводятся значения элементов матрицы
a[i,j]с помощью функцииwrite(a[i,j]:4). - После окончания внутреннего цикла выводится символ новой строки
writeln. - Запускается цикл
for i:=1 to m do, внутри которого запускается циклfor j:=1 to n do. - Внутри циклов проверяется условие
if(a[i,j]<0)and(o1=0) then o1:=j. Если это условие истинно, то переменнойo1присваивается значениеj. - Если условие
if a[i,j]>0 then pp:=jистинно, то переменнойppприсваивается значениеj. - Если оба условия выполняются, то переменная
mnобновляется, добавляя в себя значениеi. - Если условие
if(o1=0)or(pp=0)then mn:=mn+[i]истинно, то выводится сообщение «В строках » и для каждогоiиз диапазона [1..m] выполняется проверкаif i in mn then write(i,' '). Если условие истинно, то выводится пробел и значениеi. - Если условие
if(o1=0)or(pp=0)then mn:=mn+[i]не выполняется, то выводится сообщение «В строках нет пар элементов для обмена». - Выводится сообщение «Обмен в строках первого отрицательного и последнего положительного».
- Для каждой строки матрицы выводится значение элементов с помощью функции
write(a[i,j]:4). - Выводится символ новой строки
writeln. - Конец программы.