@Hans-Gerhard Ulrich:
Das
Macro Divide(Formel,by,q,r)
q=(Formel)/by
r=(Formel)%by
EndMacro
Procedure Osterdatum(jahr.i)
Protected.i a,b,c,d,e,f,g,h,i,k,l,m,n,o
Protected dummy.i ; wenn "Quotient" oder "Remainder" nicht benötigt werden
Divide(jahr,19,dummy,a)
Divide(jahr,100,b,c)
Divide(b,4,d,e)
Divide(b+8,25,f,dummy)
Divide(b-f+1,3,g,dummy)
Divide(19*a+b-d-g+15,30,dummy,h)
Divide(c,4,i,k)
Divide(32+2*e+2*i-h-k,7,dummy,l)
Divide(a+11*h+22*l,451,m,dummy)
Divide(h+l-7*m+114,31,n,o)
tag=o+1
monat=n
EndProcedure
hast du von mir- gibs zu
Ist aus meinem Beitrag "Spielereien mit Datumsberechnungen".
Ein Hinweis auf die Quelle wäre nett gewesen.
Im übrigen könnte dein Code mit "Gosub" und den vielen "Goto" auf einem C16 oder C64 laufen...
Sieh dir mal "Procedure"-"End Procedure" in der PB-Hilfe an.
Wenn du schon kopierst - das darfst du aus den Codes in "Spielereien mit Datumsberechnungen" herzlich gerne machen, dann kannst du auch meine Funktion "Schaltjahr()" nutzen:
Procedure Schaltjahr(j)
Protected s
If j%4=0:s=1:EndIf ;jahr durch 4 teilbar ? Dann Schaltjahr
If j%100=0:s=0:EndIf ;durch 100 teilbar ? Dann doch nicht
If j%400=0:s=1:EndIf ;durch 400 teilbar ? Dann doch wieder
ProcedureReturn s
EndProcedure
Oder kürzer und knackiger:
TageImMonat(2)=28+Bool((Bool(Jahr%4=0) And Bool(Jahr%100<>0)) Or Bool(Jahr%400=0))
Die TageImMonat liegen als Array vor: 31,0,31,30,31 u.s.w
TageImMonat(1)=31 ;Januar
TageImMonat(2)=0 ;Februar - siehe Formel oben
TageImMonat(3)=31 ;März
TageImMonat(4)=30 ;April
u.s.w.
Gruß aus Nordhessen
berie
P.S. Sieh dir mal meinen Beitrag <Mein Programm "Urlaubsplaner"> an:
viewtopic.php?p=360307#p360307
Ist längst nicht perfekt - es fehlen noch einige Features - (man kann aber den Jahreskalender drucken).
Vielleicht möchtest du ja mal drüberschauen - du bist herzlich eingeladen.