Forum Informatica Unict

LAUREA TRIENNALE (D.M. 270/04) => Programmazione 1, 9 CFU => Topic started by: DarioL19F on 24-10-2012, 13:07:30



Title: Esercizio Pasqua richiesto dal prof
Post by: DarioL19F on 24-10-2012, 13:07:30
Code:

public class Pasqua
{
public static void main(String[] args)
{
int Y=2049;
int a,b,c,d,e,pasqua;
int M=24;
int N=5;
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) {
pasqua=d+e+22;
System.out.println(" nel "+Y+" pasqua e' giorno " +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(" nel "+Y+" pasqua e' giorno " +pasqua + " aprile");
}

}
}

Ho scritto l'esercizio richiesto dal prof, per verifica della corretta pasqua ho controllato su questo link  .applausi
http://luirig.altervista.org/calendario/pasqua.htm

ho inserito come M 24 e come N 5, come da tabella per gli anni che vanno da 1900 al 2099

qualcuno l'ha fatto in altro modo?  .ciaociao


Title: Re:Esercizio Pasqua richiesto dal prof
Post by: ChiaraT91S on 24-10-2012, 14:09:52
Code:

public class Pasqua
{
public static void main(String[] args)
{
int Y=2049;
int a,b,c,d,e,pasqua;
int M=24;
int N=5;
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) {
pasqua=d+e+22;
System.out.println(" nel "+Y+" pasqua e' giorno " +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(" nel "+Y+" pasqua e' giorno " +pasqua + " aprile");
}

}
}

Ho scritto l'esercizio richiesto dal prof, per verifica della corretta pasqua ho controllato su questo link  .applausi
http://luirig.altervista.org/calendario/pasqua.htm

ho inserito come M 24 e come N 5, come da tabella per gli anni che vanno da 1900 al 2099

qualcuno l'ha fatto in altro modo?  .ciaociao
.quoto
Code:
public class Pasqua
{
public static void main(String[] args)
{
int Anno=2013;
int a,b,c,d,e,pasqua;
int M=24;
int N=5;
a=Anno %19;
System.out.println("Calcoliamo la Pasqua dell anno" +Anno);
//System.out.println("a=" +a );
b=Anno %4;
//System.out.println("b=" +b);
c=Anno %7;
//System.out.println("c=" +c);
d=(19*a +M)%30;
//System.out.println("d=" +d);
e=(2*b+4*c+6*d+N)%7;
//System.out.println("e=" +e);
if (d+e>10){
 pasqua=d+e-9; //aprile
 if(pasqua==26) pasqua=19;
 if(pasqua==25 & d==28 &e==6&a>10) pasqua=18;
 System.out.println("nell'anno " +Anno+" la pasqua è giorno " +pasqua+ " aprile");
}
else {
  pasqua=d+e+22; //marzo
  System.out.println("nell'anno " +Anno+ "la pasqua è giorno" +pasqua+ "marzo");          
}
}
}
I print di a,b,c,d,e mi servivano solo per verificare... .ciaociao


Title: Re:Esercizio Pasqua richiesto dal prof
Post by: NetBender on 24-10-2012, 16:14:58
Eccovi il mio:
Code:
import javax.swing.*;
import java.util.Calendar;

class Pasqua
{
public static void main(String args[])
{
int anno,a,b,c,d,e,M=0,N=0;
int y = (Calendar.getInstance()).get(Calendar.YEAR);
String p="";

do
{
anno=Integer.parseInt(JOptionPane.showInputDialog("Inserisci l'anno  per calcolo del giorno di Pasqua"));
if(anno<1583||anno>2499)
{
JOptionPane.showMessageDialog(null,"E' necessario inserire un valore compreso tra 1583 e 2499","Errore",JOptionPane.ERROR_MESSAGE);
}
}while(anno<1583||anno>2499);

//Inizio controlli anno
if(anno>1582&&anno<1700)
{
M=22;
N=2;
}
if(anno>1699&&anno<1800)
{
M=23;
N=3;
}
if(anno>1799&&anno<1900)
{
M=23;
N=4;
}
if(anno>1899&&anno<2100)
{
M=24;
N=5;
}
if(anno>2099&&anno<2200)
{
M=24;
N=6;
}
if(anno>2199&&anno<2300)
{
M=25;
N=0;
}
if(anno>2299&&anno<2400)
{
M=26;
N=1;
}
if(anno>2399&&anno<2500)
{
M=25;
N=1;
}
//Fine controlli anno
//Inizio calcolo giorno
a=anno%19;
b=anno%4;
c=anno%7;
d=(19*a + M)%30;
e=(2*b+4*c+6*d+N)%7;
//Fine calcolo giorno
if(y==anno)
{
p="Quest'anno la Pasqua cadrà Domenica ";
}
if(y>anno)
{
p="La Pasqua nel "+anno+" cadde Domenica ";
}
if(y<anno)
{
p="La Pasqua nel "+anno+" cadrà Domenica ";
}

if((d+e)<10)
{
p=p+(d+e+22)+" Marzo";
}else
{
if((d+e-9)==26)
{
p=p+"19 Aprile";
}else
{
if((d+e-9)==25&&d==28&&e==6&&a>10)
{
p=p+"18 Aprile";
}else
{
p=p+(d+e-9)+" Aprile";
}
}
}
JOptionPane.showMessageDialog(null,p);
}
}


