Schaltjahr berechnen in Dev-Pascal?
wie ist der Quellcode dazu? :
Es soll eine 4-stellige Jahreszahl eingelesen werden.
Anschließend soll geprüft werden ob es sich um ein Schaltjahr handelt oder nicht.
Für Jahre vor 1601 und nach 2099 soll keine Aussage getroffen werden.
Ausgabe: Die Jahreszahl, bitte: 1600
Dazu lässt sich keine Aussage treffen.
Die Jahreszahl, bitte: 2000
Dies ist ein Schaltjahr!
Die Jahreszahl, bitte: 1999
Dies ist kein Schaltjahr!
4 Antworten
Ich kenn mich mit Pascal nicht aus, aber hier mal zusammengefasst die Regeln, wann ein Jahr ein Schaltjahr ist.
- Die bekannteste Regel. Jedes Jahr, was durch 4 teilbar ist, ist ein Schaltjahr
- Außer das Jahr ist durch 100 teilbar, dann ist es kein Schaltjahr
- Außer es ist gleichzeitig auch durch 400 teilbar, dann ist es ein Schaltjahr.
Der Code ist also ungefähr so:
if eingabe < 1601 or eingabe > 2099 then
begin
ShowMessage('Dazu lässt sich keine Aussage treffen.');
end
else
begin
if eingabe mod 4 = 0 then
begin
if eingabe mod 100 = 0 then
begin
if eingabe mod 400 = 0 then
begin
ShowMessage('Dies ist ein Schaltjahr!');
end
else
begin
ShowMessage('Dies ist kein Schaltjahr!');
end
end
else
begin
ShowMessage('Dies ist ein Schaltjahr!');
end
end
else
begin
ShowMessage('Dies ist kein Schaltjahr!');
end
end
Wie gesagt: Da ich mich mit Pascal nicht auskenne, musst du die auftretenden Fehler selbst korrigieren.
function schalt(jahr:word):boolean;
begin
schalt:=(jahr mod 4=0) xor (jahr mod 100=0) xor (jahr mod 400=0);
end;
Wenn du die Programmiersprache nicht kannst,
kann man sie dir hier nicht beibringen.
Der Algorithmus ist doch sehr einfach:
1601 <= Jahr <= 2099? Nein --> Keine Aussage
Jahr durch 4 teilbar? Nein -> Kein Schaltjahr
Jahr durch 100 teilbar, aber nicht durch 400? Ja -> Kein Schaltjahr
--> Schaltjahr
Ganz einfach:
alle 4 Jahre ist ein Schaltjahr → Jahr mod 4 = 0
alle 100 Jahre kein Schaltjahr → Jahr mod 100 <> 0
alle 400 Jahre ein Schaltjahr → Jahr mod 400 = 0
alle 3333 Jahre ein Schaltjahr → Jahr mod 3333 = 0
IstSchaltjahr := ((Jahr mod 4 = 0) and (Jahr mod 100 <> 0)) or (Jahr mod 400 = 0) or (Jahr mod 3333 = 0);
Aber ich bin jetzt kein Delphi-Programmierer.
Den Rahmen der Jahreszahlen kannst Du ja hoffentlich selbst vordefinieren.
PS: Das mit den 3333er-Jahren kennt kaum jemand, kann also eigentlich weg fallen.