Ultima modifica:
Ciao ragazzi spudorati matto
ho scritto un programma che: converta in parole il mese di una data espresso in numeri.
Per farlo ho utilizzato: le due funzioni data_valida e bisestile, una terza funzione chiamata converti_data la quale, con uno switch, assegna all'array mese_lett il nome del mese e la funzione stampa_data che stampa a video la data con il mese in lettere.
Source:
Funziona fino all'anno 2004 (la risposta è sì...mi scocciavo di mettere i restanti anni)
ho scritto un programma che: converta in parole il mese di una data espresso in numeri.
Per farlo ho utilizzato: le due funzioni data_valida e bisestile, una terza funzione chiamata converti_data la quale, con uno switch, assegna all'array mese_lett il nome del mese e la funzione stampa_data che stampa a video la data con il mese in lettere.
Source:
Codice:
/*
Programma che converte in forma letterale il mese di una data espressa in numeri.( by SioNo
*/
#include <iostream.h>
#include <string.h>
int data_valida(int, int, int); /*controlla se la data è valida (fino al 2004)
0 = data valida
1 = errore nel giorno
2 = errore nel mese
3 = errore nell'anno
*/
int bisestile(int); //controlla se l'anno è bisestile (366 giorni annui)
void converti_data(int); //converte il mese della data in lettere
void stampa_data(int,int,int); //stampa la data convertita (vedere comando su asd)
int max_giorni=0; //numero giorni del mese inserito
char mese_lett[20]; //mese in lettere
int main(){
int giorno,mese,anno,errore;
cout<<"Inserisci il giorno: "; cin>>giorno;
cout<<"Inserisci il mese: "; cin>>mese;
cout<<"Inserisci l'anno ( <= 2004): "; cin>>anno;
errore=data_valida(giorno,mese,anno); //controlla se la data è valida
if (errore==0){
converti_data(mese); //se la data è valida converte il mese
stampa_data(giorno, mese, anno); //stampa la data a video
}
else {
cout<<"\nHai inserito una data non valida, riprova!"<<endl;
switch(errore){ //se la data non è valida comunica il tipo di errore
case 1:
cout<<"ERRORE: Il giorno deve essere compreso tra 1 e "<<max_giorni;
break;
case 2:
cout<<"ERRORE: Il mese deve essere compreso tra 1 e 12";
break;
case 3:
cout<<"ERRORE: L'anno deve essere compreso tra 0 e 2004";
break;
}
}
return 0;
}
int bisestile(int a){
if ( (a%4) == 0) return 1; //se l'anno è bisestile restituisce 1
else return 0; //altrimenti restituisce 0
}
int data_valida(int g, int m, int a){
if (m<1 || m>12) return 2; //se il mese inserito non è valido restituisce 2
else {
if (a<0 || a>2004) return 3; //se l'anno inserito non è valido restituisce 3
else {
switch(m){ //assegna a max_giorni il numero massimo di giorni del mese inserito
case 1: case 3: case 5: case 7: case 8: case 10: case 12: max_giorni=31; break;
case 2: if (bisestile(a)) max_giorni=29; //se l'anno è bisestile assegna a max_giorni 29
else max_giorni=28; //altrimenti gli assegna 28
break;
default: max_giorni=30;
}
if (g<1 || g>max_giorni) return 1; //se il giorno inserito non è valido restituisce 1
else return 0; //altrimenti restituisce 0
}
}
}
void converti_data(int m){
switch(m){
case 1: strcpy(mese_lett, "Gennaio"); break;
case 2: strcpy(mese_lett, "Febbraio"); break;
case 3: strcpy(mese_lett, "Marzo"); break;
case 4: strcpy(mese_lett, "Aprile"); break;
case 5: strcpy(mese_lett, "Maggio"); break;
case 6: strcpy(mese_lett, "Giugno"); break;
case 7: strcpy(mese_lett, "Luglio"); break;
case 8: strcpy(mese_lett, "Agosto"); break;
case 9: strcpy(mese_lett, "Settembre"); break;
case 10: strcpy(mese_lett, "Ottobre"); break;
case 11: strcpy(mese_lett, "Novembre"); break;
case 12: strcpy(mese_lett, "Dicembre"); break;
}
}
void stampa_data(int g, int m, int a){
cout<<"\nLa data inserita è:\n\n";
cout<<g<<" "<<mese_lett<<" "<<a;
}