Newsgroup: it.comp.lang.c++
Titolo: Trasformazione data

Salve ragazzi, ho un problema, da un input che mi specifica il giorno
dell'anno espresso in numero, voglio in output la data espressa in lettere.
Faccio un esempio per farmi capire meglio, se il numero inserito è 34,
l'output deve essere 3 febbraio, ovviamente l'input dovrà essere compreso
tra 1 e 365, senza considerare l'anno bisestile. Ho fatto questo programma,
che però controlla tutti i casi, c'è forse un modo migliore per velocizzare
il calcolo? Grazie a chi vorrà aiutarmi, ecco qui il codice
int main()
{
        int n;
        int data;
        cout<<"Inserire giorno dell'anno espresso in numero"<<endl;
        cin>>n;
        if (n<=31)
                cout<<"Gennaio " << n <<endl;
        if ((n>31) and (n<=59))
        {
                data=n-31;
                cout<<"Febbraio "<< data <<endl;
        }
        if ((n>59) and (n<=90))
        {
                data=n-59;
                cout<<"Marzo "<< data <<endl;
        }
        if ((n>90) and (n<=120))
        {
                data=n-90;
                cout<<"Aprile "<< data <<endl;
        }
        if ((n>120) and (n<=151))
        {
                data=n-120;
                cout<<"Maggio "<< data <<endl;
        }
        if ((n>151) and (n<=181))
        {
                data=n-151;
                cout<<"Giugno "<< data <<endl;
        }
        if ((n>181) and (n<=212))
        {
                data=n-181;
                cout<<"Luglio "<< data <<endl;
        }
        if ((n>212) and (n<=243))
        {
                data=n-212;
                cout<<"Agosto "<< data <<endl;
        }
        if ((n>243) and (n<=273))
        {
                data=n-243;
                cout<<"Settembre "<< data <<endl;
        }
        if ((n>273) and (n<=304))
        {
                data=n-273;
                cout<<"Ottobre "<< data <<endl;
        }
        if ((n>304) and (n<=334))
        {
                data=n-304;
                cout<<"Novembre "<< data <<endl;
        }
        if ((n>334) and (n<=365))
        {
                data=n-334;
                cout<<"Dicembre "<< data <<endl;
        }
return 0;
}
-- 
ICQ # 84624356
MSN 
lello...@katamail.com
Yahoo ilpuntatore

 il calcolo? Grazie a chi vorrà aiutarmi, ecco qui il codice
std::string calcolaData(int days)
{
	using namespace std;
	if (days > 365)	{
		return "Invalid";
	}
	int months[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
	const char * names[] = {"Gennaio", "Febbraio", ... };
	int month_days = months[0], i = 0;
	while (days > month_days)	{
		++i;
		month_days += months[i];
	}
	return names[i];
}
-- 
si prepara direttamente nel bicchiere basso detto "tumbler basso". Tre o 
quattro cubetti di ghiaccio, aggiungere il gin, il martini rosso, il 
bitter campari e mescolare. Guarnire con una fetta d'arancia.

 }
Geniale... 

 Geniale...
Pensavo alla seguente soluzione nel caso in cui si volesse avere anche il
giorno:
#include <iostream>
#include <string>
void Data (int n, bool bisestile = 0) {
 std::string Mesi[] = {"Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio",
"Giugno",
           "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre",
"Dicembre"};
 int i = 1, Giorni[] = {31, bisestile ? 29 : 28, 31, 30, 31, 30, 31, 31, 30,
31, 30, 31},
      g = Giorni[0];
 while (n > g + Giorni[i]) {
  g += Giorni[i];
  i++;
 };
 std::cout << (n - g > 0 ? n - g : n) << " " << (n - g > 0 ? Mesi[i] :
Mesi[i - 1]) << std::endl;
};
int main() {
 for (int i = 1; i <= 365; i++)
  Data (i);
 return 0;
}
Ciao