Paasdatum

Status
Niet open voor verdere reacties.

Seth001

Nieuwe gebruiker
Lid geworden
23 jan 2010
Berichten
4
Hallo,

Ik ben 1 week geleden begonnen met java, maar ik loop nu al op problemen. Ik heb een programma gemaakt om de paasdatum te bereken voor de jaar 1900 tot 2099. Probleem die ik nu heb is dat de uitkomst niet de juiste data is. Voorbeeld 2009 hoort passen te vallen op dag 12 van maand 4 en 2010 op dag 4 van maand 4.
Uikomst dat ik nu krijg is dat pasen in 2009 valt op 17 van maand 4 en 2010 op 31 van maand 3.

Opdracht1
Code:
import javax.swing.*;

public class Opdracht1 extends JFrame
{
	  public Opdracht1()
	  {
	    setSize( 410, 450 );
	    setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
	    setTitle( "Kaars" );
	    setLocation( 100, 100 );
	    JPanel hoofdpaneel = new Paasdagpaneel();
	    add( hoofdpaneel );
	    setVisible( true );
	  }


	public static void main( String[] args )
	  {
	    new Opdracht1(); 
	  }

	}

Paasdagpaneel
Code:
import javax.swing.*;
import java.awt.event.*;

public class Paasdagpaneel extends JPanel implements ActionListener
{
	private int jaartal, A, B, C, D, E, F, dag, maand;
	private JButton knop; 
	private JTextField invoerVeld;
	private JTextArea area;

	Paasdagpaneel()
	{
		invoerVeld = new JTextField(10);
		knop = new JButton ("Bepaal paasdatum");
		knop.addActionListener(this);
		area = new JTextArea(14,30);
		area.setEditable(false);
		add(invoerVeld);
		add(knop);
		add(area);
		
	}
	
	public void actionPerformed(ActionEvent e)
	{
		//getal = 6;
		//int yPos = 0;
		String resultaatVeld =  invoerVeld.getText();
		jaartal = Integer.parseInt(resultaatVeld);
		A = jaartal%19;
		B = jaartal%4;
		C = jaartal%7;
		D = (19*A+24)%30;
		E = (5+2*B*C+6*D)%7;
		F = D+E-9;
		if(jaartal >= 1900)
		{
			if(jaartal <= 2099)
			{
				if( F > 0)
				{
					maand = 4;
					if((F)== 26)
					{
						dag = 19;
						area.setText( " In " + jaartal + " valt Passen op de dag " + dag + " van maand " + maand  );
					}
					else
					{
						if((F) == 25)
						{
							if((D )==28)
							{
								dag = 18;
								area.setText( " In " + jaartal + " valt Passen op de dag " + dag + " van maand " + maand  );
							}
						}
						else
						{
							dag = F;
							area.setText( " In " + jaartal + " valt Passen op de dag " + dag + " van maand " + maand  );
						}
					}
			
				}
				else
				{
						dag = F+31;
						maand = 3;
						area.setText( " In " + jaartal + " valt Passen op de dag " + dag + " van maand " + maand  );
				
				}
			}
			else
			{
				JOptionPane.showMessageDialog( 
				          null, 
				          "Het jaartal moet 2099 of eerder zijn!", 
				          "onjuist jaartel", 
				          JOptionPane.ERROR_MESSAGE );
			}
		}
		else
		{
			JOptionPane.showMessageDialog( 
			          null, 
			          "Het jaartal moet 1900 of later zijn!", 
			          "onjuist jaartel", 
			          JOptionPane.ERROR_MESSAGE );
		}
	}
}

PS: bekijk de bijlage voor de jar bestand.
 

Bijlagen

Pasen word op de zondag na de eerste volle maan in de lente gevierd.
Lente word het op 20 of 21 maart (op het noordelijk halfrond).
Wanneer het volle maan is word bepaald door de getijdenbewegingen.
(bron: wikipedia.org)

Uit deze gegevens zou je dan een algoritme moeten bedenken wanneer het Pasen is, maar er zitten toch redelijk wat factoren in die kunnen verschillen? Zoals: 20 / 21 maart en wanneer het volle maan is ook moet je kijken of het dan een zondag is / wanneer de eerste volgende zondag is. Hoe wil je dit goed gaan bepalen?
 
Laatst bewerkt:
Opgelost, het moet zijn:
Code:
A = jaartal%19;
		B = jaartal%4;
		C = jaartal%7;
		D = (19*A+24)%30;
		E = (5+2*B+4*C+6*D)%7;
		F = D+E-9;
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan