Seite 1 von 1

Schaltjahr [ERLEDIGT]

Verfasst: 04.01.2013 22:35
von Pure_Beginner
Hallo Leute,

hab da ein Problem mit der Berechnung des Monats Februar.

Unten stehende Formen wäre zur Berechnung geeignet.

Code: Alles auswählen

Procedure Tage_im_Monat(Jahr.i)

Protected Tage.i


If Mod(Jahr,4) = 0 And  Mod(Jahr,100) <> 0 Or  Mod(Jahr,400) = 0 
  Tage = 29
Else
  Tage = 28
EndIf

Dim Monatstage.i(11)
Monatstage(0) = 31
Monatstage(1) = Tage
Monatstage(2) = 31
Monatstage(3) = 30
Monatstage(4) = 31
Monatstage(5) = 30
Monatstage(6) = 31
Monatstage(7) = 31
Monatstage(8) = 30
Monatstage(9) = 31
Monatstage(10) = 30
Monatstage(11) = 31

For k = 0 To 11
  Debug Monatstage(k)
Next
EndProcedure

Tage_im_Monat(2012)
funktioniert leider nur wenn ich die OR Bedingung in der IF Anweisung entferne.

Code: Alles auswählen

Procedure Tage_im_Monat(Jahr.i)

Protected Tage.i


If Mod(Jahr,4) = 0 And  Mod(Jahr,100) <> 0  
  Tage = 29
Else
  Tage = 28
EndIf




Dim Monatstage.i(11)
Monatstage(0) = 31
Monatstage(1) = Tage
Monatstage(2) = 31
Monatstage(3) = 30
Monatstage(4) = 31
Monatstage(5) = 30
Monatstage(6) = 31
Monatstage(7) = 31
Monatstage(8) = 30
Monatstage(9) = 31
Monatstage(10) = 30
Monatstage(11) = 31

For k = 0 To 11
  Debug Monatstage(k)
Next
EndProcedure

Tage_im_Monat(2011)
wahrscheinlich nur eine Kleinigkeit, aber ich seh den Wald vor lauter Bäumen nicht. :?
Wäre für Hilfe sehr Dankbar.

Re: Schaltjahr

Verfasst: 04.01.2013 22:54
von CSHW89
Das "AND" hat eine höhere Priorität als das "OR", sollte es aber nicht. Klammern genügen:

Code: Alles auswählen

Mod(Jahr,4) = 0 And  (Mod(Jahr,100) <> 0 Or  Mod(Jahr,400) = 0)
lg Kevin

Re: Schaltjahr

Verfasst: 04.01.2013 22:55
von ts-soft

Code: Alles auswählen

Procedure Tage_im_Monat(Jahr.i)
  
  Protected Tage.i
  
  
  If Jahr % 4 = 0 And  (Jahr % 100 <> 0 Or Jahr % 400 = 0)
    Tage = 29
  Else
    Tage = 28
  EndIf
  
  
  
  
  Dim Monatstage.i(11)
  Monatstage(0) = 31
  Monatstage(1) = Tage
  Monatstage(2) = 31
  Monatstage(3) = 30
  Monatstage(4) = 31
  Monatstage(5) = 30
  Monatstage(6) = 31
  Monatstage(7) = 31
  Monatstage(8) = 30
  Monatstage(9) = 31
  Monatstage(10) = 30
  Monatstage(11) = 31
  
  For k = 0 To 11
    Debug Monatstage(k)
  Next
EndProcedure

Tage_im_Monat(2016) 
% ist Mod für Integerzahlen!

Gruß
Thomas

Re: Schaltjahr

Verfasst: 04.01.2013 23:03
von CSHW89
@ts-soft: Stimmt, fand Mod() auch etwas komisch, klar man sollte % benutzen. Allerdings war das nicht der Punkt: In der ursprünglichen Version war noch eine weitere Abfrage nach "mod 400" enthalten, was auch korrekt ist. In deiner Version würde 2000 kein Schaltjahr sein, was es aber war! Also waren zwei Sachen nicht korrekt, einmal die Klammerung und '%' statt 'Mod' verwenden.

Edit: ja super, jetzt haste es editiert :mrgreen: :P

lg Kevin

Re: Schaltjahr

Verfasst: 04.01.2013 23:10
von Pure_Beginner
Besten Dank für eure Schnelle Antwort.

Das mit der Priorität war mir nicht bekannt, ich dachte OR sei höher :oops:

% statt Mod macht sinn, hab den Querverweis in der Hilfe übersehen /:->

nochmals Danke
Christian

Re: Schaltjahr [ERLEDIGT]

Verfasst: 04.01.2013 23:17
von CSHW89
Oh mist :oops: . Tut mir leid, hab nochmal geguckt. "And" und "Or" haben die gleiche Priorität, was hier aber den selben Effekt hatte, da dann natürlich von links nach rechts ausgewertet wird. Wollte es nur klar stellen, damit du nächstes mal nicht den umgekehrten Fehler machst.

Die Prioritäten stehen übrigens in der Hilfe: Wenn man die Hilfe startet, "Allgemeine Themen", dort auf "Variablen, Typen und Operatoren" und da fast ganz nach unten scrollen.

lg Kevin