Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Iron Vlad
0 / 0 / 0
Регистрация: 23.05.2013
Сообщений: 6
23.05.2013, 23:46     Вечный календарь: неразбериха с проверкой введения даты #1
Ребята, вот кусок моего кода. Работает, но есть проблема с февралём до 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.05.2013, 23:46     Вечный календарь: неразбериха с проверкой введения даты
Посмотрите здесь:

Вечный календарь C++
C++ Вечный календарь
C++ Неразбериха с выводом данных из файла
Вечный календарь ошибка компиляции C++
Неразбериха: как научиться читать программы C++
Календарь. Ввод даты - вывод дня недели C++
C++ Написал календарь. Не получается сопоставить дни и даты
Вечный календарь C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gazlan
2867 / 1815 / 272
Регистрация: 27.08.2010
Сообщений: 4,921
Записей в блоге: 1
24.05.2013, 02:08     Вечный календарь: неразбериха с проверкой введения даты #2
C++
1
2
3
4
bool Timestamp::IsLeapYear(int iYear) 
{
   return  ((!(iYear % 4) && (iYear % 100)) || (!(iYear % 400))) ? true : false;
}
Iron Vlad
0 / 0 / 0
Регистрация: 23.05.2013
Сообщений: 6
26.05.2013, 20:14  [ТС]     Вечный календарь: неразбериха с проверкой введения даты #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
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;               
}
Yandex
Объявления
26.05.2013, 20:14     Вечный календарь: неразбериха с проверкой введения даты
Ответ Создать тему
Опции темы

Текущее время: 09:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru