В матрице выявить все квадратные подматрицы, в которых число положительных и отрицательных элементов равно - 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.

Объяснение кода листинга программы

  1. Создается константа max со значением 10.
  2. Создается переменная a типа array[1..max,1..max] of real.
  3. Создаются переменные m, n, d, i, j, ii, jj, iii, jjj, kp, ko, q типа byte.
  4. Используется функция randomize для инициализации генератора случайных чисел.
  5. Выполняется цикл repeat, в котором считываются значения m и n с помощью функции readln.
  6. Проверяется, что m больше или равно n. Если это условие не выполняется, то переменной d присваивается значение m, иначе - n.
  7. Выводится строка Матрица.
  8. Выполняется цикл for i от 1 до m.
  9. Внутри цикла выполняется цикл for j от 1 до n.
  10. Внутри циклов вычисляются значения a[i,j] и выводятся они на экран с помощью функции write.
  11. Выводится символ writeln для перехода на новую строку.
  12. Переменная q инициализируется значением 0.
  13. Выполняется цикл for i от 1 до m-1.
  14. Внутри цикла выполняется цикл for j от 1 до n-1.
  15. Внутри циклов выполняется цикл for ii от i+1 до m.
  16. Внутри циклов выполняется цикл for jj от j+1 до n.
  17. Проверяется условие (ii-i в [1..d]) и (ii-i=jj-j).
  18. Если условие выполняется, то переменные kp и ko инициализируются значением 0.
  19. Если a[iii,jjj]>0, то значение kp увеличивается.
  20. Если a[iii,jjj]<0, то значение ko увеличивается.
  21. Если kp равно ko, то переменная q инициализируется значением 1.
  22. Выводится строка Подматрица [,i,',',j,']-[',ii,',',jj,']`.
  23. Если значение q равно 0, то выводится строка Подматриц по условию нет.
  24. Конец программы.

Оцени полезность:

6   голосов , оценка 4 из 5
Похожие ответы