Schrikkeljaren: java

Moderator: Rhiannon

Gebruikersavatar
Berichten: 768

Schrikkeljaren: java

Hallo iedereen,

Ik was voor de 'lol' eens een programmaatje aan het schrijven over schrikkeljaren. Ik wou eens weten hoeveel schrikkeljaren we al gehad hebben vanaf het jaar 0. Ik kom uit op 489, terwijl wikipedia 487 zegt. Zit er dan een fout in mijn programma?


Code: Selecteer alles

int teller = 0;

for (int j = 0; j < 2013; j++) {

    Boolean z = (j % 100 == 0) ? ((j % 400 == 0) ? (true) : (false))

                    : ((j % 4 == 0) ? (true) : (false));

    if (z == true) {

   	 teller = teller + 1;

    }

}

System.out.println(teller);
pastebin
Het Wetenschapsforum heeft ook een facebook pagina!

Gebruikersavatar
Berichten: 2.609

Re: Schrikkeljaren: java

Java code wordt mooi weergegeven in code tags, dus ik heb je code in je bericht toegevoegd.

Als ik snel even reken kom ik daar ook op uit. Ik vermoed dat de persoon die het getal op wikipedia heeft gezet 0 en 2012 niet heeft meegeteld.

Even terzijde: dat stuk Boolean z = ..; is vrij 'lelijk'.

Het is een betere gewoonte om geneste if else constructies expliciet op te schrijven. Die korte notatie is soms handig, maar is moeilijker om te debuggen moest dat nodig zijn.

Gebruikersavatar
Berichten: 768

Re: Schrikkeljaren: java

Ik weet dat dat stukje code er verschrikkelijk uit ziet, maar ik wou nog eens oefenen op de vorm ( ) ? ( ) : ( ).
Het Wetenschapsforum heeft ook een facebook pagina!

Berichten: 7.068

Re: Schrikkeljaren: java

\(\lfloor{\frac{x}{4}}\rfloor - \lfloor{\frac{x}{100}}\rfloor + \lfloor{\frac{x}{400}}\rfloor\)

Gebruikersavatar
Berichten: 768

Re: Schrikkeljaren: java

Wat stelt dat voor?
Het Wetenschapsforum heeft ook een facebook pagina!

Gebruikersavatar
Moderator
Berichten: 8.166

Re: Schrikkeljaren: java

Ik kom in het midden uit :-k

int(2013/4)=503

-int(2013/100)=-20

int(2013/400)=5

503-20+5=488

Nul is niet deelbaar door 4.

Gebruikersavatar
Berichten: 2.609

Re: Schrikkeljaren: java

Michel Uphoff schreef: di 15 jan 2013, 18:27
Nul is niet deelbaar door 4.
0/4 = 0 want 0*4 = 0 ;)

Je bedoelt het waarschijnlijk wel juist, maar ik geloof niet dat je mag zeggen dat het 'niet deelbaar' is.

Als 0 als schrikkeljaar meegerekend moet worden, dan moet er nog een +1 in de formule staan.

Gebruikersavatar
Moderator
Berichten: 8.166

Re: Schrikkeljaren: java

0/4 = 0 want 0*4 = 0 ;)
Tja... Ik had me wel wat minder ongelukkig uit mogen drukken. #-o

Wat ik bedoel, is dat er volgens de huidige kalender geen jaar nul is in het AD systeem, 1 BC en daarna 1 AD en dus is het jaar nul niet deelbaar want niet bestaand.

De Engelse Wikipedia stelt het volgende:

"To simplify calculations, astronomers have used a defined leap year zero equal to 1 BC of the traditional Christian era since the 17th century." Als dit klopt is -1 dus een schrikkeljaar, en 'vanaf nul' is het dan 488.

De Nederlandse Wikipedia stelt:

"Volgens deze methode zouden er sinds het begin van onze jaartelling 489 schrikkeljaren zijn geweest, met het jaar 4 als eerste." Wat dan niet klopt.

Berichten: 7.068

Re: Schrikkeljaren: java

