В матрице выявить все квадратные подматрицы, в которых число положительных и отрицательных элементов равно - 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, то выводится строка
Подматриц по условию нет
. - Конец программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д