Заменить элементы матрицы суммой элементов соответствующих подматриц - 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.
Объяснение кода листинга программы
- const mr = 5; {максимальный размер массива по вертикали и горизонтали}
- 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]; {прибавляем к сумме очередной элемент подматрицы}
- end;
- a[i, j] := s {записываем сумму на место соответствующего элемента матрицы}
- end;
- end;
- writeln('Result:'); {
Результат:
} - {печатаем получившуюся матрицу}
- for i := 1 to m do {цикл по строкам}
- begin
- for j := 1 to n do write(' ', a[i, j]:14); {цикл по столбцам, печать аналогично строке 28}
- end;
- end;
- readln {ждём нажатия
(чтобы программа не закрылась и результат можно было бы посмотреть)} - end.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д