В прямоугольной матрице выявить все квадратные подматрицы, у которых суммы элементов обеих диагоналей равны. - Pascal ABC

Узнай цену своей работы

Формулировка задачи:

Задание: "В прямоугольной матрице выявить все квадратные подматрицы, у которых суммы элементов обеих диагоналей одинаковы."
Листинг программы
  1. program shtil;
  2. var a:array[1..10,1..10] of integer;
  3. m,n,d,i,j,ii,v,l,s1,s2:byte;
  4. begin
  5. write('Количество строк n=');
  6. readln(n);
  7. write('Количество столбцов m=');
  8. readln(m);
  9. if n<m then d:=n else d:=m;//максимальный размер подматриц
  10. writeln('Матрица');
  11. for i:=1 to n do
  12. for j:=1 to m do begin
  13. a[i,j]:=random(10);
  14. end;
  15. for i:=1 to n do begin
  16. for j:=1 to m do
  17. write(a[i,j]:2);
  18. writeln;
  19. end;
  20. writeln;
  21. for i:=1 to n do //матрица
  22. for j:=1 to m do begin //матрица
  23. for l:=2 to d do begin //подматрица размера от l до макс d
  24. v:=0;
  25. for ii:=i to (i+l-1) do//построчное перебирание подматриц
  26. begin
  27. s1:=a[ii,j+v]+s1;//сумма элементов главной диагонали
  28. writeln('s1 ',s1);
  29. s2:=a[ii,j+l-v-1]+s2;//сумма элементов побочной диагонали
  30. writeln('s2 ',s2);
  31. inc(v);//счетчик для нахождения элемента диагонали в каждой строке
  32. end;
  33. if s1=s2 then writeln('da') else writeln('net');
  34. s1:=0;s2:=0;
  35. end;
  36. end;
  37. end.
В программе пошагово от самого 1 элемента берется подматрица(с 2 на 2 и так до d на d) и в ней считаются суммы диагоналей, но проблема в том, что с элементов ближе к правой и нижней стенки матрицы, подматрицы выходят за пределы самой матрицы и элементы за границей берутся соответственно за 0. Собственно помощь нужна с тем, как это дело ограничить. (Извиняюсь за изложение, не смог придумать как более доходчиво объяснить.)

Решение задачи: «В прямоугольной матрице выявить все квадратные подматрицы, у которых суммы элементов обеих диагоналей равны.»

textual
Листинг программы
  1. //все элементы матрицы кроме последних строки и столбца
  2. for i:=1 to n-1 do
  3. for j:=1 to m-1 do
  4. //все подматрицы, их нижние правые углы
  5. for ii:=i+1 to n do
  6. for jj:=j+1 to m do
  7. if (ii-i in [2..d])and(ii-i=jj-j) then//входят в диапазон [2..d]
  8.  begin

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

  1. n - размер матрицы по первому измерению (количество строк)
  2. m - размер матрицы по второму измерению (количество столбцов)
  3. d - размерность матрицы (общая размерность матрицы, т.е. m*n)
  4. i - номер текущей строки
  5. j - номер текущего столбца
  6. ii - номер внутренней строки
  7. jj - номер внутреннего столбца
  8. [2..d] - диапазон чисел от 2 до d (включительно)
  9. if (ii-i in [2..d])and(ii-i=jj-j) then - проверка условия для каждой подматрицы
  10. (ii-i in [2..d]) - проверка, входит ли номер строки ii в диапазон [2..d]
  11. (ii-i=jj-j) - проверка, равны ли номера строк ii и jj, а также номера столбцов ii и j
  12. end if - завершение проверки условия для каждой подматрицы

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

14   голосов , оценка 3.929 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы