Oppure

Loading
13/01/13 14:25
boostareo
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).

*** *** *** *** ** ** ** * *
*** *** ** ** ** * * *
*** ** ** * * *


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.
:d

grazie in anticipo grazie :k:
Ultima modifica effettuata da boostareo 13/01/13 14:32
aaa
13/01/13 17:12
boostareo
non è obbligatorio usare gli array bidimensionali
aaa
13/01/13 17:49
Poggi Marco
Ciao!!
Una soluzione al problema, è quella di utilizzare il costrutto for i := n downto 1 do invece del for i := 1 to n do

freepascal.org/docs-html/ref/…
aaa
16/01/13 20:07
boostareo
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:

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.    
aaa
17/01/13 15:23
boostareo
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:

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. 
aaa
17/01/13 18:20
Poggi Marco
Quando dai il comando readkey, dopo la costruzione del quadrato - alla riga 47 -, aggiungi il comando readln per ripulire il buffer da tastiera.
aaa
17/01/13 21:45
boostareo
grazie mille;
:)
aaa