Title: Re:Esercizio Pasqua richiesto dal prof
Post by: -Gh1r0- on 24-10-2012, 18:47:18
Eccovi il mio..  :[Emoticon] PC Asd:
Ho usato una funzione di input per chiedere direttamente all'utente l'anno, non ho usato ulteriori package oltre a questo.
Code:
import jbook.util.Input;

public class CalcoloPasqua {
public static void main(String[] args) {
final int MIN_YEAR = 1900, MAX_YEAR = 2099;
byte m = 24, n = 5;
int anno;
    int a, b, c, d, e, giorno;
    String mese;
anno = Input.readInt("Inserisci l'anno (compreso tra il 1900 e il 2099, estremi inclusi): ");
if (anno >= MIN_YEAR && anno <= MAX_YEAR) {
a = anno % 19;
b = anno % 4;
c = anno % 7;
d = ((19 * a) + m) % 30;
    e = ((2 * b) + (4 * c) + (6 * d) + n) % 7;
    giorno = 22 + d + e;
    if (giorno <= 31) {
    mese = "Marzo";
    }else{
    mese = "Aprile";
    giorno = (22 + d + e) - 31;
    if (giorno == 25 && (d == 28 && a > 10)) {
    giorno = 18;
    }else{
    if (giorno == 25 && (d != 28 || a <= 10)) {
    giorno = 25;
    }
    }    
    }
    System.out.print("Pasqua del " + anno + " viene il giorno " + giorno + " di " + mese);
}else{
System.out.print("Attenzione: l'anno inserito non è compreso tra il 1900 e il 2099! Riavvia il programma e reinserisci l'anno.");
}
}
}

Non è proprio completo, ovvero è stato fatto solo per funzionare con date comprese tra il 1900 e il 2099.

NB: Scusate l'indentazione del codice ma il copia-incolla sul forum me lo "sballa".  :[Emoticon] Asd:


Title: Re:Esercizio Pasqua richiesto dal prof
Post by: DarioL19F on 24-10-2012, 20:03:22
Eccovi il mio:
Code:
import javax.swing.*;
import java.util.Calendar;

class Pasqua
{
public static void main(String args[])
{
int anno,a,b,c,d,e,M=0,N=0;
int y = (Calendar.getInstance()).get(Calendar.YEAR);
String p="";

do
{
anno=Integer.parseInt(JOptionPane.showInputDialog("Inserisci l'anno  per calcolo del giorno di Pasqua"));
if(anno<1583||anno>2499)
{
JOptionPane.showMessageDialog(null,"E' necessario inserire un valore compreso tra 1583 e 2499","Errore",JOptionPane.ERROR_MESSAGE);
}
}while(anno<1583||anno>2499);

//Inizio controlli anno
if(anno>1582&&anno<1700)
{
M=22;
N=2;
}
if(anno>1699&&anno<1800)
{
M=23;
N=3;
}
if(anno>1799&&anno<1900)
{
M=23;
N=4;
}
if(anno>1899&&anno<2100)
{
M=24;
N=5;
}
if(anno>2099&&anno<2200)
{
M=24;
N=6;
}
if(anno>2199&&anno<2300)
{
M=25;
N=0;
}
if(anno>2299&&anno<2400)
{
M=26;
N=1;
}
if(anno>2399&&anno<2500)
{
M=25;
N=1;
}
//Fine controlli anno
//Inizio calcolo giorno
a=anno%19;
b=anno%4;
c=anno%7;
d=(19*a + M)%30;
e=(2*b+4*c+6*d+N)%7;
//Fine calcolo giorno
if(y==anno)
{
p="Quest'anno la Pasqua cadrà Domenica ";
}
if(y>anno)
{
p="La Pasqua nel "+anno+" cadde Domenica ";
}
if(y<anno)
{
p="La Pasqua nel "+anno+" cadrà Domenica ";
}

if((d+e)<10)
{
p=p+(d+e+22)+" Marzo";
}else
{
if((d+e-9)==26)
{
p=p+"19 Aprile";
}else
{
if((d+e-9)==25&&d==28&&e==6&&a>10)
{
p=p+"18 Aprile";
}else
{
p=p+(d+e-9)+" Aprile";
}
}
}
JOptionPane.showMessageDialog(null,p);
}
}

