Esercizio 10
Scrivere un algoritmo che acquisisca in ingresso tre interi che rappresentano ordinatamente il giorno, il mese e l’anno e determinare se essi corrispondono effettivamente ad una data.
Ci sono tre variabili di ingresso (intere) gg per i giorni, mm per i mesi ed aa per gli anni.
#include <iostream>
using namespace std;
int main(){
int gg, mm, aa;
bool valida;
cout<<"giorno:";cin>>gg;
cout<<"mese:";cin>>mm;
cout<<"anno:";cin>>aa;
valida = true;
//controllo sul giorno da 1 a 31
if(gg<1 || gg>31 )valida = false;
//controllo sul mese da 1 a 12
if(mm<1 || mm>12)valida = false;
//controllo sul giorno del mese di febbraio
bisestile
if(aa%4==0 && mm==2 && gg>28)valida = false;
//controllo sui giorni dei mesi da 30 giorni
if((mm==4 || mm==6 || mm==9 || mm==11) && gg>30)valida=false;
//validazione
if(valida)cout<<"DATA VALIDA";
else cout<<"DATA NON VALIDA";
return 0;
}
E' importante inserire l'anno con 4 cifre, poi ricordiamo che un anno è bisestile quando è un multiplo di 4.
Si notano tutta una serie di controlli successivi caratterizzati da istruzioni
if prive del ramo else.
Si ricorda infatti che la clausola else è opzionale
e qundo omessa il programma prosegue nella riga successiva.
L'istruzione if(valida) è equivalente all'istruzione
if(valida==true) o anche all'istruzione
if(valida==1) dato che una per una variabile booleana
false corrisponde a 0 e true
corrisponde a qualsiasi valore ≠0.