Anno bisestile
Altro semplice programma scritto in C, stabilisce se un dato anno preso in input e' bisestile oppure no.
Prende valori per $anni>0$. Fatemi sapere che ne pensate
Prende valori per $anni>0$. Fatemi sapere che ne pensate
/* Decisione anno bisestile */
main()
{
int anno;
printf("Tale programma stabilisce se un dato anno preso in imput \n e' o meno bisestile \n, vengono valutati gli anni dopo di cristo \n, premi 0 per uscire dal programma\n");
do {
printf("inserisci anno\n");
scanf("%d",&anno);
if ((anno%100)==0) {
if ((anno % 400)==0)printf("l'anno e' bisestile\n"); else printf("l'anno non e' bisestile\n"); }
else {
if ((anno%4)==0) printf("l'anno e' bisestile\n"); else printf("l'anno non e' bisestile\n");}
} while (anno !=0) ;}
Risposte
Fai economia:
int nb;
//...
nb=(anno%4);
//...
printf("\nL'anno ");
if (nb) printf("non ");
printf("e' bisestile.");
@Rggb: Il problema è che anche $1900$ e $1800$ non sono bisestili, pur essendo divisibili per $4$.
La regola è la seguente: Un anno è bisestile se il suo numero è divisibile per $4$, con l'eccezione degli anni secolari (quelli divisibili per $100$) che non sono divisibili per $400$.
@Kashaman: direi che va bene, ma non ottimizza molto. Infatti tu fai come primo controllo il modulo $100$.
Io farei come primo controllo il modulo $4$:
che volendo si può compattare in
La regola è la seguente: Un anno è bisestile se il suo numero è divisibile per $4$, con l'eccezione degli anni secolari (quelli divisibili per $100$) che non sono divisibili per $400$.
@Kashaman: direi che va bene, ma non ottimizza molto. Infatti tu fai come primo controllo il modulo $100$.
Io farei come primo controllo il modulo $4$:
...
if ((anno%4)!=0)
printf(" non ");
else
if ( (anno%100)==0 && (anno%400)!=0) )
printf(" non ");
...
che volendo si può compattare in
...
if ( ((anno%4)!=0) || ((anno%100)==0 && (anno%400)!=0 ) )
printf(" non ");
...
"Gi8":
@Rggb: Il problema è che anche $1900$ e $1800$ non sono bisestili, pur essendo divisibili per $4$.
Il mio suggerimento non è di alterare la logica - che va bene - ma di fare economia:
- assegnare ad una variabile il risultato del controllo bisestile si/no;
- stampare solo alla fine, e stampare "non" solo se è bisestile.
[ Vedasi anche i commenti //... ]
Pardon, non avevo proprio capito. Chiedo scusa
Grazie mille! seguirò i consigli di entrambi!