Schaltjahr [ERLEDIGT]

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Pure_Beginner
Beiträge: 247
Registriert: 29.09.2011 21:49
Computerausstattung: i7 9XX 4000 MHZ / 12 GB RAM / Win 8.1 64Bit / Win 7 64Bit
Wohnort: Brühl

Schaltjahr [ERLEDIGT]

Beitrag 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.
Zuletzt geändert von Pure_Beginner am 04.01.2013 23:10, insgesamt 1-mal geändert.
PureBasic 5.30 Beta 3 (X64/X86) | Win 8 (64) Pro / Win 7 (64) Pro | Es ist der Hobbyist[/col
Benutzeravatar
CSHW89
Beiträge: 489
Registriert: 14.12.2008 12:22

Re: Schaltjahr

Beitrag 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
Bild Bild Bild
http://www.jasik.de - Windows Hilfe Seite
padawan hat geschrieben:Ich liebe diese von hinten über die Brust ins Auge Lösungen
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Schaltjahr

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
CSHW89
Beiträge: 489
Registriert: 14.12.2008 12:22

Re: Schaltjahr

Beitrag 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
Bild Bild Bild
http://www.jasik.de - Windows Hilfe Seite
padawan hat geschrieben:Ich liebe diese von hinten über die Brust ins Auge Lösungen
Benutzeravatar
Pure_Beginner
Beiträge: 247
Registriert: 29.09.2011 21:49
Computerausstattung: i7 9XX 4000 MHZ / 12 GB RAM / Win 8.1 64Bit / Win 7 64Bit
Wohnort: Brühl

Re: Schaltjahr

Beitrag 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
PureBasic 5.30 Beta 3 (X64/X86) | Win 8 (64) Pro / Win 7 (64) Pro | Es ist der Hobbyist[/col
Benutzeravatar
CSHW89
Beiträge: 489
Registriert: 14.12.2008 12:22

Re: Schaltjahr [ERLEDIGT]

Beitrag 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
Bild Bild Bild
http://www.jasik.de - Windows Hilfe Seite
padawan hat geschrieben:Ich liebe diese von hinten über die Brust ins Auge Lösungen
Antworten