Calendario perpetuo

Da Wikipedia, l'enciclopedia libera.
Calendario perpetuo (XVII secolo, Museo Galileo di Firenze).

Il calendario perpetuo è un algoritmo, creato da F. Berio, che permette di ricavare il giorno della settimana (lunedì, martedì, mercoledì, giovedì, venerdì, sabato, domenica) di una qualsiasi data del calendario. L'algoritmo consiste nel sommare 5 termini, facendo uso dell'operazione di modulo per ridurre il risultato della somma ad un valore inferiore a 7. Tale operazione (indicata dal simbolo "mod") è analoga all'aritmetica dell'orologio (secondo cui ad es. le ore 15 corrispondono alle ore 3 poiché 15 mod 12 = 3) e consiste nel resto della divisione (quindi 18 mod 7 = 4 poiché 18 / 7 = 2 e il resto della divisione è 4).

L'algoritmo[modifica | modifica wikitesto]

Presa una data gg/mm/ssaa, si chiamano:

Il numero corrisponde a con le limitazioni
gg giorno del mese da 1 a 31
aa ultime due cifre dell'anno (anno mod 100) da 0 a 99
ss prime due cifre dell'anno [int(anno / 100)] da 15 in avanti

L'algoritmo consiste nel calcolare [(G + M + C + A + B) mod 7] ; l'operazione di modulo può essere eseguita non solo dopo aver sommato i cinque addendi ma anche, opzionalmente, su qualunque addendo o somma parziale.

Il giorno del mese (modulo sette) fornisce il primo addendo G dell'espressione finale:

  • G = gg mod 7

Il secondo addendo M è un codice derivato dal mese, fornito dalla seguente tabella:

Mese M (anno non bisestile) M (anno bisestile)
Gennaio 6 5
Febbraio 2 1
Marzo 2
Aprile 5
Maggio 0
Giugno 3
Luglio 5
Agosto 1
Settembre 4
Ottobre 6
Novembre 2
Dicembre 4

Il terzo addendo C è un codice derivato dal secolo, cioè dalle prime due cifre ss dell'anno: ai 4 possibili risultati di "ss mod 4" si associa un numero C tale che:

ss mod 4 0 1 2 3
C 0 5 3 1

Il quarto addendo A si ricava dalle ultime due cifre aa dell'anno; poiché, nell'ambito di uno stesso secolo, i giorni della settimana si ripetono nel calendario gregoriano ogni 28 anni, si considera

  • A = aa mod 28

Il quinto addendo B si ottiene a partire dalle ultime due cifre aa dell'anno, e rappresenta il numero di anni bisestili che sono sicuramente contenuti in aa anni (int indica la funzione parte intera del numero):

  • B = int[(aa mod 28) / 4]

Ad esempio, per il 2015 il risultato dell'operazione è 3 poiché 15 contiene 3 blocchi interi di 4 anni ciascuno; aritmeticamente:

B = int[(15 mod 28) / 4] = int(15 / 4) = 3

Determinati i cinque addendi, si calcola:

  • [(G + M + C + A + B) mod 7]

La formula fornisce un numero compreso tra 0 e 6 che indicherà il giorno della settimana:

Risultato Giorno
0 Domenica
1 Lunedì
2 Martedì
3 Mercoledì
4 Giovedì
5 Venerdì
6 Sabato

I giorni antecedenti il venerdì 15 ottobre 1582, data dell'entrata in vigore del calendario gregoriano, non possono essere così calcolati poiché era in vigore il calendario giuliano. L'algoritmo rimarrà probabilmente valido fino al 28 febbraio 2400, data prevista per l'introduzione di correzioni al calendario gregoriano.

Esempi[modifica | modifica wikitesto]

Data: 15/04/2097

  • G = 15 mod 7 = 1
  • M = 5 (aprile)
  • C = 0 (ss = 20, 20 mod 4 = 0)
  • A = 97 mod 28 = 13
  • B = int[(97 mod 28) / 4) = int(13 / 4) = 3
  • G + M + C + A + B = 1 + 5 + 0 + 13 + 3 = 22
  • 22 mod 7 = 1
  • Il giorno 15 aprile 2097 sarà un lunedì

