Курс по Raku / Основи / Условни проверки / Упражнения / Високосна година
Решение: Високосна година
Отказ от отговорност
Решението, показано по-долу, има за цел да ви обучи да използвате условни проверки. В реалния живот можете да научите методите на вградената класа Date
. Ще го изучим във втората част на курса.
Решение
Алгоритъмът за откриване дали годината е високосна:
- ако годината не се дели на 4 => обикновена година
- ако годината не се дели на 100 => високосна година
- ако годината не се дели на 400 => обикновена година
- иначе => високосна година
Имайте предвид, че можете да използвате вградените типове за работа с дата и час, така че ще се върнем към тази задача във втората част на курса.
Код 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. Оригинален текст на английски
Преводи на тази страница: English • Deutsch • Español • Italiano • Latviešu • Nederlands • Български • Русский • Українська