Raku-Kurs / Grundlagen / Bedingte Überprüfungen / Übungen / 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

%% 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.

say ?(100 % 3);    # Wahr
say 100 % 3 != 0;  # Wahr

say ?(100 %% 3);   # Falsch
say 100 %% 3 != 0; # Falsch

Kursnavigation

Codeblöcke / Lokale Variablen   |   Schleifen

Diese Seite wurde automatisch mit ChatGPT 4o übersetzt. Originaler englischer Text.

Übersetzungen dieser Seite: EnglishDeutschEspañolItalianoLatviešuNederlandsБългарскиРусскийУкраїнська