RPxRem
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору да, большое спасибо всё работает. =))) просто первый день работаю с 2х мерными массивами. можешь ещё помочь подправить программу? дано число n. надо заполнить массив размером n*n следующим способом: n=4 1 2 6 7 3 5 8 13 4 9 12 14 10 11 15 16 или n=3 1 2 6 3 5 7 4 8 9 вот код программы: Код: program d_mas; var a:array[1..10,1..10] of byte; n:byte; procedure init; begin assign(input,'input.txt'); reset(input); end; procedure writed; begin assign(output,'output.txt'); rewrite(output); end; procedure run(fuck,i,j,t,what,nach,kon:byte); begin read(n); i:=1; j:=1; kon:=2; nach:=1; repeat t:=t+1; a[i,j]:=t; if (i=nach) and (j=kon-1) then what:=1; if (j=kon) and (i=nach) then what:=2; if (j=nach) and (i=kon-1) and (i<>nach) then what:=3; if (i=kon) and (j=nach) then what:=4; case what of 1: j:=j+1; 3: i:=i+1; end; if (what=1) or (what=3) then fuck:=0; if what=2 then begin dec(j); inc(i); if fuck=0 then kon:=kon+1; fuck:=1; end; if what=4 then begin dec(i); inc(j); if fuck=0 then kon:=kon+1; fuck:=1; end; until t=sqr(n); for i:=1 to n do begin for j:=1 to n do write(a[i,j],' '); writeln; end; end; begin init; writed; run(0,0,0,0,0,0,0); end. | но он выходит за границы массива после прохода центральной диагоняли. что можно добавить в код? может если i>=4 then what:=1; j>=4 then what:=3; всё будет ок? пример: n=3 результат 1 2 6 7 3 5 8 0 4 9 0 0 и выводит он 1 2 6 3 5 8 4 9 0 или n=4 1 2 6 7 15 16 3 5 8 14 4 9 13 10 12 11 вывод: 1 2 6 7 3 5 8 14 4 9 13 0 10 12 0 0 Добавлено: Всё было проще чем я думал... Код: program d_mas; var a:array[1..10,1..10] of byte; n,i,j,t,k:byte; procedure init; begin assign(input,'input.txt'); reset(input); end; procedure writed; begin assign(output,'output.txt'); rewrite(output); end; procedure run; begin read(n); i:=1; j:=1; t:=1; k:=1; a[i,j]:=t; repeat k:=k+1; if (k mod 2=0) then begin j:=j+1; t:=t+1; a[i,j]:=t; repeat j:=j-1; i:=i+1; t:=t+1; a[i,j]:=t; until (j=1) or (i=k); end; if (k mod 2=1) then begin i:=i+1; t:=t+1; a[i,j]:=t; repeat i:=i-1; j:=j+1; t:=t+1; a[i,j]:=t; until (i=1) or (j=k); end; until k=n; repeat k:=k-1; if (k mod 2=1) then begin j:=j+1; t:=t+1; a[i,j]:=t; repeat i:=i-1; j:=j+1; t:=t+1; a[i,j]:=t; until (i=n-k+1); end; if (k mod 2=0) then begin i:=i+1; t:=t+1; a[i,j]:=t; repeat i:=i+1; j:=j-1; t:=t+1; a[i,j]:=t; until (j=n-k+1); end; until k=2; j:=j+1; t:=t+1; a[i,j]:=t; for i:=1 to n do begin for j:=1 to n do write(a[i,j],' '); writeln; end; end; begin init; writed; run; end. |
| Всего записей: 3 | Зарегистр. 12-01-2007 | Отправлено: 23:27 12-01-2007 | Исправлено: RPxRem, 00:59 13-01-2007 |
|