17/01/13 17:00
nerd
Salve a tutti. A scuola ho dovuto eseguire un esercizio che chiedeva di disegnare un quadrato di lato 'n' di asterischi e di cancellarlo diagonalmente partendo dall'angolo in basso a destra e via via fino all angolo in alto a sinistra. Il programma che ho scritto mi sembra teoricamente corretto ma non mi funziona: il programma viene compilato ma entra in loop dopo 3 ciclate di for...
ecco il codice :
GRAZIE MILLE IN ANTICIPO!
ecco il codice :
program quadrato_a_scomparsa; uses crt; const max=100; var n,x,y,tmpx,tmpy,tmp,i:integer; sqr: array [1..max,1..max] of char; procedure refresh; //procedura che cancellla lo schermo e riscrive la matrice begin; readkey; clrscr; for x:=1 to n do begin writeln; for y:=1 to n do write(sqr[x,y],' '); end; end; procedure gensqr; //genera il quadrato di asterischi ma non stampa (vedi refresh) begin for x:=1 to n do for y:=1 to n do sqr[x,y]:='*'; refresh; end; procedure delhltrg; //CANCELLA IL TRIANGOLO INFERIORE var y1:integer; begin x:=n; for y:=n downto 1 do begin tmp:=n-y; //LA VARIABILE TMP è LA "CHIAVE DI VOLTA" DEL'ALGORITMO y1:=y; for i:=0 to tmp do //GRAZIE AL VALORE 0 E ALLA Y CHE DECRESCE POSSO ELIMINARE VIA VIA GLI ASTERISCHI PARTENDO DALL ALTO AL BASSO begin y1:=y1+i; x:=x-i; sqr[x,y1]:=' '; y1:=y; x:=n; refresh; end; end; end; procedure delhhtrg; var tt,xx:integer; begin y:=n; tt:=n-1; for x:=tt downto 1 do begin tmpx:=x; tmpy:=y; tmp:=tt-x; for i:=0 to tmp do //l'algoritmo è simile a quello del triangolo inferiore tranne che per la x che decresce e la y che cresce progressivamente begin y:=y+1; xx:=x-i; sqr[xx,y]:=' '; xx:=tmpx; y:=tmpy; refresh; end; end; end; begin readln(n); gensqr; delhltrg; delhhtrg; readkey; end. //il programma si compila ma entra in loop alla diagonale 3 del triangolo inferiore
GRAZIE MILLE IN ANTICIPO!
aaa