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
![](https://images.gutefrage.net/media/user/daCypher/1444744777_nmmslarge.jpg?v=1444744777000)
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.
![](https://images.gutefrage.net/media/user/Shiftclick/1444750091_nmmslarge.jpg?v=1444750091000)
function schalt(jahr:word):boolean;
begin
schalt:=(jahr mod 4=0) xor (jahr mod 100=0) xor (jahr mod 400=0);
end;
![](https://images.gutefrage.net/media/user/Tannibi/1568018311030_nmmslarge__0_0_300_300_9a4334409e63f908baa4b0bff88a688f.jpg?v=1568018311000)
![](https://images.gutefrage.net/media/user/Tannibi/1568018311030_nmmslarge__0_0_300_300_9a4334409e63f908baa4b0bff88a688f.jpg?v=1568018311000)
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
![](https://images.gutefrage.net/media/user/MarkusGenervt/1522121044131_nmmslarge__0_0_256_256_fb5dc5ef4d72bc83b4476f60739c3ee3.png?v=1522121046000)
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.
![](https://images.gutefrage.net/media/user/MarkusGenervt/1522121044131_nmmslarge__0_0_256_256_fb5dc5ef4d72bc83b4476f60739c3ee3.png?v=1522121046000)
PS: Das mit den 3333er-Jahren kennt kaum jemand, kann also eigentlich weg fallen.