Seite 2 von 3

Verfasst: 23.05.2009 22:50
von AddMe
Hallo Zusammen,

vielen Dank für Eure Hilfe.

Wäre es möglich, mir noch Hilfestellung bei dem Problem des Feiertags zu geben? Wäre toll.

Ich bin leider noch nicht so fit, damit ich diese Feiertag in das Makro einbauen könnte.

Wäre echt super, wenn jemand das noch ergänzen könnte.

Vielen Dank.

Gruß
Michael

Verfasst: 23.05.2009 22:56
von Kaeru Gaman
also, wie du "Ostern" ermittelst, was ja anscheinend ein ziemlicher Angelpunkt ist, musst du dir irgendwo im Netz raussuchen.

Ich weiß nur, dass das Passah am 14. Nisan ist, das ist der erste Vollmond nach dem Frühlingsdurchgang,
aber der Römische Kirchen-Kalender stimmt nicht mit dem antiken Hebräischen Kalender überein.

sobald du ein Tagesdatum hast, kannst du es durch ParseDate jagen.

Verfasst: 23.05.2009 23:11
von AddMe
Kaeru Gaman hat geschrieben:also, wie du "Ostern" ermittelst, was ja anscheinend ein ziemlicher Angelpunkt ist, musst du dir irgendwo im Netz raussuchen.

sobald du ein Tagesdatum hast, kannst du es durch ParseDate jagen.
Danke für Deine Antwort.

Weiter oben hatte ich einen Code angefügt, der diese Berechnung, leider in VB durchführt. Mir fehlt es nur leider an Erfahrung, wie ich das in PB umsetzen könnte. :cry:

Wäre toll, wenn Du mir nochmal helfen könntest.

Vielen Dank.

Gruß
Michael

Verfasst: 23.05.2009 23:17
von Kaeru Gaman
es existiert kein m_uDTF-Objekt in PB!

du musst dir ne Formel für Ostern ausm Netz suchen.

Verfasst: 23.05.2009 23:30
von AddMe
Hallo Kaeru Gaman,
Kaeru Gaman hat geschrieben:es existiert kein m_uDTF-Objekt in PB!

Code: Alles auswählen

Type DtFeiertage
     Jahreszahl         As Long
     Ostern             As Date
     Neujahr            As Date
     DreiKoenige        As Date
     Rosenmontag        As Date
     Aschermittwoch     As Date
     Karfreitag         As Date
     Ostersonntag       As Date
     Ostermontag        As Date
     Maifeiertag        As Date
     ChrHimmelfahrt     As Date
     Pfingstsonntag     As Date
     Pfingstmontag      As Date
     Fronleichnam       As Date
     MariaeHimmelfahrt  As Date
     DtEinheit          As Date
     Reformationstag    As Date
     Allerheiligen      As Date
     Heiligabend        As Date
     Weihnachten1       As Date
     Weihnachten2       As Date
     Sylvester          As Date
End Type
 
Dim m_uDTF As DtFeiertage 
Ist das hier in PB ein Objekt? Oder könnte das auch eine Struktur sein?
Bin leider Anfänger, deshalb Frage ich.
Kaeru Gaman hat geschrieben:du musst dir ne Formel für Ostern ausm Netz suchen.
Hm, vielen Dank für den Hinweis. Ist diese Formel, die ich weiter oben geschrieben habe im VB Code nicht ok??

Code: Alles auswählen

Function Ostern_berechnen(ByVal lYear As Long) As Boolean
 
'// Berechnung mit Hilfe des Algorithmus von Gauß
    On Error GoTo Err_Ostern_berechnen
 
    Dim i1  As Integer
    Dim i2  As Integer
    Dim i3  As Integer
    Dim i4  As Integer
    Dim i5  As Integer
    Dim iTZ As Integer                            '// iTZ = Tageszahl
 
    i1 = lYear Mod 19                             '// Formel nach Gauß
    i2 = lYear Mod 4                              '// Werte für die Jahre
    i3 = lYear Mod 7                              '// 1900 - 2099
 
    i4 = (19 * i1 + 24) Mod 30
    i5 = (2 * i2 + 4 * i3 + 6 * i4 + 5) Mod 7
    iTZ = 22 + i4 + i5                            '// Ermittelt den Tag
    If iTZ > 31 Then                              '// März oder April
        iTZ = iTZ - 31                            '// Wenn April, dann - 31 Tage
        If iTZ = 26 Then iTZ = 19                 '// Wenn 26.4. dann 19.4.
        If (iTZ = 25 And i4 = 28 And i1 > 10) Then iTZ = 18
        m_uDTF.Ostern = DateSerial(lYear, 4, iTZ) '// Ostern im April
    Else
        m_uDTF.Ostern = DateSerial(lYear, 3, iTZ) '// Ostern im Maerz
    End If
    Ostern_berechnen = True
 
