Обход матрицы - Pascal
Формулировка задачи:
Помогите пожалуйста, пришлите если можете свою работу. или скажите, в чем ошибка
Дана матрица A[N,N] из целых чисел (N<=10) . Обойти матрицу в следующем порядке:
Началом является элемент A[N,1] следую движение вправо, потом параллельно основной диагонали движение вверх до края таблицы, и опять парралельно основной диагонали вниз до края таблицы и т.д до достижения последнего не пройденного элемента A[1,N]
допустим ввели 4
вывод
13 14 9 5 10 15 16 11 6 1 2 7 12 8 3 4
получается вывод змейкой
я сделал наброски, но там ошибка, которую я не понял.
это обход до последнего элемента, то есть 1/2 моей задумки, а когда скомпилировал, пригорело
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Program p2; Type Vector=array [1..10] of integer; Matrix=array[1..10] of Vector; var m:Matrix; n,i,j:integer; max:boolean; begin writeln('Введи размерность N-ой матрицы:'); readln(n); i:=1; j:=1; m[i][j]:=1; for i:=1 to n do begin for j:=1 to n do begin m[i][j]:=m[i][j]+1; end; end; j:=1; i:=n; writeln(m[n][j]); repeat if (n=i) and (n=j+1) then begin j:=j+1; writeln(' ',m[i][j]); max:=true; end else begin j:=j+1; writeln(' ',m[i][j]); end; writeln(' ',m[i][j]); while(j=1) do begin i:=i-1; j:=j-1; writeln(' ',m[i][j]); end; i:=i-1; writeln(' ',m[i][j]); while(i=n) do begin i:=i+1; j:=j+1; writeln(' ',m[i][j]); end; until max=true; readln(); end.
Решение задачи: «Обход матрицы»
textual
Листинг программы
const nmax=10; var a:array[1..nmax,1..nmax]of integer; n,i,j,k,l:integer; begin repeat write('Размер матрицы от 2 до ',nmax,' n='); readln(n); until n in [1..nmax]; writeln('Исходная матрица'); for i:=1 to n do begin for j:=1 to n do begin a[i,j]:=(i-1)*n+j; write(a[i,j]:4); end; writeln; end; writeln('Вывод по заданному правилу'); k:=0; for l:=1 to 2*n-1 do begin if l>n then begin if odd(l) then for i:=1 to 2*n-l do begin k:=k+1; write(a[i,i+l-n]:4); end else for i:=2*n-l downto 1 do begin k:=k+1; write(a[i,i+l-n]:4); end end else if l<=n then begin if odd(l) then for i:=n-l+1 to n do begin k:=k+1; write(a[i,i-n+l]:4); end else for i:=n downto n-l+1 do begin k:=k+1; write(a[i,i-n+l]:4); end; end; end; end.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д