Проверка високосного года в C++, Python, JavaScript и C

Что такое високосный год
Високосный год — год с 366 днями. Дополнительный день добавляют в феврале (29 февраля) для синхронизации календарного года с астрономическим.
Краткое определение: високосный год — год, который по правилу Григорианского календаря имеет дополнительный день.
Важно: правило, описанное ниже, относится к Григорианскому календарю, который был введён в 1582 году. До этого применялся Юлианский календарь (в нём каждый год, кратный 4, — високосный).
Условие, при котором год является високосным
Год считается високосным в Григорианском календаре тогда и только тогда, когда выполняется одно из двух условий:
- Год кратен 400; либо
- Год кратен 4 и при этом не кратен 100.
Формула-эвристика: (год % 400 == 0) || ((год % 4 == 0) && (год % 100 != 0)).
Примеры:
- 2021 — не високосный (не делится на 4).
- 1980 — високосный (делится на 4 и не делится на 100).
- 1600 — високосный (делится на 400).
- 1900 — не високосный (делится на 100, но не на 400).
Практика: что проверить
Короткий чеклист для кода и тестов:
- Функция должна корректно обрабатывать положительные целые годы (наиболее распространённый случай).
- Проверить столетние года (например, 1900, 2000).
- Проверить крайние и неочевидные случаи, если они важны для вашей задачи (годы до 1582, год 0, отрицательные значения).
C++: программа для проверки года
Ниже — простая функция и примеры вызова. Комментарии и выводы локализованы на русском.
// C++ программа: проверить, является ли год високосным
#include
using namespace std;
bool isLeapYear(int y)
{
// Год високосный, если кратен 400
// или если кратен 4 и не кратен 100
return (((y % 4 == 0) && (y % 100 != 0)) || (y % 400 == 0));
}
int main()
{
int year1 = 2021;
cout << "Год: " << year1 << endl;
if(isLeapYear(year1))
{
cout << year1 << " является високосным годом" << endl;
}
else
{
cout << year1 << " не является високосным годом" << endl;
}
int year2 = 2012;
cout << "Год: " << year2 << endl;
if(isLeapYear(year2)) cout << year2 << " является високосным годом" << endl; else cout << year2 << " не является високосным годом" << endl;
int year3 = 1980;
cout << "Год: " << year3 << endl;
if(isLeapYear(year3)) cout << year3 << " является високосным годом" << endl; else cout << year3 << " не является високосным годом" << endl;
int year4 = 1990;
cout << "Год: " << year4 << endl;
if(isLeapYear(year4)) cout << year4 << " является високосным годом" << endl; else cout << year4 << " не является високосным годом" << endl;
int year5 = 1600;
cout << "Год: " << year5 << endl;
if(isLeapYear(year5)) cout << year5 << " является високосным годом" << endl; else cout << year5 << " не является високосным годом" << endl;
return 0;
} Ожидаемый вывод (пример):
Год: 2021
2021 не является високосным годом
Год: 2012
2012 является високосным годом
Год: 1980
1980 является високосным годом
Год: 1990
1990 не является високосным годом
Год: 1600
1600 является високосным годомPython: программа для проверки года
Пример функции и демонстрация с теми же тестовыми годами.
# Python: проверить, является ли год високосным
def is_leap_year(y):
# Григорианское правило: кратен 400
# или кратен 4 и не кратен 100
return (((y % 4 == 0) and (y % 100 != 0)) or (y % 400 == 0))
for year in (2021, 2012, 1980, 1990, 1600):
print("Год:", year)
if is_leap_year(year):
print(year, "является високосным годом")
else:
print(year, "не является високосным годом")Ожидаемый вывод:
Год: 2021
2021 не является високосным годом
Год: 2012
2012 является високосным годом
Год: 1980
1980 является високосным годом
Год: 1990
1990 не является високосным годом
Год: 1600
1600 является високосным годомJavaScript: программа для проверки года
Простой пример с выводом в документ (для демонстрации в браузере).
// JavaScript: проверить, является ли год високосным
function isLeapYear(y) {
return (((y % 4 == 0) && (y % 100 != 0)) || (y % 400 == 0));
}
var years = [2021, 2012, 1980, 1990, 1600];
for (var i = 0; i < years.length; i++) {
var y = years[i];
document.write("Год: " + y + "
");
if (isLeapYear(y)) document.write(y + " является високосным годом" + "
");
else document.write(y + " не является високосным годом" + "
");
}Вывод в браузере будет аналогичен предыдущим примерам (русские фразы). Для Node.js можно заменить document.write на console.log.
C: программа для проверки года
Пример на C с printf и теми же тестовыми годами.
// C: проверить, является ли год високосным
#include
#include
bool isLeapYear(int y)
{
return (((y % 4 == 0) && (y % 100 != 0)) || (y % 400 == 0));
}
int main()
{
int years[] = {2021, 2012, 1980, 1990, 1600};
for (int i = 0; i < 5; ++i) {
int y = years[i];
printf("Год: %d\n", y);
if (isLeapYear(y)) printf("%d является високосным годом\n", y);
else printf("%d не является високосным годом\n", y);
}
return 0;
} Ожидаемый вывод в консоли:
Год: 2021
2021 не является високосным годом
Год: 2012
2012 является високосным годом
Год: 1980
1980 является високосным годом
Год: 1990
1990 не является високосным годом
Год: 1600
1600 является високосным годомТестовые случаи и критерии приёмки
Критерии приёмки для вашей функции:
- isLeapYear(2021) -> false
- isLeapYear(2012) -> true
- isLeapYear(1980) -> true
- isLeapYear(1990) -> false
- isLeapYear(1600) -> true
- isLeapYear(1900) -> false
- isLeapYear(2000) -> true
Дополнительные тесты (границы и нестандартные входы):
- Нулевое и отрицательное значение: решайте по требованиям приложения (в астрономическом счислении год 0 соответствует 1 г. до н.э.).
- Годы до 1582: применять правило Юлианского календаря (каждый год, кратный 4, — високосный) или учитывать локальные исторические реформы.
Когда это правило не работает
- Для дат до внедрения Григорианского календаря (разные страны приняли его в разное время) следует учитывать адаптацию локального календаря.
- Юлианский календарь: правило отличается — все годы, кратные 4, являются високосными.
Важно: если ваша задача связана с историческими датами, уточните, какой календарь используется для конкретной даты.
Мини-методология для внедрения в проект
- Написать чистую функцию isLeapYear(year) с описанным правилом.
- Добавить юнит-тесты, перечисленные в разделе “Критерии приёмки”.
- Решить политику по невалидным и историческим годам (0, отрицательные, до 1582).
- Документировать предположения в README.
Быстрые советы и эвристики
- Ментальная модель: сначала проверяешь на 400 (высший приоритет), затем на 100 (исключение), затем на 4.
- Если нужно быстро понять — запомните: «каждые 4 года, кроме столетий, за исключением тех столетий, которые делятся на 400».
Глоссарий (1 строка)
- Григорианский календарь — современная система летосчисления с правилом високосности, используемая во многих странах.
Краткое резюме
- Високосный год в Григорианском календаре: кратен 400 или (кратен 4 и не кратен 100).
- Реализация занимает одну строку логики; важно покрыть столетние случаи тестами.
- Для исторических данных уточняйте используемый календарь.
Важно: перед применением правила к историческим датам убедитесь, что вы знаете, какой календарь использовался в регионе и в году события.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента