Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 01.10.2013
Сообщений: 28
1

Дату по юлианскому календарю получить по современному григорианскому

01.10.2013, 22:09. Просмотров 1838. Ответов 7
Метки нет (Все метки)


Задача
Даны натуральные числа d, m, y, обозначающие дату (число, месяц, год) по юлианскому календарю ("старый стиль"). Получить эту дату по современному григорианскому календарю. Расхождение между датам определяется тем, что в юлианском календаре каждый год, номер которого делится на 4, является високосным, и из этого правила нет никаких исключений, а в григорианском календаре из числа високосных исключаются те годы, номера которых делятся на 100 и не делятся на 400.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.10.2013, 22:09
Ответы с готовыми решениями:

Получить дату по современному календарю.
Даны две задачи, нужно написать код в C# "3) Даны дата (число, месяц, год) по юлианскому...

Выдать следующую по календарю дату по введенному дню, месяцу, году
выдать следующую по календарю дату по введенному дню, месяцу, году.

Запросить у пользователя дату рождения, и выдайте знак зодиака по японскому календарю
Запросите у пользователя дату рождения, и выдайте знак зодиака по японскому календарю. Название...

В SQL запросе получить дату начала и дату конца следующего месяца
В SQL запросе необходимо использовать дату начала следующего месяца, и дату конца следующего...

7
Эксперт C
25441 / 15834 / 3386
Регистрация: 24.12.2010
Сообщений: 34,644
02.10.2013, 14:08 2
Judy, ваши соображения, попытки, наброски... ?
0
0 / 0 / 0
Регистрация: 01.10.2013
Сообщений: 28
02.10.2013, 17:17  [ТС] 3
Байт,
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
##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);
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;
}
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);
}
}
0
Эксперт C
25441 / 15834 / 3386
Регистрация: 24.12.2010
Сообщений: 34,644
02.10.2013, 22:26 4
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
##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);
   }
 }
}  // Не было скобки, закрывающей программу
//Где вывод результата ?
Немного причесал, чтоб легче было читать. См.комментарии. И Тегами кода окружай.
Подробности смотреть не стал.

Добавлено через 4 часа 13 минут
Judy, еще вот бросилось в глаз.
C
1
 if (d=R)
"=" - это присваивание. Нормальный компилятор должон предупреждать. Тебе же, как я понимаю, нужно сравнение. Это
C
1
 if (d==R)
Учи матчасть. Смотри примеры. Желаю удачи!

Добавлено через 3 минуты
Еще заметил. Почему в инклюдах два "##" ? Третий инклюд без буквы "e". Компиляторы строги. Они таких вещей не пропускают

Добавлено через 20 минут
И еще совет. (Вижу, что ты совсем салага, но все мы когда-то ими были ). Написал код, фрагмент, скелет - тут же гони его через компилятор. Какие-то ошибочки он найдет. Разбирайся и исправляй. Но у тебя уже будет синтаксически правильный кусок. возможно, он будет работать совсем не так, как тебе хочется, но это уже следующая стадия работы с программой. Семантические ошибки - все твои, тут тебе никакая автоматизация не поможет. А в помощь - отладочная печать промежуточных результатов и всякие дебаггеры.
1
0 / 0 / 0
Регистрация: 01.10.2013
Сообщений: 28
04.10.2013, 18:20  [ТС] 5
Байт,
Помоги пожалуйста составить правильно выражение на разницу между юлианским календарем и григорианским. Я написала, и когда тестирую программу и ввожу год 2013 - выдает все время 15, хотя на самом деле их 13
Вот в этом куске - подсчет по юлианскому високосных дней
C
1
2
3
4
5
for (i=1; i<=y; i++)
{
if (i%4==0)
    v2=v2+1;
}
А в этом подсчет високосных по григорианскому
C
1
2
3
4
5
6
7
for (i=1; i<=y; i++)
{
if (i%400==0)
    v1=v1+1;
if ((i%4==0) && (i%100!=0))
    v1=v1+1;
}
Далее, потом вычисляю разницу между ними R=v2-v1; И выходит 15.
Получается где-то в високосных по григорианскому значит ошибка, каких-то годов високосных не видит.
0
Эксперт C
25441 / 15834 / 3386
Регистрация: 24.12.2010
Сообщений: 34,644
04.10.2013, 20:11 6
Judy, меня вот сразу смутило, что нигде не сказано, с какого именно года (столетия) начинается расхождение. При поверхностном поиске в гугле тоже ничего вразумительного не нашел. А ведь это важно - начало отсчета! В какой момент календари считаются совпадающими? Можно задать нулевой год. Тогда в 2013 разница будет именно 15. А почему не -10000-ый? Видимо, это совпадение календарей произошло (или было назначено) где-то на середину 3-го века. А почему? История пока умалчивает.
Если найдешь какие-нибудь данные на этот счет, кинь ссылочку - буду благодарен.
Пока нам приходится просто подгонять ответ и считать с y=250

Добавлено через 2 минуты
А ведь было время, когда Юлианский календарь обгонял Григорианский... Правда, тогда никто ни тем ни другим не пользовался
0
419 / 418 / 167
Регистрация: 28.11.2010
Сообщений: 1,183
05.10.2013, 14:07 7
вообще-то расхождение появляется здесь
Впервые григорианский календарь был введён папой римским Григорием XIII в католических странах 4 октября 1582 года взамен старого юлианского: следующим днём после четверга 4 октября стала пятница 15 октября.
2
Эксперт C
25441 / 15834 / 3386
Регистрация: 24.12.2010
Сообщений: 34,644
05.10.2013, 21:17 8
Цитата Сообщение от vua72 Посмотреть сообщение
вообще-то расхождение появляется здесь
Ну вот и нашли точку отсчета. Но в задании она как-то не формализована...А откуда Папа высчитал эти +11 ? Любопытно, все-таки.

Не по теме:

Надеюсь, мое любопытство нисколько не ущемит авторитет Католической Церкви.

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.10.2013, 21:17

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Получить текущую дату без времени и вычесть другую дату
Ребята нужна помощь знатоков. Беру с сайта дату List&lt;IWebElement&gt; datew =...

По введенному номеру года получить его название по старояпонскому календарю.
В старояпонском календаре был принят двенадцатилетний цикл, годы внутри которого назывались...

Дата: Получить текущую дату и дату +7 дней...
В общем проблема такая... Через кнопку у меня должно появляться текущее дата и рядом дата +7...

При наличии номера недели получить дату начала и дату окончания этой недели
Подскажите как можно решить следующую задачу. У меня есть номер недели например :не деля 38. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.