Заполнить двумерный массив зигзагом по диагонали - 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.
Объяснение кода листинга программы
- Создается переменная
nmax
со значением 20. - Создается двумерный массив
a
размером от 1 доnmax
на 1 доnmax
. - Создаются переменные
n
,i
,j
,k
,l
со значениями типаinteger
. - В цикле
repeat
считывается размер матрицыn
и минимальное значениеk
. - Очищается экран.
- В цикле
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
.
- Для
- Если
- Если
- Для
i=1
доn
выполняется следующая логика:- Выводится значение
a[i,i]
с помощью функцииwrite
. - Выводится символ новой строки с помощью функции
writeln
.
- Выводится значение
- Конец программы.