Заполнить двумерный массив зигзагом по диагонали - Pascal ABC

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

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

Нужно заполнить двумерный массив n-го порядка справа-налево сверху-вниз рандомными числами (от min к max) 10 4 3 1 11 9 5 2 15 12 8 6 16 14 13 7 Заранее спасибо за любую помощь!

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

textual
Листинг программы
uses crt;
const nmax=20;
var a:array[1..nmax,1..nmax]of integer;
    n,i,j,k,l:integer;
begin
repeat
write('Размер матрицы до ',nmax,' n=');
readln(n);
until n in [1..nmax];
write('Введите минимальное значение k=');
readln(k);
clrscr;
for l:=2*n-1 downto 1  do
 begin
  if l>n then
   begin
    if l mod 2=0 then
    for i:=1 to 2*n-l do
     begin
      a[i,i+l-n]:=k;
      k:=k+1;
     end
    else
    for i:=2*n-l downto 1 do
     begin
      a[i,i+l-n]:=k;
      k:=k+1;
     end
   end
  else if l<=n then
   begin
    if l mod 2=0 then
    for i:=n-l+1 to n do
     begin
      a[i,i-n+l]:=k;
      k:=k+1;
     end
    else
    for i:=n downto n-l+1 do
     begin
      a[i,i-n+l]:=k;
      k:=k+1;
     end;
   end;
 end;
for i:=1 to n do
 begin
  for j:=1 to n do
  write(a[i,j]:4);
  writeln;
 end;
end.

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

  1. Создается переменная nmax со значением 20.
  2. Создается двумерный массив a размером от 1 до nmax на 1 до nmax.
  3. Создаются переменные n, i, j, k, l со значениями типа integer.
  4. В цикле repeat считывается размер матрицы n и минимальное значение k.
  5. Очищается экран.
  6. В цикле for с l=2*n-1 до 1 выполняется следующая логика:
    • Если l>n то:
      • Если l делится на 2 без остатка (l mod 2=0) то:
      • Для i=1 до 2*n-l выполняется следующая логика:
        • a[i,i+l-n] присваивается значение k.
        • k увеличивается на 1.
      • k присваивается значение k+1.
      • Иначе (l<=n) выполняется следующая логика:
      • Если l делится на 2 без остатка (l mod 2=0) то:
        • Для i=n-l+1 до n выполняется следующая логика:
        • a[i,i-n+l] присваивается значение k.
        • k увеличивается на 1.
        • k присваивается значение k+1.
      • Иначе (l>n) выполняется следующая логика:
        • Для i=n до n-l+1 выполняется следующая логика:
        • a[i,i-n+l] присваивается значение k.
        • k увеличивается на 1.
        • k присваивается значение k+1.
      • Иначе (l<=n) выполняется следующая логика:
        • Для i=n до n-l+1 выполняется следующая логика:
        • a[i,i-n+l] присваивается значение k.
        • k увеличивается на 1.
        • k присваивается значение k+1.
  7. Для i=1 до n выполняется следующая логика:
    • Выводится значение a[i,i] с помощью функции write.
    • Выводится символ новой строки с помощью функции writeln.
  8. Конец программы.

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

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