Calendario perpetuo: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
wikificata
Riga 1:
Il '''calendario perpetuo''' è un [[algoritmo]] che permette di ricavare il [[giorno]] della [[settimana]] (''[[lunedì]], [[martedì]], [[mercoledì]], [[giovedì]], [[venerdì]], [[sabato]], [[domenica]]'') di un giorno qualsiasi, conoscendone solo la [[data]]. Nel corso dell'algoritmo si farà spesso uso dell'operazione di [[modulo]] indicata dal simbolo "mod" che altro non è che il resto della divisione (ad esempio: 18mod7=4 infatti 18/7=2 e il resto della divisione è 4).
{{W|matematica|aprile 2008|firma=<span style="color:#FF9933;">★</span>[[utente:iaga|<span style="color:#00CCCC;"><i><b>iaga</b></i></span>]]<span style="color:#FF9933;">★</span> 14:43, 15 apr 2008 (CEST)}}
Il '''calendario perpetuo''' è un modo di ottenere il giorno della settimana, conoscendo la data.
 
== Il metodo L'algoritmo==
Presa una data del tipo ''gg/mm/ssaa'', chiamo:
{| border=1 cellspacing=0
| Il [[numero]] || corrisponde a || con le limitazioni
|-
| g || giorno del [[mese]] || da 1 a 31
|-
| a || ultime due [[cifra|cifre]] dell'[[anno]] (anno mod100) || da 0 a 99
|-
| s || le cifre del [[secolo]] (il risultato intero di anno/100)||nessuna
|}
 
Per farlo, chiamiamo
*g: giorno (da 1 a 31)
*m: mese (da 1 a 12)
*a: anno (da 0 a 99)
*s: secolo
 
Il giorno del mese modulo sette dà il primo addendo (G) della somma finale:
*G=g mod7
 
 
Il secondo addendo (M) è dato dalla seguente tabella:
Nel metodo si farà uso spesso dell'operazione di "modulo" indicata dal simbolo "%" che altro non è che il resto della divisione.
{| border=1 cellspacing=0
Ad esempio: 16%7=2
|Mese||corrispondente numero M || se l'anno è [[bisestile]]
|-
|[[Gennaio]]||0||
|-
|[[Febbraio]]||3||
|-
|[[Marzo]]||3||+1
|-
|[[Aprile]]||6||+1
|-
|[[Maggio]]||1||+1
|-
|[[Giugno]]||4||+1
|-
|[[Luglio]]||6||+1
|-
|[[Agosto]]||2||+1
|-
|[[Settembre]]||5||+1
|-
|[[Ottobre]]||0||+1
|-
|[[Novembre]]||3||+1
|-
|[[Dicembre]]||5||+1
|}
 
Ed ecco il metodo:
 
Il terzo addendo (A) si ricava dall'anno:
Il giorno della settimana modulo sette
*A=aa mod28 + parte intera di ((aa mod28 -1)/4)
*G=g%7
Ad esempio, per il 2008, il risultato dell'operazione sarà:
*A= 8 mod28 + (parte intera di (8 mod28 - 1)/4))= 8 + (parte intera di (7/4)) = 8 + 1 = 9
 
Per il mese dobbiamo ricordarci la costante M che vale:
*Gennaio -> 0
*Febbraio -> 3
*Marzo -> 3
*Aprile -> 6
*Maggio -> 1
*Giugno -> 4
*Luglio -> 6
*Agosto -> 2
*Settembre -> 5
*Ottobre -> 0
*Novembre -> 3
*Dicembre -> 5
 
Il quarto addendo (C) deriva dal secolo: ai 4 possibili risultati di (ss mod4), si associa un numero C
{| border=1 cellspacing=0
! ss mod4 =
|0||1||2||3
|-
! C =
|6||4||2||0
|}
 
 
Infine (G+M+A+C)mod7 dà un numero compreso tra 0 e 6 che indicherà il giorno della settimana (0=Domenica, 1=Lunedì... 6=Sabato)
Per l'anno si deve fare
 
==Esempi==
*A=a%28 + (parte intera di (a%28)/4))
 
ad esempio, per il 2008, l'anno è 8 e il risultato dell'operazione sarà:
*A= 8%28 + (parte intera di (8%28 - 1)/4))= 8 + (parte intera di (7/4)) = 8 + 1 = 9
 
per il secolo:
 
*S=s%4
 
Abbiamo 4 possibili risultati di S, a cui bisogna associare una costante C
*S= 0 -> C= 6
*S= 1 -> C= 4
*S= 2 -> C= 2
*S= 3 -> C= 0
 
Infine, se la data cade in un anno bisestile e ed è dopo febbraio, bisogna aggiungere 1
 
Una volta sommate tutti i risultati G+M+A+C, si fa il modulo per 7 e si otterrà un numero da 0 a 6 che indicherà il giorno della settimana (0= Domenica, 1=Lunedì... 6=Sabato)
 
==Esempio Pratico:==
 
Data: 15/04/2097
 
*G = 15%715mod7=1
*M = 6 (Aprile, ->l'anno 6non è bisestile)
*A = 8%2897mod28 + (parte intera di (8%2897mod28 - 1)/4))= 813 + (parte intera di (712/4)) = 813 + 13 = 916
*SC = 20%46 (s=20, 20mod4=0)
*G+M+A+C = 1+6+16+6 = 29
*29mod7 = 1
*il 15 Aprile 2097 sarà un Lunedì
 
Dato che l'anno è bisestile e ci troviamo oltre febbraio dobbiamo aggiungere 1
 
Data: 22/10/2008
*G+M+A+C+1 = 1+6+9+6+1 = 23
*G = 22mod7 = 1
*M = 0 (Ottobre, però l'anno è bisestile, quindi +1)= 1
*A = 8mod28 + intero di (8mod28 -1)/4 = 8 + intero di 7/4 = 8 + 1 = 9
*C = 6 (s=20, 20mod4=0)
*G+M+A+C = 1+1+9+6 = 17
*17mod7 = 3
*il 22 Ottobre 2008 sarà un Mercoledì.
 
Infine:
*23%7 = 2 -> Martedì (invece dovrebbe essere Lunedì :-P)
 
[[bg:Целогодишни календари]]