Data: 22/10/2008

  • G = 22 mod 7 = 1
  • M = 6 (ottobre)
  • C = 0 (ss = 20, 20 mod 4 = 0)
  • A = 8 mod 28 = 8
  • B = int[(8 mod 28) / 4] = int(8 / 4) = 2
  • G + M + C + A + B = 1 + 6 + 0 + 8 + 2 = 17
  • 17 mod 7 = 3
  • Il giorno 22 ottobre 2008 è stato un mercoledì

Data: 15/10/1582

  • G = 15 mod 7 = 1
  • M = 6 (ottobre)
  • C = 1 (ss = 15, 15 mod 4 = 3)
  • A = 82 mod 28 = 26
  • B = int[(82 mod 28) / 4] = int(26 / 4) = 6
  • G + M + C + A + B = 1 + 6 + 1 + 26 + 6 = 40
  • 40 mod 7 = 5
  • Il giorno 15 ottobre 1582 è stato un venerdì

Criteri per il calcolo mnemonico[modifica | modifica wikitesto]

Per eseguire il calcolo mentalmente in modo efficiente, è opportuno in primo luogo memorizzare la tabella che fornisce l'addendo M in una forma autoreferente. Un metodo è memorizzare i nomi dei mesi troncati ad un numero di caratteri coincidente con il codice M (per non confondere i codici 5 e 6 è opportuno spezzare le sigle di 6 caratteri in due parti):

Mese M (anno non bisestile) M (anno bisestile)
Gennaio GEN NAI GEN NAI -1
Febbraio FE FE -1
Marzo MA
Aprile APRIL
Maggio .
Giugno GIU
Luglio LUGLI
Agosto A
Settembre SETT
Ottobre OTT OBR
Novembre NO
Dicembre DICE

