Per esercitarmi con il pascal ho scritto un programmino che praticamente disegna una cornice.

Partendo da sinistra, va a destra, scende, va a destra, sale....
e ripete questo fino a che viene riempito il quadrato

Incollo la procedura

codice:
PROCEDURE sfondo;
VAR y,x,a,b,c,d,e,r,h,ic,c1,c2,at:integer;
BEGIN
     randomize;
     clrscr;
     a:=1;
     b:=60;
     c:=22;
     d:=1;
     e:=1;
     x:=0;
     y:=1;
     h:=0;
     ic:=22;
     textcolor(7);
WHILE h<>1 DO
BEGIN
     if a=1 then
     begin
          textcolor(1);
          x:=x+1;
          if x=b then
          begin
                gotoxy(x,y);
                write(#219);
             a:=2;
             e:=e+1;
          end;
     end;
     if a=2 then
     begin
          textcolor(11);
          y:=y+1;
          if y=c then
          begin
                gotoxy(x,y);
                write(#219);
             a:=3;
             b:=b-1;
          end;
     end;
     if a=3 then
     begin
          textcolor(1);
          x:=x-1;
          if x=d then
          begin
          if (d*2+2)>ic then
             h:=1;
                textcolor(11);
                gotoxy(x,y);
                write(#219);
             a:=4;
             c:=c-1;
          end;
     end;
     if (a=4) AND (h=0) then
     begin
          textcolor(11);
          y:=y-1;
          if (h<>1) AND (y=e) then
          begin
                gotoxy(x,y);
                write(#219);
             a:=1;
             d:=d+1;
          end;
     end;
     if h<>1 then
     begin
                gotoxy(x,y);
                write(#219);
                delay(5);
     end;
END;

END;
Lo scopo di questa discussione e' quello di capire come fare questo programma in modo diverso (e ancor meglio, migliore).

Provo a illustrare il funzionamento:
la variabile "a" indica la direzione della "pittura".
1 indica che va a destra (ossia incremento di x)
2 indica che va in giu' (ossia incremento di y)
3 indica che va a sinistra (ossia decremento di x)
4 indica che va a destra (ossia decremento di y)


Moto:
111111111111111111
411111111111111122
4422
4422
4422
443333333333333332
333333333333333332



Se non avete capito niente di quanto sopra:
1- Eseguite il codice (scritto come procedura, da richiamare)
2- Cercate un modo migliore per farlo

Mi pare strano che per fare una cosa così apparentemente semplice, ci sia bisogno di così tanti passi, e pure sequenziali.

Ciao