Дату по юлианскому календарю получить по современному григорианскому - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Задача Даны натуральные числа d, m, y, обозначающие дату (число, месяц, год) по юлианскому календарю ("старый стиль"). Получить эту дату по современному григорианскому календарю. Расхождение между датам определяется тем, что в юлианском календаре каждый год, номер которого делится на 4, является високосным, и из этого правила нет никаких исключений, а в григорианском календаре из числа високосных исключаются те годы, номера которых делятся на 100 и не делятся на 400.

Решение задачи: «Дату по юлианскому календарю получить по современному григорианскому»

textual
Листинг программы
##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); } } //ГДЕ ВЫВОД РЕЗУЛЬТАТА ? - он в комментариях }

  1. Переменные v1, v2, R, R2, d, m, y используются для хранения введенных пользователем данных и промежуточных вычислений.
  2. Переменные d1, m1, y1, W используются для хранения результатов вычислений.
  3. С помощью функции scanf() пользователь вводит дату в формате dd mm yyyy.
  4. Переменная y инициализируется значением 0, которое затем изменяется в циклах.
  5. Циклы предназначены для определения високосного года. В первом цикле y увеличивается на 1 при каждом високосном годе (год, делящийся на 4), а во втором цикле - только при високосных годах, не являющихся столетними (год, делящийся на 400).
  6. Переменная W инициализируется значением 0, которое затем изменяется в зависимости от значения переменной y.
  7. С помощью условных операторов if-else проверяется, какой месяц и день введены пользователем, и в зависимости от этого выполняются различные действия.
  8. В комментариях присутствуют места для вывода результатов вычислений, но в коде они не используются.

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


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

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

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