EvilBro schreef: di 15 jan 2013, 16:29
\(\lfloor{\frac{x}{4}}\rfloor - \lfloor{\frac{x}{100}}\rfloor + \lfloor{\frac{x}{400}}\rfloor\)
In java:

Code: Selecteer alles


	public static void main(String[] args) {

		System.out.println("" + aantalSchrikkeldagen(2013));

	}

	

	public static int aantalSchrikkeldagen(int jaar) {

		return ((jaar/4) - (jaar/100) + (jaar/400));

	}

Doordat jaar een integer is, wordt de deling naar beneden afgerond.

Berichten: 460

Re: Schrikkeljaren: java

Volgens mij hou je er geen rekening mee dat het jaar 1000 en 2000 wel schrikkeljaren zijn. Om de 4 jaar, behalve bij een eeuwwisseling, maar wel weer bij een milleniumwissel. (niet dat ze daar vroeger ooit een idee van hadden.)

Dan zou je er juist meer verwachten

Gebruikersavatar
Berichten: 768

Re: Schrikkeljaren: java

Michel Uphoff schreef: di 15 jan 2013, 21:22
Wat ik bedoel, is dat er volgens de huidige kalender geen jaar nul is in het AD systeem, 1 BC en daarna 1 AD en dus is het jaar nul niet deelbaar want niet bestaand.


In de sterrekunde beschouwen ze wel het jaar nul, maar dat is omwille van formules...
Het Wetenschapsforum heeft ook een facebook pagina!

Gebruikersavatar
Moderator
Berichten: 8.166

Re: Schrikkeljaren: java

Dat is conform de Engelstalige Wikipedia. Maar dat jaar wordt op 1BC (-1) geprikt.

Berichten: 12.262

Re: Schrikkeljaren: java

Het is een gemenigheidje in de jaartelling. In de gangbare jaartelling ontbreekt het jaar nul, het ging in 1 stap van -1 naar +1. Rekenkundig klopt dat natuurlijk niet, en astronomen hanteren wel het jaar 0 als een bestaand jaar - posities van sterren over de tijd zijn tenslotte niet gevoelig voor politieke conventies.

Strict genomen zou het jaar 0 geen schrikkeljaar moeten zijn denk ik. 0 is tenslotte deelbaar door zowel 4, 100 als 400, en heeft daarmee dezelfde positie als het jaar 2000: geen schrikkeljaar.

Ik denk dat je het ook in perspectief van de periode moet zien: Als je alleen hanteert dat 1 op de 4 jaren 1 dag extra moet krijgen kom je op een jaarlengte van 365.25 dagen. Onze huidige telling perfectioneert dat tot 365.2425, waar het echte getal momenteel 365.2422 is.

In de tijd van het jaar nul zal het niet zo opgevallen zijn dat de zonnewende 3/4e dag per eeuw opschoof. Inmiddels hadden we er 2 weken naast gezeten, en dat is ruim bijtijds ontdekt.

Met de huidige defintie is wellicht nog wel een correctie nodig op een gegeven moment. Dat is niet omdat de brekening niet deugt, maar omdat de aarde trager om zn as gaat draaien waardoor dagen langer worden ten opzichte van jaren. Dat zou wellicht een extra schrikkeldag kunnen opleveren in het jaar 4000 ofzo, afhankelijk van observatie.
Victory through technology

Gebruikersavatar
Berichten: 768

Re: Schrikkeljaren: java

Benm schreef: wo 16 jan 2013, 03:04
0 is tenslotte deelbaar door zowel 4, 100 als 400, en heeft daarmee dezelfde positie als het jaar 2000: geen schrikkeljaar.


Ik dacht van wel hoor. Als ik even snel google vind ik ook dat 2000 een schrikkeljaar was.
Het Wetenschapsforum heeft ook een facebook pagina!

Gebruikersavatar
Berichten: 7.390

Re: Schrikkeljaren: java

Ja, het is een eeuwjaar, maar deelbaar door 400.
"C++ : Where friends have access to your private members." Gavin Russell Baker.

Reageer