Oppure

Loading
15/01 11:05
VinkRock
Buongiorno a tutti. Mi sto riavvicinando a questo mondo dopo tanto tempo e sto facendo fatica a rientrare nella logica di programmazione. Se mi potete aiutare...
[code]
    if ((year%4==0 && year%100!=0) || year%400==0)      printf("Il %d è un anno bisestile\n", year);     else      printf("Il %d non è un anno bisestile\n", year);/code]

Questo codice è per stabilire se un anno è bisestile o no. Se year%4==0 è sempre vera perché inserire l'opertaore && e || che possono essere errati?
Grazie..:)
Ultima modifica effettuata da VinkRock 15/01 11:06
15/01 14:40
AldoBaldo
if ((year%4==0 && year%100!=0) || year%400==0)
    printf("Il %d e' un anno bisestile\n", year);
else printf("Il %d non e' un anno bisestile\n", year);


year%4==0 && year%100!=0
Vero per tutti i valori divisibili per 4, tranne che per quelli divisibili per 100.

year%400==0
Vero per tutti i valori divisibili per 400.

Dunque...

L'anno è bisestile se è divisibile per 4 e non per 100, oppure se è divisibile per 400.
Non è bisestile negli altri casi.

Ad esempio...

1972 è bisestile perché è divisibile per 4 e non per 100.
1900 non è bisestile perché è divisibile contemporaneamente per 4 e per 100.
2400 è bisestile nonostante sia divisibile contemporaneamente per 4 e per 100, perché è divisibile per 400.
1985 non è bisestile perché non rientra in nessuno dei casi descritti (rientra tra gli else).
Ultima modifica effettuata da AldoBaldo 15/01 14:42
Ma cosa vuoi che ne sappia? Io ci gioco, col codice, mica ci lavoro!
17/01 11:01
VinkRock
Grazie AldoBaldo. Il mio dubbio è questo: Visto che il bisestile è sempre divisibile x 4, a che scopo inserire la divisione x100 con resto diverso da zero (che poi è sbagliato. 2100 è bisestile ma da resto 0 quindi si blocca). Credo sia un errore di digitazione. :-?
17/01 13:27
Goblin
Non esattamente ogni quattro anni cade l'anno bisestile. Gli anni precedenti a quello che segna l’inizio di un nuovo secolo – quindi 1800, 1900, 2000 – sono bisestili soltanto se si possono dividere per 400. Quindi il 2000 è stato un anno bisestile, il 2100 non lo sarà. La formula per sapere se un anno è bisestile è: se le ultime due cifre sono divisibili per quattro, oppure se l’intero anno è divisibile per 400.

A cosa serve l’anno bisestile?
Un anno solare, cioè il tempo che la Terra impiega a fare un giro completo intorno al Sole, non è perfettamente divisibile in periodi di 24 ore, cioè in giorni: dura circa 365 giorni e 6 ore. Se tutti gli anni avessero 365 giorni, ogni quattro anni il calendario si ritroverebbe in anticipo di un giorno. Grazie all’anno bisestile, il calendario si “rimette in regola” aggiungendo un giorno proprio quando l’anticipo accumulato raggiunge le 24 ore (sei ore all’anno, per quattro anni).

Un altro problema è dovuto al fatto che in realtà l’anno astronomico non dura esattamente 365 giorni e 6 ore, ma qualche minuto in meno, per la precisione 365 giorni, 5 ore, 48 minuti e 46 secondi. Quindi, anche utilizzando gli anni bisestili, dopo 400 anni il calendario si troverebbe sballato, in ritardo di circa tre giorni. Per risolvere il problema, gli anni precedenti a quello di inizio secolo, cioè quelli divisibili per cento, non sono considerati bisestili a meno che non siano divisibili anche per 400. In questo modo, ogni 400 anni ci sono 3 anni bisestili in meno, di modo da eliminare i tre giorni di anticipo.

Google docet

G.
Ibis et redibis non morieris in bello
17/01 18:26
nessuno
Postato originariamente da VinkRock:
Visto che il bisestile è sempre divisibile x 4


Qui fai l'errore. Non è così.

Sono bisestili:

gli anni non secolari il cui numero è divisibile per 4;

gli anni secolari il cui numero è divisibile per 400
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità;) chiamava il gioco del Lotto Tassa sulla stupidità.
19/01 20:56
VinkRock
Postato originariamente da Goblin:
Non esattamente ogni quattro anni cade l'anno bisestile. Gli anni precedenti a quello che segna l’inizio di un nuovo secolo – quindi 1800, 1900, 2000 – sono bisestili soltanto se si possono dividere per 400. Quindi il 2000 è stato un anno bisestile, il 2100 non lo sarà. La formula per sapere se un anno è bisestile è: se le ultime due cifre sono divisibili per quattro, oppure se l’intero anno è divisibile per 400.

A cosa serve l’anno bisestile?
Un anno solare, cioè il tempo che la Terra impiega a fare un giro completo intorno al Sole, non è perfettamente divisibile in periodi di 24 ore, cioè in giorni: dura circa 365 giorni e 6 ore. Se tutti gli anni avessero 365 giorni, ogni quattro anni il calendario si ritroverebbe in anticipo di un giorno. Grazie all’anno bisestile, il calendario si “rimette in regola” aggiungendo un giorno proprio quando l’anticipo accumulato raggiunge le 24 ore (sei ore all’anno, per quattro anni).

Un altro problema è dovuto al fatto che in realtà l’anno astronomico non dura esattamente 365 giorni e 6 ore, ma qualche minuto in meno, per la precisione 365 giorni, 5 ore, 48 minuti e 46 secondi. Quindi, anche utilizzando gli anni bisestili, dopo 400 anni il calendario si troverebbe sballato, in ritardo di circa tre giorni. Per risolvere il problema, gli anni precedenti a quello di inizio secolo, cioè quelli divisibili per cento, non sono considerati bisestili a meno che non siano divisibili anche per 400. In questo modo, ogni 400 anni ci sono 3 anni bisestili in meno, di modo da eliminare i tre giorni di anticipo.

Google docet

G.


Grazie Goblin. Il fatto degli anni centenari non lo sapevo. In questo caso ha un senso sia la divisione x100 che quella x400. Non si finisce mai di imparare. :k: