Newsgroup: it.comp.lang.visual-basic
Titolo: anno bisestile

Qualcuno sa come scoprire se un anno  č bisestile?
Grazie

oppure (ANNO / 4) * 4
che senso ha moltiplicare e poi dividere per 4??
bisestile = IIf(anno Mod 400 = 0 Or anno Mod 1000 = 0 Or (anno Mod 4 = 0 And anno Mod 100 <> 0),
True, False)
Ciao,
Moreno
#sirri#@#morenosoft#.com
(togliete "#" dall'indirizzo)
Moreno Sirri VB Site - 
http://www.msvbsite.net
---------------------------------------------------------------------------
Le risposte alle tue domande le trovi sul Sito Comune di questo NewsGroup:
 
http://www.it-lang-vb.net
---------------------------------------------------------------------------

 oppure (ANNO / 4) * 4
Fai attenzione a quello che scrivi... ti sfugge qualcosa...  :))))))))
Per il calcolo dell'anno bisestile:
################
function Bisestile(A as integer) as boolean
    Bisestile = ( (A mod 400 = 0) Or ((A mod 100<>0) and (A mod 4 =0)) )
end function
################
oppure, se vogliamo una versione che eviti la "non cortocircuitazione degli operatori"
propria del VB (e quindi simulando la cortocircuitazione degli operatori):
################
function Bisestile(A as integer) as boolean
    Bisestile=False
    If (A mod 400 = 0) then
        Bisestile = True
    ElseIf (A mod 100<>0) then
        If (A mod 4 =0) then
            Bisestile = True
        End If
    End If
End function
################

 True, False)
Ehm, l'anno 1000 NON era bisestile... io c'ero! :)))))))
Ti spiego anche perche' l'anno 1000 non lo era (a sto punto, se sbaglio, mi sputtano
definitivamente :))) ):
Dimostrazione per assurdo: supponiamo che la condizione che tu riporti
anno Mod 400 = 0 Or anno Mod 1000 = 0 Or (anno Mod 4 = 0 And anno Mod 100 <> 0)
sia, per assurdo, vera.
Nella condizione che tu riporti, dici che
    anno mod 1000 = 0
sta ad indicare che anno e' bisestile.
D'altro canto dici che per un anno, per essere bisestile, deve valere
    (anno Mod 4 = 0 And anno Mod 100 <> 0)
cioe' l'anno deve essere divisibile per 4 ma non per 100.
Pero' l'anno 1000 e' sia divisibile per 4 che divisibile per 100.
Cosi' abbiamo una contraddizione.
Ti ho dimostrato per assurdo che non vale la seconda delle tre condizioni, cioe'
    anno mod 1000 = 0
e' da scartare...
:)))))))))

True, False)
ehm... se è divisibile per mille allora è anche divisibile per 400.... vabbé, oggi non è proprio
giornata...


 ################
Mi e' venuta in mente una versione più compatta di questa qui sopra (si risparmiano ben
tre righe di codice:)))) )...
################
function Bisestile(A as integer) as boolean
    If (A mod 400 = 0) then
        Bisestile = True
    ElseIf (A mod 100<>0) then
        If (A mod 4 =0) then Bisestile = True
    End If
End function
################
Sfrutto, tra le altre cose, il fatto che VB inizializza le variabili booleane a False...
cosa pericolosa perche' col cambio di versione non sai mai cosa possa cambiare... (questa,
forse, e' tra le cose che non cambieranno: una variabile booleana e' di default
inizializzata a false anche in altri linguaggi)

 giornata...
No, no, no! L'anno 1000 NON e' divisibile per 400 (ma e' pur sempre divisibile per
1000...)!
Non e' giornata... :))))))))))))

