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!