sabato 28 gennaio 2012

Tutorial Linguaggio C - Calcolo della Pasqua

In questo nuovo tutorial ho deciso di dedicarmi alla risoluzione di qualcosa che sia molto pratico e spesso nascosto. Mi sono dedicato al calcolo della Pasqua.
Come sappiamo la Pasqua ogni anno cade in un giorno diverso, e la data dipende in un certo senso dai cicli lunari; è inutile stare qui a spiegarvi ora l'influenza precisa dei cicli lunari sul calcolo della Pasqua e per chi volesse approfondire vi rimando alla pagina su Wikipedia dedicata a questo argomento.
In particolare in questa pagina di Wikipedia viene trattato un preciso algoritmo realizzato da Gauss che si basa sul calcolo di alcuni valori (a,b,c,d,e) e che da questi si riesce in qualche modo a ricavare la data della Pasqua.
Nel tutorial che vi mostro di seguito l'utente inserirà l'anno in cui vuole calcolare la data di Pasqua e l'applicazione farà il resto; nel tutorial tuttavia il calcolo della Pasqua è ristretto agli anni 1900 -2099 poiché il calcolo dipende anche da due valori (M e N) che variano in base alla fascia di anni che ci troviamo.
Subito dopo il video tuttavia ho postato il codice dell'applicazione migliorata, ovvero in grado di calcolare la data della Pasqua dal 1583 al 2299 il  ed è in grado anche di effettuare il calcolo più volte, ovvero una volta effettuato il calcolo, l'utente può decidere di continuare ad effettuare altri calcoli o terminare l'applicazione. In più nel codice migliorato è stato anche implementato un controllo iniziale che stabilisce se l'utente ha inserito un numero corretto.
Curiosità: il calendario da noi utilizzato è il calendario Gregoriano ha avuto origine dal calendario giuliano; quest'ultimo utilizzato sino al 1582 prevedeva uno scarto ogni anni di 11 minuti. Arrivati al 1582 lo scarto era diventato di 11 giorni e per questo motivo il Papa Gregorio XII decise di modificare il calendario per porre rimedio a questo errore. Il calendario gregoriano quindi entrò in vigore il 15 ottobre 1582; anche per questo motivo il metodo aritmetico di Gaus funziona fino al 1583.
Non vi resta di augurarvi una buona visione e di provare a testare il codice con i vostri pc.


Di seguito eccovi il codice dell'applicazione migliorata:

#include<stdio.h>
int main()
{
    int y,a,b,c,d,e,p,M,N;
    char s;
    printf("Calcolo della data in cui cade il giorno di Pasqua\n\n");
    printf("Il calcolo puo' essere effettuato su un anno a scelta tra gli anni 1583 e 2299\n\n");
    s='s';
    do{
    printf("Inserisci l'anno in cui vuoi calcolare il giorno di Pasqua nel formato YYYY: \n");
    scanf("%d",&y);
    while (y<1583 || y>2299){
        printf("\nHai inserito un valore errato\n");
        printf("\nInserisci l'anno in cui vuoi calcolare il giorno di Pasqua nel formato YYYY: \n");
        scanf("%d",&y);
    }
    if (y>=1583 && y<=1699)
    {
        M=22;
        N=2;
    }
    else if (y>=1700 && y<=1799)
    {
        M=23;
        N=3;
    }
    else if (y>=1800 && y<= 1899)
    {
        M=23;
        N=4;
    }
    else if(y>=1900 && y<=2099)
    {
        M=24;
        N=5;
    }
    else if (y>=2100 && y<=2199)
    {
        M=24;
        N=6;
    }
    else if (y>= 2200 && y<=2299)
    {
        M=25;
        N=0;
    }
    a=y%19;
    b=y%4;
    c=y%7;
    d=(19*a + M)%30;
    e=(2*b + 4*c + 6* d + N)%7;
    if ((d+e)<10)
    {
        p = d+e+22;
        printf("\nNell'anno %d la Pasqua cadra' nel giorno %d marzo.\n",y,p);
    }
    else
    {
        p=d+e-9;
        printf("\nNell'anno %d la Pasqua cadra' nel giorno %d aprile.\n\n",y,p);
    }
    scanf("%c",&s);
    printf("Per continuare premi un tasto qualsiasi, per fermare l'applicazione premi 'n' \n");
    //fflush(stdin);
    scanf("%c",&s);
    }while (s!='n');
}

Nessun commento:

Posta un commento