Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Dubbio
Forum - C/C++ - Dubbio

Avatar
VinkRock (Normal User)
Newbie


Messaggi: 3
Iscritto: 15/01/2020

Segnala al moderatore
Postato alle 12:05
Mercoledì, 15/01/2020
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...
Codice sorgente


    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 il 15/01/2020 alle 12:06
PM Quote
Avatar
AldoBaldo (Member)
Expert


Messaggi: 544
Iscritto: 08/01/2015

Segnala al moderatore
Postato alle 15:40
Mercoledì, 15/01/2020
Codice sorgente - presumibilmente C/C++

  1. if ((year%4==0 && year%100!=0) || year%400==0)
  2.     printf("Il %d e' un anno bisestile\n", year);
  3. 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 il 15/01/2020 alle 15:42


ATTENZIONE! Sono un hobbista e l'affidabilità delle mie conoscenze informatiche è molto limitata. Non prendere come esempio il codice che scrivo, perché non ho alcuna formazione accademica e rischieresti di apprendere pratiche controproducenti.
PM Quote
Avatar
VinkRock (Normal User)
Newbie


Messaggi: 3
Iscritto: 15/01/2020

Segnala al moderatore
Postato alle 12:01
Venerdì, 17/01/2020
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. :-?

PM Quote
Avatar
Goblin (Member)
Expert


Messaggi: 375
Iscritto: 02/02/2011

Segnala al moderatore
Postato alle 14:27
Venerdì, 17/01/2020
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 redibis non morieris in bello
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6075
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 19:26
Venerdì, 17/01/2020
Testo quotato

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à.
PM Quote
Avatar
VinkRock (Normal User)
Newbie


Messaggi: 3
Iscritto: 15/01/2020

Segnala al moderatore
Postato alle 21:56
Domenica, 19/01/2020
Testo quotato

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:

PM Quote