Forum - Pascal
- non trovo una soluzione!
boostareo (Normal User)
Newbie
Messaggi: 14
Iscritto: 13/12/2012
consegna: costruisci un quadrato di asterischi di lato scelto dall'utente. Una volta costruito, cancella gli asterischi 1 a 1, partendo dall'ultimo in angolo e arrivando in al primo (in maniere obliqua come nell'esempio).
*** *** *** *** ** ** ** * *
*** *** ** ** ** * * *
*** ** ** * * *
Codice sorgente - presumibilmente Delphi
program project5;
uses crt;
var
n, i, a: integer ;
[ quadrato: array [ 1.. 100, 1.. 100] of char ;
begin
writeln ( 'inserisci la misura del lato del quadrato' ) ;
readln ( n) ;
clrscr;
for i: = 1 to n do
begin
for a: = 1 to n do
begin
quadrato[ i, a] : = '*' ;
write ( quadrato[ i, a] ) ;
end ;
writeln ;
end ;
writeln ( 'ora gli asterischi verranno cancellati 1 a 1' ) ;
delay( 5000) ;
clrscr;
for i: = 1 to n do
begin
for a: = 1 to n do
begin
quadrato[ i, a] : = '*' ;
write ( quadrato[ i, a] ) ;
end ;
writeln ;
end ;
gotoxy( 1, 1) ;
for i: = 1 to n do
begin
for a: = 1 to n do
begin
quadrato[ i, a] : = ' ' ;
write ( quadrato[ i, a] ) ;
delay( 100) ;
end ;
writeln ;
end ;
readln ;
end .
questo è il mio tentativo, ma la cancellazione è sbagliata e non riesco a trovare un modo per fare la cancellazione giusta.
grazie in anticipo grazie
Ultima modifica effettuata da boostareo il 13/01/2013 alle 15:32
boostareo (Normal User)
Newbie
Messaggi: 14
Iscritto: 13/12/2012
non è obbligatorio usare gli array bidimensionali
Poggi Marco (Member )
Guru
Messaggi: 969
Iscritto: 05/01/2010
boostareo (Normal User)
Newbie
Messaggi: 14
Iscritto: 13/12/2012
ciao,
con il downto non ha funzionato ma dopo ore e ore di lavoro ho trovato la soluzione!
non so se ti possa interessare ma la posto:
Codice sorgente - presumibilmente Delphi
program project5;
uses crt;
var
n, i, a, y, k: longint ;
begin
textcolor( lightred) ;
writeln ( 'ATTENZIONE: Ora creeremo un quadrato di asterischi e poi lo smonteremo in un modo particolare' ) ;
writeln ;
textcolor( lightblue) ;
write ( 'Inserisci la misura del lato del quadrato: ' ) ;
textcolor( white) ;
read ( n) ;
clrscr;
textcolor( lightred) ;
gotoxy( n* 2+ 8, 2) ;
write ( 'Costruzione' ) ;
gotoxy( 1, 1) ;
textcolor( lightgreen) ;
for i: = 1 to n do
begin
for a: = 1 to n do
begin
write ( '* ' ) ;
delay( 150) ;
end ;
writeln ;
end ;
writeln ;
textcolor( yellow) ;
writeln ( '--------------------------------------------------------' ) ;
writeln ;
textcolor( lightred) ;
writeln ( 'Ora gli asterischi verranno cancellati dall' 'alto verso il basso per obliquo' ) ;
writeln ;
writeln ( 'premi un tasto per continuare' ) ;
readkey;
clrscr;
textcolor( lightred) ;
gotoxy( n* 2+ 8, 2) ;
write ( 'Distruzione' ) ;
gotoxy( 1, 1) ;
textcolor( lightgreen) ;
for i: = 1 to n do
begin
for a: = 1 to n do
begin
write ( '* ' ) ;
end ;
writeln ;
end ;
k: = 0 ;
gotoxy( 1, 1) ;
writeln ( ' ' ) ;
for i: = 1 to n- 1 do
begin
y: = i+ 1 ;
for a: = 1 to y do
begin
gotoxy( a+ k, y) ;
write ( ' ' ) ;
y: = y- 1 ;
k: = k+ 1 ;
delay( 250) ;
end ;
k: = 0 ;
end ;
i: = 3 ;
repeat
a: = i;
y: = n;
repeat
gotoxy( a, y) ;
write ( ' ' ) ;
y: = y- 1 ;
a: = a+ 2 ;
delay( 250) ;
until a>( n* 2) - 1 ;
i: = i+ 2
until i>n* 2 ;
clrscr;
writeln ;
writeln ( '---------------------------------------------------------' ) ;
writeln ;
textcolor( lightgreen) ;
gotoxy( 15, 4) ;
writeln ( 'Cancellazione avvenuta!' ) ;
writeln ;
writeln ;
gotoxy( 15, 7) ;
textcolor( yellow) ;
writeln ( 'Nicola Gastaldello 3^ASA' ) ;
readkey;
end .
boostareo (Normal User)
Newbie
Messaggi: 14
Iscritto: 13/12/2012
scusa ancora il disturbo,
ma ora che è praticamente finito ha un problema:
quando lo compilo continua a ripetersi e non mi legge la 'scelta' come posso fare facendo in modo che si fermi?
ecco il codice:
Codice sorgente - presumibilmente Delphi
program project1;
uses crt;
var
n, i, a, y, k: longint ;
scelta: char ;
begin
repeat
textcolor( lightred) ;
writeln ( 'ATTENZIONE: Ora creeremo un quadrato di asterischi e poi lo smonteremo in un modo particolare' ) ;
writeln ;
textcolor( yellow) ;
write ( 'Inserisci la misura del lato del quadrato (tra 0 e 25) : ' ) ;
textcolor( white) ;
read ( n) ;
while ( n<0) or ( n>25) do
begin
clrscr;
textcolor( yellow) ;
write ( 'SAREBBE OPPORTUNO UN NUMERO TRA 0 E 25, PER AVERE TUTTO IL QUADRATO ALL' 'INTERNO DELLO SCHERMO: ' ) ;
textcolor( white) ;
readln ( n) ;
end ;
clrscr;
textcolor( lightred) ;
gotoxy( n* 2+ 8, 2) ;
write ( 'Costruzione' ) ;
gotoxy( 1, 1) ;
textcolor( lightgreen) ;
cursoroff;
for i: = 1 to n do
begin
for a: = 1 to n do
begin
write ( '* ' ) ;
delay( 100) ;
end ;
writeln ;
end ;
writeln ;
textcolor( yellow) ;
writeln ( '-----------------------------------------------------------------------' ) ;
writeln ;
textcolor( lightred) ;
writeln ( 'Ora gli asterischi verranno cancellati dall' 'alto verso il basso per obliquo' ) ;
writeln ;
writeln ( 'Premi un tasto per continuare' ) ;
readkey;
clrscr;
textcolor( lightred) ;
gotoxy( n* 2+ 8, 2) ;
write ( 'Distruzione' ) ;
gotoxy( 1, 1) ;
textcolor( lightgreen) ;
for i: = 1 to n do
begin
for a: = 1 to n do
begin
write ( '* ' ) ;
end ;
writeln ;
end ;
k: = 0 ;
gotoxy( 1, 1) ;
writeln ( ' ' ) ;
for i: = 1 to n- 1 do
begin
y: = i+ 1 ;
for a: = 1 to y do
begin
gotoxy( a+ k, y) ;
write ( ' ' ) ;
k: = K+ 1 ;
y: = y- 1 ;
delay( 250) ;
end ;
k: = 0 ;
end ;
i: = 3 ;
repeat
a: = i;
y: = n;
repeat
gotoxy( a, y) ;
write ( ' ' ) ;
y: = y- 1 ;
a: = a+ 2 ;
delay( 250) ;
until a>( n* 2) - 1 ;
i: = i+ 2
until i>n* 2 ;
clrscr;
textcolor( lightred) ;
write ( 'Vuoi uscire dal programma? S/N: ' ) ;
textcolor( white) ;
readln ( scelta) ;
readkey;
until ( scelta= 'S' ) or ( scelta= 's' ) ;
clrscr;
textcolor( lightgreen) ;
writeln ;
writeln ( '-----------------------------------------------------------------------' ) ;
writeln ;
textcolor( lightgreen) ;
gotoxy( 20, 4) ;
writeln ( 'Cancellazione avvenuta!' ) ;
writeln ;
writeln ;
gotoxy( 20, 7) ;
textcolor( yellow) ;
writeln ( 'Nicola Gastaldello 3^ASA' ) ;
writeln ;
writeln ;
textcolor( lightgreen) ;
writeln ( '-----------------------------------------------------------------------' ) ;
readkey;
end .
Poggi Marco (Member )
Guru
Messaggi: 969
Iscritto: 05/01/2010
Quando dai il comando readkey, dopo la costruzione del quadrato - alla riga 47 -, aggiungi il comando readln per ripulire il buffer da tastiera.
boostareo (Normal User)
Newbie
Messaggi: 14
Iscritto: 13/12/2012
grazie mille;