Преобразование даты юлианского стиля в григорианский (перевод с C++) - C (СИ)
Формулировка задачи:
Вот сама задача:Даны натуральные числа d, m, y, обозначающие дату (число, месяц, год) по юлианскому календарю ("старый стиль"). Получить эту дату по современному григорианскому календарю. Расхождение между датам определяется тем, что в юлианском календаре каждый год, номер которого делится на 4, является високосным, и из этого правила нет никаких исключений, а в григорианском календаре из числа високосных исключаются те годы, номера которых делятся на 100 и не делятся на 400.
#include <iostream> #include <cstdlib> #include <cmath> int leap(int a){ if( a % 4 == 0 && a % 100 != 0 || a % 400 == 0){ return 1; } else{ return 0; } } int main() { int d,m,y; std::cin >> d >> m >> y; int day[2][12]={31,28,31,30,31,30,31,31,30,31,30,31, 31,29,31,30,31,30,31,31,30,31,30,31}; std::cout << "wow" << std::endl; int gap = 0; for(int i = 325; i <= y; i++){ if((i % 100 == 0) && (i % 400 != 0)){ gap++; } } std::cout << gap << std::endl; d += gap; if(d > day[leap(y)][m-1]){ d -= day[leap(y)][m-1]-1; m++; if(m > 12){ m = m % 12; y++; } } std::cout << d << " " << m << " " << y << std::endl; }
Решение задачи: «Преобразование даты юлианского стиля в григорианский (перевод с C++)»
textual
Листинг программы
#include <stdio.h> int leap(int a){ if ( a % 4 == 0 && a % 100 != 0 || a % 400 == 0) { return 1; } else{ return 0; } } int main() { int d,m,y; scanf("%d%d%d", &d, &m, &y); int day[2][12]={31,28,31,30,31,30,31,31,30,31,30,31, 31,29,31,30,31,30,31,31,30,31,30,31}; printf("wow\n"); int gap = 0; for (int i = 325; i <= y; i++){ if ((i % 100 == 0) && (i % 400 != 0)) { gap++; } } printf("%d\n", gap); d += gap; if (d > day[leap(y)][m-1]) { d -= day[leap(y)][m-1]-1; m++; if (m > 12) { m = m % 12; y++; } } printf("%d %d %d\n", d, m, y); return 0; }
Объяснение кода листинга программы
- Включаем заголовочный файл stdio.h для использования функций ввода-вывода
- Функция leap(int a) проверяет является ли год високосным и возвращает 1 или 0
- В функции main() считываем три числа: день, месяц, год
- Создаем массив day[2][12] для хранения количества дней в каждом месяце для двух стилей летоисчисления
- Выводим сообщение
wow
- Инициализируем переменную gap с 0 и проходим циклом по годам от 325 до y
- Если год делится на 100 и не делится на 400, увеличиваем значение переменной gap на 1
- Выводим значение переменной gap
- Добавляем значение переменной gap к числу дней в текущем году (d)
- Проверяем, если d больше, чем количество дней в месяце по григорианскому стилю летоисчисления (day[leap(y)][m-1])
- Если это так, вычитаем из d количество дней в месяце по григорианскому стилю летоисчисления (day[leap(y)][m-1]) - 1
- Увеличиваем значение переменной m на 1
- Проверяем, если m больше 12, уменьшаем значение переменной m на 12 и увеличиваем значение переменной y на 1
- Выводим значения переменных d, m, y
- Возвращаем 0 из функции main(), что означает успешное выполнение программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д