• Hallo Gast, du kaufst gerne günstig ein und erfährst oft vor deinen Freunden von interessanten Angeboten? Dann kannst du dein Talent als Schnäppchenjäger jetzt zu Geld machen und anderen PCGH-Lesern beim Sparen helfen! Schau einfach mal rein - beim Test der Community Deals!

Schaltjahr in RUBY

xActionx

Software-Overclocker(in)
Hallo Leute,
ich versuche seit Tagen ein Programm zu schreiben, in das man Start- und Endjahr eingibt und das einem dann alle Schaltjahr in diesem Interval ausgibt.

Das ganze habe ich versucht über eine Eingabe zu regeln in die man über einen gets-Befehl sowohl Start- als auch Endjahr eingibt. Auf diese Jahre habe ich zwei Variabeln zeigen lassen. Diese sollen dann in einem als "range" bezeichneten Interval einzeln auf ihre Teilbarkeit durch 4 geprüft und falls diese Teilbarkeit besteht ausgegeben werden. Nun zum Problem: Sobald das Programm die erste durch 4 teilbare Zahl im range-Interval gefunden hat gibt es nur diese in einer Endlosschleife aus. Ich habe bereits versuch das ganze mit einem exit-Befehl zu unterbinden, aber dann habe ich immer noch das Probelm, dass nur das erste Schaltjahr in diesem Interval angegeben wird :\.

Der ganze Quelltext sieht bis jetzt wie folgt aus:

Code:
puts 'Startjahr: '
startjahr = gets.chomp
puts 'Endjahr: '
endjahr = gets.chomp

range = ((startjahr.to_i)..(endjahr.to_i))
range.each do |jahr|

while jahr.to_i%4==0
puts jahr.to_s + ' ist ein Schaltjahr.'
end
        end

MFG
 

BertB

Volt-Modder(in)
mit ruby kenn ich mich leider nicht aus,
aber wenn du es genau haben willst, musst du noch die hundert- und vierhundert- jahres regeln einbauen

wiki: Die Schaltjahrregel im Gregorianischen Kalender besteht nun aus drei Regeln, wobei die ersten zwei vom julianischen Kalender übernommen wurden:

1. Die durch 4 ganzzahlig teilbaren Jahre sind Schaltjahre. Danach wären die Jahre 1600, 1700, 1800, 1900, 2000, 2012 und 2100 Schaltjahre. Die mittlere Länge eines Kalenderjahres erhöht sich dadurch um einen viertel Tag von 365 Tage auf 365,25 Tage.
2. Die durch 100 ganzzahlig teilbaren Jahre sind keine Schaltjahre. Es bliebe im Beispiel nur 2012 als Schaltjahr übrig. Im Durchschnitt verringert sich dadurch wieder die Länge des Kalenderjahres um 0,01 Tage von 365,25 Tage auf 365,24 Tage.
3. Schließlich sind die ganzzahlig durch 400 teilbaren Jahre ebenfalls Schaltjahre. Damit sind 1600 und 2000 jeweils wieder ein Schaltjahr. Und die mittlere Länge des Kalenderjahres erhöht sich schließlich um 0,0025 Tage von 365,24 Tage auf 365,2425 Tage.
 

Bunny_Joe

BIOS-Overclocker(in)
Ich kenne mich ebenfalls in Ruby nicht aus, aber deine while-Schleife ist wohl falsch.

Gucke mal dieses Beispiel mit dem Zähler an und versuche deine range-Variable mit der Prüfung auf die Teilbarkeit dort unterzubekommen.
Einführung in Ruby
 
TE
xActionx

xActionx

Software-Overclocker(in)
Ich kenne mich ebenfalls in Ruby nicht aus, aber deine while-Schleife ist wohl falsch.

Gucke mal dieses Beispiel mit dem Zähler an und versuche deine range-Variable mit der Prüfung auf die Teilbarkeit dort unterzubekommen.
Einführung in Ruby

Habs inzwischen raus bekommen und ja es war die Schleife. Habe es schließlich mit einem if Befehl gelöst. Die weiteren Teilbarkeitsregeln habe ich ebenfalls eingebaut vielen Dank für eure Hilfe :-)
 

DarkMo

Lötkolbengott/-göttin
wollts grad sagen ^^ hab zwar keinen blassen von ruby, aber die while schleife war verdächtig :P prinzipiell ja eher so ala "i=startjahr; while i<=endjahr { if schaltjahr {output()} i++;}"
 
TE
xActionx

xActionx

Software-Overclocker(in)
Falls es noch jemanden interessiert das ganze muss wie folgt aussehen:

Code:
puts 'Startjahr: '
startjahr = gets.chomp
puts 'Endjahr: '
endjahr = gets.chomp

range = ((startjahr.to_i)..(endjahr.to_i))
range.each do |jahr|

if (jahr.to_i%100!=0 and jahr.to_i%4==0 or jahr.to_i%400=0)                    #Die Reihenfolge der Formeln ist hierbei entscheidend.
   puts jahr.to_s + ' ist ein Schaltjahr.'
         else puts jahr.to_s + ' ist kein Schaltjahr.'                                     # Diese Zeile ist optional.
end
          end

MFG
 

BertB

Volt-Modder(in)
ich fang grad an mit etwas arduino,
hab das ding schon ne weile, aber irgendwie bliebs dann liegen
mir schweben steuerprogramme für diverse LEDs vor,
habe sowas in der firma mit siemens s7 sps schon gemacht, ist aber ganz anders
 
Oben Unten