Дату по юлианскому календарю получить по современному григорианскому - C (СИ)
Формулировка задачи:
Решение задачи: «Дату по юлианскому календарю получить по современному григорианскому»
##include <stdio.h>;
##include <math.h>;
##includ <conio.h>;
void main ()
{
int v1,v2,R,R2,d,m,y; float d1,m1,y1,W;
printf ("\nВведите дату\n");
scanf ("%d %d %d", &d, &m, &y); // Зачем ввел y? Чтоб сразу его изменять?
for (y=0; y; y++) { // Вылетает сразу из цикла (y==0)
if (y%4==0)
v2=v2+1;
}
for (y=0; y; y++) {
if (((y%4==0) && (y%100!=0)) || (y%400==0))
v1=v1+1;
}
printf("y=%d\n", y); // Чтобы убедить тебя, что y=0
// Это называется "отладочная печать"
R=v2-v1;
//ОПРЕДЕЛЯЕМ ВИСоКОСНЫЙ ГОД ИЛИ НЕТ
if (((y%4==0) && (y%100!=0)) || (y%400==0))
W=1; // Не было точки с запятой
else W=0;
//JANUARY
if ((d<R) && (m==1)) {
R2=d-R;
y1=y-1;
m1=12;
d1=31-abs(int R2);
}
if ((d=R) && (m==1)) {
y1=y-1;
m1=12;
d1=31;
}
if ((d>R) && (m==1)) {
y1=y;
m1=m;
d1=d-R;
}
//MARCH
if ((W=1) && (m==3)) {
if (d<R) {
y1=y;
m1=2;
d1=29-abs(int R2);
}
if (d=R) {
y1=y;
m1=2;
d1=29;
}
if (d>R) {
y1=y;
m1=m;
d1=d-abs(int R2);
}
}
if ((W=0) && (m==3)) {
if (d<R) {
y1=y;
m1=2;
d1=28-abs(int R2);
}
if (d=R) {
y1=y;
m1=2;
d1=28;
}
if (d>R) {
y1=y;
m1=m;
d1=d-abs(int R2);
}
}
} // Не было скобки, закрывающей программу
//Где вывод результата ?
Объяснение кода листинга программы
include ;
include ;
includ ;
void main ()
{
int v1,v2,R,R2,d,m,y; float d1,m1,y1,W;
printf (\nВведите дату\n);
scanf (%d %d %d, &d, &m, &y);
for (y=0; y; y++) {
if (y%4==0)
v2=v2+1;
}
for (y=0; y; y++) {
if (((y%4==0) && (y%100!=0)) || (y%400==0))
v1=v1+1;
}
printf(y=%d\n, y);
R=v2-v1;
//ОПРЕДЕЛЯЕМ ВИСоКОСНЫЙ ГОД ИЛИ НЕТ
if (((y%4==0) && (y%100!=0)) || (y%400==0))
W=1;
else W=0;
//JANUARY
if ((d<R) && (m==1)) {
R2=d-R;
y1=y-1;
m1=12;
d1=31-abs(int R2);
}
if ((d=R) && (m==1)) {
y1=y-1;
m1=12;
d1=31;
}
if ((d>R) && (m==1)) {
y1=y;
m1=m;
d1=d-R;
}
//MARCH
if ((W=1) && (m==3)) {
if (d<R) {
y1=y;
m1=2;
d1=29-abs(int R2);
}
if (d=R) {
y1=y;
m1=2;
d1=29;
}
if (d>R) {
y1=y;
m1=m;
d1=d-abs(int R2);
}
}
if ((W=0) && (m==3)) {
if (d<R) {
y1=y;
m1=2;
d1=28-abs(int R2);
}
if (d=R) {
y1=y;
m1=2;
d1=28;
}
if (d>R) {
y1=y;
m1=m;
d1=d-abs(int R2);
}
}
//ГДЕ ВЫВОД РЕЗУЛЬТАТА ? - он в комментариях
}
- Переменные v1, v2, R, R2, d, m, y используются для хранения введенных пользователем данных и промежуточных вычислений.
- Переменные d1, m1, y1, W используются для хранения результатов вычислений.
- С помощью функции scanf() пользователь вводит дату в формате dd mm yyyy.
- Переменная y инициализируется значением 0, которое затем изменяется в циклах.
- Циклы предназначены для определения високосного года. В первом цикле y увеличивается на 1 при каждом високосном годе (год, делящийся на 4), а во втором цикле - только при високосных годах, не являющихся столетними (год, делящийся на 400).
- Переменная W инициализируется значением 0, которое затем изменяется в зависимости от значения переменной y.
- С помощью условных операторов if-else проверяется, какой месяц и день введены пользователем, и в зависимости от этого выполняются различные действия.
- В комментариях присутствуют места для вывода результатов вычислений, но в коде они не используются.