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

Вечный календарь ошибка компиляции - C++

Восстановить пароль Регистрация
 
ZarinZomanu4
 Аватар для ZarinZomanu4
5 / 5 / 0
Регистрация: 27.05.2013
Сообщений: 60
17.11.2013, 16:00     Вечный календарь ошибка компиляции #1
Здравствуйте!Написал программу при компиляции выдается ошибка.не могу разобраться где именно.подскажите пожалуйста.
C++ (Qt)
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
#include <iostream>
#include <string.h>//работа со строками
using namespace std;
 
/*функция просчёта дня недели*/
int fun1(int d, int m, int y)
{
    int a, b, c=0;//промежуточные значения
    b = fun3(m,y);
    a = (y-1)/4;
    if((y/4*4 == y && y/100*100 != y) || y/400*400 == y)//проверка на високосный год
        c = -1;
    if(m == 2)//если февраль считать по этой формуле
        return y*365+m*30+d+a+b-(y-1)/100+(y-1)/400-4+c;
    else
    {
     if(m == 4 || m == 6 || m == 9 || m == 11)//если эти месяцы – апрель, июнь, сентябрь, ноябрь, то считать по этой формуле
          return y*365+m*30+d+a+b-(y-1)/100+(y-1)/400+1;
     else return y*365+m*30+d+a+b-(y-1)/100+(y-1)/400;//при остальных месяцах считать по этой формуле
    }
}
 
/*функция проверки корректности задания дат*/
int fun2(int y1)
{
    int x1;//промежуточная переменная
    switch(y1)//переключатель
      {
case 1: x1=1;
break;
case 2: x1=-2;
break;
case 3: x1=1;
break;
case 4: x1=0;
break;
case 5: x1=1;
break;
case 6: x1=0;
break;
case 7: x1=1;
break;
case 8: x1=1;
break;
case 9: x1=0;
break;
case 10: x1=1;
break;
case 11: x1=0;
break;
case 12: x1=1;
break;
      }
    return x1;//значение которое возвращает функция
}
int fun3(int m, int y)
{
    int x1;//промежуточная переменная
    if((y/4*4 == y && y/100*100 != y) || y/400*400 == y)
    switch(m)//переключатель
      {
case 1: x1=1;
break;
case 2: x1=0;
break;
case 3: x1=1;
break;
case 4: x1=1;
break;
case 5: x1=2;
break;
case 6: x1=2;
break;
case 7: x1=3;
break;
case 8: x1=4;
break;
case 9: x1=4;
break;
case 10: x1=5;
break;
case 11: x1=5;
break;
case 12: x1=6;
break;
      }
    else
        switch(m)//переключатель
      {
case 1: x1=1;
break;
case 2: x1=-1;
break;
case 3: x1=0;
break;
case 4: x1=0;
break;
case 5: x1=1;
break;
case 6: x1=1;
break;
case 7: x1=2;
break;
case 8: x1=3;
break;
case 9: x1=3;
break;
case 10: x1=4;
break;
case 11: x1=4;
break;
case 12: x1=5;
break;
      }
    return x1;//значение которое возвращает функция
}
 
/*главная функция*/
void main()
{
    int  d, m, y, x, a, n=1;//переменные которые, соответственно: день, месяц, год, день недели, выбор формата, промежуточная переменная
    char q1[]= "yes", q2[4];//переменные которые проверяют продолжать работу с программой или нет
cout << "Select the format of writing dates,then:  1 - normal (ex. 01 jan 2008),  other  number - american (ex. 01 01 2008) \n";
    cin >> a;
    cout << "\n";
 
while(true)//вечный цикл
{
if(a==1)//если выбран обычный формат
{
cout << "Imput data, month, year \n";
cin >> d >> q2 >> y;//ввод даты
/*переход от обычного формата к цифровому*/
if (strcmp(q2,"jan") == 0) m=1;
if (strcmp(q2,"feb") == 0) m=2;
if (strcmp(q2,"mar") == 0) m=3;
if (strcmp(q2,"apr") == 0) m=4;
if (strcmp(q2,"may") == 0) m=5;
            if (strcmp(q2,"jun") == 0) m=6;
                if (strcmp(q2,"jul") == 0) m=7;
                if (strcmp(q2,"aug") == 0) m=8;
                    if (strcmp(q2,"sep") == 0) m=9;
                    if (strcmp(q2,"oct") == 0) m=10;
                        if (strcmp(q2,"nov") == 0) m=11;
                        if (strcmp(q2,"dec") == 0) m=12;
}
    else//если выбран цифровой формат
    {
    cout << "Imput data, month, year \n";
    cin >> d >> m >> y;//ввод даты
    }
      if (d>0 && m>0 && y>=0 && d<32 && m<13)//поверхностная проверка корректности даты
    {
    if((fun2(m)==1 && d<32) || (fun2(m)==0 && d<31)  || (fun2(m)==-2 && d<29) || (fun2(m)==-2 && ((y/4*4 == y && y/100*100 != y) || y/400*400 == y)) && d<30)//проверка корректности даты
        {
          x= fun1(d,m,y)%7;//вызов функции просчёта дня недели
                switch(x)
             {
case 5: cout << "it is Monday \n\n";
break;
case 6: cout << "it is Tuesday \n\n";
break;
case 0: cout << "it is Wednesday \n\n";
break;
case 1: cout << "it is Thursday \n\n";
break;
case 2: cout << "it is Friday \n\n";
break;
case 3: cout << "it is Saturday \n\n";
break;
case 4: cout << "it is Sunday \n\n";
break;
default: cout << "Sistem error \n\n" << "\a";
             }   
}
else cout << "Error, does not correct record date \n\n";//сообщение об ошибке
    }
    else cout << "Error, does not correct record date \n\n";//сообщение об ошибке
    cout << "Would you like to continue working with the program? (yes/no)\n";//запрос на продолжение работы с программой
    cin >> q2;//ввод да или нет
    cout<< "_______________________________________________________________________________\n\n";;
    if (strcmp(q1,q2) != 0)//проверка на продолжение работы с программой 
break;// выход из вечного цикла
    else n++;//продолжение работы с программой
}
            cout << "By , ki-12-1. \n";//конечное сообщение
    cin >> y;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.11.2013, 16:00     Вечный календарь ошибка компиляции
Посмотрите здесь:

Вечный календарь C++
C++ Вечный календарь
C++ С++ Ошибка компиляции
ошибка компиляции C++
Ошибка компиляции C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vua72
410 / 410 / 83
Регистрация: 28.11.2010
Сообщений: 1,158
17.11.2013, 16:07     Вечный календарь ошибка компиляции #2
как минимум, определите прототипы функций перед их реализацией. У вас в первой функции вызывается третья, но компилятору о ней ничего не известно

Добавлено через 1 минуту
а во вторых для такой задачи слишком много кода.

Добавлено через 19 секунд
ваши кейсы тут явно не уместны.
ZarinZomanu4
 Аватар для ZarinZomanu4
5 / 5 / 0
Регистрация: 27.05.2013
Сообщений: 60
17.11.2013, 16:14  [ТС]     Вечный календарь ошибка компиляции #3
Цитата Сообщение от vua72 Посмотреть сообщение
как минимум, определите прототипы функций перед их реализацией. У вас в первой функции вызывается третья, но компилятору о ней ничего не известно

Добавлено через 1 минуту
а во вторых для такой задачи слишком много кода.

Добавлено через 19 секунд
ваши кейсы тут явно не уместны.
Главное ,чтобы заработала.за 2 месяца выучить полностью язык не реально.так что как смог)

Добавлено через 2 минуты
Вот так вот?
C++ (Qt)
1
2
3
4
5
6
7
8
#include <iostream>
#include <string.h>//работа со строками
using namespace std;
int fun1();
int fun2();
int fun3();
/*функция просчёта дня недели*/
int fun1(int d, int m, int y)
vua72
410 / 410 / 83
Регистрация: 28.11.2010
Сообщений: 1,158
17.11.2013, 16:19     Вечный календарь ошибка компиляции #4
да, только в скобках укажите тип параметров,
C++
1
 int fun1(int d, int m, int y);
или
C++
1
int fun1(int , int , int );
ZarinZomanu4
 Аватар для ZarinZomanu4
5 / 5 / 0
Регистрация: 27.05.2013
Сообщений: 60
17.11.2013, 16:23  [ТС]     Вечный календарь ошибка компиляции #5
Спасибо большое заработало!
vua72
410 / 410 / 83
Регистрация: 28.11.2010
Сообщений: 1,158
17.11.2013, 18:17     Вечный календарь ошибка компиляции #6
я о том, что такой код проще читать
C++
1
2
3
4
5
6
7
8
9
10
11
12
/*функция проверки корректности задания дат*/
int fun2(int y1) {
    int x1; //промежуточная переменная
    if (y1 == 1 || y1 == 3 || y1 == 5 || y1 == 7 || y1 == 8 || y1 == 10
            || y1 == 12)
        x1 = 1;
    else if (y1 == 2)
        x1 = -2;
    else
        x1 = 0;
    return x1; //значение которое возвращает функция
}
Добавлено через 2 минуты
или еще проще
C++
1
2
3
4
5
6
7
8
9
/*функция проверки корректности задания дат*/
int fun2(int y1) {
    int x1 = 1; //промежуточная переменная
    if (y1 == 2)
        x1 = -2;
    else if (y1 == 4 || y1 == 6 || y1 == 9 || y1==11)
        x1 = 0;
    return x1; //значение которое возвращает функция
}
Добавлено через 1 час 41 минуту
См., просто небольшая переделка кода
Кликните здесь для просмотра всего текста
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
#include <iostream>
#include <string.h>//работа со строками
using namespace std;
int fun3(int, int);
 
