program DeterminaStagione;
type
Giorni = 1..31;
Mesi = 1..12;
Stagioni = (Primavera, Estate, Autunno, Inverno);
var
giorno : Giorni;
mese : Mesi;
function InStagione (g: Giorni; m: Mesi) : Stagioni;
function PrecedeData (g1: Giorni; m1: Mesi;
g2: Giorni; m2: Mesi) : boolean;
begin
PrecedeData := (m1 < m2) or ((m1 = m2) and (g1 < g2))
end;
begin
if PrecedeData(g,m,21,3) or PrecedeData(20,12,g,m) then
InStagione := Inverno
else if PrecedeData(g,m,21,6) then
InStagione := Primavera
else if PrecedeData(g,m,21,9) then
InStagione := Estate
else
InStagione := Autunno
end;
procedure StampaStagione (s: Stagioni);
begin
case s of
Primavera : write('primavera');
Estate : write('estate');
Autunno : write('autunno');
Inverno : write('inverno');
end
end;
begin
write('Data (giorno, mese) ? ');
readln(giorno, mese);
write('E'' in ');
StampaStagione(InStagione(giorno, mese));
writeln
end.