bel programma  .smile questo è completo anche se nella lavagna (nel caso in cui chiede di scriverlo) non ci entra  .rido io non ho voluto inserire l'input da tastiera perche' alla fine non lo abbiamo ancora fatto (anche se l'ho gia studiato x sfizio )
avendo fatto c, trovo molto bello poter scrivere in java codice come questo:
Code:
else
{
p=p+(d+e-9)+" Aprile";
}
che se non erro in c non è possibile fare.. sicuramente hai gia fatto java x poter scrivere un programma cosi ben strutturato  :-OK


Title: Re:Esercizio Pasqua richiesto dal prof
Post by: DarioL19F on 24-10-2012, 20:06:08
l'indentazione
:[Emoticon] Rosik Asd: :[Emoticon] Rosik Asd: :[Emoticon] Rosik Asd: :[Emoticon] Rosik Asd:

 .risatona


Title: Re:Esercizio Pasqua richiesto dal prof
Post by: NetBender on 24-10-2012, 20:51:53
bel programma  .smile
Grazie  .wink..

questo è completo anche se nella lavagna (nel caso in cui chiede di scriverlo) non ci entra  .rido io non ho voluto inserire l'input da tastiera perche' alla fine non lo abbiamo ancora fatto (anche se l'ho gia studiato x sfizio )

che se non erro in c non è possibile fare.. sicuramente hai gia fatto java x poter scrivere un programma cosi ben strutturato  :-OK
Si ho già fatto Java alle superiori ed ho voluto metterci più funzioni solo per ripassare (dato che non programmo da più di un anno)..
Ho fatto molto poco in C ma ti posso assicurare che in Java si possono fare cose fantastiche..  :[Emoticon] PC Asd:


Title: Re:Esercizio Pasqua richiesto dal prof
Post by: ɹǝǝuıƃuǝsɹǝʌǝɹ on 24-10-2012, 21:26:28
Code:
else
{
p=p+(d+e-9)+" Aprile";
}
che se non erro in c non è possibile fare.. sicuramente hai gia fatto java x poter scrivere un programma cosi ben strutturato  :-OK
Erri. In C, a meno di direttive al precompilatore, puoi fare stare tutto il tuo programma in una sola riga .bah...


Title: Re:Esercizio Pasqua richiesto dal prof
Post by: XDnl on 24-10-2012, 21:48:33
Credo intenda la concatenazione della stringa con l'operatore +


Title: Re:Esercizio Pasqua richiesto dal prof
Post by: ɹǝǝuıƃuǝsɹǝʌǝɹ on 24-10-2012, 22:07:11
Credo intenda la concatenazione della stringa con l'operatore +
In tal caso, pardòn  .arrossisco...


Title: Re:Esercizio Pasqua richiesto dal prof
Post by: DarioL19F on 24-10-2012, 22:09:30
Credo intenda la concatenazione della stringa con l'operatore +
In tal caso, pardòn  .arrossisco...

 :-)H(-:


Title: Re:Esercizio Pasqua richiesto dal prof
Post by: Albertomac on 24-10-2012, 22:30:59
Code:

import javax.swing.*;

public class Ester
{
public static void main(String[] args)
{

int year = 0 , m, n, a, b, c, d, e, dayOfEster;

int x;

int mArray[] = { 22, 22, 23, 23, 24, 24, 24, 25, 26, 25 };
int nArray[] = { 2, 2, 3, 4, 5, 5, 6, 0 , 1, 1 };

String yearString;
String text = "Domenica ";


do {
yearString = JOptionPane.showInputDialog("Inserisci una anno: (1583~2499)");

try  
{  
year = Integer.parseInt(yearString); 
}  
catch( NumberFormatException nfe )  
{  
continue;
}  

} while (year < 1583 || year > 2499 || yearString.length() == 0);


x = (int)(year / 100)-15;

m = mArray[x];
n = nArray[x];

a = year%19;
b = year%4;
c = year%7;

d = (19*a + m)%30;
e = (2*b + 4*c + 6*d + n)%7;

if (d+e < 10)
{
dayOfEster = d+e+22;

text = text+dayOfEster+" Marzo";

} else {

dayOfEster = d+e-9;

if ( dayOfEster == 26 )
dayOfEster = 19;
else if ( dayOfEster == 25 && d == 28 && e == 6 && a>10)
dayOfEster = 18;

text = text+dayOfEster+" Aprile";

}

JOptionPane.showMessageDialog(null,text);
}
}



Title: Re:Esercizio Pasqua richiesto dal prof
Post by: LtWorf on 25-10-2012, 01:14:14
Eccovi il mio:
Code:
i

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)
{
}

Dato che di tutti quegli if uno solo verrà eseguito, gli devi mettere gli else!!! Sennò vengono valutati TUTTI invece di saltare alla fine alla prima condizione che risulta vera.
Fai un sacco di confronti in più inutilmente, e i branch in genere non sono amici della pipeline della cpu quindi dove è possibile evitarli vanno evitati.


Title: Re:Esercizio Pasqua richiesto dal prof
Post by: DarioL19F on 25-10-2012, 12:31:18
Eccovi il mio:
Code:
i

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)
{
}

