Springen naar inhoud

Schrikkeljaren: java


  • Log in om te kunnen reageren

#1

Kwintendr

    Kwintendr


  • >250 berichten
  • 768 berichten
  • VIP

Geplaatst op 15 januari 2013 - 15:46

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?

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

Veranderd door Xenion, 15 januari 2013 - 16:00

Het Wetenschapsforum heeft ook een facebook pagina!

Dit forum kan gratis blijven vanwege banners als deze. Door te registeren zal de onderstaande banner overigens verdwijnen.

#2

Xenion

    Xenion


  • >1k berichten
  • 2606 berichten
  • Moderator

Geplaatst op 15 januari 2013 - 16:04

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.

#3

Kwintendr

    Kwintendr


  • >250 berichten
  • 768 berichten
  • VIP

Geplaatst op 15 januari 2013 - 16:17

Ik weet dat dat stukje code er verschrikkelijk uit ziet, maar ik wou nog eens oefenen op de vorm ( ) ? ( ) : ( ).

Veranderd door Kwintendr, 15 januari 2013 - 16:18

Het Wetenschapsforum heeft ook een facebook pagina!

#4

EvilBro

    EvilBro


  • >5k berichten
  • 6703 berichten
  • VIP

Geplaatst op 15 januari 2013 - 16:29

LaTeX

#5

Kwintendr

    Kwintendr


  • >250 berichten
  • 768 berichten
  • VIP

Geplaatst op 15 januari 2013 - 16:32

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

#6

Michel Uphoff

    Michel Uphoff


  • >5k berichten
  • 5383 berichten
  • Moderator

Geplaatst op 15 januari 2013 - 18:27

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.
Motus inter corpora relativus tantum est.

#7

Xenion

    Xenion


  • >1k berichten
  • 2606 berichten
  • Moderator

Geplaatst op 15 januari 2013 - 18:34

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.

#8

Michel Uphoff

    Michel Uphoff


  • >5k berichten
  • 5383 berichten
  • Moderator

Geplaatst op 15 januari 2013 - 21:22

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.

Veranderd door Michel Uphoff, 15 januari 2013 - 22:22

Motus inter corpora relativus tantum est.

#9

EvilBro

    EvilBro


  • >5k berichten
  • 6703 berichten
  • VIP

Geplaatst op 15 januari 2013 - 21:31

LaTeX


In java:
	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.

#10

druipertje

    druipertje


  • >250 berichten
  • 374 berichten
  • Ervaren gebruiker

Geplaatst op 15 januari 2013 - 22:22

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

Veranderd door druipertje, 15 januari 2013 - 22:25


#11

Kwintendr

    Kwintendr


  • >250 berichten
  • 768 berichten
  • VIP

Geplaatst op 15 januari 2013 - 23:34

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!

#12

Michel Uphoff

    Michel Uphoff


  • >5k berichten
  • 5383 berichten
  • Moderator

Geplaatst op 16 januari 2013 - 00:18

Dat is conform de Engelstalige Wikipedia. Maar dat jaar wordt op 1BC (-1) geprikt.
Motus inter corpora relativus tantum est.

#13

Benm

    Benm


  • >5k berichten
  • 8795 berichten
  • VIP

Geplaatst op 16 januari 2013 - 03:04

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

#14

Kwintendr

    Kwintendr


  • >250 berichten
  • 768 berichten
  • VIP

Geplaatst op 16 januari 2013 - 10:13

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!

#15

In physics I trust

    In physics I trust


  • >5k berichten
  • 7384 berichten
  • Moderator

Geplaatst op 16 januari 2013 - 10:24

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





0 gebruiker(s) lezen dit onderwerp

0 leden, 0 bezoekers, 0 anonieme gebruikers

Ook adverteren op onze website? Lees hier meer!

Gesponsorde vacatures

Vacatures