edutecnica

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.