В матрице выявить все квадратные подматрицы, в которых число положительных и отрицательных элементов равно - Pascal ABC
Формулировка задачи:
Здравствуйте!Нужна ваша помощь:"В прямоугольной матрице выявить все квадратные подматрицы,в которых колл-во положительных и отрицательных элементов равно.".Надеюсь на помощь,заранее спасибо!
Решение задачи: «В матрице выявить все квадратные подматрицы, в которых число положительных и отрицательных элементов равно»
textual
Листинг программы
const max=10;
var a:array[1..max,1..max] of real;
m,n,d,i,j,ii,jj,iii,jjj,kp,ko,q:byte;
begin
randomize;
repeat
write('Количество строк от 2 до ',max,' m=');
readln(m);
until m in [2..max];
repeat
write('Количество столбцов от 2 до ',max,' n=');
readln(n);
until n in [2..max];
if m<n then d:=m else d:=n;//максимальный размер квадратов
writeln('Матрица');
for i:=1 to m do
begin
for j:=1 to n do
begin
a[i,j]:=-5+10*random;
write(a[i,j]:6:2);
end;
writeln;
end;
q:=0;
for i:=1 to m-1 do
for j:=1 to n-1 do
for ii:=i+1 to m do
for jj:=j+1 to n do
if (ii-i in [1..d])and(ii-i=jj-j) then
begin
kp:=0;
ko:=0;
for iii:=i to ii do
for jjj:=j to jj do
if a[iii,jjj]>0 then inc(kp)
else if a[iii,jjj]<0 then inc(ko);
if kp=ko then
begin
q:=1;
writeln('Подматрица [',i,',',j,']-[',ii,',',jj,']');
end;
end;
if q=0 then writeln('Подматриц по условию нет');
end.
Объяснение кода листинга программы
- Создается константа max со значением 10.
- Создается переменная a типа array[1..max,1..max] of real.
- Создаются переменные m, n, d, i, j, ii, jj, iii, jjj, kp, ko, q типа byte.
- Используется функция randomize для инициализации генератора случайных чисел.
- Выполняется цикл repeat, в котором считываются значения m и n с помощью функции readln.
- Проверяется, что m больше или равно n. Если это условие не выполняется, то переменной d присваивается значение m, иначе - n.
- Выводится строка
Матрица. - Выполняется цикл for i от 1 до m.
- Внутри цикла выполняется цикл for j от 1 до n.
- Внутри циклов вычисляются значения a[i,j] и выводятся они на экран с помощью функции write.
- Выводится символ writeln для перехода на новую строку.
- Переменная q инициализируется значением 0.
- Выполняется цикл for i от 1 до m-1.
- Внутри цикла выполняется цикл for j от 1 до n-1.
- Внутри циклов выполняется цикл for ii от i+1 до m.
- Внутри циклов выполняется цикл for jj от j+1 до n.
- Проверяется условие (ii-i в [1..d]) и (ii-i=jj-j).
- Если условие выполняется, то переменные kp и ko инициализируются значением 0.
- Если a[iii,jjj]>0, то значение kp увеличивается.
- Если a[iii,jjj]<0, то значение ko увеличивается.
- Если kp равно ko, то переменная q инициализируется значением 1.
- Выводится строка
Подматрица [,i,',',j,']-[',ii,',',jj,']`. - Если значение q равно 0, то выводится строка
Подматриц по условию нет. - Конец программы.