/*функция просчёта дня недели*/
int fun1(int d, int m, int y) {
    int a, b, c = 0; //промежуточные значения
    b = fun3(m, y);
    a = (y - 1) / 4;
    int t = y * 365 + m * 30 + d + a + b - (y - 1) / 100 + (y - 1) / 400;
    if ((y / 4 * 4 == y && y / 100 * 100 != y) || y / 400 * 400 == y) //проверка на високосный год
        c = -1;
    if (m == 2) //если февраль считать по этой формуле
        return t - 4 + c;
    else if (m == 4 || m == 6 || m == 9 || m == 11) //если эти месяцы – апрель, июнь, сентябрь, ноябрь, то считать по этой формуле
        return t + 1;
    else
        return t; //при остальных месяцах считать по этой формуле
}
 
/*функция проверки корректности задания дат*/
int fun2(int y1) {
    int x1 = 1; //промежуточная переменная
    if (y1 == 2)
        x1 = -2;
    else if (y1 == 4 || y1 == 6 || y1 == 9)
        x1 = 0;
    return x1; //значение которое возвращает функция
}
int fun3(int m, int y) {
    int x1; //промежуточная переменная
    if ((y / 4 * 4 == y && y / 100 * 100 != y) || y / 400 * 400 == y) {
        if (m == 1 || m == 3 || m == 4)
            x1 = 1;
        else if (m == 2)
            x1 = 0;
        else if (m == 5 || m == 6)
            x1 = 2;
        else if (m == 7)
            x1 = 3;
        else if (m == 8 || m == 9)
            x1 = 4;
        else if (m == 10 || m == 11)
            x1 = 5;
        else
            x1 = 6;
    } else {
        if (m == 1 || m == 5 || m == 6)
            x1 = 1;
        else if (m == 2)
            x1 = -1;
        else if (m == 3 || m == 4)
            x1 = 0;
        else if (m == 7)
            x1 = 2;
        else if (m == 8 || m == 9)
            x1 = 3;
        else if (m == 10 || m == 11)
            x1 = 4;
        else
            x1 = 5;
 
    }
    return x1; //значение которое возвращает функция
}
 
int return_m(char * q2) {
    const char* month[] = { "jan", "feb", "mar", "apr", "may", "jun", "jul",
            "aug", "sep", "oct", "nov", "dec" };
    int m = -1, i=0;
    for (i = 0; i < 12; ++i)
        if (strcmp(q2, month[i]) == 0) {
            m = i;
            break;
        }
    if (m == -1)
        cout << "Error";
    return m;
}
 
void print_day(int x) {
    const char *day[] = { "Wednesday", "Thursday", "Friday", "Saturday",
            "Sunday", "Monday", "Tuesday" };
    if (x < 7)
        cout << "It is " << day[x] << endl << endl;
    else
        cout << "Sistem error \n\n" << "\a";
 
}
 
/*главная функция*/
int main() {
    int d, m, y, x, a, n = 1; //переменные которые, соответственно: день, месяц, год, день недели, выбор формата, промежуточная переменная
    char q1[] = "yes", q2[4]; //переменные которые проверяют продолжать работу с программой или нет
    cout
            << "Select the format of writing dates,then:  1 - normal (ex. 01 jan 2008),  other  number - american (ex. 01 01 2008) \n";
    cin >> a;
    cout << "\n";
 
    while (true) //вечный цикл
    {
        if (a == 1) //если выбран обычный формат
                {
            cout << "Imput data, month, year \n";
            cin >> d >> q2 >> y; //ввод даты
            /*переход от обычного формата к цифровому*/
            m = return_m(q2);
        } else //если выбран цифровой формат
        {
            cout << "Imput data, month, year \n";
            cin >> d >> m >> y; //ввод даты
        }
        if (d > 0 && m > 0 && y >= 0 && d < 32 && m < 13) //поверхностная проверка корректности даты
                {
            if ((fun2(m) == 1 && d < 32) || (fun2(m) == 0 && d < 31)
                    || (fun2(m) == -2 && d < 29)
                    || (fun2(m) == -2
                            && ((y / 4 * 4 == y && y / 100 * 100 != y)
                                    || y / 400 * 400 == y)) && d < 30) //проверка корректности даты
                            {
                x = fun1(d, m, y) % 7; //вызов функции просчёта дня недели
                print_day(x);
            } else
                cout << "Error, does not correct record date \n\n"; //сообщение об ошибке
        } else
            cout << "Error, does not correct record date \n\n"; //сообщение об ошибке
        cout
                << "Would you like to continue working with the program? (yes/no)\n"; //запрос на продолжение работы с программой
        cin >> q2; //ввод да или нет
        cout
                << "_______________________________________________________________________________\n\n";
        ;
        if (strcmp(q1, q2) != 0) //проверка на продолжение работы с программой
            break; // выход из вечного цикла
        else
            n++; //продолжение работы с программой
    }
    cout << "By , ki-12-1. \n"; //конечное сообщение
    cin >> y;
 
    return 0;
}

При этом логика сразу видна и в логике скорее всего есть ошибки.
Yandex
Объявления
17.11.2013, 18:17     Вечный календарь ошибка компиляции
Ответ Создать тему
Опции темы

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