[ kajla @ 07.06.2002. 21:51 ] @
Ima li neko ideju kako da napišem sledeći program u Pascalu: Data je kvadratna matrica (2n+1)x(2n+1) napisati program za štampanje matrice spiralno od centralnog člana. poz. |
[ kajla @ 07.06.2002. 21:51 ] @
[ srki @ 07.06.2002. 23:48 ] @
Citat: kajla: Ima li neko ideju kako da napišem sledeći program u Pascalu: Data je kvadratna matrica (2n+1)x(2n+1) napisati program za štampanje matrice spiralno od centralnog člana. poz. Koristi rekurziju koja ce da izgleda otprilike ovako: imaces jos jednu globalnu matricu (2n+1)x(2n+1) tipa boolean i sve clanove postavis na false. posle pozoves rekurziju koja ce imati u zaglavlju (i,j:integer; smer:integer); Na pocetku procedure postavis u globalnoj matrici vrednost clana na true. Smer ti je jedna od cetiri cifre (1, 2, 3 ili 4). Na pocetku je smer 1 i oznacava desno. 2 je dole, 3 je levo i 4 je desno. sad ako mozes da ides od smera 1 pozoves rekurziju od sledeceg clana pa posle istampas trenutni clan. Ako ne moze smer 1 onda ides 2 pa 3 pa 4. Znaci ako ti je matrica 5x5 a trenutno pozvana procedura od npr. (2,4,1), videces da ne mozes vise desno pa ces morati dole i pozoves ponovo tu istu proceduru a na kraju odstampas taj clan. Mozes da se kreces u nekom smeru samo ako je taj sledeci clan u onoj drugoj globalnoj matrici false. [ Makojdis @ 09.06.2002. 17:31 ] @
Evo ti kod koji pravi spiralnu matricu n*n ali od prvog clana
Code: Program spiralna_matrica; var a:array[1..10,1..10]of integer; i,j,k,l,p,s,n,b:integer; begin write('Unesite broj redova: '); readln(n); for p:=1 to n div 2 do begin {*** Prvi red ***} for i:=p to n-p+1 do begin b:=b+1; a[p,i]:=b; end; {*** Drugi red ***} for j:=p+1 to n-p+1 do begin b:=b+1; a[j,n-p+1]:=b; end; {*** Treci red ***} for k:=n-p downto p do begin b:=b+1; a[n-p+1,k]:=b; end; {*** Cetvrti red ***} for l:=n-p downto p+1 do begin b:=b+1; a[l,p]:=b; end; end; {************Stampanje*********} for i:=1 to n do begin writeln; begin for j:=1 to n do write(' ',a[i,j]); end; end; readln; end. ovde samo treba da ispravis da ti ne upisuje brojeve od pocetka vec ides od kraja pa sve do 0 for i:=n*n down to 0 Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|