{ File: figure5.pas } { Scopo: esempio di uso di procedure con variabili locali e con parametri } program StampaFigure; { Permette all'utente di stampare su schermo figure geometriche. L'utente interagisce con il programma tramite una semplice interfaccia. E' possibile scegliere: - la forma della figura (quadrato o triangolo) - la dimensione della figura - il tipo di carattere con cui riempire la figura - di quanto spostare la figura a destra } var { VARIABILI GLOBALI } ch : char; { carattere che determina la figura o la fine } dimensione : integer; { dimensione della figura } quale_carattere : char; { carattere da usare per la stampa della figura } spostamento : integer; { spostamento a destra della figura } fine : boolean; { indica se terminare il ciclo } procedure StampaQuadrato (lato : integer; { lato del quadrato } spost : integer; { spostamento a destra } car : char); { carattere si stampa } { PARAMETRI FORMALI } var i, j : integer; { VARIABILI LOCALI } begin for i := 1 to lato do { tiene conto delle righe del quadrato: 1 iterazione <-> 1 riga } begin for j := 1 to spost do { stampa gli spazi bianchi iniziali necessari in ogni riga } write(' '); for j := 1 to lato do { stampa gli asterischi di ogni riga } write(car); writeln { va a capo: la riga e' finita } end { for esterno } end; { StampaQuadrato } procedure StampaTriangolo (altezza : integer; { altezza del triangolo } spost : integer; { spostamento a destra } car : char); { carattere si stampa } { PARAMETRI FORMALI } var i, j : integer; { VARIABILI LOCALI } begin writeln('UN TRIANGOLO'); for i := 1 to altezza do { tiene conto delle righe del triangolo: 1 iterazione <-> 1 riga } begin for j := 1 to altezza-i+spost do { stampa gli spazi bianchi iniziali necessari in ogni riga } write(' '); for j := 1 to i*2-1 do { stampa la sequenza di asterischi } write(car); writeln { va a capo: la riga e' finita } end { for esterno } end; { StampaTriangolo } procedure StampaSaluto; begin writeln('CIAO :-)') end; { StampaSaluto } begin { StampaFigure } fine := FALSE; repeat writeln; writeln('*** IMMETTI UN CARATTERE A SCELTA FRA I SEGUENTI ***'); writeln('*** Q: stampa un quadrato'); writeln('*** T: stampa un triangolo'); writeln('*** F: per terminare il programma'); writeln; readln(ch); { ATTENZIONE: read NON va bene } fine := (ch = 'f') or (ch = 'F'); if not fine then begin write('Di che dimensione? '); readln(dimensione); write('Di quanti caratteri spostato a destra? '); readln(spostamento); write('Con quale carattere va riempita la figura? '); readln(quale_carattere); case ch of 'Q', 'q' : StampaQuadrato(dimensione, spostamento, quale_carattere); 'T', 't' : StampaTriangolo(dimensione, spostamento, quale_carattere); end { case } end { ramo then } else StampaSaluto until fine end. { StampaFigure }