domenica 8 novembre 2009

Ricorrenza della pasqua (Java)

Forse non tutti sanno che il calcolo della ricorrenza di una delle festività più importanti per i cattolici quale la pasqua non è cosa da poco!

Come per la maggior parte delle feste cattoliche anche la pasqua è un miscuglio di tradizioni di altre religioni, infatti la data della pasqua ha a che fare con la pasqua ebraica(che è tutt'altra cosa! ricordo che gli ebrei non credono nella venuta del messia! quindi per loro non avrebbe alcun significato celebrare la pasqua cattolica) la quale si basa sulle fasi della luna.

Ovviamente il moto della luna è diverso da quello terrestre e di anno in anno la data x è diversa! come se non bastasse la pasqua si festeggia la domenica successiva alla data x!

Vi dico solo che il calcolo non è per niente banale e mi limito a rimandarvi alla pagina di wikipedia dove è descritto l'algoritmo che ho utilizzato! Non provo a spiegarvi l'algoritmo perchè è già complicato di suo! Ho usato l'algoritmo di Gauss che è molto più semlice rispetto agli altri proposti nella pagina di wikipedia e che ha il vantaggio di indicare la data esatta!

ecco il codice:

  1. public class Pasqua

  2. {

  3.     public static void main (String[] args)

  4.     {//algoritmo cristiano per il calcolo della pasqua secondo il calendario gregoriano(metodo aritmetico di Gauss) http://it.wikipedia.org/wiki/Calcolo_della_Pasqua#Metodo_aritmetico_di_Gauss

  5.          int y = 2010;//anno gregoriano compreso tra il 1583 ed il 2499

  6.         final int a = y%19;

  7.         final int b = y%4;

  8.         final int c = y%7;

  9.         int m = 24;

  10.         int n = 5;

  11.         // assegnazione m ed n in base al secolo di y

  12.         if (y>=1583 && y<=1699)

  13.         {

  14.             m = 22;

  15.             n = 2;

  16.         }

  17.         else if (y>=1700 && y<=1799)

  18.         {

  19.             m = 23;

  20.             n = 3;

  21.         }

  22.         else if (y>=1800 && y<=1899)

  23.         {

  24.             m = 23;

  25.             n = 4;

  26.         }

  27.         else if (y>=1900 && y<=2099)

  28.         {

  29.             m = 24;

  30.             n = 5;

  31.         }

  32.         else if (y>=2100 && y<=2199)

  33.         {

  34.             m = 24;

  35.             n = 6;

  36.         }

  37.         else if (y>=2200 && y<=2299)

  38.         {

  39.             m = 25;

  40.             n = 0;

  41.         }

  42.         else if (y>=2300 && y<=2399)

  43.         {

  44.             m = 26;

  45.             n = 1;

  46.         }

  47.         else if (y>=2400 && y<=2499)

  48.         {

  49.             m = 25;

  50.             n = 1;

  51.         }

  52.         //calcolo d ed e

  53.         int d = (19*a+ m)%30;      

  54.         int e = (2*b+4*c+6*d+ n)%7;

  55.         // calcolo del giorno

  56.         if (d+e<10)

  57.         {

  58.             int marzo = d+e+22;//caso marzo

  59.             System.out.println("La pasqua dell anno gregoriano " + y + " cade nel giorno " + marzo + " del mese di marzo");

  60.         }

  61.         else

  62.         {

  63.             int aprile = d+e-9;

  64.             if (aprile == 26)//eccezione 1 aprile

  65.                 System.out.println("La pasqua dell anno gregoriano " + y + " cade nel giorno 19 del mese di aprile");

  66.             else if (aprile == 25 && e==6 && a>10  )//eccezione 2 aprile

  67.                 System.out.println("La pasqua dell anno gregoriano " + y + " cade nel giorno 18 del mese di aprile");

  68.             else// caso generico aprile

  69.                 System.out.println("La pasqua dell anno gregoriano " + y + " cade nel giorno " + aprile + " del mese di aprile");

  70.         }

  71.     }

  72. }



Se siete finiti quì perchè cercavate la data della pasqua di un anno x compreso tra il 1583 ed il 2499, chiedete pure che ve lo calcolo.

3 commenti:

  1. Dovevo fare qst programmino, e grz a te l'ho capito!!!
    Grazieeeeeeeeeeeeeeeeeeee

    RispondiElimina
  2. Prego! È sempre un piacere essere utili a qualcuno! se ti interessa ho pure trovato questo link dove lo stesso algoritmo è sviluppato anche in altri linguaggi... in java è fatto utilizzando le librerie util...

    a breve posterò un altra versione che calcola le date dall'anno x all'anno y.

    in ogni caso, ci conosciamo già?

    RispondiElimina
  3. http://it.wikibooks.org/wiki/Implementazioni_di_algoritmi/Calcolo_della_Pasqua

    scusa mi ero dimenticato il link ;-p

    RispondiElimina