Hey,
in der Schule haben wir ein Programm geschrieben, welches ausrechnen sollte, welcher Wochentag an dem angegebenen Datum war/ist/sein wird...
So wie das Programm ist, funktioniert es theoretisch, allerdings hat es irgendwo einen Fehler, welcher dazu führt, dass der
Wochentag nicht dem entspricht, welcher er eigentlich sein sollte. Vielleicht findet Ihr ihn ja...
Schon mal, Danke im Voraus!
P.S. Wir arbeiten mit free Pascal, also
Lazarus.
Quellcode:
Delphi-Quellcode:
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
procedure Button1Click(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
var a,b1,b2,b3,b4,d,d1,m,i:integer;
c:array [1..12] of integer;
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
a:=strtoint(edit1.Text); // Wochentag des 01.01.
b1:=5*((a-1) mod 4)+1; // nach: Carl Friedrich Gauss
b2:=4*((a-1) mod 100);
b3:=6*((a-1) mod 400);
b4:= (b1+b2+b3) mod 7;
// ShowMessage (inttostr(b4));
case b4 of
0: label3.caption:='Sonntag';
1: label3.caption:='Montag';
2: label3.caption:='Dienstag';
3: label3.caption:='Mittwoch';
4: label3.caption:='Donnerstag';
5: label3.caption:='Freitag';
6: label3.caption:='Samstag';
end;
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;
ShowMessage (inttostr(d1));
d1:=d1-1; // Minus ein Tag
d1:= d1 mod 7; // Tag des Datums
ShowMessage (inttostr(d1));
If ((a mod 4) = 0) and ((a mod 100) = 0) and ((a mod 400) = 0)
then d1:=d1+1 ; // ? Schaltjahr
case d1 of
0: label6.caption:='Sonntag';
1: label6.caption:='Montag';
2: label6.caption:='Dienstag';
3: label6.caption:='Mittwoch';
4: label6.caption:='Donnerstag';
5: label6.caption:='Freitag';
6: label6.caption:='Samstag';
end;
end;
end.