{ File: figure3.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 } var ch : char; { carattere che determina il tipo di figura o la fine } dimensione : integer; { dimensione della figura } fine : boolean; { indica se terminare il ciclo } procedure StampaQuadrato (dim: integer); { dim e' un PARAMETRO FORMALE } var i, j : integer; { i e j sono VARIABILI LOCALI } begin for i := 1 to dim do { tiene conto delle righe del quadrato: 1 iterazione <-> 1 riga } begin for j := 1 to dim do { stampa gli asterischi di ogni riga } write('*'); writeln { va a capo: la riga e' finita } end { for esterno } end; { StampaQuadrato } procedure StampaTriangolo (dim: integer); { dim e' un PARAMETRO FORMALE } var i, j : integer; { i e j sono VARIABILI LOCALI } begin for i := 1 to dim do { tiene conto delle righe del triangolo: 1 iterazione <-> 1 riga } begin for j := 1 to dim - i 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('*'); 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); case ch of 'Q','q' : StampaQuadrato(dimensione); 'T','t' : StampaTriangolo(dimensione); end { case } end { ramo then } else StampaSaluto until fine end. { StampaFigure }