Заполнение матрицы диагональю - Pascal ABC
Формулировка задачи:
Даны числа n и m. Создайте массив A[n,m] и заполните его след. образом:
При n=4, m=6;
В основном интересует только алгоритм. Никак не могу понять(
00 | 01 | 03 | 06 | 10 | 14 |
02 | 04 | 07 | 11 | 15 | 18 |
05 | 08 | 12 | 16 | 19 | 21 |
09 | 13 | 17 | 20 | 22 | 23 |
Решение задачи: «Заполнение матрицы диагональю»
textual
Листинг программы
uses crt; const nmax=15; var a:array[1..nmax,1..nmax] of integer; m,n,i,j,k,x,y:integer; begin clrscr; randomize; repeat write('Количество строк до ',nmax,' n='); readln(n); until n in [1..nmax]; repeat write('Количество столбцов до ',nmax,' m='); readln(m); until m in [1..nmax]; k:=-1;{число в ячейке} for j:=1 to m do{заполним диагонали до правого верхнего угла} begin y:=1; {начало диагонали вверху} x:=j; while(x>0) and(y<=n) do{пока не левый и не нижний края} begin k:=k+1; a[y,x]:=k; x:=x-1;{идем влево вниз} y:=y+1; end; end; for j:=2 to n do{диагонали ниже} begin y:=j; {начало у правого края} x:=m; while(x>0)and(y<=n) do begin k:=k+1; a[y,x]:=k; x:=x-1; y:=y+1 end; end; for i:=1 to n do begin for j:=1 to m do write(a[i,j]:4); writeln end; readln end.
Объяснение кода листинга программы
- Создается переменная
nmax
со значением 15. - Создается переменная
a
типаarray[1..nmax,1..nmax] of integer;
. - Создаются переменные
m
,n
,i
,j
,k
,x
,y
со значениями типаinteger;
. - Выполняется цикл
repeat
, который запрашивает у пользователя количество строк и столбцов для заполнения матрицы. - Вычисляется значение переменной
k
и присваивается ей значение-1
. - Выполняется цикл
for j:=1 to m do
, который заполняет диагонали матрицы до правого верхнего угла. - Внутри цикла вычисляется значение переменной
y
и присваивается ей значение1
, а значение переменнойx
устанавливается равным значению переменнойj
. - Пока значение переменной
x
больше нуля и значение переменнойy
меньше или равно значению переменнойn
, выполняется циклwhile(x>0) and(y<=n)
. - Внутри цикла значение переменной
k
увеличивается на единицу, значение переменнойa[y,x]
присваивается значениюk
, значение переменнойx
уменьшается на единицу (идет влево), а значение переменнойy
увеличивается на единицу. - После завершения внутреннего цикла, значение переменной
x
снова сравнивается с нулем, чтобы выйти из внешнего цикла. - Выполняется цикл
for i:=1 to n do
, который выводит значения матрицы. - Для каждой строки матрицы выполняется цикл
for j:=1 to m do
, который выводит значения ячеек. - Выводится значение переменной
a[i,j]
. - Выводится символ
writeln
, чтобы перейти на новую строку. - Выполняется цикл
readln
, который ожидает ввода пользователя. - Цикл
repeat
завершается, так как пользователь ввел корректное количество строк и столбцов. - Выводится сообщение
end.
, чтобы завершить программу.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д