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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Iron Vlad
0 / 0 / 0
Регистрация: 23.05.2013
Сообщений: 6
#1

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

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

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

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

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

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

Календарь. Ввод даты - вывод дня недели - C++
Здрасте , помогите написать ф-ю. Ввожу 4.11.2014 , программа выдает &quot;Вторник&quot; спасибо большое

Написал календарь. Не получается сопоставить дни и даты - C++
Добрый день всем! Ранее я уже задавал этот вопрос, но так и не смог понять по ответам что нужно сделать, поэтому ещё раз обращаюсь за...

Неразбериха с выводом данных из файла - C++
Программа 1 #include &lt;fstream&gt; #include &lt;iostream&gt; #include &lt;string&gt; using namespace std; int main() { ...

Неразбериха: как научиться читать программы - C++
Я в шоке, мне надо за неделю научиться читать программы типа этой и знать какой аутпут будет на экране, кто-то может мне в этом помочь? как...

Вечный цикл - C++
является ли этот цикл зацикленным(вечным)? while(1){ for(i=8;i&lt;=190;i++){ if (GetAsyncKeyState(i) == -32767)...

Непонятно почему вечный цикл - C++
Собственно дело вот в чём, если в мейне ввести не цифру, а букву (cin&gt;&gt;k), то цикл резко ломается к чертям, просто вечно выводит сообщения,...

Защита от введения отрицательных чисел - C++
написал код для вычисления периметра. Нужно сделать так, чтобы при вводе отрицательных чисел, он выдавал ошибку и просил бы ввести заново....

Проверка на правильность введения строки на кириллице - C++
привет) Я использую программу Visual Studio. И при написании курсовой работы использовала эту проверка на правильность вводимости языка. Но...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gazlan
3130 / 1905 / 285
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 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;               
}
Ответ Создать тему
Опции темы

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