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.