Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 1
Регистрация: 23.05.2013
Сообщений: 6

Вечный календарь: неразбериха с проверкой введения даты

23.05.2013, 23:46. Показов 1413. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ребята, вот кусок моего кода. Работает, но есть проблема с февралём до 12 года - вводишь 30 или 31 день, и программа думает, что так и надо. А с 12-го года всё норм. В вечный календарь вставлен григорианский - с 15 октября 1582 г. и юлианский - с 1 января (-45) года.
Помогите пожалуйста.
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
86
87
88
89
90
91
92
93
94
95
bool Proverka()//Функция проверки.
{
    if (d.day>31 || d.day<1 || d.month<1 || d.month>12 || d.year<-45 || d.year>1000000000)
    {
        cout<<endl;
        return false;
    }
    else
        if (d.year==0)
        {
            printf(Rus("Error: нулевого года не существует.\n"));
            return false;
        }
        else
            if (d.day==31 && (d.month==4 || d.month==6 || d.month== 9 || d.month==11))
            {
                printf(Rus("Error: в этом месяце 30 дней.\n"));
                return false;
            }
            else
                if (d.day>29 && d.month==2)
                {
                    printf(Rus("Error: в феврале не больше 29 дней.\n"));
                    return false;
                }
                else
                    if (d.year>=1582)
                        if (d.year==1582 && d.month==10 && d.day<15) 
                        {
                            printf(Rus("Error: в 1582 году не существовало дней с 5 по 14 октября включительно.\n"));
                            return false;
                        }
                        else 
                            if (d.day>28 && d.day<=31 && d.month==2 && d.year%4!=0)
                            {
                                printf(Rus("Error: в феврале 28 дней!! .\n"));
                                return false;
                            }
                            else 
                                if (d.day>28 && d.day<=31 && d.month==2 && d.year%4==0)
                                {
                                    if (d.year%400==0 && d.day!=29)
                                    {
                                        printf(Rus("Error: в феврале  29 дней!! .\n"));
                                        return false;
                                    }
                                    else
                                        if (d.year%100==0 && d.year%400!=0)
                                        {
                                            printf(Rus("Error: в феврале 28 дней!! .\n"));
                                            return false;
                                        }
                                }
                                else
                                return true;
                else
                    if (d.year<=1582 && d.month==10 && d.day>4)
                    {
                        printf(Rus("Error: в 1582 году не существовало дней с 5 по 14 октября включительно.\n"));
                        return false;
                    }
                    else 
                        if (d.year<=1582 && d.month==10 && d.day<=4)
                            if (d.year>0)
                            {
                                if (d.day>28 && d.day<=31 && d.month==2 && d.year%4==0)
                                    if (d.day>29)
                                    {
                                        printf(Rus("Error: в феврале 29 дней!! .\n"));
                                        return false;
                                    }
                                    else
                                        if (d.month==2 && d.day>28)
                                        {
                                            printf(Rus("Error: в феврале 28 дней!! .\n"));
                                            return false;
                                        }
                                        else return true;
                            }
                            else
                                if (d.year<0)
                                    if (d.day>28 && d.day<=31 && d.month==2 && (d.year%4)+1==0)
                                        if (d.day>29)
                                        {
                                            printf(Rus("Error: в феврале 29 дней!! .\n"));
                                            return false;
                                        }
                                        else 
                                            if (d.month==2 && d.day>28)
                                            {
                                                printf(Rus("Error: в феврале 28 дней!! .\n"));
                                                return false;
                                            }
                                            else return true;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.05.2013, 23:46
Ответы с готовыми решениями:

Вечный календарь
Написал программу &quot;Вечный календарь&quot;, которая определяет день недели введенной даты и подсчитует количество дней от введеной даты до...

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

Вечный календарь
Тема: Оператор варианта CASE. Цель: Составление, редактирования и отладка программ с оператором выбора CASE. В11. «Вечный...

2
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
24.05.2013, 02:08
C++
1
2
3
4
bool Timestamp::IsLeapYear(int iYear) 
{
   return  ((!(iYear % 4) && (iYear % 100)) || (!(iYear % 400))) ? true : false;
}
0
0 / 0 / 1
Регистрация: 23.05.2013
Сообщений: 6
26.05.2013, 20:14  [ТС]
Ошибка найдена, вот рабочий код:
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
bool Proverka()//Функция проверки.
{
    if (d.day>31 || d.day<1 || d.month<1 || d.month>12 || d.year<-45 || d.year>1000000000)
    {
        cout<<endl;
        return false;
    }
    else
        if (d.year==0)
        {
            printf(Rus("Error: нулевого года не существовало.\n"));
            return false;
        }
        else
            if (d.year<=1582 && d.month==10 && d.day>4 && d.day<15)
            {
                printf(Rus("Error: в 1582 году не существовало дней с 5 по 14 октября включительно.\n"));
                return false;
            }
            else
                if (d.day==31 && (d.month==4 || d.month==6 || d.month== 9 || d.month==11))
                {
                    printf(Rus("Error: в этом месяце 30 дней.\n"));
                    return false;
                }
                else
                        if (d.year>1582)
                        {
                                if (d.day>28 && d.day<=31 && d.month==2 && d.year%4!=0)
                                {
                                    printf(Rus("Error: в феврале 28 дней!! .\n"));
                                    return false;
                                }
                                else 
                                    if (d.day>28 && d.day<=31 && d.month==2 && d.year%4==0)
                                    {
                                        if (d.year%400==0 && d.day!=29)
                                        {
                                            printf(Rus("Error: в феврале  29 дней!! .\n"));
                                            return false;
                                        }
                                        else
                                            if (d.year%100==0 && d.year%400!=0)
                                            {
                                                printf(Rus("Error: в феврале 28 дней!! .\n"));
                                                return false;
                                            }
                                            else
                                                if (d.year%100!=0 && d.year%400!=0 && d.day!=29) 
                                                {
                                                    printf(Rus("Error: в феврале  29 дней!! .\n"));
                                                    return false;
                                                }
                                    }
                                    else 
                                        return true;
                        }
                        else
                                if ((d.year>0 && d.day>28 && d.day<=31 && d.month==2 && d.year%4!=0) || (d.year<0 && d.day>28 && d.day<=31 && d.month==2 && (d.year%4)+1!=0))
                                {
                                    printf(Rus("Error: в феврале 28 дней!! .\n"));
                                    return false;
                                }
                                else
                                    if ((d.year>0 && d.month==2 && d.day>29 && d.year%4==0) || (d.year<0 && d.month==2 && d.day>29 && (d.year%4)+1==0))
                                    {
                                        printf(Rus("Error: в феврале  29 дней!! .\n"));
                                        return false;
                                    }
                                    else return true;               
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.05.2013, 20:14
Помогаю со студенческими работами здесь

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

Вечный календарь ошибка компиляции
Здравствуйте!Написал программу при компиляции выдается ошибка.не могу разобраться где именно.подскажите пожалуйста. #include...

Напасать на паскале программу.вечный календарь
Даны натуральные числа, обозначающие число, месяц и год. Используя «вечный календарь» определить день недели, на который падает указанная...

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

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


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru