AW: Was haut bei dieser Wochentagsberechnung nicht hin?
Bitte beim Thema bleiben!
|
AW: Was haut bei dieser Wochentagsberechnung nicht hin?
Versuche es doch mal mit folgendem Code.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject); var a,b1,b2,b3,b4,d,d1,m,i:integer; c:array [1..12] of integer; tag_im_jahr,woche,wochentag: integer; ttt: array[1..400] of string; begin For i:=1 to 12 do c[i]:=0; // Vorbelegen des Arrays mit 0 c[1]:=31; // Januar c[2]:=c[1]+28; // Februar c[3]:=c[2]+31; // ... c[4]:=c[3]+30; c[5]:=c[4]+31; c[6]:=c[5]+30; c[7]:=c[6]+31; c[8]:=c[7]+31; c[9]:=c[8]+30; c[10]:=c[9]+31; c[11]:=c[10]+30; // November d:=strtoint(edit2.Text); // Tag // Berechnung der Tagesanzahl m:=strtoint(edit3.Text); // Monat case m of 1: d1:=d; 2: d1:=c[1]+d; 3: d1:=c[2]+d; 4: d1:=c[3]+d; 5: d1:=c[4]+d; 6: d1:=c[5]+d; 7: d1:=c[6]+d; 8: d1:=c[7]+d; 9: d1:=c[8]+d; 10: d1:=c[9]+d; 11: d1:=c[10]+d; 12: d1:=c[11]+d; end; Tag_im_ jahr:=0; for woche:=1 to 53 do for wochentag:=1 to 7 do begin Tag_im_jahr:= Tag_im_jahr+1; if wochentag=1 then ttt[tag_im_jahr]:='Montag'; if wochentag=2 then ttt[tag_im_jahr]:='Dienstag'; if wochentag=3 then ttt[tag_im_jahr]:='Mittwoch'; if wochentag=4 then ttt[tag_im_jahr]:='Donnerstag'; if wochentag=5 then ttt[tag_im_jahr]:='Freitag'; if wochentag=6 then ttt[tag_im_jahr]:='Sonnabend'; if wochentag=7 then ttt[tag_im_jahr]:='Sonntag'; end; label6.caption:= ttt[d1]; end; Dem ersten Tag im Jahr wird der Montag zugewiesen, wenn nicht, dementsprechend anpassen. mfg Nimmersatt |
AW: Was haut bei dieser Wochentagsberechnung nicht hin?
DateUtils :roll:
Das Label3 hat deine Optimierung wohl wegoptimiert :P Werft den ganzen Code weg und bauts richtig neu. |
AW: Was haut bei dieser Wochentagsberechnung nicht hin?
Hallo Ave,
versuch das mal :wink:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var JahrInt,JahrIntLow,JahrIntHigh, b1,b2,b3,b4, Day,DayI, Monat:integer; JahrStr: string; begin JahrInt:=strtoint(edit1.Text); // vierstellige Jahreszahl! Day:=strtoint(edit2.Text); // Tag Monat:=strtoint(edit3.Text); // Monat b1:=5*((JahrInt-1) mod 4)+1; // nach: Carl Friedrich Gauss b2:=4*((JahrInt-1) mod 100); b3:=6*((JahrInt-1) mod 400); b4:= (b1+b2+b3) mod 7; case b4 of 0: label1.caption:='Sonntag'; 1: label1.caption:='Montag'; 2: label1.caption:='Dienstag'; 3: label1.caption:='Mittwoch'; 4: label1.caption:='Donnerstag'; 5: label1.caption:='Freitag'; 6: label1.caption:='Samstag'; end; // Informationsquelle für die nachfolgenden Bererchnungen: // https://de.wikipedia.org/wiki/Wochentagsberechnung if Monat < 3 then begin Monat:= Monat + 10; dec(JahrInt); // oder JahrInt:= JahrInt - 1; end else dec(Monat,2); // oder Monat:= Monat - 2; JahrStr:=IntToStr(JahrInt); JahrIntHigh:=StrToInt(Copy(JahrStr,1,2)); JahrIntLow:=StrToInt(Copy(JahrStr,3,2)); // Unit Math (Lazarus) oder System.Math (Delphi) einbinden DayI:=(Day+Floor(2.6*Monat-0.2)+JahrIntLow+Floor(JahrIntLow/4)+Floor(JahrIntHigh/4)-2*JahrIntHigh) mod 7; if DayI<0 then DayI:=DayI + 7; case DayI of 0: label2.caption:='Sonntag'; 1: label2.caption:='Montag'; 2: label2.caption:='Dienstag'; 3: label2.caption:='Mittwoch'; 4: label2.caption:='Donnerstag'; 5: label2.caption:='Freitag'; 6: label2.caption:='Samstag'; end; end; |
AW: Was haut bei dieser Wochentagsberechnung nicht hin?
Hallo,
die Wochentagsberechnung haben wir mit einer Formel von Zeller gemacht. Ein kleines Beispiel gibt es unter https://mathematikalpha.de/informatik-klasse11 , dort bei Klasse 9 das Beispiel 2. Ich habe mal kopiiert:
Delphi-Quellcode:
Liebe Grüße Olivia
procedure TForm1.Button1Click(Sender: TObject);
var Tag,Monat,Jahr,W,C,Y: Integer; (* Zellersche Formel Verfahren zur Ermittlung des Wochentages nach Christian Zeller (1882): T … Tag, M … Monat, J … Jahr, W … Wochentag, Sa = 0; So = 1, …, Fr = 6, C … vergangene Jahrhunderte, Y … Jahresnummer im laufenden Jahrhundert, [ ] … ganzzahlige Division Januar und Februar werden altrömisch als 13. und 14. Monat des Vorjahres gezählt. Gregorianischer Kalender W = (T+[13·(M+1)/5] +Y +[Y/4] +[C/4] -2C) mod 7 Julianischer Kalender W = (T + [13·(M+1)/5] + Y + [Y/4] + 5 - C) mod 7 *) begin tag:=strtoint(edit1.text); monat:=strtoint(edit2.text); jahr:=strtoint(edit3.text); if monat<3 then begin monat:=monat+12; jahr:=jahr-1; end; y:=jahr mod 100; c:=jahr div 100; w:=(Tag+ (13*(Monat+1)) div 5 + Y + y div 4 + c div 4 -2*C) mod 7; while w<0 do w:=w+7; if w=0 then edit4.text:='Sonnabend'; if w=1 then edit4.text:='Sonntag'; if w=2 then edit4.text:='Montag'; if w=3 then edit4.text:='Dienstag'; if w=4 then edit4.text:='Mittwoch'; if w=5 then edit4.text:='Donnerstag'; if w=6 then edit4.text:='Freitag'; end; |
AW: Was haut bei dieser Wochentagsberechnung nicht hin?
Zumindest stimmt der Kommentar in der Prozedur nicht mit dem aktuellen Code überein: Bei Berechnung von w ist das erste Paar eckige Klammern falsch umgesetzt, wenn ich mich nicht irre...
oder der Kommentar ist falsch, habe jetzt nicht nachgesehen, ob der zur Zellerschen Formel passt. |
AW: Was haut bei dieser Wochentagsberechnung nicht hin?
Na ja dann so ;)
Delphi-Quellcode:
w := (Tag + (13 * (Monat + 1) div 5) + Y + (y div 4) + (c div 4) -2 * C) mod 7;
gruss |
AW: Was haut bei dieser Wochentagsberechnung nicht hin?
Die Rechnung ist richtig und das Ergebnis stimmt.
Ich hatte mich gefreut wieder etwas helfen zu können. Wieder wird nur kritisiert. Erst war es dumm und altmodisch jetzt soll es falsch sein, aber es stimmt. Das macht mir keinen Spaß. Olivia |
AW: Was haut bei dieser Wochentagsberechnung nicht hin?
Wo wird deine Lösung als dumm und altmodisch bezeichnet bzw. kritisiert? Und was ist gegen konstruktive Kritik einzuwenden?
|
AW: Was haut bei dieser Wochentagsberechnung nicht hin?
Zitat:
Delphi-Quellcode:
mit dem von meinem..
// Gregorianischer Kalender
//W = (T+[13·(M+1)/5] +Y +[Y/4] +[C/4] -2C) mod 7
Delphi-Quellcode:
w := (Tag + (13 * (Monat + 1) div 5) + Y + (y div 4) + (c div 4) -2 * C) mod 7;
und den deinigen..
Delphi-Quellcode:
w:=(Tag+ (13*(Monat+1)) div 5 + Y + y div 4 + c div 4 -2*C) mod 7;
Es hat niemand gesagt das deine Berechnung falsch ist sondern das dass setzen der Klammern mit dem aus dem Zitat nicht übereinstimmt. Prüfe es doch bitte selbst nochmal ob dieses zur Zellerschen Formel passt. Ich habe die Klammern so gesetzt wie im Zitat du hingegen nicht. Es bleibt also zu klären was nun richtig ist deine Klammern oder diese des Zitat! gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:36 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz