Заменить элементы матрицы суммой элементов соответствующих подматриц - Pascal

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

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

Дана вещественная матрица A размером (m x n). Обозначим A'(i,j)-верхний левый угол матрицы A до i-й строки и j-го столбца(подматрица). Каждому элементу исходной матрицы a[i,j] присвоить значение суммы элементов A'(i,j). Ограничение:разрешается в программе использовать единственную матрицу.

Решение задачи: «Заменить элементы матрицы суммой элементов соответствующих подматриц»

textual
Листинг программы
const mr = 5; {максимальный размер массива по вертикали и горизонтали}
              {можно поменять, однако, возможно, придётся кое-где изменять формат вывода}
 
{ввод размера массива с проверкой на корректность}
procedure inp_rng(s: string; var x: integer);
begin
  repeat
    write(s, ' in range [1..', mr, '],  ', s, ' = '); {печать приглашения}
    readln(x) {ввод числа}
  until x in [1..mr] {повторяем, пока число не будет в допустимом диапазоне}
end;
 
var i, j, k, l, m, n: integer;
    s: real;
    a: array [1..mr, 1..mr] of real;
 
begin
  randomize;
  inp_rng('m', m); {ввод количества строк}
  inp_rng('n', n); {ввод количества столбцов}
  writeln('Source matrix:'); {"Исходная матрица"}
  {генерация и печать элементов матрицы}
  for i := 1 to m do {цикл по строкам}
    begin
      for j := 1 to n do {цикл по столбцам}
        begin
          a[i, j] := 100 * random - 200; {генерация элемента в диапазоне -100..100}
          write(' ', a[i, j]:14) {печать пробела, а также числа в 14 позициях}
        end;
      writeln {перевод на новую строку}
    end;
  {вычисления по заданию}
  for i := 1 to m do {цикл по строкам}
    for j := 1 to n do {цикл по столбцам}
      begin
        s := 0; {сумма ещё не посчитана ( = 0 )}
        for k := i to m do {цикл по строкам подматрицы}
          for l := j to n do {цикл по столбцам подматрицы}
            s := s + a[k, l]; {прибавляем к сумме очередной элемент подматрицы}
        {циклы по k и l завершены, сумма очередной подматрицы вычислена}
        a[i, j] := s {записываем сумму на место соответствующего элемента матрицы}
      end;
  {циклы по i и j завершены, все суммы найдены}
  writeln('Result:'); {"Результат:"}
  {печатаем получившуюся матрицу}
  for i := 1 to m do {цикл по строкам}
    begin
      for j := 1 to n do write(' ', a[i, j]:14); {цикл по столбцам, печать аналогично строке 28}
      writeln {перевод на новую строку}
    end;
  readln {ждём нажатия <Enter> (чтобы программа не закрылась и результат можно было бы посмотреть)}
end.

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

  1. const mr = 5; {максимальный размер массива по вертикали и горизонтали}
  2. var i, j, k, l, m, n: integer;
  3. s: real;
  4. a: array [1..mr, 1..mr] of real;
  5. begin
  6. randomize;
  7. inp_rng('m', m); {ввод количества строк}
  8. inp_rng('n', n); {ввод количества столбцов}
  9. writeln('Source matrix:'); {Исходная матрица}
  10. for i := 1 to m do {цикл по строкам}
  11. begin
  12. for j := 1 to n do {цикл по столбцам}
  13. begin
  14. a[i, j] := 100 * random — 200; {генерация элемента в диапазоне -100..100}
  15. write(' ', a[i, j]:14) {печать пробела, а также числа в 14 позициях}
  16. end;
  17. writeln {перевод на новую строку}
  18. end;
  19. {вычисления по заданию}
  20. for i := 1 to m do {цикл по строкам}
  21. for j := 1 to n do {цикл по столбцам}
  22. begin
  23. s := 0; {сумма ещё не посчитана ( = 0 )}
  24. for k := i to m do {цикл по строкам подматрицы}
  25. for l := j to n do {цикл по столбцам подматрицы}
  26. s := s + a[k, l]; {прибавляем к сумме очередной элемент подматрицы}
  27. end;
  28. a[i, j] := s {записываем сумму на место соответствующего элемента матрицы}
  29. end;
  30. end;
  31. writeln('Result:'); {Результат:}
  32. {печатаем получившуюся матрицу}
  33. for i := 1 to m do {цикл по строкам}
  34. begin
  35. for j := 1 to n do write(' ', a[i, j]:14); {цикл по столбцам, печать аналогично строке 28}
  36. end;
  37. end;
  38. readln {ждём нажатия (чтобы программа не закрылась и результат можно было бы посмотреть)}
  39. end.

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


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

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

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