Курс по Raku / Основи / Условни проверки / Упражнения / Високосна година

Решение: Високосна година

Отказ от отговорност

Решението, показано по-долу, има за цел да ви обучи да използвате условни проверки. В реалния живот можете да научите методите на вградената класа Date. Ще го изучим във втората част на курса.

Решение

Алгоритъмът за откриване дали годината е високосна:

  1. ако годината не се дели на 4 => обикновена година
  2. ако годината не се дели на 100 => високосна година
  3. ако годината не се дели на 400 => обикновена година
  4. иначе => високосна година

Имайте предвид, че можете да използвате вградените типове за работа с дата и час, така че ще се върнем към тази задача във втората част на курса.

Код 1

Първото решение възпроизвежда горните стъпки буквално:

my $year = prompt 'Year: ';

if $year % 4 {
    say 'Common year';
}
elsif $year % 100 {
    say 'Leap year';
}
elsif $year % 400 {
    say 'Common year';
}
else {
    say 'Leap year';
}

🦋 Намерете програмата във файла leap-year.raku.

Код 2

Във второто решение логиката е събрана в едно изразяване. Скобите не винаги са необходими, но са добавени тук за яснота.

my $year = prompt 'Year: ';

say (($year %% 400) || (($year %% 4) && ($year % 100))) ?? 'Leap year' !! 'Common year';

🦋 Намерете програмата във файла leap-year-formula.raku.

Изход

Опитайте и двете програми с най-критичните случаи, например, 1900, 2000, 2020, 2021.

$ raku exercises/conditional-checks/leap-year.raku
Year: 1900
Common year

$ raku exercises/conditional-checks/leap-year.raku
Year: 2000
Leap year
$ raku exercises/conditional-checks/leap-year-formula.raku
Year: 2020
Leap year

$ raku exercises/conditional-checks/leap-year-formula.raku
Year: 2021
Common year

%% срещу %

Имайте предвид, че в логически контексти операторите %% и % са допълващи се. Можете да използвате този факт, за да изберете един от операторите, за да избегнете явното сравнение с нула.

say ?(100 % 3);    # Вярно
say 100 % 3 != 0;  # Вярно

say ?(100 %% 3);   # Невярно
say 100 %% 3 != 0; # Невярно

Навигация по курса

Кодови блокове / Локални променливи   |   Цикли

Тази страница е автоматично преведена с ChatGPT 4.0. Оригинален текст на английски

Преводи на тази страница: EnglishDeutschEspañolItalianoLatviešuNederlandsБългарскиРусскийУкраїнська