Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Pascal - non trovo una soluzione!
Forum - Pascal - non trovo una soluzione!

Avatar
boostareo (Normal User)
Newbie


Messaggi: 14
Iscritto: 13/12/2012

Segnala al moderatore
Postato alle 15:25
Domenica, 13/01/2013
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

  1. program project5;
  2. uses crt;
  3. var
  4.   n,i,a:integer;
  5.   [quadrato:array [1..100,1..100] of char;
  6. begin
  7.   writeln('inserisci la misura del lato del quadrato');
  8.   readln(n);
  9.   clrscr;
  10.   for i:=1 to n do
  11.     begin
  12.       for a:=1 to n do
  13.         begin
  14.           quadrato[i,a]:='*';
  15.           write(quadrato[i,a]);
  16.         end;
  17.       writeln;
  18.     end;
  19.   writeln('ora gli asterischi verranno cancellati 1 a 1');
  20.   delay(5000);
  21.   clrscr;
  22.   for i:=1 to n do
  23.     begin
  24.       for a:=1 to n do
  25.         begin
  26.           quadrato[i,a]:='*';
  27.           write(quadrato[i,a]);
  28.         end;
  29.       writeln;
  30.     end;
  31.   gotoxy(1,1);
  32.   for i:=1 to n do
  33.     begin
  34.       for a:=1 to n do
  35.         begin
  36.           quadrato[i,a]:=' ';
  37.           write(quadrato[i,a]);
  38.           delay(100);
  39.         end;
  40.       writeln;
  41.    end;
  42.   readln;
  43. 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 il 13/01/2013 alle 15:32
PM Quote
Avatar
boostareo (Normal User)
Newbie


Messaggi: 14
Iscritto: 13/12/2012

Segnala al moderatore
Postato alle 18:12
Domenica, 13/01/2013
non è obbligatorio usare gli array bidimensionali

PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 18:49
Domenica, 13/01/2013
Ciao!!
Una soluzione al problema, è quella di utilizzare il costrutto for i := n downto 1 do invece del for i := 1 to n do

http://www.freepascal.org/docs-html/ref/refsu49.html#x141- ...

PM Quote
Avatar
boostareo (Normal User)
Newbie


Messaggi: 14
Iscritto: 13/12/2012

Segnala al moderatore
Postato alle 21:07
Mercoledì, 16/01/2013
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

  1. program project5;
  2. uses crt;
  3. var
  4.   n,i,a,y,k:longint;
  5. begin
  6.   textcolor(lightred);
  7.   writeln('ATTENZIONE: Ora creeremo un quadrato di asterischi e poi lo smonteremo in un    modo particolare');
  8.   writeln;
  9.   textcolor(lightblue);
  10.   write('Inserisci la misura del lato del quadrato:  ');
  11.   textcolor(white);
  12.   read(n);
  13.   clrscr;
  14.   textcolor(lightred);
  15.   gotoxy(n*2+8,2);
  16.   write('Costruzione');
  17.   gotoxy(1,1);
  18.   textcolor(lightgreen);
  19.   for i:=1 to n do
  20.     begin
  21.       for a:=1 to n do
  22.         begin
  23.           write('* ');
  24.           delay(150);
  25.         end;
  26.       writeln;
  27.     end;
  28.   writeln;
  29.   textcolor(yellow);
  30.   writeln('--------------------------------------------------------');
  31.   writeln;
  32.   textcolor(lightred);
  33.   writeln('Ora gli asterischi verranno cancellati dall''alto verso il basso per obliquo');
  34.   writeln;
  35.   writeln('premi un tasto per continuare');
  36.   readkey;
  37.   clrscr;
  38.   textcolor(lightred);
  39.   gotoxy(n*2+8,2);
  40.   write('Distruzione');
  41.   gotoxy(1,1);
  42.   textcolor(lightgreen);
  43.   for i:=1 to n do
  44.     begin
  45.       for a:=1 to n do
  46.         begin
  47.           write('* ');
  48.         end;
  49.       writeln;
  50.     end;
  51.   k:=0;
  52.   gotoxy(1,1);
  53.   writeln('  ');
  54.   for i:=1 to n-1 do
  55.     begin
  56.       y:=i+1;
  57.       for a:=1 to y do
  58.         begin
  59.           gotoxy(a+k,y);
  60.           write('  ');
  61.           y:=y-1;
  62.           k:=k+1;
  63.           delay(250);
  64.         end;
  65.       k:=0;
  66.     end;
  67.   i:=3;
  68.   repeat
  69.     a:=i;
  70.     y:=n;
  71.     repeat
  72.       gotoxy(a,y);
  73.       write('  ');
  74.       y:=y-1;
  75.       a:=a+2;
  76.       delay(250);
  77.     until a>(n*2)-1;
  78.     i:=i+2
  79.   until i>n*2;
  80.   clrscr;
  81.   writeln;
  82.   writeln('---------------------------------------------------------');
  83.   writeln;
  84.   textcolor(lightgreen);
  85.   gotoxy(15,4);
  86.   writeln('Cancellazione avvenuta!');
  87.   writeln;
  88.   writeln;
  89.   gotoxy(15,7);
  90.   textcolor(yellow);
  91.   writeln('Nicola Gastaldello 3^ASA');
  92.   readkey;
  93. end.


PM Quote
Avatar
boostareo (Normal User)
Newbie


Messaggi: 14
Iscritto: 13/12/2012

Segnala al moderatore
Postato alle 16:23
Giovedì, 17/01/2013
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

  1. program project1;
  2. uses crt;
  3. var
  4.   n,i,a,y,k:longint;
  5.   scelta:char;
  6. begin
  7.   repeat
  8.     textcolor(lightred);
  9.     writeln('ATTENZIONE: Ora creeremo un quadrato di asterischi e poi lo smonteremo in un    modo particolare');
  10.     writeln;
  11.     textcolor(yellow);
  12.     write('Inserisci la misura del lato del quadrato (tra 0 e 25) :  ');
  13.     textcolor(white);
  14.     read(n);
  15.     while (n<0) or (n>25) do
  16.       begin
  17.         clrscr;
  18.         textcolor(yellow);
  19.         write('SAREBBE OPPORTUNO UN NUMERO TRA 0 E 25, PER AVERE TUTTO IL QUADRATO ALL''INTERNO DELLO SCHERMO:  ');
  20.         textcolor(white);
  21.         readln(n);
  22.       end;
  23.     clrscr;
  24.     textcolor(lightred);
  25.     gotoxy(n*2+8,2);
  26.     write('Costruzione');
  27.     gotoxy(1,1);
  28.     textcolor(lightgreen);
  29.     cursoroff;
  30.     for i:=1 to n do
  31.       begin
  32.         for a:=1 to n do
  33.           begin
  34.             write('* ');
  35.             delay(100);
  36.           end;
  37.         writeln;
  38.       end;
  39.     writeln;
  40.     textcolor(yellow);
  41.     writeln('-----------------------------------------------------------------------');
  42.     writeln;
  43.     textcolor(lightred);
  44.     writeln('Ora gli asterischi verranno cancellati dall''alto verso il basso per obliquo');
  45.     writeln;
  46.     writeln('Premi un tasto per continuare');
  47.     readkey;
  48.     clrscr;
  49.     textcolor(lightred);
  50.     gotoxy(n*2+8,2);
  51.     write('Distruzione');
  52.     gotoxy(1,1);
  53.     textcolor(lightgreen);
  54.     for i:=1 to n do
  55.       begin
  56.         for a:=1 to n do
  57.           begin
  58.             write('* ');
  59.           end;
  60.         writeln;
  61.       end;
  62.     k:=0;
  63.     gotoxy(1,1);
  64.     writeln('  ');
  65.     for i:=1 to n-1 do
  66.       begin
  67.         y:=i+1;
  68.           for a:=1 to y do
  69.             begin
  70.               gotoxy(a+k,y);
  71.               write('  ');
  72.               k:=K+1;
  73.               y:=y-1;
  74.               delay(250);
  75.             end;
  76.           k:=0;
  77.         end;
  78.     i:=3;
  79.     repeat
  80.       a:=i;
  81.       y:=n;
  82.         repeat
  83.           gotoxy(a,y);
  84.           write('  ');
  85.           y:=y-1;
  86.           a:=a+2;
  87.           delay(250);
  88.         until a>(n*2)-1;
  89.       i:=i+2
  90.     until i>n*2;
  91.     clrscr;
  92.     textcolor(lightred);
  93.     write('Vuoi uscire dal programma? S/N:  ');
  94.     textcolor(white);
  95.     readln(scelta);
  96.     readkey;
  97.   until (scelta='S') or (scelta='s') ;
  98.   clrscr;
  99.   textcolor(lightgreen);
  100.   writeln;
  101.   writeln('-----------------------------------------------------------------------');
  102.   writeln;
  103.   textcolor(lightgreen);
  104.   gotoxy(20,4);
  105.   writeln('Cancellazione avvenuta!');
  106.   writeln;
  107.   writeln;
  108.   gotoxy(20,7);
  109.   textcolor(yellow);
  110.   writeln('Nicola Gastaldello 3^ASA');
  111.   writeln;
  112.   writeln;
  113.   textcolor(lightgreen);
  114.   writeln('-----------------------------------------------------------------------');
  115.   readkey;
  116. end.


PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 19:20
Giovedì, 17/01/2013
Quando dai il comando readkey, dopo la costruzione del quadrato - alla riga 47 -, aggiungi il comando readln per ripulire il buffer da tastiera.

PM Quote
Avatar
boostareo (Normal User)
Newbie


Messaggi: 14
Iscritto: 13/12/2012

Segnala al moderatore
Postato alle 22:45
Giovedì, 17/01/2013
grazie mille;
:)

PM Quote