In secondo luogo è opportuno tener conto che la somma C+A+B (il contributo dovuto all'anno) non varia per un anno intero; quindi, almeno per l'anno corrente, basta memorizzarla ad inizio anno.

In terzo luogo, è opportuno considerare che nell'ambito di un certo secolo (ss costante) il calendario si ripete ogni 28 anni (poiché 28 è minimo comune multiplo di 7 e 4, in cui 7 è la periodicità con cui si ripetono i giorni della settimana e 4 quella con cui si ripetono gli anni bisestili), quindi se l'anno è maggiore o uguale a 28 basta considerare come anno quello ottenuto sottraendo 28 o un suo multiplo (56 o 84).

Inoltre è da tener conto che, appena un addendo o una somma parziale risulta maggiore o uguale a 7, è opportuno sottrarre immediatamente 7 o suoi multipli in modo da minimizzare i valori in gioco. In particolare, il valore 7 risulta equivalente a 0.

Infine, è necessario conoscere la regola che nel calendario gregoriano stabilisce quali anni siano bisestili: se aa è diverso da 0, l'anno è bisestile se aa è divisibile per 4; se aa è uguale a 0 (anni secolari), l'anno è bisestile se ss è divisibile per 4.

Le operazioni da eseguire mentalmente (rapide nonostante l'apparente complessità) sono quindi:

  • considerare il numero del giorno; se maggiore o uguale a 7, sottrarre subito il multiplo di 7 più alto possibile;
  • sommare il codice del mese fornito in modo autoreferente dal nome del mese; se è gennaio o febbraio e l'anno è bisestile, va sottratto 1 (come da tabella del codice M); se la somma raggiunge o supera 7, sottrarre subito 7;
  • sommare il codice del secolo: per il secolo attuale (ss = 20) il codice è 0 (come da tabella del codice C); per il secolo scorso (ss = 19) il codice è 1; se la somma raggiunge o supera 7, sottrarre subito 7;
  • considerare l'anno: se è maggiore o uguale a 28 basta considerare come aa l'anno ottenuto sottraendo 28 o un suo multiplo (56 o 84);
  • sommare l'anno aa, decurtato eventualmente di un multiplio di 7;
  • sommare il numero di anni bisestili che sono sicuramente contenuti in aa: se aa non raggiunge 4 (è inferiore a 4) considerare 0 bisestili, altrimenti se non raggiunge 8 considerare 1 bisestile, altrimenti se non raggiunge 12 considerare 2 bisestili, ecc.; se la somma raggiunge o supera 7, sottrarre 7;
  • il numero ottenuto indica il giorno della settimana: 1 = lunedì, 2 = martedì, ..., 6 = sabato, 0 (equivalente a 7) = domenica.

Attraverso gli esempi viene illustrato come procedere operativamente per eseguire il calcolo.

Esempi di calcolo mnemonico[modifica | modifica wikitesto]

01/01/2003: pensando la data come 1 "GEN NAI" 2003, bisogna sommare 1 (il giorno) + 6 ("GEN NAI"); fin qui si ottiene 7: si sottrae subito 7 e resta 0; si prosegue sommando 0 (per il secolo attuale) + 3 (anno) + 0 (numero di bisestili in 3 anni) = 3, quindi mercoledì.

01/01/2000: pensando la data come 1 "GEN NAI" 2000, bisogna sommare 1 (il giorno) + 5 ("GEN NAI" -1, cioè 6-1 perché il 2000 era bisestile) + 0 (per il secolo attuale) + 0 (anno) + 0 (numero di bisestili in 0 anni) = 6, quindi sabato.

01/01/2004: pensando la data come 1 "GEN NAI" 2004, bisogna sommare 1 (il giorno) + 5 ("GEN NAI" -1 perché il 2004 era bisestile) + 0 (per il secolo attuale) + 4 (anno); fin qui si ottiene 10: si sottrae subito 7 e resta 3; si prosegue sommando 1 (numero di bisestili in 4 anni) = 4, quindi giovedì.

01/03/2000: pensando la data come 1 "MA" 2000, bisogna sommare 1 (il giorno) + 2 ("MA") + 0 (per il secolo attuale) + 0 (anno) + 0 (numero di bisestili in 0 anni) = 3, quindi mercoledì.

08/03/2000: pensando la data come 8 "MA" 2000, si considera 8 (il giorno); si può sottrarre subito 7 e resta 1; si prosegue sommando 2 ("MA") + 0 (per il secolo attuale) + 0 (anno) + 0 (numero di bisestili in 0 anni) = 3, quindi mercoledì.

25/12/2000: pensando la data come 25 "DICE" 2000, si considera 25 (il giorno); si può sottrarre subito 21 (multiplo di 7) e resta 4; si prosegue sommando 4 ("DICE"), ottenendo 8; si può sottrarre subito 7 e resta 1; si prosegue sommando 0 (per il secolo attuale) + 0 (anno) + 0 (numero di bisestili in 0 anni) = 1, quindi lunedì.

01/10/2003: pensando la data come 1 "OTT OBR" 2003, si considera 1 (il giorno) + 6 ("OTT OBR"), ottenendo 7; si può sottrarre subito 7 e resta 0; si prosegue sommando 0 (per il secolo attuale) + 3 (anno) + 0 (numero di bisestili in 3 anni) = 3, quindi mercoledì.

01/10/2004: pensando la data come 1 "OTT OBR" 2004, si considera 1 (il giorno) + 6 ("OTT OBR"), ottenendo 7; si può sottrarre subito 7 e resta 0; si prosegue sommando 0 (per il secolo attuale) + 4 (anno) + 1 (numero di bisestili in 4 anni) = 5, quindi venerdì.

01/10/2005: pensando la data come 1 "OTT OBR" 2005, si considera 1 (il giorno) + 6 ("OTT OBR"), ottenendo 7; si può sottrarre subito 7 e resta 0; si prosegue sommando 0 (per il secolo attuale) + 5 (anno) + 1 (numero di bisestili in 5 anni) = 6, quindi sabato.

19/03/2007: pensando la data come 19 "MA" 2007, si considera 19 (il giorno); si può sottrarre subito 14 (multiplo di 7) e resta 5; si prosegue sommando 2 ("MA"), ottenendo 7; si può sottrarre subito 7 e resta 0; si prosegue sommando 0 (per il secolo attuale) + 0 (anno = 7, ma si può sottrarre immediatamente 7) + 1 (numero di bisestili in 7 anni) = 1, quindi lunedì.

19/03/2008: pensando la data come 19 "MA" 2008, si considera 19 (il giorno); si può sottrarre subito 14 (multiplo di 7) e resta 5; si prosegue sommando 2 ("MA"), ottenendo 7; si può sottrarre subito 7 e resta 0; si prosegue sommando 0 (per il secolo attuale) + 1 (anno = 8, ma si può sottrarre immediatamente 7) + 2 (numero di bisestili in 8 anni) = 3, quindi mercoledì.

19/03/2036: pensando la data come 19 "MA" 2036, si considera 19 (il giorno); si può sottrarre subito 14 (multiplo di 7) e resta 5; si prosegue sommando 2 ("MA"), ottenendo 7; si può sottrarre subito 7 e resta 0; si prosegue sommando 0 (per il secolo attuale); essendo l'anno maggiore o uguale a 28, si sottrae 28 e resta 8 (perché il calendario del 2036 coincide con quello del 2008), quindi si considera per l'anno il valore 8; si prosegue perciò sommando 1 (anno = 8, ma si può sottrarre immediatamente 7) + 2 (numero di bisestili in 8 anni) = 3, quindi mercoledì.

19/03/1936: pensando la data come 19 "MA" 1936, si considera 19 (il giorno); si può sottrarre subito 14 (multiplo di 7) e resta 5; si prosegue sommando 2 ("MA"), ottenendo 7; si può sottrarre subito 7 e resta 0; si prosegue sommando 1 (per il secolo scorso); essendo l'anno maggiore o uguale a 28, si sottrae 28 e resta 8 (perché il calendario del 1936 coincide con quello del 1908), quindi si considera per l'anno il valore 8; si prosegue perciò sommando 1 (anno = 8, ma si può sottrarre immediatamente 7) + 2 (numero di bisestili in 8 anni) = 4, quindi giovedì.

31/12/1999: pensando la data come 31 "DICE" 1999, si considera 31 (il giorno); si può sottrarre subito 28 (multiplo di 7) e resta 3; si prosegue sommando 4 ("DICE"), ottenendo 7; si può sottrarre subito 7 e resta 0; si prosegue sommando 1 (per il secolo scorso); essendo l'anno maggiore o uguale a 28, si sottrae un multiplo di 28 (56 o 84, in questo caso 84) e resta 15 (perché il calendario del 1999 coincide con quello del 1915), quindi si considera per l'anno il valore 15; si prosegue perciò sommando 1 (anno = 15, ma si può sottrarre immediatamente 14 che è multiplo di 7) + 3 (numero di bisestili in 15 anni) = 5, quindi venerdì. (Notare che il giorno successivo, 01/01/2000, era sabato).

01/01/2100: pensando la data come 1 "GEN NAI" 2100, bisogna sommare 1 (il giorno) + 6 ("GEN NAI", cioè 6 perché il 2100 non sarà bisestile); fin qui si ottiene 7: si sottrae subito 7 e resta 0; si prosegue sommando 5 (per il prossimo secolo) + 0 (anno) + 0 (numero di bisestili in 0 anni) = 5, quindi venerdì.

Calendari perpetui storici[modifica | modifica wikitesto]

Un calendario perpetuo fu costruito nel 1741-1741 per il re di Francia Luigi XV. Composto di quattro pannelli in bronzo dorato al mercurio, ha tasselli mobili in smalto bianco che recano date. Ogni pannello ha una cimasa con le insegne reali e con questa scrittaː«Almanch perpétuel et toujours nouveau dédié au Roi». Ai lati della scritta ci sono il sole e la luna dipinti in oro. Ogni pannello è diviso in verticale in tre parti, una per ogni mese del trimestre. Ogni parte è divisa a sua volta in tre colonne, dotate di tasselli scorrevoli smaltatiː nella prima colonna ci sono i giorni della settimana e le fasi della luna; nella seconda colonna c'è la data in cifra; nella terza colonna ci sono i giorni festivi, insieme al segno zodiacale smaltato e a colori e al nome del mese in bianco e nero. Lo spostamento dei tasselli consente di regolare le date ogni anno.[1]

Note[modifica | modifica wikitesto]

  1. ^ Dizionario dell'antiquariato maggiore e minore, Roma, Gremese, 2002, SBN IT\ICCU\TO0\1149444. Sotto la direzione di Jean Bedel; edizione italiana a cura di Alcide Giallonardi.

Voci correlate[modifica | modifica wikitesto]

Altri progetti[modifica | modifica wikitesto]

Collegamenti esterni[modifica | modifica wikitesto]

Controllo di autoritàGND: (DE4198916-8