ehm... se è divisibile per mille allora è anche divisibile per 400.... 
ehm... intendevo dire 100... ragazzi, per oggi stacco... non ne azzecco una... :-(((((((


Ehm, l'anno 1000 NON era bisestile... io c'ero! :)))))))
;-)
Lo so... oggi ne ho sparate di cacchiate... non è proprio giornata... comunque carina
l'argomentazione... ;-)


inizializzata a false anche in altri linguaggi)
Motivo in più per cambiare... ;-))


 l'argomentazione... ;-)
Mi sembra quasi di stare in chat... :-))))))))))

 Motivo in più per cambiare... ;-))
Mmmmmmhhhhh... si forse dovrei cambiare linguaggio :-PPPPPPPP



in questo momento SIAMO in chat (per ora Ettore Maronese ed io):
#it_lang_vb
su 
irc.azzurra.net


 wrote in message
9b2341$cja$1...@nreadB.inwind.it...


 :)))))))))
Ma veramente le tre condizioni (la terza č composta) sono legate da un OR.
Quindi
(1000 mod 1000)=0   TRUE
(1000 mod 100)=0 (-> diverso da zero) FALSE
(1000 mod 400)=200 FALSE
TRUE or FALSE or FALSE -> TRUE
Quindi come tutti gli anni di fine millennio č bisestile.
Mi sembra questo l'algoritmo piů corretto perché gli anni di fine secolo non
sono bis se non sono div per 400 o per 1000.


No! L'anno 1000 non e' bisestile nonostante sia divisibile per 4... e cosi' come l'anno
1000, ce ne sono altri...

> Quindi come tutti gli anni di fine millennio è bisestile.
Mi dai la fonte che confermi questa affermazione?


Newsgroups: it.comp.lang.visual-basic
Subject: Re: Bisestile che rogna
Date: 5 Feb 2001 20:49:36 GMT
ed anche:
Public Function IsLeapYear4(ByVal a_Year As Integer) As Boolean
  IsLeapYear4 = (a_Year Mod 4 = 0) Or IIf((a_Year Mod 400 = 0), True, False)
End Function
Public Function IsLeapYear5(ByVal a_Year As Integer) As Boolean
  IsLeapYear5 = (a_Year Mod 4 = 0) And Not ((a_Year Mod 400 = 0) Xor (a_Year
Mod 100 = 0))
End Function
**************************************************************
--
Ciao.
Maurizio
--------
?SPQR(C)
 X
--------

Da: 
http://www.microsoft.com/italy/technet/risorse/info_tech/office/off2kpln/default.htm
Il 2000 č un anno bisestile speciale in quanto anni come questo ricorrono solo una volta
ogni 400 anni.
Da: 
http://digilander.iol.it/elam/bibbia/calendari.htm
Nel 45 a.C. Giulio Cesare introdusse il calendario giuliano con l'aiuto dell'astronomo
Sosigene. L'anno č sempre di 365 giorni ma negli anni multipli di 4 si aggiunge un giorno
a febbraio (anno bisestile cioč bis-sextile perché in origine si duplicava il sesto giorno
prima di marzo) [...]
Nel 1582 papa Gregorio XIII [...] stabilě allora che gli anni secolari non divisibili per
400 non sarebbero piů stati bisestili
Da: 
http://space.tin.it/edicola/esongi/storiacalenda.htm
[...] Quindi, in definitiva, rimangono bisestili tutti gli anni non terminanti con due
zeri e divisibili per 4, e quegli anni terminanti con due zeri ma divisibili per 400.
[...]
##############################
Quindi, per calcolare se un anno e' bisestile (varianti che ottimizzino il codice sono ben
accette, anche se penso superflue):
function Bisestile(A as integer) as boolean
    Bisestile =  (A mod 400 = 0) Or ( (A mod 100<>0) and (A mod 4 =0) )
end function

[...]
miiiiiiii.... questo thread sta diventando peggio di "č meglio VB o Delphi?", "ADO o DAO"....
;-P


################
Ma poi si torna alla funzione di partenza...
Ciao