Raku-Kurs / Grundlagen / Grundlagen des Kontrollflusses / Bedingte Überprüfungen / Exercises / Schaltjahr

Lösung: Schaltjahr

Haftungsausschluss

Die unten gezeigte Lösung soll Ihnen helfen, bedingte Überprüfungen zu trainieren. Im wirklichen Leben können Sie die Methoden der eingebauten Date-Klasse lernen. Wir werden dies im zweiten Teil des Kurses lernen.

Lösung

Der Algorithmus zur Erkennung, ob ein Jahr ein Schaltjahr ist:

  1. Wenn das Jahr nicht durch 4 teilbar ist => Gemeinjahr
  2. Wenn das Jahr nicht durch 100 teilbar ist => Schaltjahr
  3. Wenn das Jahr nicht durch 400 teilbar ist => Gemeinjahr
  4. Andernfalls => Schaltjahr

Beachten Sie, dass Sie die eingebauten Typen für die Arbeit mit Datum und Uhrzeit verwenden können, daher werden wir in der zweiten Hälfte des Kurses zu dieser Aufgabe zurückkehren.

Code 1

Die erste Lösung reproduziert die obigen Schritte wörtlich:

my $year = prompt 'Jahr: ';

if $year % 4 {
    say 'Gemeinjahr';
}
elsif $year % 100 {
    say 'Schaltjahr';
}
elsif $year % 400 {
    say 'Gemeinjahr';
}
else {
    say 'Schaltjahr';
}

🦋 Finden Sie das Programm in der Datei leap-year.raku.

Code 2

In der zweiten Lösung ist die Logik in einem einzigen Ausdruck verpackt. Klammern sind nicht immer erforderlich, wurden hier jedoch zur Klarheit hinzugefügt.

my $year = prompt 'Jahr: ';

say (($year %% 400) || (($year %% 4) && ($year % 100))) ?? 'Schaltjahr' !! 'Gemeinjahr';

🦋 Finden Sie das Programm in der Datei leap-year-formula.raku.

Ausgabe

Versuchen Sie beide Programme mit den kritischsten Fällen, zum Beispiel 1900, 2000, 2020, 2021.

$ raku exercises/conditional-checks/leap-year.raku
Jahr: 1900
Gemeinjahr

$ raku exercises/conditional-checks/leap-year.raku
Jahr: 2000
Schaltjahr
$ raku exercises/conditional-checks/leap-year-formula.raku
Jahr: 2020
Schaltjahr

$ raku exercises/conditional-checks/leap-year-formula.raku
Jahr: 2021
Gemeinjahr

%%tipblock ## %% vs %

Beachten Sie, dass in booleschen Kontexten die Operatoren %% und % komplementär sind. Sie können diese Tatsache nutzen, um einen der Operatoren auszuwählen, um einen expliziten Vergleich mit Null zu vermeiden.

CodeBlockPlaceholder5 %%/tipblock

Kursnavigation

Schaltjahr   |   Schleifen