Dato che di tutti quegli if uno solo verrà eseguito, gli devi mettere gli else!!! Sennò vengono valutati TUTTI invece di saltare alla fine alla prima condizione che risulta vera.
Fai un sacco di confronti in più inutilmente, e i branch in genere non sono amici della pipeline della cpu quindi dove è possibile evitarli vanno evitati.

in effetti  .penso


Title: Re:Esercizio Pasqua richiesto dal prof
Post by: NetBender on 26-10-2012, 14:40:23
Eccovi il mio:
Code:
i

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)
{
}

Dato che di tutti quegli if uno solo verrà eseguito, gli devi mettere gli else!!! Sennò vengono valutati TUTTI invece di saltare alla fine alla prima condizione che risulta vera.
Fai un sacco di confronti in più inutilmente, e i branch in genere non sono amici della pipeline della cpu quindi dove è possibile evitarli vanno evitati.

in effetti  .penso
L'ho voluto fare così sia per farlo capire a chi non ha fatto Java, sia (e soprattutto) perché non ci volevo perdere troppo tempo..  .whistling


Title: Re:Esercizio Pasqua richiesto dal prof
Post by: Zallak 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?  :-)| :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");
        }
          
    }
    
    
    
    
}


Title: Re:Esercizio Pasqua richiesto dal prof
Post by: Francix on 30-10-2012, 11:33:27
Ragazzi potete darmi il testo dell'esercizio?


Title: Re:Esercizio Pasqua richiesto dal prof
Post by: ChiaraT91S 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)  .smile


Title: Re:Esercizio Pasqua richiesto dal prof
Post by: Francix 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)  .smile
Grazie mille!


Title: Re:Esercizio Pasqua richiesto dal prof
Post by: Zallak on 31-10-2012, 11:16:53
Nessuno si persuade a correggere sto codice? xD  :-)|


Title: Re:Esercizio Pasqua richiesto dal prof
Post by: Francix 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");
      }
      
      
      
   }}
         


Title: Re:Esercizio Pasqua richiesto dal prof
Post by: Luca_Comis on 31-10-2012, 12:28:10
Nessuno si persuade a correggere sto codice? xD  :-)|

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  :[Emoticon] PC Asd:


Title: Re:Esercizio Pasqua richiesto dal prof
Post by: DarioL19F 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?  :-)| :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..


Title: Re:Esercizio Pasqua richiesto dal prof
Post by: Zallak 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?  :-)| :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  :-)|

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  :[Emoticon] PC Asd:
il problema potrebbe stare più a monte e dipendere dall'algoritmo non ci avevo pensato il effetti :)
 :boh grazie delle delucidazioni xD


Title: Re:Esercizio Pasqua richiesto dal prof
Post by: MicheleDV 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  .whistling


Title: Re:Esercizio Pasqua richiesto dal prof
Post by: Maverick17 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... ;) 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)
      {
      }


Title: Re:Esercizio Pasqua richiesto dal prof
Post by: ChiaraT91S 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... ;) 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 :[Emoticon] PC Asd: