Преобразование даты юлианского стиля в григорианский (перевод с 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;
}

Объяснение кода листинга программы

  1. Включаем заголовочный файл stdio.h для использования функций ввода-вывода
  2. Функция leap(int a) проверяет является ли год високосным и возвращает 1 или 0
  3. В функции main() считываем три числа: день, месяц, год
  4. Создаем массив day[2][12] для хранения количества дней в каждом месяце для двух стилей летоисчисления
  5. Выводим сообщение wow
  6. Инициализируем переменную gap с 0 и проходим циклом по годам от 325 до y
  7. Если год делится на 100 и не делится на 400, увеличиваем значение переменной gap на 1
  8. Выводим значение переменной gap
  9. Добавляем значение переменной gap к числу дней в текущем году (d)
  10. Проверяем, если d больше, чем количество дней в месяце по григорианскому стилю летоисчисления (day[leap(y)][m-1])
  11. Если это так, вычитаем из d количество дней в месяце по григорианскому стилю летоисчисления (day[leap(y)][m-1]) - 1
  12. Увеличиваем значение переменной m на 1
  13. Проверяем, если m больше 12, уменьшаем значение переменной m на 12 и увеличиваем значение переменной y на 1
  14. Выводим значения переменных d, m, y
  15. Возвращаем 0 из функции main(), что означает успешное выполнение программы

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4 из 5
Похожие ответы