Гид по технологиям

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

• 4 min read • Программирование • Обновлено 22 Nov 2025
Проверка високосного года — C++, Python, JS, C
Проверка високосного года — C++, Python, JS, 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, являются високосными.

Важно: если ваша задача связана с историческими датами, уточните, какой календарь используется для конкретной даты.

Мини-методология для внедрения в проект

  1. Написать чистую функцию isLeapYear(year) с описанным правилом.
  2. Добавить юнит-тесты, перечисленные в разделе “Критерии приёмки”.
  3. Решить политику по невалидным и историческим годам (0, отрицательные, до 1582).
  4. Документировать предположения в README.

Быстрые советы и эвристики

  • Ментальная модель: сначала проверяешь на 400 (высший приоритет), затем на 100 (исключение), затем на 4.
  • Если нужно быстро понять — запомните: «каждые 4 года, кроме столетий, за исключением тех столетий, которые делятся на 400».

Глоссарий (1 строка)

  • Григорианский календарь — современная система летосчисления с правилом високосности, используемая во многих странах.

Краткое резюме

  • Високосный год в Григорианском календаре: кратен 400 или (кратен 4 и не кратен 100).
  • Реализация занимает одну строку логики; важно покрыть столетние случаи тестами.
  • Для исторических данных уточняйте используемый календарь.

Важно: перед применением правила к историческим датам убедитесь, что вы знаете, какой календарь использовался в регионе и в году события.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро