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

Posts: 90


« 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  
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?  
« Last Edit: 24-10-2012, 13:55:51 by DarioL19F » Logged
ChiaraT91S
Matricola
*
Offline Offline

Posts: 64


« Reply #1 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  
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?  

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...
« Last Edit: 24-10-2012, 14:11:36 by ChiaraT91S » Logged
NetBender
Matricola
*
Offline Offline

Gender: Male
Posts: 77


WWW
« Reply #2 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);
}
}
Logged

Ci sono λfx.f(f(f(f(f(f(f(f(f(fx))))))))) tipi di persone, quelli che conoscono i numerali di Church (e la codifica binaria) e quelli che non li conoscono..
(Io dopo aver passato un pomeriggio a studiare il Lambda Calcolo)

"Solo chi è abbastanza folle da credere di poter cambiare il mondo lo cambia davvero"
(Albert Einstein)
-Gh1r0-
Matricola
*
Offline Offline

Posts: 1


« Reply #3 on: 24-10-2012, 18:47:18 »

Eccovi il mio..  pc
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
Logged
DarioL19F
Matricola
*
Offline Offline

Posts: 90


« Reply #4 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  questo è completo anche se nella lavagna (nel caso in cui chiede di scriverlo) non ci entra  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
Logged
DarioL19F
Matricola
*
Offline Offline

Posts: 90


« Reply #5 on: 24-10-2012, 20:06:08 »

l'indentazione
[Emoticon] Rosik Asd [Emoticon] Rosik Asd [Emoticon] Rosik Asd [Emoticon] Rosik Asd

 
Logged
NetBender
Matricola
*
Offline Offline

Gender: Male
Posts: 77


WWW
« Reply #6 on: 24-10-2012, 20:51:53 »

bel programma 
Grazie  ..

questo è completo anche se nella lavagna (nel caso in cui chiede di scriverlo) non ci entra  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..  pc
Logged

Ci sono λfx.f(f(f(f(f(f(f(f(f(fx))))))))) tipi di persone, quelli che conoscono i numerali di Church (e la codifica binaria) e quelli che non li conoscono..
(Io dopo aver passato un pomeriggio a studiare il Lambda Calcolo)

"Solo chi è abbastanza folle da credere di poter cambiare il mondo lo cambia davvero"
(Albert Einstein)
ɹǝǝuıƃuǝsɹǝʌǝɹ
Administrator
God of the Forum
*****
Offline Offline

Gender: Male
Posts: 4.474


Più grande è la lotta, e più è glorioso il trionfo


WWW
« Reply #7 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 ...
Logged

La grande marcia della distruzione mentale proseguirà. Tutto verrà negato. Tutto diventerà un credo. È un atteggiamento ragionevole negare l'esistenza delle pietre sulla strada; sarà un dogma religioso affermarla. È una tesi razionale pensare di vivere tutti in un sogno; sarà un esempio di saggezza mistica affermare che siamo tutti svegli. Accenderemo fuochi per testimoniare che due più due fa quattro. Sguaineremo spade per dimostrare che le foglie sono verdi in estate. Non ci resterà quindi che difendere non solo le incredibili virtù e saggezze della vita umana, ma qualcosa di ancora più incredibile: questo immenso, impossibile universo che ci guarda dritto negli occhi. Combatteremo per i prodigi visibili come se fossero invisibili. Guarderemo l'erba e i cieli impossibili con uno strano coraggio. Saremo tra coloro che hanno visto eppure hanno creduto.

In tutto, amare e servire.

  
                            ن                           
I can deal with ads,
I can deal with buffer,
but when ads buffer
I suffer...

...nutrimi, o Signore, "con il pane delle lacrime; dammi, nelle lacrime, copiosa bevanda...

   YouTube 9GAG    anobii  S  Steam T.B.o.I. Wiki [univ] Lezioni private  ʼ  Albo d'Ateneo Unicode 3.0.1
Usa "Search" prima di aprire un post - Scrivi sempre nella sezione giusta - Non spammare - Rispetta gli altri utenti - E ricorda di seguire il Regolamento
XDnl
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 376



« Reply #8 on: 24-10-2012, 21:48:33 »

Credo intenda la concatenazione della stringa con l'operatore +
Logged
ɹǝǝuıƃuǝsɹǝʌǝɹ
Administrator
God of the Forum
*****
Offline Offline

Gender: Male
Posts: 4.474


Più grande è la lotta, e più è glorioso il trionfo


WWW
« Reply #9 on: 24-10-2012, 22:07:11 »

Credo intenda la concatenazione della stringa con l'operatore +
In tal caso, pardòn  ...
Logged

La grande marcia della distruzione mentale proseguirà. Tutto verrà negato. Tutto diventerà un credo. È un atteggiamento ragionevole negare l'esistenza delle pietre sulla strada; sarà un dogma religioso affermarla. È una tesi razionale pensare di vivere tutti in un sogno; sarà un esempio di saggezza mistica affermare che siamo tutti svegli. Accenderemo fuochi per testimoniare che due più due fa quattro. Sguaineremo spade per dimostrare che le foglie sono verdi in estate. Non ci resterà quindi che difendere non solo le incredibili virtù e saggezze della vita umana, ma qualcosa di ancora più incredibile: questo immenso, impossibile universo che ci guarda dritto negli occhi. Combatteremo per i prodigi visibili come se fossero invisibili. Guarderemo l'erba e i cieli impossibili con uno strano coraggio. Saremo tra coloro che hanno visto eppure hanno creduto.

In tutto, amare e servire.

  
                            ن                           
I can deal with ads,
I can deal with buffer,
but when ads buffer
I suffer...

...nutrimi, o Signore, "con il pane delle lacrime; dammi, nelle lacrime, copiosa bevanda...

   YouTube 9GAG    anobii  S  Steam T.B.o.I. Wiki [univ] Lezioni private  ʼ  Albo d'Ateneo Unicode 3.0.1
Usa "Search" prima di aprire un post - Scrivi sempre nella sezione giusta - Non spammare - Rispetta gli altri utenti - E ricorda di seguire il Regolamento
DarioL19F
Matricola
*
Offline Offline

Posts: 90


« Reply #10 on: 24-10-2012, 22:09:30 »

Credo intenda la concatenazione della stringa con l'operatore +
In tal caso, pardòn  ...

 beer
Logged
Albertomac
Matricola
*
Offline Offline

Posts: 8


« Reply #11 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);
}
}

« Last Edit: 25-10-2012, 07:50:55 by Albertomac » Logged
LtWorf
Forumista Esperto
****
Offline Offline

Posts: 1.079

Ogni cosa da me scritta è da intendersi come opinione personale e non come dato di fatto. Anche le eventuali dimostrazioni matematiche da me scritte saranno opinioni personali e quindi dovranno venire dimostrate da una terza parte di fiducia


WWW
« Reply #12 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.
Logged

There are some OO programming languages. I will create the first -_-' language.

LtWorf
DarioL19F
Matricola
*
Offline Offline

Posts: 90


« Reply #13 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 
Logged
NetBender
Matricola
*
Offline Offline

Gender: Male
Posts: 77


WWW
« Reply #14 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 
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.. 
Logged

Ci sono λfx.f(f(f(f(f(f(f(f(f(fx))))))))) tipi di persone, quelli che conoscono i numerali di Church (e la codifica binaria) e quelli che non li conoscono..
(Io dopo aver passato un pomeriggio a studiare il Lambda Calcolo)

"Solo chi è abbastanza folle da credere di poter cambiare il mondo lo cambia davvero"
(Albert Einstein)
Pages: [1] 2   Go Up
Print
Jump to: