program StampaFigure;
var
ch : char;
dimensione : integer;
quale_carattere : char;
spostamento : integer;
fine : boolean;
procedure StampaRiga (spazi, lung: integer; ch: char);
var
i : integer;
begin
for i := 1 to spazi do
write(' ');
for i := 1 to lung do
write(ch);
writeln
end;
procedure StampaQuadrato (lato : integer;
spost : integer;
car : char);
var
i : integer;
begin
for i := 1 to lato do
StampaRiga(spost, lato, car)
end;
procedure StampaTriangolo (altezza : integer;
spost : integer;
car : char);
var
i : integer;
begin
for i := 1 to altezza do
StampaRiga(spost+altezza-i, 2*i-1, car)
end;
procedure StampaCerchio (raggio : integer;
spost : integer;
car : char);
var
mezza_amp : integer;
i : integer;
function SemiCerchio (r, x : integer): integer;
begin
SemiCerchio := round(sqrt(sqr(r) - sqr(x)))
end;
begin
for i := raggio downto 0 do
begin
mezza_amp := SemiCerchio(raggio, i);
StampaRiga(spost + raggio - mezza_amp, 2 * mezza_amp, car)
end;
for i := 1 to raggio do
begin
mezza_amp := SemiCerchio(raggio, i);
StampaRiga(spost + raggio - mezza_amp, 2 * mezza_amp, car)
end;
end;
procedure StampaSaluto;
begin
writeln('CIAO :-)')
end;
begin
fine := FALSE;
repeat
writeln;
writeln('*** IMMETTI UN CARATTERE A SCELTA FRA I SEGUENTI ***');
writeln('***** Q: stampa un quadrato');
writeln('***** T: stampa un triangolo');
writeln('***** C: stampa un cerchio');
writeln('***** F: per terminare il programma');
writeln;
readln(ch);
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);
'C', 'c' : StampaCerchio(dimensione, spostamento, quale_carattere);
end
end
else
StampaSaluto
until fine
end.