Преобразовать матрицу по правилу - QBasic

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

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

Дана квадратная матрица А(). Требуется преобразовать эту матрицу так, чтобы каждый ее элемент стал суммой окружающих этот элемент других элементов включая и сам элемент (максимум сумма 9-ти элементов, минимум сумма 4-ох элементов). Эта задача решена частично с привлечением дополнительной матрицы В(). Код программы прилагается. Можно ли решить эту задачу без дополнительной матрицы неизвестно? Были такие мысли 1. Хранить старый и новый элемент матрицы в виде дробного числа. Целая часть - исходное значение элемента матрицы, а дробная часть - новое значение матрицы. Но здесь есть свой подводный камень! Если новое число будет оканчиваться на 0, то мы потеряем этот Нуль. Бейсик его отбросит. 2. Теоретически можно ввести строковую матрицу или лучше просто строку, для хранения новых значений??? 3. Может все гораздо проще? Если элемент матрицы использован то его можно занять? Как?

Решение задачи: «Преобразовать матрицу по правилу»

textual
Листинг программы
const
  n = 7;
 
var
  a : array[0 .. n + 1, 0 .. n + 1] of integer;
 
procedure f(ix : integer; s : integer);
var k, l : integer;
begin
  if ix < sqr(n) then
  begin
    s := 0;
    for k := -1 to 1 do
      for l := -1 to 1 do s := s + a[succ(ix div n) + k, succ(ix mod n) + l];
    f(succ(ix), 0);
  end;
  a[succ(ix div n), succ(ix mod n)] := s;
end;
 
var
  i, j : integer;
 
begin
  randomize;
  writeln('A');
  for i := 1 to n do
  begin
    for j := 1 to n do
    begin
      a[i, j] := random(20);
      write(a[i, j]:4);
    end;
    writeln;
  end;
 
  f(0, 0);
  writeln('new A');
  for i := 1 to n do
  begin
    for j := 1 to n do
      write(a[i, j]:4);
    writeln;
  end;
 
end.

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

В этом коде решается задача обхода и преобразования элементов матрицы по правилу сверху вниз с использованием рекурсии.

  1. В начале определены две константы: n = 7 - размерность матрицы var a: array[0..n+1, 0..n+1] of integer - сама матрица, инициализированная случайными значениями
  2. Далее определена процедура f, которая выполняет преобразование матрицы. Она принимает два параметра: ix - номер текущего элемента матрицы, который обрабатывается s - накопитель суммы элементов, участвующих в преобразовании текущего элемента Внутри процедуры происходит проверка условия: если текущий элемент находится вне границы матрицы (это может произойти при итерации по диагонали), то в накопитель s добавляется значение текущего элемента, и процедура вызывается рекурсивно для следующего элемента. Если же текущий элемент находится в пределах матрицы, то происходит обход его 4-х соседей (включая сам элемент) по принципу сверху вниз, и их значения также добавляются в накопитель s. После завершения обхода всех соседей, значение накопителя s присваивается элементу матрицы с координатами ix+1, jx+1.
  3. После определения процедуры, определены две переменные для перебора элементов матрицы: i, j - номера строк и столбцов текущего элемента
  4. Далее происходит инициализация матрицы случайными значениями, выводится её начальное состояние, и вызывается процедура f для начального элемента матрицы.
  5. После завершения работы процедуры f, выводится новое состояние матрицы.

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


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

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

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