Registriert seit: 16. Mai 2021
59 Beiträge
Delphi 10.3 Rio
|
AW: Erstellen eines Datum-überprüfers
17. Mai 2021, 01:29
@KodeZwerg Vielen Dank für deinen Lösungsvorschlag, ich hab es jetzt bereits mit einer anderen Berechnungsmethode gelöst https://praxistipps.focus.de/ostern-...D%20d%2Be-7f-9.
da die eine Berechnungsmethode wenn Ostern auf März fällt ein falsches Datum ausgegeben hat.
Hier mein fertiges Programm mit Osterberechnung, freue mich über jeden Verbesserungsvorschlag .
Delphi-Quellcode:
{$APPTYPE CONSOLE}
{$R+,Q+ X-}
uses
System.SysUtils;
var
Tag: integer;
Monat: integer;
Jahr: integer;
Schaltjahr: byte;
Gültig: byte;
SäkZahl: integer;
SäkMondSch: integer;
SäkSonnenSch: integer;
Mondparameter: integer;
KeimVollFrüh: integer;
Korrektur: integer;
Ostergrenze: integer;
ErsterSonnMärz: integer;
Osterentfernung: integer;
OsternMärz: integer;
begin
write('Bitte den Tag eingeben ');
readln(Tag);
write('Bitte den Monat eingeben ');
readln(Monat);
write('Bitte das Jahr eingeben ');
readln(Jahr);
if (Tag >= 1) and (Tag <= 31) then
if (Monat >= 1) and (Monat <= 12) then
if (Jahr >= 1) and (Jahr <= 3000) then
begin //Berechnung ob Schaltjahr gültig.
if (Jahr mod 4 = 0) and (Jahr mod 100 <> 0) or (Jahr mod 400 = 0) then
Schaltjahr := 1
else
Schaltjahr := 0;
case Monat of // Berechnung ob Datum gültig ist.
1, 3, 5, 7, 8, 10, 12:
begin
if (Tag < 32) then
Gültig := 1
else
Gültig := 0
end;
4, 6, 9, 11:
begin
if (Tag < 31) then
Gültig := 1
else
Gültig := 0
end;
2:
begin
if ((Tag < 29 + byte(Schaltjahr > 0))) then
Gültig := 1
else
Gültig := 0
end;
end;
if Gültig = 1 then
begin //Berechnung ob Datum an Ostern liegt.
SäkZahl := Jahr div 100;
SäkMondSch := 15 + (3 * SäkZahl + 3) div 4 -
(8 * SäkZahl + 13) div 25;
SäkSonnenSch := 2 - (3 * SäkZahl + 3) div 4;
Mondparameter := Jahr mod 19;
KeimVollFrüh := (19 * Mondparameter + SäkMondSch) mod 30;
Korrektur := (KeimVollFrüh + Mondparameter div 11) div 29;
Ostergrenze := 21 + KeimVollFrüh - Korrektur;
ErsterSonnMärz := 7 - (Jahr + Jahr div 4 + SäkSonnenSch) mod 7;
Osterentfernung := 7 - (Ostergrenze - ErsterSonnMärz) mod 7;
OsternMärz := Ostergrenze + Osterentfernung;
//Prüfung um welchen Osterntag es sich handelt.
if ((Tag = OsternMärz) and (Monat = 3)) or
(((Tag = (OsternMärz - 31)) and (Monat = 4))) then
writeln(Tag,'.', Monat,'.', Jahr,
' ist gültig und ist Ostersonntag.')
else if ((Tag = (OsternMärz - 2)) and (Monat = 3)) or
(((Tag = (OsternMärz - 33)) and (Monat = 4))) then
writeln(Tag,'.', Monat, '.', Jahr,
' ist gültig und ist Karfreitag.')
else if ((Tag = (OsternMärz + 1)) and (Monat = 3)) or
(((Tag = (OsternMärz - 30)) and (Monat = 4))) then
writeln(Tag, '.', Monat, '.', Jahr,
' ist gültig und ist Ostermontag.')
else
writeln(Tag,'.',Monat,'.',Jahr,
' ist gültig und liegt nicht an Ostern.')
end
else
writeln('Den ', Tag, '. gibt es in diesem Monat nicht!');
readln;
end
else
begin
writeln('Ungültiges Jahr!');
readln;
end
else
begin
writeln('Ungültiger Monat!');
readln;
end
else
begin
writeln('Ungültiger Tag!');
readln;
end;
end.
|
|
Zitat
|