Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Schaltjahr (leap year) Func
#1
Der Sinn ist, man nimmt das übliche
date$(ndays)

und findet mit Months heraus, ob man Februar hat. Wenn man dann die Anzahl der Tage feststellen will,
gibt man  + leapyear {year} ein, was einen Tag hinzufügt (oder eben nicht) für Februar.

Code:
Function.b leapyear{year.w}  ;returns 1 for leap year or 0
res.b=0
;divisible /100: not a leap year
dummy.w=(year/100)
If (dummy*100)=year
  res=0
  ;divisible /400: leap year
  dummy.w=(year/400)
  If (dummy*400)=year Then res=1
  Function Return res
EndIf
;divisible /4  : leap year
dummy.w=(year/4)  :If (dummy*4)=year Then res=1 Else res=0
Function Return res
End Function

;testcase
NPrint "leap year test case:"
NPrint "1800 (no) ",leapyear{1800}
NPrint "1900 (no) ",leapyear{1900}
NPrint "2100 (no) ",leapyear{2100}

NPrint "2009 (no) ",leapyear{2009}
NPrint "2010 (no) ",leapyear{2010}
NPrint "2011 (no) ",leapyear{2011}

NPrint "2008 (ya) ",leapyear{2008}
NPrint "2012 (ya) ",leapyear{2012}
NPrint "2016 (ya) ",leapyear{2016}

NPrint "2000 (ya) ",leapyear{2000}
NPrint "2400 (ya) ",leapyear{2400}

Stop
Zitieren
#2
Wie man sieht, wird hier ausgenutzt, daß ein Casting von Quick oder Float Resultaten nach Word immer den Int (Word) ergibt und demnach mit Div->Mult Teil geprüft wird, ob das Ergebnis ohne Rundungsfehler abgelaufen ist und dasselbe Resultat liefert.
Zitieren
#3
Hast Du gut gemacht Wink
Zitieren
#4
Vielleicht sollte man eher .w zurückgeben, oder? Ist mir gerade aufgefallen...
Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste