Преобразование даты юлианского стиля в григорианский (перевод с 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(), что означает успешное выполнение программы