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

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

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

Author24 — интернет-сервис помощи студентам
Ребята, вот кусок моего кода. Работает, но есть проблема с февралём до 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.05.2013, 23:46
Ответы с готовыми решениями:

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

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

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

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

2
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 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;
}
0
0 / 0 / 1
Регистрация: 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;               
}
0
26.05.2013, 20:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.05.2013, 20:14
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru