Pages: 1 [2]   Go Down
Print
Author Topic: Esercizio Pasqua richiesto dal prof  (Read 5331 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
Zallak
Matricola
*
Offline Offline

Posts: 72


« Reply #15 on: 29-10-2012, 12:30:31 »

Io ho risolto l'esercizio con il codice a seguire che tuttavia per un qualche bug che non riesco a vedere trova il giorno corretto solo secondo il calendario Gregoriano mentre per il Giuliano da dei problemi.. qualche programmatore potrebbe dargli un'occhiata per mostrarni l'errore?  testate pray

Code:
import javax.swing.*;

public class CalcolatorePasqua

{
    public static void main(String[] args)

    {
        
      int a,b,c,d,e,pasqua,M,N;
      System.out.println("Questo è un programma che calcola la data della Pasqua.");
      String sceltas = JOptionPane.showInputDialog("Digitare 0 per il calcolo secondo il calendario Giuliano, 1 per il calcolo secondo il calendario Gregoriano.");
      int sceltai = Integer.parseInt(sceltas);
      byte scelta = (byte) sceltai;
        
      if (scelta == 0)
          
      {             //Inizio sottoalgoritmo calendario Giuliano.
          
          
         String annos = JOptionPane.showInputDialog("Inserire l'anno di cui si vuole calcolare la Pasqua.");
         int anno = Integer.parseInt(annos);
         M = 15;
         N = 6;
         a = anno%19;
         b = anno%4;
         c = anno%7;
         d = (19*a + M)%30;
         e = (2*b +4*c + 6*d + N)%7;
          
         if ((d + e) < 10)
            
         {      //Inizio caso 1 C.G.
            
             pasqua = d + e + 22;
             System.out.println("La Pasqua dell'anno "+anno+" cade giorno "+pasqua+" marzo.");
            
         }     //Fine caso 1 C.G.
        
         else
            
         {     //Inizio caso 2 C.G.
            
             pasqua = d + e - 9;
            
             if (pasqua == 26)
                
              {  pasqua = 19;   }
            
             else if ((pasqua == 25) && (d == 28) && (e == 6) && (a > 10))
                
              {   pasqua = 18;  }
            
            System.out.println("La Pasqua dell'anno "+anno+" cade giorno "+pasqua+" aprile.");
            
        }     //Fine caso 2 C.G.
            
        
      }         //Fine sottoalgoritmo calendario Giuliano.  
        

         else if ( scelta == 1)
            
        {     //Inizio sottoalgoritmo calendario Gregoriano.
            
             String annos = JOptionPane.showInputDialog("Inserire l'anno di cui si vuole calcolare la Pasqua. (compreso tra il 1583 ed il 2499)");
             int anno = Integer.parseInt(annos);
             M = 0;
             N = 0;
            
             if (anno >= 1583 && anno <= 1699)        //Inizio sottoalgoritmo di controllo dei valori M ed N.
                
             {
                 M = 22;
                 N = 2;  
             }
            
             else if (anno >= 1700 && anno <= 1799)
            
             {
                M = 23;
                N = 3;                
                
             }
            
             else if (anno >= 1800 && anno <= 1899)
            
             {
                M = 23;
                N = 4;                
                
             }
            
             else if (anno >= 1900 && anno <= 2099)
            
             {
                M = 24;
                N = 5;                
                
             }
            
             else if (anno >= 2100 && anno <= 2199)
            
             {
                M = 24;
                N = 6;                
                
             }
            
             else if (anno >= 2200 && anno <= 2299)
            
             {
                M = 25;
                N = 0;                
                
             }
            
             else if (anno >= 2300 && anno <= 2399)
            
             {
                M = 26;
                N = 1;                
                
             }
            
             else if (anno >= 2400 && anno <= 2499)
            
             {
                M = 25;
                N = 1;                
                
             }
        
             else if (anno < 1583 || anno > 2499)
            
             {
                System.out.println("L'anno inserito non rientra nell'insieme dei valori supporati. Rieseguire il programma inserendo un valore corretto.");              
                
             }    
            
                                //Fine sottoalgoritmo di controllo dei valori M ed N.
            
         a = anno%19;
         b = anno%4;
         c = anno%7;
         d = (19*a + M)%30;
         e = (2*b +4*c + 6*d + N)%7;
          
         if ((d + e) < 10)
            
         {      //Inizio caso 1 C.Greg.
            
             pasqua = d + e + 22;
             System.out.println("La Pasqua dell'anno "+anno+" cade giorno "+pasqua+" marzo.");
            
         }     //Fine caso 1 C.Greg.
        
         else
            
         {     //Inizio caso 2 C.Greg.
            
             pasqua = d + e - 9;
            
             if (pasqua == 26)
                
              {  pasqua = 19;   }
            
             else if ((pasqua == 25) && (d == 28) && (e == 6) && (a > 10))
                
              {   pasqua = 18;  }
            
            System.out.println("La Pasqua dell'anno "+anno+" cade giorno "+pasqua+" aprile.");
            
        }     //Fine caso 2 C.Greg.
            
        
            
        }  //Fine sottoalgoritmo calendario Gregoriano.
          
       else if (scelta > 1)
           
        {
          System.out.println("Il valore inserito non è corretto riprovare con 0 o 1");
        }
          
    }
    
    
    
    
}
« Last Edit: 29-10-2012, 12:36:25 by Zallak » Logged
Francix
Matricola
*
Offline Offline

Posts: 31


« Reply #16 on: 30-10-2012, 11:33:27 »

Ragazzi potete darmi il testo dell'esercizio?
Logged
ChiaraT91S
Matricola
*
Offline Offline

Posts: 64


« Reply #17 on: 30-10-2012, 12:12:18 »

Ragazzi potete darmi il testo dell'esercizio?

visualizzare il giorno di pasqua(su Wikipedia cerca "calcolo Pasqua" ci dovrebbe essere la formula di Gauss se non ricordo male) 
Logged
Francix
Matricola
*
Offline Offline

Posts: 31


« Reply #18 on: 31-10-2012, 10:44:21 »

Ragazzi potete darmi il testo dell'esercizio?

visualizzare il giorno di pasqua(su Wikipedia cerca "calcolo Pasqua" ci dovrebbe essere la formula di Gauss se non ricordo male) 
Grazie mille!
Logged
Zallak
Matricola
*
Offline Offline

Posts: 72


« Reply #19 on: 31-10-2012, 11:16:53 »

Nessuno si persuade a correggere sto codice? xD  testate
Logged
Francix
Matricola
*
Offline Offline

Posts: 31


« Reply #20 on: 31-10-2012, 11:46:39 »

import javax.swing.*;
public class Pasqua
{
   public static void main(String[] args)
   {
      
      int M=15;
      int N=6;
      //M e N predefiniti secondo il calendario Giuliano//
      int a,b,c,d,e;
      
       //Input valori//
         String scelta = JOptionPane.showInputDialog("Inserire 0 se si vuole usare il calendario Giuliano. Inserire 1 se si vuole usare quello Gregoriano");
                       int  k= Integer.parseInt(scelta);
      byte choose=  (byte)k;
      
                      String annos = JOptionPane.showInputDialog("Inserire l'anno di cui si vuole calcolare la Pasqua");
                       int Y = Integer.parseInt(annos);
      if(choose >1){
         System.out.println("Il valore inserito non è corretto");
      }
      
      //M e N Calendario Gregoriano//
      else if(choose ==1){
      
      if(Y>1583 && Y<1699){
         M=22;
         N=2;
      }
      else if( Y<1799)
      { M=23; N=3;}
      else if(Y<1899)
      {M=23; N=4;}
      else if(Y<2099)
      {M=24; N=5;}
      else if(Y<2199)
      {M=24; N=6;}
      else if(Y<2299)
      {M=25; M=0;}
      else if(Y<2399)
      {M=26;N=1;}
      else if(Y<2499)
      {M=25; N=1;}
   }
      
      
      // Calcolo giorno di Pasqua //
      
      a=Y%19;
      b=Y%4;
      c=Y%7;
      d=((19*a)+M)%30;
      e=((2*b)+(4*c)+(6*d)+N)%7;
      int pasqua;
      
      if((d+e)<10) {
         pasqua=d+e+22;
         System.out.println("Il giorno di Pasqua dell'anno"+Y+"è"+pasqua+"marzo");
      } else{
         pasqua=d+e-9;
         if(pasqua==26){
            pasqua=19;
         }
         if(pasqua==25 &&  d == 28 && e== 6 && a > 10)
         {
            pasqua=18;
         }
            
         System.out.println("Il giorno di Pasqua dell'anno"+Y+"è"+pasqua+"aprile");
      }
      
      
      
   }}
         
Logged
Luca_Comis
Matricola
*
Offline Offline

Gender: Male
Posts: 28


« Reply #21 on: 31-10-2012, 12:28:10 »

Nessuno si persuade a correggere sto codice? xD  testate

Basandoci sull'algoritmo descritto su Wikipedia, il programma è corretto. Sicuramente sarà sbagliato l'algoritmo fornito da Wikipedia. A mio parere non basta lasciare fissi i valori M=15 ed N=6.

Se qualcun altro ha voglia di sviluppare un algoritmo per calcolare il giorno di Pasqua secondo il calendario giuliano si faccia avanti  pc
Logged
DarioL19F
Matricola
*
Offline Offline

Posts: 90


« Reply #22 on: 31-10-2012, 14:27:13 »

Io ho risolto l'esercizio con il codice a seguire che tuttavia per un qualche bug che non riesco a vedere trova il giorno corretto solo secondo il calendario Gregoriano mentre per il Giuliano da dei problemi.. qualche programmatore potrebbe dargli un'occhiata per mostrarni l'errore?  testate pray

Code:
import javax.swing.*;

public class CalcolatorePasqua

{
    public static void main(String[] args)

    {
        
      int a,b,c,d,e,pasqua,M,N;
      System.out.println("Questo è un programma che calcola la data della Pasqua.");
      String sceltas = JOptionPane.showInputDialog("Digitare 0 per il calcolo secondo il calendario Giuliano, 1 per il calcolo secondo il calendario Gregoriano.");
      int sceltai = Integer.parseInt(sceltas);
      byte scelta = (byte) sceltai;
        
      if (scelta == 0)
          
      {             //Inizio sottoalgoritmo calendario Giuliano.
          
          
         String annos = JOptionPane.showInputDialog("Inserire l'anno di cui si vuole calcolare la Pasqua.");
         int anno = Integer.parseInt(annos);
         M = 15;
         N = 6;
         a = anno%19;
         b = anno%4;
         c = anno%7;
         d = (19*a + M)%30;
         e = (2*b +4*c + 6*d + N)%7;
          
         if ((d + e) < 10)
            
         {      //Inizio caso 1 C.G.
            
             pasqua = d + e + 22;
             System.out.println("La Pasqua dell'anno "+anno+" cade giorno "+pasqua+" marzo.");
            
         }     //Fine caso 1 C.G.
        
         else
            
         {     //Inizio caso 2 C.G.
            
             pasqua = d + e - 9;
            
             if (pasqua == 26)
                
              {  pasqua = 19;   }
            
             else if ((pasqua == 25) && (d == 28) && (e == 6) && (a > 10))
                
              {   pasqua = 18;  }
            
            System.out.println("La Pasqua dell'anno "+anno+" cade giorno "+pasqua+" aprile.");
            
        }     //Fine caso 2 C.G.
            
        
      }         //Fine sottoalgoritmo calendario Giuliano.  
        

         else if ( scelta == 1)
            
        {     //Inizio sottoalgoritmo calendario Gregoriano.
            
             String annos = JOptionPane.showInputDialog("Inserire l'anno di cui si vuole calcolare la Pasqua. (compreso tra il 1583 ed il 2499)");
             int anno = Integer.parseInt(annos);
             M = 0;
             N = 0;
            
             if (anno >= 1583 && anno <= 1699)        //Inizio sottoalgoritmo di controllo dei valori M ed N.
                
             {
                 M = 22;
                 N = 2;  
             }
            
             else if (anno >= 1700 && anno <= 1799)
            
             {
                M = 23;
                N = 3;                
                
             }
            
             else if (anno >= 1800 && anno <= 1899)
            
             {
                M = 23;
                N = 4;                
                
             }
            
             else if (anno >= 1900 && anno <= 2099)
            
             {
                M = 24;
                N = 5;                
                
             }
            
             else if (anno >= 2100 && anno <= 2199)
            
             {
                M = 24;
                N = 6;                
                
             }
            
             else if (anno >= 2200 && anno <= 2299)
            
             {
                M = 25;
                N = 0;                
                
             }
            
             else if (anno >= 2300 && anno <= 2399)
            
             {
                M = 26;
                N = 1;                
                
             }
            
             else if (anno >= 2400 && anno <= 2499)
            
             {
                M = 25;
                N = 1;                
                
             }
        
             else if (anno < 1583 || anno > 2499)
            
             {
                System.out.println("L'anno inserito non rientra nell'insieme dei valori supporati. Rieseguire il programma inserendo un valore corretto.");              
                
             }    
            
                                //Fine sottoalgoritmo di controllo dei valori M ed N.
            
         a = anno%19;
         b = anno%4;
         c = anno%7;
         d = (19*a + M)%30;
         e = (2*b +4*c + 6*d + N)%7;
          
         if ((d + e) < 10)
            
         {      //Inizio caso 1 C.Greg.
            
             pasqua = d + e + 22;
             System.out.println("La Pasqua dell'anno "+anno+" cade giorno "+pasqua+" marzo.");
            
         }     //Fine caso 1 C.Greg.
        
         else
            
         {     //Inizio caso 2 C.Greg.
            
             pasqua = d + e - 9;
            
             if (pasqua == 26)
                
              {  pasqua = 19;   }
            
             else if ((pasqua == 25) && (d == 28) && (e == 6) && (a > 10))
                
              {   pasqua = 18;  }
            
            System.out.println("La Pasqua dell'anno "+anno+" cade giorno "+pasqua+" aprile.");
            
        }     //Fine caso 2 C.Greg.
            
        
            
        }  //Fine sottoalgoritmo calendario Gregoriano.
          
       else if (scelta > 1)
           
        {
          System.out.println("Il valore inserito non è corretto riprovare con 0 o 1");
        }
          
    }
    
    
    
    
}

io l'ho provato, sia con 2013 che con 2029 funziona riportandomi rispettivamente " La Pasqua dell'anno 2013 cade giorno 22 aprile." e "La Pasqua dell'anno 2029 cade giorno 26 marzo."
confrontado le date su wikipedia, in basso, mi risultano corrette.. se spieghi meglio qual'è il problema..
Logged
Zallak
Matricola
*
Offline Offline

Posts: 72


« Reply #23 on: 31-10-2012, 15:47:19 »

Io ho risolto l'esercizio con il codice a seguire che tuttavia per un qualche bug che non riesco a vedere trova il giorno corretto solo secondo il calendario Gregoriano mentre per il Giuliano da dei problemi.. qualche programmatore potrebbe dargli un'occhiata per mostrarni l'errore?  testate pray

Code:
import javax.swing.*;

public class CalcolatorePasqua

{
    public static void main(String[] args)

    {
        
      int a,b,c,d,e,pasqua,M,N;
      System.out.println("Questo è un programma che calcola la data della Pasqua.");
      String sceltas = JOptionPane.showInputDialog("Digitare 0 per il calcolo secondo il calendario Giuliano, 1 per il calcolo secondo il calendario Gregoriano.");
      int sceltai = Integer.parseInt(sceltas);
      byte scelta = (byte) sceltai;
        
      if (scelta == 0)
          
      {             //Inizio sottoalgoritmo calendario Giuliano.
          
          
         String annos = JOptionPane.showInputDialog("Inserire l'anno di cui si vuole calcolare la Pasqua.");
         int anno = Integer.parseInt(annos);
         M = 15;
         N = 6;
         a = anno%19;
         b = anno%4;
         c = anno%7;
         d = (19*a + M)%30;
         e = (2*b +4*c + 6*d + N)%7;
          
         if ((d + e) < 10)
            
         {      //Inizio caso 1 C.G.
            
             pasqua = d + e + 22;
             System.out.println("La Pasqua dell'anno "+anno+" cade giorno "+pasqua+" marzo.");
            
         }     //Fine caso 1 C.G.
        
         else
            
         {     //Inizio caso 2 C.G.
            
             pasqua = d + e - 9;
            
             if (pasqua == 26)
                
              {  pasqua = 19;   }
            
             else if ((pasqua == 25) && (d == 28) && (e == 6) && (a > 10))
                
              {   pasqua = 18;  }
            
            System.out.println("La Pasqua dell'anno "+anno+" cade giorno "+pasqua+" aprile.");
            
        }     //Fine caso 2 C.G.
            
        
      }         //Fine sottoalgoritmo calendario Giuliano.  
        

         else if ( scelta == 1)
            
        {     //Inizio sottoalgoritmo calendario Gregoriano.
            
             String annos = JOptionPane.showInputDialog("Inserire l'anno di cui si vuole calcolare la Pasqua. (compreso tra il 1583 ed il 2499)");
             int anno = Integer.parseInt(annos);
             M = 0;
             N = 0;
            
             if (anno >= 1583 && anno <= 1699)        //Inizio sottoalgoritmo di controllo dei valori M ed N.
                
             {
                 M = 22;
                 N = 2;  
             }
            
             else if (anno >= 1700 && anno <= 1799)
            
             {
                M = 23;
                N = 3;                
                
             }
            
             else if (anno >= 1800 && anno <= 1899)
            
             {
                M = 23;
                N = 4;                
                
             }
            
             else if (anno >= 1900 && anno <= 2099)
            
             {
                M = 24;
                N = 5;                
                
             }
            
             else if (anno >= 2100 && anno <= 2199)
            
             {
                M = 24;
                N = 6;                
                
             }
            
             else if (anno >= 2200 && anno <= 2299)
            
             {
                M = 25;
                N = 0;                
                
             }
            
             else if (anno >= 2300 && anno <= 2399)
            
             {
                M = 26;
                N = 1;                
                
             }
            
             else if (anno >= 2400 && anno <= 2499)
            
             {
                M = 25;
                N = 1;                
                
             }
        
             else if (anno < 1583 || anno > 2499)
            
             {
                System.out.println("L'anno inserito non rientra nell'insieme dei valori supporati. Rieseguire il programma inserendo un valore corretto.");              
                
             }    
            
                                //Fine sottoalgoritmo di controllo dei valori M ed N.
            
         a = anno%19;
         b = anno%4;
         c = anno%7;
         d = (19*a + M)%30;
         e = (2*b +4*c + 6*d + N)%7;
          
         if ((d + e) < 10)
            
         {      //Inizio caso 1 C.Greg.
            
             pasqua = d + e + 22;
             System.out.println("La Pasqua dell'anno "+anno+" cade giorno "+pasqua+" marzo.");
            
         }     //Fine caso 1 C.Greg.
        
         else
            
         {     //Inizio caso 2 C.Greg.
            
             pasqua = d + e - 9;
            
             if (pasqua == 26)
                
              {  pasqua = 19;   }
            
             else if ((pasqua == 25) && (d == 28) && (e == 6) && (a > 10))
                
              {   pasqua = 18;  }
            
            System.out.println("La Pasqua dell'anno "+anno+" cade giorno "+pasqua+" aprile.");
            
        }     //Fine caso 2 C.Greg.
            
        
            
        }  //Fine sottoalgoritmo calendario Gregoriano.
          
       else if (scelta > 1)
           
        {
          System.out.println("Il valore inserito non è corretto riprovare con 0 o 1");
        }
          
    }
    
    
    
    
}

io l'ho provato, sia con 2013 che con 2029 funziona riportandomi rispettivamente " La Pasqua dell'anno 2013 cade giorno 22 aprile." e "La Pasqua dell'anno 2029 cade giorno 26 marzo."
confrontado le date su wikipedia, in basso, mi risultano corrette.. se spieghi meglio qual'è il problema..

Il problema sta nel fatto che inserendo 2012 come hanno restituisce 2 aprile invece che quindici aprile..uhm ora che me lo fai notare in effetti per alcuni anni funziona mentre per altri no quindi come dice

Nessuno si persuade a correggere sto codice? xD  testate

Basandoci sull'algoritmo descritto su Wikipedia, il programma è corretto. Sicuramente sarà sbagliato l'algoritmo fornito da Wikipedia. A mio parere non basta lasciare fissi i valori M=15 ed N=6.

Se qualcun altro ha voglia di sviluppare un algoritmo per calcolare il giorno di Pasqua secondo il calendario giuliano si faccia avanti  pc
il problema potrebbe stare più a monte e dipendere dall'algoritmo non ci avevo pensato il effetti Smiley
 boh grazie delle delucidazioni xD
Logged
MicheleDV
Matricola
*
Offline Offline

Posts: 10


« Reply #24 on: 07-11-2012, 12:44:43 »

Io ho optato per l'algoritmo che lavora con qualsiasi anno, anche al di fuori dell'intervallo 1900/2099 (che ho pure fatto ma che poi ho eliminato).
Non ho integrato comunque nessuna immissione da parte dell'utente quindi l'anno è dentro il codice:
Code:
public class Pasqua
{
public static void main(String[]args)
{
int Anno, GoldNum, C, Epatta, GiorLunPien, GiornSett, GiornASett, MeseP, GiornoP;
String nome;
Anno=2013;
GoldNum=Anno%19;
C=Anno/100;
Epatta=(C-(C/4)-((8*C+13)/25)+19*GoldNum+15)%30;
GiorLunPien=Epatta-(Epatta/28)*(1-(29/(Epatta+1))*((21-GoldNum)/11));
GiornSett=(Anno+(Anno/4)+GiorLunPien+2-C+(C/4))%7;
GiornASett=GiorLunPien-GiornSett;
MeseP=3+((GiornASett+40)/44);
GiornoP=GiornASett+28-31*(MeseP/4);
if (MeseP==3)
{
nome="marzo";
}
else
{
nome="aprile";
}
System.out.println("Il giorno di Pasqua richiesto e' "+GiornoP+" "+nome+" "+Anno);
}
}

PS: già, i nomi delle variabili sono un po' lunghe 
Logged
Maverick17
Matricola
*
Offline Offline

Posts: 3


« Reply #25 on: 07-11-2012, 19:15:29 »


forse sarebbe stato meglio scrivere else if invece di solo if .... dovrebbe una forma più corretta per il resto l'ho fatto pure io in quel modo... Wink invece di scrivere in questo modo :
if(anno>1582&&anno<1700)
      {
      }
      if(anno>1699&&anno<1800)
      {
      }
      if(anno>1799&&anno<1900)
      {
      }
      if(anno>1899&&anno<2100)
      {
      }
      if(anno>2099&&anno<2200)
      {
      }
      if(anno>2199&&anno<2300)
      {
      }
      if(anno>2299&&anno<2400)
      {
      }
      if(anno>2399&&anno<2500)
      {
      }
« Last Edit: 07-11-2012, 19:18:27 by Maverick17 » Logged
ChiaraT91S
Matricola
*
Offline Offline

Posts: 64


« Reply #26 on: 07-11-2012, 19:39:12 »


forse sarebbe stato meglio scrivere else if invece di solo if .... dovrebbe una forma più corretta per il resto l'ho fatto pure io in quel modo... Wink invece di scrivere in questo modo :
if(anno>1582&&anno<1700)
      {
      }
      if(anno>1699&&anno<1800)
      {
      }
      if(anno>1799&&anno<1900)
      {
      }
      if(anno>1899&&anno<2100)
      {
      }
      if(anno>2099&&anno<2200)
      {
      }
      if(anno>2199&&anno<2300)
      {
      }
      if(anno>2299&&anno<2400)
      {
      }
      if(anno>2399&&anno<2500)
      {
      }
gli if li controlla tutti quindi si..decisamente meglio gli else if pc
« Last Edit: 07-11-2012, 23:17:29 by ChiaraT91S » Logged
Pages: 1 [2]   Go Up
Print
Jump to: