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

Помoгите найти ошибку в коде! - C++

Восстановить пароль Регистрация
 
Вася1q
 Аватар для Вася1q
21 / 21 / 0
Регистрация: 13.09.2011
Сообщений: 311
06.04.2012, 19:55     Помoгите найти ошибку в коде! #1
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
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
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
#include <iostream>
#include <stdio.h>
#include <conio.h>
 
using namespace std;
 
enum firms
{
    Sonic,
    Thomson,
    Panasonic,
    LG,
    Samsung
};
enum comp_type
{
    Portable,
    PC
};
enum mon_type
{
    JK,
    Prostoy
};
 
void set_type_name(char *&name, comp_type t) // перегруженная функция, которая записывает имя указанного типа в переменной "Имя"
{
    switch(t)
    {
        case Portable:
        strcpy(name, "Portable");
        break;
        default:
        strcpy(name, "PC");
        break;
    }
}
 
void set_type_name(char *&name, mon_type m)
{
    switch(m)
    {
        case JK:
        strcpy(name, "JK");
        break;
        default:
        strcpy(name, "Prostoy");
        break;
    }
}
 
void set_type_name(char *&name, firms f)
{
    switch(f)
    {
        case Sonic:
        strcpy(name, "Sonic");
        break;
        case Thomson:
        strcpy(name, "Thomson");
        break;
        case Panasonic:
        strcpy(name, "Panasonic");
        break;
        case LG:
        strcpy(name, "LG");
        break;
        default:
        strcpy(name, "Samsung");
        break;
    }
}
 
class product
{
    int shifr;
    char date[20];
    firms firm_pos;
    char firm_iz[120];
    int prod_count;
    public:
    product()
    {
        shifr = 0;
        //date = "1/1/2012";
        firm_pos = Thomson;
        //firm_iz = "iz";
        prod_count = 0;
    }
    void set(int i, char *d, firms f1, char *f2, int count) // установка значений
    {
        shifr = i;
        strcpy(date, d);
        firm_pos = f1;
        strcpy(firm_iz, f2);
        prod_count = count;
    }
    virtual void show_prod() // отображение информации о товаре
    {
        char *name;
        set_type_name(name, firm_pos);
        printf("%i | %s | %s | %s | %i\n", shifr, date, name, firm_iz, prod_count);
    }
    friend void show_firm(product prod[], register int sz) // из массива товаров ищем товар тот, какой больше всего поставляет фирма
    {
        register int tmp[5] = { // временный массив, в нем хранятся количество соотношения товар-фирма
            0, 0, 0, 0, 0
        };
        for(register int i = 0; i < sz; i++)
        {
            tmp[(int)prod[i].firm_pos]++; // перевод строки: И - это индекс из перечисления фирм текущего товара
            // то есть: тмп0 - соник, тмп1 - томпсон, тмп3 - панасоник и т.д.
            // допустим прод0.фирм_пос == Томпон
            // у Томпсона индекс == 1
            // значит при первом проходе цикла массив будет такой: 0, 1, 0, 0, 0
        }
        register int max = tmp[0]; // маск
        register int index = 0; // макс. индекс
        for(register int i = 0; i < 5; i++) // ищем макс. индекс, что бы по нему получить имя фирмы, которая встречается чаще всего
        {
            if(max < tmp[i])
            {
                max = tmp[i];
                index = i;
            }
        }
        char *name;
        switch(index)
        {
            case 0:
            set_type_name(name, Sonic);
            break;
            case 1:
            set_type_name(name, Thomson);
            break;
            case 2:
            set_type_name(name, Panasonic);
            break;
            case 3:
            set_type_name(name, LG);
            break;
            case 4:
            set_type_name(name, Samsung);
            break;
            default:
            set_type_name(name, Thomson);
            break;
        }
        printf("Max firm_pos: %s", name); // выводим имя фирмы
    }
};
 
class comp : public product
{
    comp_type tc;
    char produce[120];
    int type_proc;
    int gh_proc;
    int ozu;
    int vint;
    public:
    comp()
    {
        tc = PC;
        //produce = "non";
        type_proc = 0;
        gh_proc = 0;
        ozu = 0;
        vint = 0;
    }
    void set(comp_type ct, char *p, int i1, int i2, int i3, int i4) // установка
    {
        tc = ct;
        strcpy(produce, p);
        type_proc = i1;
        gh_proc = i2;
        ozu = i3;
        vint = i4;
    }
    void show_prod() // отображение информации о компе
    {
        char *name;
        set_type_name(name, tc);
        printf("%s | %s | %i | %i GHz | %i OZU | %i GB\n", name, produce, type_proc, gh_proc, ozu, vint);
    }
};
 
class monitor : public product // полностью аналогичен классу компу
{
    int width;
    int height;
    mon_type mt;
    public:
    monitor()
    {
        width = 1024;
        height = 768;
        mt = JK;
    }
    void set(int i, int j, mon_type m)
    {
        width = i;
        height = j;
        mt = m;
    }
    void show_prod()
    {
        char *name;
        set_type_name(name, mt);
        printf("Shirina %i | Visota %i | Tip %s\n", width, height, name);
    }
};
 
int main(int argc, char *argv[])
{
    printf("Demo\nFor exit press 'q'\n");
    const int sz = 2;
    product *p = new product[sz]; /*{
        product(), product(), product(), product(), product()
    };*/
    for(int i = 0; i < sz; i++)
    {
        int i, j, x;
        char s1[80], s2[80];
        firms f;
        printf("Input product shift: ");
        cin >> i;
        printf("Input product date: ");
        cin >> s1;
        cin.get();
        printf("Input product firm_pos (0-4): ");
        cin >> x;
        printf("Input product firm_iz: ");
        cin >> s2;
        printf("Input product prod_count: ");
        cin >> j;
        switch(x)
        {
            case 0:
            f = Sonic;
            break;
            case 1:
            f = Thomson;
            break;
            case 2:
            f = LG;
            break;
            case 3:
            f = Panasonic;
            break;
            default:
            f = Samsung;
            break;
        }
        p[i].set(i, s1, f, s2, j);
    }
    product *prod = &*p;
    printf("Dostupnie tovari:\n");
    for(int i = 0; i < sz; i++)
    {
        printf("%i: ", i);
        p[i].show_prod();
    }
    printf("Max firm--------------------------------------------\n");
    show_firm(p, sz);
    while(true)
    {
        register char c;
        cin >> c;
        if(c == 'q') break;
    }
    delete [] p;
    getch();
    return 0;
}
Добрый вечер, не подскажите где ошибка?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.04.2012, 19:55     Помoгите найти ошибку в коде!
Посмотрите здесь:

Ошибку помoгите найти C++
Найти ошибку в коде C++
найти ошибку в коде C++
C++ Найти ошибку в коде
C++ Найти ошибку в коде
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Taras_Z
 Аватар для Taras_Z
100 / 84 / 2
Регистрация: 27.10.2010
Сообщений: 534
Записей в блоге: 2
06.04.2012, 21:35     Помoгите найти ошибку в коде! #2
C++
1
2
3
4
 
    for(int i = 0; i < sz; i++)
    {
        int i, j, x;
поменяйте переменную i на другую
Avazart
 Аватар для Avazart
6900 / 5140 / 252
Регистрация: 10.12.2010
Сообщений: 22,581
Записей в блоге: 17
06.04.2012, 21:37     Помoгите найти ошибку в коде! #3
Строка 127

C++
1
2
3
4
5
6
7
8
9
10
 //....
         char *name; // это только указатель на переменную, а где сама переменная?
// Может char *name= new char[255];
        switch(index)
        {
            case 0:
            set_type_name(name, Sonic);
            break;
            case 1:
  //....
Вася1q
 Аватар для Вася1q
21 / 21 / 0
Регистрация: 13.09.2011
Сообщений: 311
06.04.2012, 22:42  [ТС]     Помoгите найти ошибку в коде! #4
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
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
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
#include <iostream>
#include <stdio.h>
#include <conio.h>
 
using namespace std;
 
enum firms
{
    Sonic,
    Thomson,
    Panasonic,
    LG,
    Samsung
};
enum comp_type
{
    Portable,
    PC
};
enum mon_type
{
    JK,
    Prostoy
};
 
void set_type_name(char *&name, comp_type t) // перегруженная функция, которая записывает имя указанного типа в переменной "Имя"
{
    switch(t)
    {
        case Portable:
        strcpy(name, "Portable");
        break;
        default:
        strcpy(name, "PC");
        break;
    }
}
 
void set_type_name(char *&name, mon_type m)
{
    switch(m)
    {
        case JK:
        strcpy(name, "JK");
        break;
        default:
        strcpy(name, "Prostoy");
        break;
    }
}
 
void set_type_name(char *&name, firms f)
{
    switch(f)
    {
        case Sonic:
        strcpy(name, "Sonic");
        break;
        case Thomson:
        strcpy(name, "Thomson");
        break;
        case Panasonic:
        strcpy(name, "Panasonic");
        break;
        case LG:
        strcpy(name, "LG");
        break;
        default:
        strcpy(name, "Samsung");
        break;
    }
}
 
class product
{
    int shifr;
    char date[20];
    firms firm_pos;
    char firm_iz[120];
    int prod_count;
    public:
    product()
    {
        shifr = 0;
        //date = "1/1/2012";
        firm_pos = Thomson;
        //firm_iz = "iz";
        prod_count = 0;
    }
    void set(int i, char *d, firms f1, char *f2, int count) // установка значений
    {
        shifr = i;
        strcpy(date, d);
        firm_pos = f1;
        strcpy(firm_iz, f2);
        prod_count = count;
    }
    virtual void show_prod() // отображение информации о товаре
    {
        char *name;
        set_type_name(name, firm_pos);
        printf("%i | %s | %s | %s | %i\n", shifr, date, name, firm_iz, prod_count);
    }
    friend void show_firm(product prod[], register int sz) // из массива товаров ищем товар тот, какой больше всего поставляет фирма
    {
        register int tmp[5] = { // временный массив, в нем хранятся количество соотношения товар-фирма
            0, 0, 0, 0, 0
        };
        for(register int i = 0; i < sz; i++)
        {
            tmp[(int)prod[i].firm_pos]++; // перевод строки: И - это индекс из перечисления фирм текущего товара
            // то есть: тмп0 - соник, тмп1 - томпсон, тмп3 - панасоник и т.д.
            // допустим прод0.фирм_пос == Томпон
            // у Томпсона индекс == 1
            // значит при первом проходе цикла массив будет такой: 0, 1, 0, 0, 0
        }
        register int max = tmp[0]; // маск
        register int index = 0; // макс. индекс
        for(register int i = 0; i < 5; i++) // ищем макс. индекс, что бы по нему получить имя фирмы, которая встречается чаще всего
        {
            if(max < tmp[i])
            {
                max = tmp[i];
                index = i;
            }
        }
        char *name= new char[255];
        switch(index)
        {
            case 0:
            set_type_name(name, Sonic);
            break;
            case 1:
            set_type_name(name, Thomson);
            break;
            case 2:
            set_type_name(name, Panasonic);
            break;
            case 3:
            set_type_name(name, LG);
            break;
            case 4:
            set_type_name(name, Samsung);
            break;
            default:
            set_type_name(name, Thomson);
            break;
        }
        printf("Max firm_pos: %s", name); // выводим имя фирмы
    }
};
 
class comp : public product
{
    comp_type tc;
    char produce[120];
    int type_proc;
    int gh_proc;
    int ozu;
    int vint;
    public:
    comp()
    {
        tc = PC;
        //produce = "non";
        type_proc = 0;
        gh_proc = 0;
        ozu = 0;
        vint = 0;
    }
    void set(comp_type ct, char *p, int i1, int i2, int i3, int i4) // установка
    {
        tc = ct;
        strcpy(produce, p);
        type_proc = i1;
        gh_proc = i2;
        ozu = i3;
        vint = i4;
    }
    void show_prod() // отображение информации о компе
    {
        char *name;
        set_type_name(name, tc);
        printf("%s | %s | %i | %i GHz | %i OZU | %i GB\n", name, produce, type_proc, gh_proc, ozu, vint);
    }
};
 
class monitor : public product // полностью аналогичен классу компу
{
    int width;
    int height;
    mon_type mt;
    public:
    monitor()
    {
        width = 1024;
        height = 768;
        mt = JK;
    }
    void set(int i, int j, mon_type m)
    {
        width = i;
        height = j;
        mt = m;
    }
    void show_prod()
    {
        char *name;
        set_type_name(name, mt);
        printf("Shirina %i | Visota %i | Tip %s\n", width, height, name);
    }
};
 
int main(int argc, char *argv[])
{
    printf("Demo\nFor exit press 'q'\n");
    const int sz = 2;
    product *p = new product[sz]; 
    /*{
        product(), product(), product(), product(), product()
    };*/
    for(int q1 = 0; q1 < sz; q1++)
    {
        int i, j, x;
        char s1[80], s2[80];
        firms f;
        printf("Input product shift: ");
        cin >> i;
        printf("Input product date: ");
        cin >> s1;
        cin.get();
        printf("Input product firm_pos (0-4): ");
        cin >> x;
        printf("Input product firm_iz: ");
        cin >> s2;
        printf("Input product prod_count: ");
        cin >> j;
        switch(x)
        {
            case 0:
            f = Sonic;
            break;
            case 1:
            f = Thomson;
            break;
            case 2:
            f = LG;
            break;
            case 3:
            f = Panasonic;
            break;
            default:
            f = Samsung;
            break;
        }
        p[i].set(i, s1, f, s2, j);
    }
    product *prod = &*p;
    printf("Dostupnie tovari:\n");
    for(int i = 0; i < sz; i++)
    {
        printf("%i: ", i);
        p[i].show_prod();
    }
    printf("Max firm--------------------------------------------\n");
    show_firm(p, sz);
    while(true)
    {
        register char c;
        cin >> c;
        if(c == 'q') break;
    }
    delete [] p;
    getch();
    return 0;
}
вот поменял, но вроде как ничего не изменилось...
Avazart
 Аватар для Avazart
6900 / 5140 / 252
Регистрация: 10.12.2010
Сообщений: 22,581
Записей в блоге: 17
06.04.2012, 22:58     Помoгите найти ошибку в коде! #5
Ну как бы не подвисает как раньше
Миниатюры
Помoгите найти ошибку в коде!  
Avazart
 Аватар для Avazart
6900 / 5140 / 252
Регистрация: 10.12.2010
Сообщений: 22,581
Записей в блоге: 17
06.04.2012, 23:00     Помoгите найти ошибку в коде! #6
тока я там system("pause"); вместо getch(); влипил

Можно было бы и
C++
1
2
3
4
5
6
    while(true)
    {
        register char c;
        cin >> c;
        if(c == 'q') break;
    }
убрать
Вася1q
 Аватар для Вася1q
21 / 21 / 0
Регистрация: 13.09.2011
Сообщений: 311
07.04.2012, 17:07  [ТС]     Помoгите найти ошибку в коде! #7
Цитата Сообщение от Avazart Посмотреть сообщение
Ну как бы не подвисает как раньше
извините, у вас какой компилятор? Просто у меня все-рано вылетает...
Выложите уже готовый код пожалуйста!
eji
116 / 116 / 6
Регистрация: 17.09.2010
Сообщений: 288
07.04.2012, 17:56     Помoгите найти ошибку в коде! #8
Вася1q, откомпилировано в C-Free:
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
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
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
#include <iostream>
#include <stdio.h>
#include <conio.h>
 
using namespace std;
 
enum firms
{
    Sonic,
    Thomson,
    Panasonic,
    LG,
    Samsung
};
enum comp_type
{
    Portable,
    PC
};
enum mon_type
{
    JK,
    Prostoy
};
 
void set_type_name(char *&name, comp_type t) // ïåðåãðóæåГ*Г*Г*Гї ГґГіГ*êöèÿ, êîòîðГ*Гї Г§Г*ïèñûâГ*ГҐГІ èìÿ ГіГЄГ*Г§Г*Г*Г*îãî ГІГЁГЇГ* Гў ïåðåìåГ*Г*îé "Èìÿ"
{
    switch(t)
    {
        case Portable:
        strcpy(name, "Portable");
        break;
        default:
        strcpy(name, "PC");
        break;
    }
}
 
void set_type_name(char *&name, mon_type m)
{
    switch(m)
    {
        case JK:
        strcpy(name, "JK");
        break;
        default:
        strcpy(name, "Prostoy");
        break;
    }
}
 
void set_type_name(char *&name, firms f)
{
    switch(f)
    {
        case Sonic:
        strcpy(name, "Sonic");
        break;
        case Thomson:
        strcpy(name, "Thomson");
        break;
        case Panasonic:
        strcpy(name, "Panasonic");
        break;
        case LG:
        strcpy(name, "LG");
        break;
        default:
        strcpy(name, "Samsung");
        break;
    }
}
 
class product
{
    int shifr;
    char date[20];
    firms firm_pos;
    char firm_iz[120];
    int prod_count;
    public:
    product()
    {
        shifr = 0;
        //date = "1/1/2012";
        firm_pos = Thomson;
        //firm_iz = "iz";
        prod_count = 0;
    }
    void set(int i, char *d, firms f1, char *f2, int count) // ГіГ±ГІГ*Г*îâêГ* Г§Г*Г*Г·ГҐГ*ГЁГ©
    {
        shifr = i;
        strcpy(date, d);
        firm_pos = f1;
        strcpy(firm_iz, f2);
        prod_count = count;
    }
    virtual void show_prod() // îòîáðГ*æåГ*ГЁГҐ ГЁГ*ôîðìГ*öèè Г® òîâГ*ðå
    {
        char *name;
        try
        {
            name = new char[120];
        }
        catch(bad_alloc xa)
        {
            exit(1);
        }
        set_type_name(name, firm_pos);
        printf("%i | %s | %s | %s | %i\n", shifr, date, name, firm_iz, prod_count);
        delete [] name;
    }
    friend void show_firm(product prod[], register int sz) // ГЁГ§ Г¬Г*Г±Г±ГЁГўГ* òîâГ*ðîâ ГЁГ№ГҐГ¬ òîâГ*Г° òîò, ГЄГ*êîé áîëüøå ГўГ±ГҐГЈГ® ïîñòГ*âëÿåò ôèðìГ*
    {
        register int tmp[5] = { // âðåìåГ*Г*ûé Г¬Г*Г±Г±ГЁГў, Гў Г*ГҐГ¬ õðГ*Г*ГїГІГ±Гї êîëè÷åñòâî ñîîòГ*îøåГ*ГЁГї òîâГ*Г°-ôèðìГ*
            0, 0, 0, 0, 0
        };
        for(register int i = 0; i < sz; i++)
        {
            tmp[(int)prod[i].firm_pos]++; // ïåðåâîä ñòðîêè: Г€ - ГЅГІГ® ГЁГ*äåêñ ГЁГ§ ïåðå÷èñëåГ*ГЁГї ôèðì ГІГҐГЄГіГ№ГҐГЈГ® òîâГ*Г°Г*
            // ГІГ® ГҐГ±ГІГј: òìï0 - Г±Г®Г*ГЁГЄ, òìï1 - òîìïñîГ*, òìï3 - ГЇГ*Г*Г*Г±Г®Г*ГЁГЄ ГЁ ГІ.Г¤.
            // äîïóñòèì ïðîä0.ôèðì_ïîñ == ÒîìïîГ*
            // Гі ÒîìïñîГ*Г* ГЁГ*äåêñ == 1
            // Г§Г*Г*Г·ГЁГІ ïðè ïåðâîì ïðîõîäå öèêëГ* Г¬Г*Г±Г±ГЁГў áóäåò ГІГ*êîé: 0, 1, 0, 0, 0
        }
        register int max = tmp[0]; // Г¬Г*Г±ГЄ
        register int index = 0; // Г¬Г*ГЄГ±. ГЁГ*äåêñ
        for(register int i = 0; i < 5; i++) // ГЁГ№ГҐГ¬ Г¬Г*ГЄГ±. ГЁГ*äåêñ, Г·ГІГ® ГЎГ» ГЇГ® Г*åìó ïîëó÷èòü èìÿ ôèðìû, êîòîðГ*Гї âñòðå÷Г*ГҐГІГ±Гї Г·Г*Г№ГҐ ГўГ±ГҐГЈГ®
        {
            if(max < tmp[i])
            {
                max = tmp[i];
                index = i;
            }
        }
        char *name;
        try
        {
            name = new char[120];
        }
        catch(bad_alloc xa)
        {
            exit(1);
        }
        switch(index)
        {
            case 0:
            set_type_name(name, Sonic);
            break;
            case 1:
            set_type_name(name, Thomson);
            break;
            case 2:
            set_type_name(name, Panasonic);
            break;
            case 3:
            set_type_name(name, LG);
            break;
            case 4:
            set_type_name(name, Samsung);
            break;
            default:
            set_type_name(name, Thomson);
            break;
        }
        printf("Max firm_pos: %s", name); // âûâîäèì èìÿ ôèðìû
        delete [] name;
    }
};
 
class comp : public product
{
    comp_type tc;
    char produce[120];
    int type_proc;
    int gh_proc;
    int ozu;
    int vint;
    public:
    comp()
    {
        tc = PC;
        //produce = "non";
        type_proc = 0;
        gh_proc = 0;
        ozu = 0;
        vint = 0;
    }
    void set(comp_type ct, char *p, int i1, int i2, int i3, int i4) // ГіГ±ГІГ*Г*îâêГ*
    {
        tc = ct;
        strcpy(produce, p);
        type_proc = i1;
        gh_proc = i2;
        ozu = i3;
        vint = i4;
    }
    void show_prod() // îòîáðГ*æåГ*ГЁГҐ ГЁГ*ôîðìГ*öèè Г® êîìïå
    {
        char *name;
        try
        {
            name = new char[120];
        }
        catch(bad_alloc xa)
        {
            exit(1);
        }
        set_type_name(name, tc);
        printf("%s | %s | %i | %i GHz | %i OZU | %i GB\n", name, produce, type_proc, gh_proc, ozu, vint);
        delete [] name;
    }
};
 
class monitor : public product // ïîëГ*îñòüþ Г*Г*Г*ëîãè÷åГ* ГЄГ«Г*Г±Г±Гі êîìïó
{
    int width;
    int height;
    mon_type mt;
    public:
    monitor()
    {
        width = 1024;
        height = 768;
        mt = JK;
    }
    void set(int i, int j, mon_type m)
    {
        width = i;
        height = j;
        mt = m;
    }
    void show_prod()
    {
        char *name;
        try
        {
            name = new char[120];
        }
        catch(bad_alloc xa)
        {
            exit(1);
        }
        set_type_name(name, mt);
        printf("Shirina %i | Visota %i | Tip %s\n", width, height, name);
    }
};
 
int main(int argc, char *argv[])
{
    printf("Demo\nFor exit press 'q'\n");
    const int sz = 2;
    product *p = new product[sz]; /*{
        product(), product(), product(), product(), product()
    };*/
    for(int i = 0; i < sz; i++)
    {
        int i2, j, x;
        char s1[80], s2[80];
        firms f;
        printf("Input product shift: ");
        cin >> i2;
        printf("Input product date: ");
        cin >> s1;
        cin.get();
        printf("Input product firm_pos (0-4): ");
        cin >> x;
        printf("Input product firm_iz: ");
        cin >> s2;
        printf("Input product prod_count: ");
        cin >> j;
        switch(x)
        {
            case 0:
            f = Sonic;
            break;
            case 1:
            f = Thomson;
            break;
            case 2:
            f = LG;
            break;
            case 3:
            f = Panasonic;
            break;
            default:
            f = Samsung;
            break;
        }
        p[i].set(i2, s1, f, s2, j);
    }
    printf("Dostupnie tovari:\n");
    product *prod = &*p;
    for(int i = 0; i < sz; i++)
    {
        printf("%i: ", i);
        prod[i].show_prod();
    }
    printf("Max firm--------------------------------------------\n");
    show_firm(p, sz);
    delete [] p;
    getch();
    return 0;
}
Миниатюры
Помoгите найти ошибку в коде!  
Avazart
 Аватар для Avazart
6900 / 5140 / 252
Регистрация: 10.12.2010
Сообщений: 22,581
Записей в блоге: 17
07.04.2012, 18:17     Помoгите найти ошибку в коде! #9
У меня RAD 2009, пробуй так:
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
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
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
#include <iostream>
#include <stdio.h>
 
 
using namespace std;
 
enum firms
{
    Sonic,
    Thomson,
    Panasonic,
    LG,
    Samsung
};
enum comp_type
{
    Portable,
    PC
};
enum mon_type
{
    JK,
    Prostoy
};
 
void set_type_name(char *&name, comp_type t) // перегруженная функция, которая записывает имя указанного типа в переменной "Имя"
{
    switch(t)
    {
        case Portable:
        strcpy(name, "Portable");
        break;
        default:
        strcpy(name, "PC");
        break;
    }
}
 
void set_type_name(char *&name, mon_type m)
{
    switch(m)
    {
        case JK:
        strcpy(name, "JK");
        break;
        default:
        strcpy(name, "Prostoy");
        break;
    }
}
 
void set_type_name(char *&name, firms f)
{
    switch(f)
    {
        case Sonic:
        strcpy(name, "Sonic");
        break;
        case Thomson:
        strcpy(name, "Thomson");
        break;
        case Panasonic:
        strcpy(name, "Panasonic");
        break;
        case LG:
        strcpy(name, "LG");
        break;
        default:
        strcpy(name, "Samsung");
        break;
    }
}
 
class product
{
    int shifr;
    char date[20];
    firms firm_pos;
    char firm_iz[120];
    int prod_count;
    public:
    product()
    {
        shifr = 0;
        //date = "1/1/2012";
        firm_pos = Thomson;
        //firm_iz = "iz";
        prod_count = 0;
    }
    void set(int i, char *d, firms f1, char *f2, int count) // установка значений
    {
        shifr = i;
        strcpy(date, d);
        firm_pos = f1;
        strcpy(firm_iz, f2);
        prod_count = count;
    }
    virtual void show_prod() // отображение информации о товаре
    {
        char *name;
        set_type_name(name, firm_pos);
        printf("%i | %s | %s | %s | %i\n", shifr, date, name, firm_iz, prod_count);
    }
    friend void show_firm(product prod[],int sz) // из массива товаров ищем товар тот, какой больше всего поставляет фирма
    {
        int tmp[5] = { // временный массив, в нем хранятся количество соотношения товар-фирма
            0, 0, 0, 0, 0
        };
        for(register int i = 0; i < sz; i++)
        {
            tmp[(int)prod[i].firm_pos]++; // перевод строки: И - это индекс из перечисления фирм текущего товара
            // то есть: тмп0 - соник, тмп1 - томпсон, тмп3 - панасоник и т.д.
            // допустим прод0.фирм_пос == Томпон
            // у Томпсона индекс == 1
            // значит при первом проходе цикла массив будет такой: 0, 1, 0, 0, 0
        }
        int max = tmp[0]; // маск
        int index = 0; // макс. индекс
        for(int i = 0; i < 5; i++) // ищем макс. индекс, что бы по нему получить имя фирмы, которая встречается чаще всего
        {
            if(max < tmp[i])
            {
                max = tmp[i];
                index = i;
            }
        }
        char *name= new char[255];
        switch(index)
        {
            case 0:
            set_type_name(name, Sonic);
            break;
            case 1:
            set_type_name(name, Thomson);
            break;
            case 2:
            set_type_name(name, Panasonic);
            break;
            case 3:
            set_type_name(name, LG);
            break;
            case 4:
            set_type_name(name, Samsung);
            break;
            default:
            set_type_name(name, Thomson);
            break;
        }
        printf("Max firm_pos: %s", name); // выводим имя фирмы
    }
};
 
class comp : public product
{
    comp_type tc;
    char produce[120];
    int type_proc;
    int gh_proc;
    int ozu;
    int vint;
    public:
    comp()
    {
        tc = PC;
        //produce = "non";
        type_proc = 0;
        gh_proc = 0;
        ozu = 0;
        vint = 0;
    }
    void set(comp_type ct, char *p, int i1, int i2, int i3, int i4) // установка
    {
        tc = ct;
        strcpy(produce, p);
        type_proc = i1;
        gh_proc = i2;
        ozu = i3;
        vint = i4;
    }
    void show_prod() // отображение информации о компе
    {
        char *name;
        set_type_name(name, tc);
        printf("%s | %s | %i | %i GHz | %i OZU | %i GB\n", name, produce, type_proc, gh_proc, ozu, vint);
    }
};
 
class monitor : public product // полностью аналогичен классу компу
{
    int width;
    int height;
    mon_type mt;
    public:
    monitor()
    {
        width = 1024;
        height = 768;
        mt = JK;
    }
    void set(int i, int j, mon_type m)
    {
        width = i;
        height = j;
        mt = m;
    }
    void show_prod()
    {
        char *name;
        set_type_name(name, mt);
        printf("Shirina %i | Visota %i | Tip %s\n", width, height, name);
    }
};
 
int main()
{
    printf("Demo\nFor exit press 'q'\n");
    const int sz = 2;
    product *p = new product[sz]; 
    /*{
        product(), product(), product(), product(), product()
    };*/
    for(int q1 = 0; q1 < sz; q1++)
    {
        int i, j, x;
        char s1[80], s2[80];
        firms f;
        printf("Input product shift: ");
        cin >> i;
        printf("Input product date: ");
        cin >> s1;
        cin.get();
        printf("Input product firm_pos (0-4): ");
        cin >> x;
        printf("Input product firm_iz: ");
        cin >> s2;
        printf("Input product prod_count: ");
        cin >> j;
        switch(x)
        {
            case 0:
            f = Sonic;
            break;
            case 1:
            f = Thomson;
            break;
            case 2:
            f = LG;
            break;
            case 3:
            f = Panasonic;
            break;
            default:
            f = Samsung;
            break;
        }
        p[i].set(i, s1, f, s2, j);
    }
    product *prod = &*p;
    printf("Dostupnie tovari:\n");
    for(int i = 0; i < sz; i++)
    {
        printf("%i: ", i);
        p[i].show_prod();
    }
    printf("Max firm--------------------------------------------\n");
    show_firm(p, sz);
    while(true)
    {
        char c;
        cin >> c;
        if(c == 'q') break;
    }
    delete [] p;
    return 0;
}
Добавлено через 5 минут
А да забыл там после
C++
1
char *name= new char[255];
где-то нужно сделать
C++
1
delete[] name;
Вася1q
 Аватар для Вася1q
21 / 21 / 0
Регистрация: 13.09.2011
Сообщений: 311
07.04.2012, 18:23  [ТС]     Помoгите найти ошибку в коде! #10
Цитата Сообщение от Avazart Посмотреть сообщение
где-то нужно сделать
где-то это случайно в 302 строке?
Avazart
 Аватар для Avazart
6900 / 5140 / 252
Регистрация: 10.12.2010
Сообщений: 22,581
Записей в блоге: 17
07.04.2012, 18:55     Помoгите найти ошибку в коде! #11
Ну вам лучше знать когда она уже ненужна, я путаюсь в ваших ф-циях
Вася1q
 Аватар для Вася1q
21 / 21 / 0
Регистрация: 13.09.2011
Сообщений: 311
07.04.2012, 19:43  [ТС]     Помoгите найти ошибку в коде! #12
А если вы скомпилируете программу на своем компиляторе и скините мне она будет работать? (Имею ввиду сам exe файл)
Avazart
 Аватар для Avazart
6900 / 5140 / 252
Регистрация: 10.12.2010
Сообщений: 22,581
Записей в блоге: 17
07.04.2012, 19:55     Помoгите найти ошибку в коде! #13
Должен.
Вася1q
 Аватар для Вася1q
21 / 21 / 0
Регистрация: 13.09.2011
Сообщений: 311
07.04.2012, 19:56  [ТС]     Помoгите найти ошибку в коде! #14
Все я кажется разобрался! Всем огромное спасибо!
-=ЮрА=-
Заблокирован
Автор FAQ
14.04.2012, 18:24     Помoгите найти ошибку в коде! #15
Так тёзка вот для ознакомления твоё задание 2. Класс «АВТОБУС»
Ниже костяки классов и рабочее приложение. Ввод данных как и сказанно в задании есть что с клавиатуры, что с файла(данный вариант более быстр, мы не тратим время на ввод в консоли, прсто вбиваем в файл)
CAvtobus
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
class CAvtobus
{
private:
    int nomer;
    char pynktNaznachenia[64];
    myTime vremya;
public:
    CAvtobus()//Конструктор по уполчанию
    {
        nomer              = 0;//номер автобуса
        pynktNaznachenia[0] = 0;//название пункта назначения
        //время отправления
        vremya.hour = 0;
        vremya.min  = 0;
        vremya.sec  = 0;
    }
 
    //методы ввода сведений об автобусе. 
    bool SetDataFromKeyboard();//С клавиатуры
    bool SetDataFromFile(ifstream &ifs, long posInFile);//из файла
 
    //методы вывода сведений об автобусе. 
    bool GetDataInMonitor();//Вывод на экран
    bool GetDataInFile(ofstream ofs, long posInFile);//Вывод в файл
 
 
    int  GetNumber() {return nomer;}
    char * GetPynkt(){return pynktNaznachenia;}
    myTime GetTime() {return vremya;}
};


CAvtovokzal
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
class CAvtovokzal
{
private:
    string nazvanieAvtovokzala;//название автовокзала,
    CAvtobus * list;// массив объектов класса "АВТОБУС"
    unsigned int n; //Число объектов класса "АВТОБУС"
    
    bool SaveResultsInFile;
    bool GetDataFromFile;
public:
    CAvtovokzal()//Конструктор по уполчанию
    {
        n                 = 0;
        list              = NULL;
        GetDataFromFile   = false;
        SaveResultsInFile = false;
    }
    ~CAvtovokzal()//Деструктор
    {
        //Появления деструктора обусловлено наличием
        //в классе динамического массив объектов класса "АВТОБУС"
        if(!list)
            delete [] list;
    }
    //Функция выделяет память под массив объектов класса "АВТОБУС"
    //В случае успеха возвращаемое значение истина и ложь при невозможности выделить память
    bool setMemory(unsigned int cout);
    bool setInpMode(bool bGetFromFile);//Функция устанавливает флаг ввода из файла
    bool setOutMode(bool bSaveInFile);//Функция устанавливает флаг вывода в файл
    //Функция осуществляет обмен между двумя элементами класса "АВТОБУС"
    void swapBuses(CAvtobus &obj1, CAvtobus &obj2);
    void sortBuses();//Сортирует list по времени отправления.
 
    //", метод поиска информации об автобусах, 
    //отправляющихся после введенного с клавиатуры времени в заданный пункт назначения
    unsigned int searchBuses(myTime vremya, char * punktNaznacheniya);
 
    bool SetDataFromFile();//данные из файла
    bool SetDataFromKeyboard();//данные из клавиатуры
 
    bool GetDataInMonitor();
};


Алгорит работы, запустил нажал либо 1 либо 2, ввёл значения либо считал их из файла потом можешь жать пункты 3 и 4. Замечания, чтобы не ломать свою голову над руссифицированным выводм в файл, руссификацию произвёл постредством system("chcp 1251"); (данная функция хороша, но иногда требует чтобы пользователь при своём первом использовании произвёл настройку шрифта приложения, это делается в 3 щелчка мыши см сюда Выставить шрифт приложения)
Структура файла данных
Первая строка должна содержать число рейсов автобусов
Строки ниже сами записи о рейсах
Структура файла данных ниже(его имя выбирай любым, ты его будешь вводить в консоли так что у меня он был inp.txt а у тебя может иметь название vvod.txt и т.д.)
inp.txt
3
11 Донецк 8:05:00
744 Москва 14:25:00
54 Киев 12:45:00
Миниатюры
Помoгите найти ошибку в коде!  
Вложения
Тип файла: rar AVTOBUS.exe.rar (72.1 Кб, 3 просмотров)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.04.2012, 04:54     Помoгите найти ошибку в коде!
Еще ссылки по теме:

Найти ошибку в коде C++
Найти ошибку в коде C++
Найти ошибку в коде C++

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

Или воспользуйтесь поиском по форуму:
-=ЮрА=-
Заблокирован
Автор FAQ
20.04.2012, 04:54     Помoгите найти ошибку в коде! #16
Листинг main.cpp и скрин компиляции для класса ТОВАР

main.cpp
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
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
// main.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include "CTovar.h"
#include "CComputer.h"
#include "CMonitor.h"
 
bool Init1(unsigned int mode, unsigned int &N, void *pLIST);
bool Init2(unsigned int mode, unsigned int &N, void *pLIST);
 
int main()
{
    CComputer *pCOMP = NULL;
    CMonitor  *pMON  = NULL;
    CTovar    *pTOV  = NULL;
    void * lpCLASS   = NULL;
    system("chcp 1251");
    bool bInput = false;
    bool bMenu  = true;
    unsigned int i     = 0;
    unsigned int iCOMP = 0;
    unsigned int iMON  = 0;
    unsigned int rezim = 0;
    unsigned int mode  = 0;
    unsigned int count = 0;
    while(bMenu)
    {
        system("cls");
        if
        (
            !(bInput =
                EnterValue
                (
                    "Выберите режим ввода\n"
                    "1 - данные из клавиатуры\n"
                    "2 - данные из файла\n"
                    "3 - поиск фирм-поставщиков, с наибольшим объёмом поставок\n",
                    rezim
                )
            )
        )
            cout<<"Ошибка ввода\n";
        else
        {
            while(!EnterValue("Введите 1 - чтобы произвести обработку для мониторов\n",mode))
                cout<<"Ошибка ввода\n";
            if(mode == 1)
                lpCLASS = (void *)pMON;
            else
                lpCLASS = (void *)pCOMP;        
        }
        if(bInput)
        switch(rezim)
        {
        case 1:
            if(!(bInput = Init1(mode, mode == 1 ? iMON : iCOMP, lpCLASS)))
                cout<<"Ввод данных завершился с ошибкой\n";
            break;
        case 2:
            if(!(bInput = Init2(mode, mode == 1 ? iMON : iCOMP, lpCLASS)))
                cout<<"Ввод данных завершился с ошибкой\n";
            break;
        case 3:
            if(!bInput)
                cout<<"Произведите начальную инициализацию при помощи пунктов 1,2\n";
            else
            if(mode == 1)
            {
                if(!(pTOV = new CTovar[iMON]))
                    bInput = false;
            }
            else
            {
                if(!(pTOV = new CTovar[iCOMP]))
                    bInput = false;
            }
            for(i = 0; i < mode == 1 ? iMON : iCOMP && bInput; i++)
                pTOV[i] = pCOMP[i].GetTovar();
            if(bInput)
            if(!(bInput = GetMaxPostavshik(mode == 1 ? iMON : iCOMP, pTOV)))
                cout<<"Ошибка поика ирмы с максимальнім объёмом поставок\n";
        default:
            bMenu = false;
            break;
        }
        system("pause");
    }
    if(pMON)
        delete [] pMON;
    if(pCOMP)
        delete [] pCOMP;
    if(pTOV)
        delete [] pTOV;
    return 0;
}
 
 
bool Init1(unsigned int mode, unsigned int &N, void *pLIST)
{
    unsigned int i;
    CComputer *pCOMP;
    CMonitor  *pMON;
    if(mode == 1)
        pMON  = (CMonitor  *)pLIST;
    else
        pCOMP = (CComputer *)pLIST;
    bool bInput = true;
    cout<<"Режим ввода с клавиатуры\n";
    while(!EnterValue("Введите число элементов\n",N))
        cout<<"Ошибка ввода\n";
    if(mode == 1)
    {
        if(!(pMON = new CMonitor[N]))
            bInput = false;
    }
    else
    {
        if(!(pCOMP = new CComputer[N]))
            bInput = false;
    }
    for(i = 0; i < N && bInput; i++)
    {
        if(mode == 1)
            bInput = pMON[i].SetDataFromKeyboard();
        else
            bInput = pCOMP[i].SetDataFromKeyboard();
    }
    return bInput;
}
 
bool Init2(unsigned int mode, unsigned int &N, void *pLIST)
{
    unsigned int i;
    ifstream ifs;
    CComputer *pCOMP;
    CMonitor  *pMON;
    if(mode == 1)
        pMON  = (CMonitor  *)pLIST;
    else
        pCOMP = (CComputer *)pLIST;
    cout<<"Режим ввода из файла\n";
    bool bInput = true;
    char szPath[256] = {0};
    if(bInput = EnterValue("Введите путь к файлу данных :\n",szPath))
        ifs.open(szPath);
    if(bInput = ifs.good())
    {
        if(!(ifs>>N))
            bInput = false;
        else
        if(mode == 1)
        {
            if(!(pMON = new CMonitor[N]))
                bInput = false;
        }
        else
        {
            if(!(pCOMP = new CComputer[N]))
                bInput = false;
        }
    }
    for(i = 0; i < N && bInput; i++)
    {
        if(mode == 1)
            bInput = pMON[i].SetDataFromFile(&ifs,ifs.tellg());
        else
            bInput = pCOMP[i].SetDataFromFile(&ifs,ifs.tellg());
    }
    return bInput;
}
Миниатюры
Помoгите найти ошибку в коде!  
Yandex
Объявления
20.04.2012, 04:54     Помoгите найти ошибку в коде!
Ответ Создать тему
Опции темы

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