{ File: figure2.pas }

{ Scopo: esempio di uso di procedure con variabili locali ma senza 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 solamente la forma della figura da stampare (quadrato
  o triangolo).
}

var
  ch : char;

  procedure StampaQuadrato;
  const
    LATO = 9;         { COSTANTE LOCALE }
  var
    i, j : integer;   { i e j sono VARIABILI LOCALI }
  begin
    for i := 1 to LATO do              { tiene conto delle righe del quadrato:
                                         1 iterazione <-> 1 riga }
    begin
      for j := 1 to LATO do            { stampa gli asterischi di ogni riga }
        write('*');
      writeln                          { va a capo: la riga e' finita }
    end { for esterno }
  end; { StampaQuadrato }
  
  
  procedure StampaTriangolo;
  const
    ALTEZZA = 9;      { COSTANTE LOCALE }
  var
    i, j : integer;   { i e j sono VARIABILI LOCALI }
  begin
    for i := 1 to ALTEZZA do           { tiene conto delle righe del triangolo:
                                         1 iterazione <-> 1 riga }
    begin
      for j := 1 to ALTEZZA - 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 }
  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 }
    case ch of
      'Q', 'q' : StampaQuadrato;
      'T', 't' : StampaTriangolo;
      'F', 'f' : StampaSaluto;
    end { case }
  until (ch = 'f') or (ch = 'F')
end. { StampaFigure }