Domanda [CREAZIONE IN C++] Source Programma che converta in parole il numero del mese dato.

Stato
Discussione chiusa ad ulteriori risposte.

Capodoglio

Utente Emerald
31 Marzo 2009
1,667
51
187
589
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:

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;
}
Funziona fino all'anno 2004 :asd:(la risposta è sì...mi scocciavo di mettere i restanti anni)
 
Ciao SioNo, potresti fare una cosa del genere per converire i mesi in numeri guarda
Codice:
#include<iostream>
#include<string>
using std::cin; using std::endl; using std::cout; using std::string;
int main()
{
    int scelta;
    string mesi[] = {"gennaio","febbraio","marzo","aprile","maggio","giugno","luglio","agosto","settembre","ottobre","novembre","dicembre"};
    int giorni[] = { 30, 30,30, 30, 28, 31, 31, 31, 31, 31, 31,31};
    cout << " i vari mesi ordinati ai giorni " << endl;
    for(int i = 0; i < 12; i++) cout << i << "(" + mesi[i] << endl;
    cout << " premi un numero per sapere i mesi dei vari giorni " << endl;
    cin >> scelta;
    cout << mesi[scelta] << "=" <<  giorni[scelta] << " giorni " << endl;
}
dimmi se ti rende soddisfatto, ciao alla prossima! :sisi:

--- Aggiornamento Post ---

ma scusa! non potevi modificare quell'if in mese < 2010?
 
Stato
Discussione chiusa ad ulteriori risposte.