letzter Tag im Monat / letzter Werktag im Monat

Anfängerfragen zum Programmieren mit PureBasic.
AddMe
Beiträge: 46
Registriert: 04.05.2009 23:24

Beitrag 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
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
AddMe
Beiträge: 46
Registriert: 04.05.2009 23:24

Beitrag 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
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

es existiert kein m_uDTF-Objekt in PB!

du musst dir ne Formel für Ostern ausm Netz suchen.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
AddMe
Beiträge: 46
Registriert: 04.05.2009 23:24

Beitrag 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
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

Beitrag von ts-soft »

Im CodeArchiv findeste eine etwas ältere PB Version für Ostern usw.
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
Little John

Beitrag 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
Zuletzt geändert von Little John am 24.05.2009 11:35, insgesamt 1-mal geändert.
Benutzeravatar
X360 Andy
Beiträge: 1206
Registriert: 11.05.2008 00:22
Wohnort: Bodensee
Kontaktdaten:

Beitrag 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.
AddMe
Beiträge: 46
Registriert: 04.05.2009 23:24

Beitrag 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
AddMe
Beiträge: 46
Registriert: 04.05.2009 23:24

Beitrag von AddMe »

Hallo ts-soft,
hallo X360 Andy,

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

Gruß
Michael
Antworten