Exit_Ostern_berechnen:
    Exit Function 
Nochmals vielen Dank für Deine Hilfe und Geduld mit mir.
Ist halt schwierig für mich dies umzusetzen.

Gruß
Michael

Verfasst: 23.05.2009 23:38
von ts-soft
Im CodeArchiv findeste eine etwas ältere PB Version für Ostern usw.

Verfasst: 24.05.2009 10:20
von Little John
Hallo Michael!
Ist halt schwierig für mich dies umzusetzen.
Der Code zur Oster-Berechnung eignet sich gut, um PureBasic und einige seiner Unterschiede zu Visual Basic kennen zu lernen. Die Umsetzung ist -- mit unserer Hilfe -- nicht schwierig, und Du wirst so viel mehr über PureBasic lernen, als wenn Du Dir fertigen Code kopierst.

Daher habe ich das absichtlich noch nicht fertig gemacht, sondern erstmal nur angefangen:
- ein paar Sachen gelöscht
- "Function" durch "Procedure" ersetzt
- "'//" durch ";" ersetzt
- einzeilige If/Then-Anweisungen in mehrzeilige umgewandelt
- "m_uDTF.Ostern =" durch "ProcedureReturn" ersetzt

Code: Alles auswählen

Procedure.i Ostern_berechnen (ByVal lYear As Long)
   ; Berechnung mit Hilfe des Algorithmus von Gauß
 
   Dim i1  As Integer
   Dim i2  As Integer
   Dim i3  As Integer
   Dim i4  As Integer
   Dim i5  As Integer
   Dim iTZ As Integer                            ; iTZ = Tageszahl
 
   i1 = lYear Mod 19                             ; Formel nach Gauß
   i2 = lYear Mod 4                              ; Werte für die Jahre
   i3 = lYear Mod 7                              ; 1900 - 2099
 
   i4 = (19 * i1 + 24) Mod 30
   i5 = (2 * i2 + 4 * i3 + 6 * i4 + 5) Mod 7
   iTZ = 22 + i4 + i5                            ; Ermittelt den Tag
   If iTZ > 31 Then                              ; März oder April
      iTZ = iTZ - 31                             ; Wenn April, dann - 31 Tage
      If iTZ = 26 Then
         iTZ = 19                                ; Wenn 26.4. dann 19.4.
      End If 
      If (iTZ = 25 And i4 = 28 And i1 > 10) Then
         iTZ = 18
      End If 
      ProcedureReturn DateSerial(lYear, 4, iTZ)  ; Ostern im April
   Else
      ProcedureReturn DateSerial(lYear, 3, iTZ)  ; Ostern im Maerz
   End If
EndProcedure
Nu kommst Du! :)

Versuche in der Hilfe Antworten auf folgende Fragen zu finden:
- Wie werden in PureBasic Prozedur-Parameter übergeben?
(Muss/darf in der Klammer "ByVal" bzw. "As" stehen?)
- Was muss in PureBasic statt "Dim ... As ..." stehen?
- Was muss in PureBasic statt "Mod" stehen?
- Was ist mit "Then"?
- Was ist mit "End If"?
- Welche Funktion muss in PureBasic statt "DateSerial()" benutzt werden?

Er reicht ja, wenn Du erstmal ein paar Antworten herausfindest. ;)

Gruß, Little John

Verfasst: 24.05.2009 10:48
von X360 Andy
Vieleicht ist das noch wichtig; das FormateDate nur bis 19.01.2038, 03:14:07 verwendet werden kann.

Also falls du vorhast auszurechnen an welchen Tag Ostern in 50 Jahren ist, wirst du dir was anders überlegen müssen.

Verfasst: 24.05.2009 13:34
von AddMe
Hallo Little John,
Little John hat geschrieben:Daher habe ich das absichtlich noch nicht fertig gemacht, sondern erstmal nur angefangen:
- ein paar Sachen gelöscht
- "Function" durch "Procedure" ersetzt
- "'//" durch ";" ersetzt
- einzeilige If/Then-Anweisungen in mehrzeilige umgewandelt
- "m_uDTF.Ostern =" durch "ProcedureReturn" ersetzt
Vielen Dank für Deine Hilfe, echt super. Manchmal braucht man einfach nur einen Schubs in die richtige Richtung.

Werde versuchen Deine Hinweise und Tipps umzusetzen.

Echt Klasse. :allright:

Gruß
Michael

Verfasst: 24.05.2009 13:35
von AddMe
Hallo ts-soft,
hallo X360 Andy,

vielen Dank für Eure Hinweise.
Werde mal schauen, wie weit ich komme.

Gruß
Michael