С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
 Аватар для correcеt
-1 / 3 / 1
Регистрация: 20.04.2011
Сообщений: 412

Шаблон класса,ошибка TEMPLATE

03.01.2013, 20:55. Показов 3069. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вечер добрый,с таким вопросом.
Задание:
шаблон класса "однонарпавленный линейный список". И использовать его при составлении программы, которая содержит текущую информацию о заявках на авиабилеты:
- пункт назначения,
- номер рейса,
- фамилию и инициалы пассажира,
- желаемую дату вылета.
Программа должна обеспечивать:
- хранение всех заявок в виде списка,
- добавление заявок,
- удаление заявок,
- вывод заявок по заданному номеру рейса и дате вылета,
- вывод всех заявок.
-----------------------------------------------
Скажите, в каталоге с программой надо создавать какие-то фалы или как?
Т.к вот что пишет компилятор:

И еще, глядя код,мне показалось,что нет все функции тут есть,так ли это?

---------------------------------------------------------
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
//---------------------------------------------------------------------------
 #include <iostream.h>
#include <vcl.h>
#pragma hdrstop
 
//---------------------------------------------------------------------------
 
#pragma argsused
int main(int argc, char* argv[])
{      // =================== Файл TEMPLATE.AVB ======================
#define FILENAME "BZavia.txt"
#define TEMPFILE "Temp"
#define MAX 20
//Шаблон - класс авиабилеты
template <class T>              // Шаблон класса aviabilets
class aviabilets {
private:
FILE *fp, *tp, *printer;
 int slots[MAX];
 int count;
 
public:
  nofind();      // Функция - неудачный поиск
  openrw();      // Открыть файл  для чтения
  openwr();      // Открыть файл для записи
  getslots();    // Функция определяющая - какие ячейки заняты
  getslot();     // Функция ввода новой ячейки
  adbilet();     // Добавление билета
  delbilet();    // Удаление данных билета из списка
  showbilet();   // Вывод билета на экран
  chbilet();     // Изменение данных билета
  chcell();      // Изменение номера ячейки
  sortcells();   // Порядок возрастания номеров ячеек
  loc_punkt();   // Поиск билета по пункту назначения
  loc_fio();     // Поиск по ФИО
  loc_datvl();   // Поиск по Дате вылета
  pbilets();     // Печать билетов
 
 };
 struct BZ                  // структура с полями записей
 {
  // private:
  char punktn[20];         // Пункт назначения
  char nreis[10];          // Номер рейса
  char fio[50];            // Фамилия и инициалы пассажира
  char datvl[10];          // Дата вылета
  int number;              // Номер ячейки в базе куда заносится данные
      } disc;              // запись.диск
 
// **********************************************
   template<class T>
   aviabilets<T>::nofind() // Функция - неудачный поиск
        {
         char pause;
         puts("\nПункт назначения с таким именем не найден");
         getche();
        // pause=getchar();
         return 0;
        }
// **********************************************
     template<class T>
     aviabilets<T>::openrw() // Открыть файл  для чтения
       {
        if((fp = fopen(FILENAME,"r")) == NULL)
         {
          printf("Невозможно открыть файл %s\n", FILENAME);
          exit(0);
         }
       if((tp = fopen(TEMPFILE,"w")) == NULL)
        {
          printf("Невозможно открыть файл %s\n", TEMPFILE);
          fclose(fp);
          exit(0);
        }
        return 0;
        }
 
 
// **********************************************
                                 template<class T>
// Здесь ВЫ дописываете все функции c aviabilets<T>::ФУНКЦИЯ
 
// **********************************************
// ===========================================================
 
Переносим этот файл(TEMPLATE.AVB) в директорию где находятся файлы шаблонов
других классов и библиотек *.h
Ты их знаешь:
#include "stdio.h"
# include <conio.h>
# include <stdlib.h>
# include <string.h>
# include <iostream.h>
и другие
 
 
Создаем другой файл - ABILET.CPP
В него переносим 
 
// ========================= ABILET.CPP ======================
/*Заявки на авибилеты*/
#include  <template.avb> // Указываем файл шаблон класса aviabilets
#include  <stdio.h>
# include <conio.h>
# include <stdlib.h>
# include <string.h>
# include <iostream.h>
 
// ++++++++++++++++++++ Основной модуль ++++++++++++++++++++++
 main()
      {
       aviabilets<char> a; // Переводим в класс a
       char select;
       a.getslots();
    do
      {
      clrscr();
       puts("Информация о авиабилетах в базе аэропорта\n");
       puts("1 Добавить новый авибилет в базу\n");
       puts("2 Удалить авиабилет из базы\n");
       puts("3 Редактировать содержимое авиабилета\n");
       puts("4 Изменить номер ячейки\n");
       puts("5 Сортировка авиабилетов билетов\n");
       puts("6 Найти авиабилет\n");
       puts("7 Вывести на печать\n");
       puts("8 Выйти из программы\n");
       printf("Пожалуйста, введите Ваш выбор: ");
     select = getchar();
     putchar('\n');
     switch(select)
    {
      case '1':
      a.adbilet();
        break;
      case '2':
      a.delbilet();
        break;
      case '3':
      a.chbilet();
        break;
      case '4':
      a.chcell();
        break;
      case '5':
      a.sortcells();
        break;
      case '6':
      a.loc_punkt();
        break;
      case '7':
      a.pbilets();
        break;
      case '8':
        break;
      default:
      puts("Ошибка, повторите ввод\n\n");
    }
       }
     while(select!='8');
     return 0;
     }
 
}
//---------------------------------------------------------------------------
----------------------------
Заранее,Спасибо!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.01.2013, 20:55
Ответы с готовыми решениями:

Шаблоны функций, Ошибка: для использования класса шаблон требуется список аргументов шаблон
Есть у меня 3 структуры Трамвай , Троллейбус , Автобус. Для автобуса определены функции (работают) Троллейбус и Трамвай одинаковые поля...

Компиляция класса вектор. Ошибка: missing template arguments before «v»
Собственно код: #include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;vector&gt; #include &lt;string&gt; using namespace std; int...

Ошибка компиляции: template-id does not match any template declaration
Здравствуйте. Помогите, пожалуйста: #include &lt;iostream&gt; using namespace std; template &lt;typename T&gt; T maxn(T*, const int*); ...

24
41 / 41 / 5
Регистрация: 29.04.2012
Сообщений: 185
03.01.2013, 21:31
Я всегда создаю шаблоны в отдельном .h файле, в нем описывается и класс и все функции определяются, а потом подключаю его к main.cpp и использую
0
 Аватар для correcеt
-1 / 3 / 1
Регистрация: 20.04.2011
Сообщений: 412
03.01.2013, 21:35  [ТС]
Цитата Сообщение от Buildog Посмотреть сообщение
Я всегда создаю шаблоны в отдельном .h файле, в нем описывается и класс и все функции определяются, а потом подключаю его к main.cpp и использую
я с шаблонами на ВЫ, а можете пример показать или на этом сделать?
0
41 / 41 / 5
Регистрация: 29.04.2012
Сообщений: 185
03.01.2013, 21:36
И зачем определять класс внутри int main(int argc, char* argv[]) ? Если только из расширения .AVB (с коим я раньше не встречался). И конечно не все функции описаны, это даже указано в строчке

C++
1
// Здесь ВЫ дописываете все функции c aviabilets<T>::ФУНКЦИЯ
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
03.01.2013, 21:36
Код- бред, вы пытаетесь определить класс внутри main(), думаю еще не поздно взяться за книгу
0
41 / 41 / 5
Регистрация: 29.04.2012
Сообщений: 185
03.01.2013, 21:38
Вот так допустим будет выглядеть файл .h
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
#pragma once
#include <iostream> //И остальные заголовочные, что нужны
 
template <class T>              // Шаблон класса aviabilets
class aviabilets {
private:
FILE *fp, *tp, *printer;
 int slots[MAX];
 int count;
 
public:
  nofind();      // Функция - неудачный поиск
  openrw();      // Открыть файл  для чтения
  openwr();      // Открыть файл для записи
  getslots();    // Функция определяющая - какие ячейки заняты
  getslot();     // Функция ввода новой ячейки
  adbilet();     // Добавление билета
  delbilet();    // Удаление данных билета из списка
  showbilet();   // Вывод билета на экран
  chbilet();     // Изменение данных билета
  chcell();      // Изменение номера ячейки
  sortcells();   // Порядок возрастания номеров ячеек
  loc_punkt();   // Поиск билета по пункту назначения
  loc_fio();     // Поиск по ФИО
  loc_datvl();   // Поиск по Дате вылета
  pbilets();     // Печать билетов
 
 };
 struct BZ                  // структура с полями записей
 {
  // private:
  char punktn[20];         // Пункт назначения
  char nreis[10];          // Номер рейса
  char fio[50];            // Фамилия и инициалы пассажира
  char datvl[10];          // Дата вылета
  int number;              // Номер ячейки в базе куда заносится данные
      } disc;              // запись.диск
 
// **********************************************
   template<class T>
   aviabilets<T>::nofind() // Функция - неудачный поиск
        {
         char pause;
         puts("\nПункт назначения с таким именем не найден");
         getche();
        // pause=getchar();
         return 0;
        }
// **********************************************
     template<class T>
     aviabilets<T>::openrw() // Открыть файл  для чтения
       {
        if((fp = fopen(FILENAME,"r")) == NULL)
         {
          printf("Невозможно открыть файл %s\n", FILENAME);
          exit(0);
         }
       if((tp = fopen(TEMPFILE,"w")) == NULL)
        {
          printf("Невозможно открыть файл %s\n", TEMPFILE);
          fclose(fp);
          exit(0);
        }
        return 0;
        }
0
 Аватар для correcеt
-1 / 3 / 1
Регистрация: 20.04.2011
Сообщений: 412
03.01.2013, 21:41  [ТС]
скажите,а каких функции нет?
0
41 / 41 / 5
Регистрация: 29.04.2012
Сообщений: 185
03.01.2013, 21:43
Ну неужели не видно? Вот
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
openwr();      // Открыть файл для записи
  getslots();    // Функция определяющая - какие ячейки заняты
  getslot();     // Функция ввода новой ячейки
  adbilet();     // Добавление билета
  delbilet();    // Удаление данных билета из списка
  showbilet();   // Вывод билета на экран
  chbilet();     // Изменение данных билета
  chcell();      // Изменение номера ячейки
  sortcells();   // Порядок возрастания номеров ячеек
  loc_punkt();   // Поиск билета по пункту назначения
  loc_fio();     // Поиск по ФИО
  loc_datvl();   // Поиск по Дате вылета
  pbilets();     // Печать билетов
там есть только 2 функции первых

C++
1
2
  nofind();      // Функция - неудачный поиск
  openrw();      // Открыть файл  для чтения
0
 Аватар для correcеt
-1 / 3 / 1
Регистрация: 20.04.2011
Сообщений: 412
03.01.2013, 21:47  [ТС]
а если вот этот код переделать через шаблон...или он тоже бред?
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
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
#   include <string.h>
#   include <iostream.h>
#   include <windows.h>
class Avia
{
public:
char punkt[15], fio[50]; int namber, data[3]; Avia *Next; Avia();
Avia(char* al, char* bl, int, int*);
};
class List {
public:
Avia* First;
ListO;
void Add(Avia *pNext); //добавление в конец списка Avia* Poisk();
void ShowAll(); //показ всего списка
Avia* FindAvia(int nomer, int *datal); //поиск в списке Avia* GetPrev(Avia *p); int GetCount();
Avia * GetAt(int n); // получает элемент по его номеру bool RemoveAvia(int nomer, int *datal); //удаление элемента
};
Avia::Avia()
{
memset(punkt,0,sizeof(punkt)); 
memset(fio,0,sizeof(fio));
Next=NULL; //обнуляем указатель последнего элемента
Avia::Avia(char* al, char* bl, int namberl, int *datal)
{
strcpy(punkt, al); strcpy(fio, b 1); namber=namberl;
for (int i=0; i<3; i++) data[i]=datal[i];
Next=NULL; //обнуляем указатель последнего элемента
}
List::List()
{
First=NULL; //обнуляем указатель первого элемента
}
void List::Add(Avia *pNext)
{
// Если список не пуст. if(First!=NULL)
Poisk()->Next = pNext;
else
// Если список пуст, First = pNext;
}
Avia* List: :Poisk()
{
Avia *X = First;
// Если список пуст if(X == NULL) return NULL;
// Пока есть следующий элемент списка. whi!e(X->Next!=NULL) X = X->Next;
return X;
}
void List::ShowAll()
{
// Указатель на очередные данные в списке. Avia * pCurr = First; // Если список пуст
if(pCurr == NULL)
{
соиК<"Список пустЛп";
}
// Пока есть следующий элемент списка, do
// Выводим на консоль очередной элемент. cout«pCurr->fio«"\t"«pCurr->punkt«"\t"«pCurr->namber«"\t"«pCurr- >data[0]«"."«pCurr->data[l]«"."«pCurr->data[2]«"\n"; 
while((pCurr = pCurr->Next)!=NULL);
Avia* List::FindAvia(int nomer, int *datal)
{
int flag=0;
// Указатель на очередные данные в списке. Avia * pCurr = First;
// Если список пуст, то возвращаем NULL.
if(pCurr == NULL) {
соЩ«"Списка нет";
}
// Обходим все элементы списка. do{
// Если нашли искомый элемент, то его и возвращаем.
if(pCurr->namber==nomer && pCurr->data[0]==datal [0] && pCurr->data[l]==datal[l] &&
pCurr->data[2]==data 1 [2]) {
// Выводим на консоль
coiit<<pCurr->fio<<''\t',<<pCurr->punkt<<''\t''<<pCurr->namber<<''\t''<<pCurr- >data[0]«". "<<pCurr->data[ 1 ]«". "<<pCurr->data[2] <<"\n"; flag=l; return pCurr;
}
}while((pCurr = pCurr->Next)!=NULL);
if (flag==0) соЩ«"Такой заявки HeT"«endl; return pCurr;
}
Avia* List::GetPrev(Avia *p)
{
// Если предыдущего элемента списка нет (т. е. наш элемент совпадает с первым), то возвращем
NULL.
if(p == First)
return NULL; // Если предыдущий элемент есть. Avia * pCurr = First; do{
if(pCurr->Next==p) { // возвращаем очередной элемент, return pCurr;
}
// Переводим pCurr на следующий элемент в списке. }while((pCurr = pCurr->Next)!=NULL); return NULL;
}
int List::GetCount()
{
// Указатель на очередные данные в списке. Avia * pCurr = First; // Если список пуст
if(pCurr == NULL)
{
return 0;
int count = 1; //Число элементов в списке. // Пока есть следующий элемент списка.
while(pCurr->Next!=NULL)
{
// Переходим на следуюющего. pCurr = pCurr->Next; // Увеличиваем счетчик. count++;
}
return count;
Avia * List::GetAt(int n)
{
// Указатель на очередные данные в списке. Avia * pCurr = First;
// Если список пуст или элемента с таким номером нет,то возвращаем NULL.
if(pCurr == NULL || n>GetCount()-l)
{
return NULL;
}
// Добираемся до элемента с нужным номером.
for(int i=0; i<GetCount(); i++) {
if(i==n) {
return pCurr;
}
pCurr = pCurr->Next;
}
return NULL;
bool List::RemoveAvia(int nomer, int *datal)
{
// Если список пуст if(First == NULL)
{ соШ«"Списка нет"; return false;}
// Получаем элемент для удаления. Avia* pData = FindAvia(nomer, datal); // Если такого элемента в списке нет if(pData == NULL)
{ cout«"TaKoro элемента нет"; return false;
}
// Если удаляемый элемент - первый в списке.
if(pData == First)
{
First = pData->Next; delete pData; return true;
}
// Если удаляемый элемент - не первый в списке. GetPrev(pData)->Next = pData->Next; 
delete pData;
соиК<"Элемент удален"; return true;
main() {
List list; Avia *pData; char p[15], fio[15];
int n, namber, data[3]; bool flag=false; SetConsoleOutputCP( 1251);
while (1)
{
cout«"l Добавить 3anBKy"«endl; cout«"2 Показать все 3aHBKn"«endl; cout«"3 Поиск 3aHBKH"«endl; cout«"4 Удалить 3aflBKy"«endl; cout«"5 Bbixofl"«endl; cout«"n="; cin»n;
switch (n) {
case 1:
{
соиК<"Введите пункт назначения"«е1^1; cin»p;
cout«" В ведите ФИО nacca>icnpa"«endl; cin»fio;
cout«" В ведите номер pefica"«endl; cin»namber;
соиК<"Введите дату вылета"«епё1; соиК<"Число: "; cin»data[0]; соиК<"Месяц: "; cin»data[l]; cout«Tcw "; cin»data[2]; cout«endl;
pData = new Avia(p, fio, namber, data);
list.Add(pData);
break;
}
case 2:
{
list.ShowAll(); break;
}
case 3:
{
сои1«"Введите номер peiica"«endl; cin»namber;
сои1«"Введите дату BbuieTa"«endl; соиК<"Число: "; cin»data[0]; cout«"MecHu: "; cin»data[l]; соиК<"Год: "; cin»data[2];
cout«"\n";
list.FindAvia(namber, data); break;
case 4:
{
сои1«"Введите номер pefica"«endl; cin»namber;
сои1«"Введите дату BbmeTa"«endl; cout«"4Hono: "; cin»data[0]; cout«"MecHu: "; cin»data[l]; соиК<"Год: "; cin»data[2]; cout«"\n";
list.RemoveAvia(namber, data); break;
case 5:
return 0;
default:
cout«"TaKoro пункта меню нет. Повторите ввод"«епё1;
} }
return 0; 
№16 (подраздел 3.2)
Описать класс «множество», позволяющий выполнять основные операции над множествами - добавление и удаление элемента, определение членства, пересечение, объединение, разность и симметричная разность множеств.
Перегрузить операции: присваивания множеств (=), равенства и неравенства множеств.
Написать программу, демонстрирующую работу с этим классом. Программа должна содержать меню, позволяющее осуществить проверку всех методов класса.
Решение
#include <iostream.h> #include <windows.h> #include <math.h> #include <conio.h>
class Set {
public:
Set();
int count;  //количество элементов в множестве
int element[ 100]; //множество элементов
void set(); //задание элемента множества
void get(); //вывод множества
void addElement(); //добавить элемент в множество
void delElement(); //удалить элемент из множества
Set operator+(Set); //объединение
Set operator-(Set); //разность
Set operator*(Set); //пересечение
Set& operator=(Set);//nepenpHCBaHBaHne
bool operator==(Set);//cpaBHeHne на равенство
bool operator<(Set);//cpaBHeiiHe на неравенство
};
Set::Set() {
count=0;
\
i
void Set::set() {
соиК<"Введите количество элементов множества: "; cin»count;
for(int j=0; j<count;j++) {
cout«" В ведите элемент множества: "; cin»element[j];
}
void Set::get()
{
for (int i=0; i<count; i++) cout«element[i]«" "; cout«endl; 
void Set::addElement()
{
соиК<"Введите элемент множества: ";
cin»element[count];
count++;
void Set::delElement() {
int n;
соиК<"Введите номер элемента множества для удаления: "; cin»n;
for(int i=n; i<count-l; i++) element[i]=element[i+l]; count—;
Set Set::operator+(Set el)
{
Set tmp;
int ij, flag, n;
tmp.count=0;
for(i=0; i<count; i++) tmp.element[i]=element[i]; n=count;
for(i=0; i<el.count;i++)
{
flag = 0;
for(j=0; j<el.count;j++)
if (el.element[i]==tmp.element[j]) flag=l; if (flag==0) {tmp.element[n]=el.element[i]; n++;}
\
tmp.count=n; return tmp;
Set Set::operator*(Set el) {
Set tmp; int i,j, flag, n; tmp.count=0; n=0;
for(i=0; i<count;i++) {
flag = 0;
for(j=0; j<el.count;j++)
if (element[i]==el.element[j]) flag=l; if(flag==l) {tmp.element[n]=element[i]; n++;}
}
tmp.count=n; return tmp;
Set Set::operator-(Set el)
Set tmp;
int ij, flag, n;
n=0;
for(i=0; i<count;i++) {
flag = 0;
for(j=0; j<el.count;j++)
if (element[i]==el.element[j]) flag=l; if(flag==0) {tmp.element[n]=element[i]; n++;}
}
tmp.count=n;
return tmp;
}
Set& Set::operator=(Set el)
{
count=el. count;
for(int i=0; i<count;i++) element[i]=el.element[i]; return *this;
bool Set::operator==(Set el)
{
int flag;
if (el.count!=count) return false;
for(int i=0; i<count;i++)
{
flag = 0;
for(int j=0; j<el.count;j++)
if (element[i]==el.element!]]) flag=l; if (flag==0) return false;
}
return true;
bool Set::operator<(Set el)
{
if (count<=el.count) return true;
else
return false;
int main()
{
int menu; Set setl, set2;
SetConsoleOutputCP( 1251);
while (1)
{
cout«"\n\nMEHK)\n"; 
cout«"l. Сформировать множество\п"; cout«"2. Добавить элемент\п"; cout«"3. Удалить элемент\п"; cout«"4. Пересечение множеств\п"; cout«"5. Объединение множеств\п"; cout«"6. Разность множеств\п"; cout«"7. Переприсваивание множеств\п"; cout«"8. Сравнение на равенство множеств\п"; cout«"9. Сравнение на неравенство множеств\п"; cout«"10. Выход\п\п\п";
соШ«"Выберите пункт меню: ";
cin»menu;
if (menu=10) exit(O);
switch(menu)
{
case 1: {setl.set(); break;}
case 2: {set 1 .addElementQ; соШ«"Результат\п"; setl .get(); break;} case 3: {setl,delElement(); соиК<"Результат\п"; setl .get(); break;} case 4: {setl.set(); set2.set(); setl = setl*set2;
cout«"Pe3ynbTaT\n";setl.get(); break; } case 5: {setl ,set(); set2.set(); setl = setl+set2;
соШ«"Результат\п";5еИ^е1(); break; } case 6: {setl .set(); set2.set(); setl = setl-set2;
cout«"Pe3ynbTaT\n";setl.get(); break; } case 7: {setl .setQ; set2 = setl;
соиК<"Результат\п";5е12^е1(); break; } case 8: {setl.set(); set2.set();
if (setl==set2) сои1«"Множества равны";
else соШ«"Множества не равны"; break; } case 9: {setl .set(); set2.set();
if (setl<set2) соиК<"Первое множество меньше второго";
else соШ«"Первое множество больше второго"; break; } default:{cout«"TaKoro пункта меню нет. Повторите ввод "; break;}
} }
return 0; 
№13 (подраздел 3.3)
Создать абстрактный базовый класс Integer (целое) с виртуальными ариф метическими операциями и функцией вывода на экран. Определить производные классы Decimal (десятичное) и Binary (двоичное), реализующие собственные арифметические операции и функцию вывода на экран. Число представляется массивом, каждый элемент которого - цифра.
Решение
#include <iostream.h> #include <windows.h> #include <string.h>
class Integer {
public:
int figure[32], count;
virtual void sum(){}; //вирт. ф. суммы
virtual void diff(){}; //вирт. ф. разности
virtual void pro(){}; //вирт. ф. произведения
virtual void input(){}; //вывод
virtual void output(){}; //ввод
};
//                  
class Decimal : Integer
{
public:
void input()
{
char decimal[32]; int j;
for(int i=0; i<32; i++) figure[i]=0; сои1«"Введите десятичное число: "; cin»decimal; count=strlen(decimal); j=count-l;
for(i=31; i>31-count; i—)
{
figure[i]=decimal[j]-48;
void output()
{
for(int j=0; (j<32)&&(figure[j]==0); j++); for(int i=j; i<32; i++) cout«figure[i]; cout«endl;
void sum()
{
Decimal decimal2; decimal2.input(); for (int i=31; i>0; i--) 
{
figure[i]+=decimal2.figure[i]; figurefi-1 ]+=figure[i]/l 0; figure[i] %=10;
}
со1И«"Результат"; output();
void diff()
!
Decimal decimal2; decimal2.input();
for (int i=31; i>0; i-) {
if (figure[i]>=decimal2.figure[i]) figure[i]-=decimal2.figure[i];
else
{
figure[i]=figure[i]-decimal2.figure[i]+10;
figure[i-l]-=l;
}
}
cout«" Результат";
output(); }
void pro()
{
Decimal d2; d2.input();
int i, j, S, P; //S - Место для формирования двух цифр С-Разряд переноса Decimal W; //результат
if (count>d2.count) W.count=count; else W.count=d2.count; for(i=0; i<32; i++) W.figure[i]=0;
for (i=0; i<32; i++) // По цифрам числа d2
{
P=0; // Сначала переноса нет
for (j = 0; j<32; j++) //По цифрам числа d
{
S = figure[i]* d2.figure[j]+W.figure[i+j]+P;
W.figure[i+j] = S%10; // Временное значение очередной цифры Р = S/10; //Формирование разряда переноса
}
W.figure[j+i] = Р; //Старшая цифра частичного произведения
}
W.output();
//  -—    
class Binary : Integer
{
public:
void inputQ
{ 
char binary[32]; int j;
for(int i=0; i<32; i++) figure[i]=0; сои1«"Введите двоичное число: "; cin»binary; count=strlen(binary); j=count-l;
for(i=31; i>31 -count; i--)
{
if(binary[j]-48==0 || binary[j]-48==l)
{
figure[i]=binary[j]-48; j--;
}
else {
figure[i]=l; j-S
}
}
void output()
{
for(int j=0; (j<32)&&(figure[j]==0); j++); for(int i=j; i<32; i++) cout«figure[i]; cout«endl;
void sum()
{
Binary b2; b2.input();
for (int i=31; i>0; i-) {
figure[i]+=b2.figure[i]; figure[i-1 ]+=figure[i]/2; figurefi] %=2;
}
соиК<"Результат";
output(); }
void diff() {
Binary b2; b2.input();
for (int i=31; i>0; i~) {
if (figure[i]>=b2.figure[i]) figure[i]-=b2.figure[i];
else {
figure[i]=figure[i]-b2.figure[i]+2;
figure[i-l]-=l;
}
}
cout«" Резул ьтат"; 
output();
}
void pro()
{
Decimal d2; d2.input();
int i, j, S, P; //S - Место для формирования двух цифр С-Разряд переноса Decimal W; //результат
if (count>d2.count) W.count=count; else W.count=d2.count; for(i=0; i<32; i++) W.figure[i]=0;
for (i=0; i<32; i++) // По цифрам числа d2
{
P=0; // Сначала переноса нет
for (j = 0; j<32; j++) //По цифрам числа d {
S = figure[i]* d2.figure[j]+W.figure[i+j]+P;
W.figure[i+j] = S%10; // Временное значение очередной цифры
Р = S/10; //Формирование разряда переноса
}
W.figure[j+i] = Р; //Старшая цифра частичного произведения
}
W.output();
}
//—   -—    —-        
main()
f
int menu; Decimal dl; Binary bl;
SetConsoleOutputCP( 1251);
while (1)
{
соиК<"\пДемонстрация работы с классом десятичных чисел\п"; cout«"l. сложение\п"; cout«"2. вычитание\п"; cout«"3. умножение\п";
сои1«"\пДемонстрация работы с классом двоичных чисел\п"; cout«"4. сложение\п"; cout«"5. вычитание\п"; cout«"6. умножение\п";
cout«"\n7. выход\п";
соШ«"Сделайте выбор: ";
cin»menu;
if (menu==7) exit(0);
switch(menu) {
case 1: {dl.inputQ; dl.sumQ; break;}
case 2: {dl.inputQ; dl.diff(); break;}
case3: {dl.input(); dl.pro(); break:}
case4: {bl.input(); bl.sumQ; break;}
case 5: {bl.input(); bl.diffQ; break;}
case 6: {bl.input(); bl.pro(); break;}
default:{cout«"TaKoro пункта меню нет\п"; break;}
} }
return 0; return 0; 
J^II ^подраздел j.-tj
Создать шаблон класса для работы с комплексными числами, обеспечивающий выполнение операций сложения, вычитания и умножения комплексных чисел. Написать программу, использующую этот шаблон, задавая вещественную и мнимую части как числами типа double, так и целыми числами.
Решение
#include <iostream.h> #include <windows.h> #include <math.h>
template <elass Type> class Complex
{
public:
Type Real, Image;
void add(Complex); //функция сложения void sub(Complex); //функция вычитания void mul(Complex); //функция умножения void del(Complex); //функция деления void Output();
void Input();
};
//определение функций для класса Complex
template <class Type> void Complex<Type>::add(Complex C2)
{
Real = Real + C2.Real; Image = Image + C2.Image ; Output();
}
template <class Type> void Complex<Type>:: sub(Complex C2) {
Real=Real -C2.Real; Image=Image -C2.Image ; Output();
template <class Type> void Complex<Type>:: mul(Complex C2)
{
Real=Real *C2.Real -Image *C2.Image; Image=Real*C2.Image+Image *C2.Real; OutputQ;
template <class Type> void Complex<Type>::del(Complex C2) {
Real=(Real *C2.Real+Image *C2.Image)/(pow(C2.Real,2)+pow(C2.Image,2)); Image=(-l)*(Real *C2.Image +Image *C2.Real)/(pow(C2.Real,2)+pow(C2.Image,2)); OutputQ;
template <class Type> void Complex<Type>::Input()
{
соШ«"Введите действительную часть числа: "; cin»Real;
соШ«"Введите мнимую часть числа: "; cin»Image;
}
template <class Туре> void Complex<Type>::Output() {
cout«"Результат: "«Real«"+x*"«Image«endl; }
//основная программа
main() {
int menu;
Complex<int> cintl, cint2; Complex<float> cfloatl, cfloat2; SetConsoleOutputCP( 1251);
while (1)
{
соиК<"\пДемонстрация работы с целыми числами\п";
cout«"l. сложение\п";
cout«"2. вычитание\п";
cout«"3. умножение\п";
cout«"4. деление\п";
соиК<"\пДемонстрация работы с вещественными числами\п";
cout«"5. сложение\п";
cout«"6. вычитание\п";
cout«"7. умножение\п";
cout«"8. деление\п";
cout«"\n9. выход\п";
соиК<"Сделайте выбор: ";
cin»menu;
if (menu==9) exit(O);
switch(menu) {
case 1: {cintl.Input(); cint2.Input(); cintl.add(cint2); break;} case 2: {cintl.Input(); cint2.Input(); cintl.sub(cint2); break;} case 3: {cintl.InputQ; cint2.Input(); cintl,mul(cint2); break;} case 4: {cintl.Input(); cint2.Input(); cintl.del(cint2); break; } case 5: {cfloatl .Input(); cfloat2.Input(); cfloatl ,add(cfloat2); break;} case 6: {cfloatl .Input(); cfloat2.Input(); cfloatl .sub(cfloat2); break;} case 7: {cfloatl .Input(); cfloat2.Input(); cfloatl ,mul(cfloat2); break;} case 8: {cfloatl .Input(); cfloat2.Input(); cfloatl ,del(cfloat2); break;} default: {соЩ«"Такого пункта меню нет\п"; break;}
} }
return 0; return 0; x
0
41 / 41 / 5
Регистрация: 29.04.2012
Сообщений: 185
03.01.2013, 21:52
По сути, тебе нужен просто шаблон односвязного списка, у которого 2 поля. Данные и указатель на следующий элемент. Данными может быть любой элемент, int, double или даже твой класс про билеты.
0
 Аватар для correcеt
-1 / 3 / 1
Регистрация: 20.04.2011
Сообщений: 412
03.01.2013, 21:59  [ТС]
Цитата Сообщение от Buildog Посмотреть сообщение
По сути, тебе нужен просто шаблон односвязного списка, у которого 2 поля. Данные и указатель на следующий элемент. Данными может быть любой элемент, int, double или даже твой класс про билеты.
По сути, тебе нужен просто шаблон односвязного списка, у которого 2 поля.
и как его сделать.....?
0
ComfyMobile
 Аватар для Nixy
401 / 282 / 34
Регистрация: 24.07.2012
Сообщений: 916
03.01.2013, 22:01
correcеt,

Не по теме:

эх, не надо было пары прогуливать

0
 Аватар для correcеt
-1 / 3 / 1
Регистрация: 20.04.2011
Сообщений: 412
03.01.2013, 22:03  [ТС]
Цитата Сообщение от Nixy Посмотреть сообщение
correcеt,

Не по теме:

эх, не надо было пары прогуливать

ну так да,помогите пожалуйста .
0
41 / 41 / 5
Регистрация: 29.04.2012
Сообщений: 185
03.01.2013, 22:04
Ну это уже совсем базовые вещи. Для начала организуй класс односвязный список. Переделать его в шаблон не составит труда. Только для начала разберитесь, что такое шаблоны и как ими пользоваться.
0
 Аватар для correcеt
-1 / 3 / 1
Регистрация: 20.04.2011
Сообщений: 412
03.01.2013, 22:08  [ТС]
Цитата Сообщение от Buildog Посмотреть сообщение
Вот так допустим будет выглядеть файл .h
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
#pragma once
#include <iostream> //И остальные заголовочные, что нужны
 
template <class T>              // Шаблон класса aviabilets
class aviabilets {
private:
FILE *fp, *tp, *printer;
 int slots[MAX];
 int count;
 
public:
  nofind();      // Функция - неудачный поиск
  openrw();      // Открыть файл  для чтения
  openwr();      // Открыть файл для записи
  getslots();    // Функция определяющая - какие ячейки заняты
  getslot();     // Функция ввода новой ячейки
  adbilet();     // Добавление билета
  delbilet();    // Удаление данных билета из списка
  showbilet();   // Вывод билета на экран
  chbilet();     // Изменение данных билета
  chcell();      // Изменение номера ячейки
  sortcells();   // Порядок возрастания номеров ячеек
  loc_punkt();   // Поиск билета по пункту назначения
  loc_fio();     // Поиск по ФИО
  loc_datvl();   // Поиск по Дате вылета
  pbilets();     // Печать билетов
 
 };
 struct BZ                  // структура с полями записей
 {
  // private:
  char punktn[20];         // Пункт назначения
  char nreis[10];          // Номер рейса
  char fio[50];            // Фамилия и инициалы пассажира
  char datvl[10];          // Дата вылета
  int number;              // Номер ячейки в базе куда заносится данные
      } disc;              // запись.диск
 
// **********************************************
   template<class T>
   aviabilets<T>::nofind() // Функция - неудачный поиск
        {
         char pause;
         puts("\nПункт назначения с таким именем не найден");
         getche();
        // pause=getchar();
         return 0;
        }
// **********************************************
     template<class T>
     aviabilets<T>::openrw() // Открыть файл  для чтения
       {
        if((fp = fopen(FILENAME,"r")) == NULL)
         {
          printf("Невозможно открыть файл %s\n", FILENAME);
          exit(0);
         }
       if((tp = fopen(TEMPFILE,"w")) == NULL)
        {
          printf("Невозможно открыть файл %s\n", TEMPFILE);
          fclose(fp);
          exit(0);
        }
        return 0;
        }
а переделать мне лучше вот этот код?он же без шаблон,н правильный...верно?
0
41 / 41 / 5
Регистрация: 29.04.2012
Сообщений: 185
03.01.2013, 22:20
Это получается шаблон для авиабилетов, я поначалу не так понял задание, тут надо убрать шаблон и оставить просто классом с функциями.

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

Добавлено через 9 минут
Хм... хотя у тебя тут функций класса нету никаких, и все эти функции односвязного списка... поэтому тут и шаблон
0
 Аватар для correcеt
-1 / 3 / 1
Регистрация: 20.04.2011
Сообщений: 412
03.01.2013, 22:29  [ТС]
т.е мне сейчас надо описать каждую функцию,а потом шаблоны...или как?
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
1
2
3
4
5
6
7
8
9
10
11
12
13
openwr();      // Открыть файл для записи
  getslots();    // Функция определяющая - какие ячейки заняты
  getslot();     // Функция ввода новой ячейки
  adbilet();     // Добавление билета
  delbilet();    // Удаление данных билета из списка
  showbilet();   // Вывод билета на экран
  chbilet();     // Изменение данных билета
  chcell();      // Изменение номера ячейки
  sortcells();   // Порядок возрастания номеров ячеек
  loc_punkt();   // Поиск билета по пункту назначения
  loc_fio();     // Поиск по ФИО
  loc_datvl();   // Поиск по Дате вылета
  pbilets();     // Печать билетов
Добавлено через 1 минуту
а этот код правильный? по работе..только добавить шаблоны


Цитата Сообщение от correcеt Посмотреть сообщение
а если вот этот код переделать через шаблон...или он тоже бред?
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
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
#   include <string.h>
#   include <iostream.h>
#   include <windows.h>
class Avia
{
public:
char punkt[15], fio[50]; int namber, data[3]; Avia *Next; Avia();
Avia(char* al, char* bl, int, int*);
};
class List {
public:
Avia* First;
ListO;
void Add(Avia *pNext); //добавление в конец списка Avia* Poisk();
void ShowAll(); //показ всего списка
Avia* FindAvia(int nomer, int *datal); //поиск в списке Avia* GetPrev(Avia *p); int GetCount();
Avia * GetAt(int n); // получает элемент по его номеру bool RemoveAvia(int nomer, int *datal); //удаление элемента
};
Avia::Avia()
{
memset(punkt,0,sizeof(punkt)); 
memset(fio,0,sizeof(fio));
Next=NULL; //обнуляем указатель последнего элемента
Avia::Avia(char* al, char* bl, int namberl, int *datal)
{
strcpy(punkt, al); strcpy(fio, b 1); namber=namberl;
for (int i=0; i<3; i++) data[i]=datal[i];
Next=NULL; //обнуляем указатель последнего элемента
}
List::List()
{
First=NULL; //обнуляем указатель первого элемента
}
void List::Add(Avia *pNext)
{
// Если список не пуст. if(First!=NULL)
Poisk()->Next = pNext;
else
// Если список пуст, First = pNext;
}
Avia* List: :Poisk()
{
Avia *X = First;
// Если список пуст if(X == NULL) return NULL;
// Пока есть следующий элемент списка. whi!e(X->Next!=NULL) X = X->Next;
return X;
}
void List::ShowAll()
{
// Указатель на очередные данные в списке. Avia * pCurr = First; // Если список пуст
if(pCurr == NULL)
{
соиК<"Список пустЛп";
}
// Пока есть следующий элемент списка, do
// Выводим на консоль очередной элемент. cout«pCurr->fio«"\t"«pCurr->punkt«"\t"«pCurr->namber«"\t"«pCurr- >data[0]«"."«pCurr->data[l]«"."«pCurr->data[2]«"\n"; 
while((pCurr = pCurr->Next)!=NULL);
Avia* List::FindAvia(int nomer, int *datal)
{
int flag=0;
// Указатель на очередные данные в списке. Avia * pCurr = First;
// Если список пуст, то возвращаем NULL.
if(pCurr == NULL) {
соЩ«"Списка нет";
}
// Обходим все элементы списка. do{
// Если нашли искомый элемент, то его и возвращаем.
if(pCurr->namber==nomer && pCurr->data[0]==datal [0] && pCurr->data[l]==datal[l] &&
pCurr->data[2]==data 1 [2]) {
// Выводим на консоль
coiit<<pCurr->fio<<''\t',<<pCurr->punkt<<''\t''<<pCurr->namber<<''\t''<<pCurr- >data[0]«". "<<pCurr->data[ 1 ]«". "<<pCurr->data[2] <<"\n"; flag=l; return pCurr;
}
}while((pCurr = pCurr->Next)!=NULL);
if (flag==0) соЩ«"Такой заявки HeT"«endl; return pCurr;
}
Avia* List::GetPrev(Avia *p)
{
// Если предыдущего элемента списка нет (т. е. наш элемент совпадает с первым), то возвращем
NULL.
if(p == First)
return NULL; // Если предыдущий элемент есть. Avia * pCurr = First; do{
if(pCurr->Next==p) { // возвращаем очередной элемент, return pCurr;
}
// Переводим pCurr на следующий элемент в списке. }while((pCurr = pCurr->Next)!=NULL); return NULL;
}
int List::GetCount()
{
// Указатель на очередные данные в списке. Avia * pCurr = First; // Если список пуст
if(pCurr == NULL)
{
return 0;
int count = 1; //Число элементов в списке. // Пока есть следующий элемент списка.
while(pCurr->Next!=NULL)
{
// Переходим на следуюющего. pCurr = pCurr->Next; // Увеличиваем счетчик. count++;
}
return count;
Avia * List::GetAt(int n)
{
// Указатель на очередные данные в списке. Avia * pCurr = First;
// Если список пуст или элемента с таким номером нет,то возвращаем NULL.
if(pCurr == NULL || n>GetCount()-l)
{
return NULL;
}
// Добираемся до элемента с нужным номером.
for(int i=0; i<GetCount(); i++) {
if(i==n) {
return pCurr;
}
pCurr = pCurr->Next;
}
return NULL;
bool List::RemoveAvia(int nomer, int *datal)
{
// Если список пуст if(First == NULL)
{ соШ«"Списка нет"; return false;}
// Получаем элемент для удаления. Avia* pData = FindAvia(nomer, datal); // Если такого элемента в списке нет if(pData == NULL)
{ cout«"TaKoro элемента нет"; return false;
}
// Если удаляемый элемент - первый в списке.
if(pData == First)
{
First = pData->Next; delete pData; return true;
}
// Если удаляемый элемент - не первый в списке. GetPrev(pData)->Next = pData->Next; 
delete pData;
соиК<"Элемент удален"; return true;
main() {
List list; Avia *pData; char p[15], fio[15];
int n, namber, data[3]; bool flag=false; SetConsoleOutputCP( 1251);
while (1)
{
cout«"l Добавить 3anBKy"«endl; cout«"2 Показать все 3aHBKn"«endl; cout«"3 Поиск 3aHBKH"«endl; cout«"4 Удалить 3aflBKy"«endl; cout«"5 Bbixofl"«endl; cout«"n="; cin»n;
switch (n) {
case 1:
{
соиК<"Введите пункт назначения"«е1^1; cin»p;
cout«" В ведите ФИО nacca>icnpa"«endl; cin»fio;
cout«" В ведите номер pefica"«endl; cin»namber;
соиК<"Введите дату вылета"«епё1; соиК<"Число: "; cin»data[0]; соиК<"Месяц: "; cin»data[l]; cout«Tcw "; cin»data[2]; cout«endl;
pData = new Avia(p, fio, namber, data);
list.Add(pData);
break;
}
case 2:
{
list.ShowAll(); break;
}
case 3:
{
сои1«"Введите номер peiica"«endl; cin»namber;
сои1«"Введите дату BbuieTa"«endl; соиК<"Число: "; cin»data[0]; cout«"MecHu: "; cin»data[l]; соиК<"Год: "; cin»data[2];
cout«"\n";
list.FindAvia(namber, data); break;
case 4:
{
сои1«"Введите номер pefica"«endl; cin»namber;
сои1«"Введите дату BbmeTa"«endl; cout«"4Hono: "; cin»data[0]; cout«"MecHu: "; cin»data[l]; соиК<"Год: "; cin»data[2]; cout«"\n";
list.RemoveAvia(namber, data); break;
case 5:
return 0;
default:
cout«"TaKoro пункта меню нет. Повторите ввод"«епё1;
} }
return 0; 
№16 (подраздел 3.2)
Описать класс «множество», позволяющий выполнять основные операции над множествами - добавление и удаление элемента, определение членства, пересечение, объединение, разность и симметричная разность множеств.
Перегрузить операции: присваивания множеств (=), равенства и неравенства множеств.
Написать программу, демонстрирующую работу с этим классом. Программа должна содержать меню, позволяющее осуществить проверку всех методов класса.
Решение
#include <iostream.h> #include <windows.h> #include <math.h> #include <conio.h>
class Set {
public:
Set();
int count;  //количество элементов в множестве
int element[ 100]; //множество элементов
void set(); //задание элемента множества
void get(); //вывод множества
void addElement(); //добавить элемент в множество
void delElement(); //удалить элемент из множества
Set operator+(Set); //объединение
Set operator-(Set); //разность
Set operator*(Set); //пересечение
Set& operator=(Set);//nepenpHCBaHBaHne
bool operator==(Set);//cpaBHeHne на равенство
bool operator<(Set);//cpaBHeiiHe на неравенство
};
Set::Set() {
count=0;
\
i
void Set::set() {
соиК<"Введите количество элементов множества: "; cin»count;
for(int j=0; j<count;j++) {
cout«" В ведите элемент множества: "; cin»element[j];
}
void Set::get()
{
for (int i=0; i<count; i++) cout«element[i]«" "; cout«endl; 
void Set::addElement()
{
соиК<"Введите элемент множества: ";
cin»element[count];
count++;
void Set::delElement() {
int n;
соиК<"Введите номер элемента множества для удаления: "; cin»n;
for(int i=n; i<count-l; i++) element[i]=element[i+l]; count—;
Set Set::operator+(Set el)
{
Set tmp;
int ij, flag, n;
tmp.count=0;
for(i=0; i<count; i++) tmp.element[i]=element[i]; n=count;
for(i=0; i<el.count;i++)
{
flag = 0;
for(j=0; j<el.count;j++)
if (el.element[i]==tmp.element[j]) flag=l; if (flag==0) {tmp.element[n]=el.element[i]; n++;}
\
tmp.count=n; return tmp;
Set Set::operator*(Set el) {
Set tmp; int i,j, flag, n; tmp.count=0; n=0;
for(i=0; i<count;i++) {
flag = 0;
for(j=0; j<el.count;j++)
if (element[i]==el.element[j]) flag=l; if(flag==l) {tmp.element[n]=element[i]; n++;}
}
tmp.count=n; return tmp;
Set Set::operator-(Set el)
Set tmp;
int ij, flag, n;
n=0;
for(i=0; i<count;i++) {
flag = 0;
for(j=0; j<el.count;j++)
if (element[i]==el.element[j]) flag=l; if(flag==0) {tmp.element[n]=element[i]; n++;}
}
tmp.count=n;
return tmp;
}
Set& Set::operator=(Set el)
{
count=el. count;
for(int i=0; i<count;i++) element[i]=el.element[i]; return *this;
bool Set::operator==(Set el)
{
int flag;
if (el.count!=count) return false;
for(int i=0; i<count;i++)
{
flag = 0;
for(int j=0; j<el.count;j++)
if (element[i]==el.element!]]) flag=l; if (flag==0) return false;
}
return true;
bool Set::operator<(Set el)
{
if (count<=el.count) return true;
else
return false;
int main()
{
int menu; Set setl, set2;
SetConsoleOutputCP( 1251);
while (1)
{
cout«"\n\nMEHK)\n"; 
cout«"l. Сформировать множество\п"; cout«"2. Добавить элемент\п"; cout«"3. Удалить элемент\п"; cout«"4. Пересечение множеств\п"; cout«"5. Объединение множеств\п"; cout«"6. Разность множеств\п"; cout«"7. Переприсваивание множеств\п"; cout«"8. Сравнение на равенство множеств\п"; cout«"9. Сравнение на неравенство множеств\п"; cout«"10. Выход\п\п\п";
соШ«"Выберите пункт меню: ";
cin»menu;
if (menu=10) exit(O);
switch(menu)
{
case 1: {setl.set(); break;}
case 2: {set 1 .addElementQ; соШ«"Результат\п"; setl .get(); break;} case 3: {setl,delElement(); соиК<"Результат\п"; setl .get(); break;} case 4: {setl.set(); set2.set(); setl = setl*set2;
cout«"Pe3ynbTaT\n";setl.get(); break; } case 5: {setl ,set(); set2.set(); setl = setl+set2;
соШ«"Результат\п";5еИ^е1(); break; } case 6: {setl .set(); set2.set(); setl = setl-set2;
cout«"Pe3ynbTaT\n";setl.get(); break; } case 7: {setl .setQ; set2 = setl;
соиК<"Результат\п";5е12^е1(); break; } case 8: {setl.set(); set2.set();
if (setl==set2) сои1«"Множества равны";
else соШ«"Множества не равны"; break; } case 9: {setl .set(); set2.set();
if (setl<set2) соиК<"Первое множество меньше второго";
else соШ«"Первое множество больше второго"; break; } default:{cout«"TaKoro пункта меню нет. Повторите ввод "; break;}
} }
return 0; 
№13 (подраздел 3.3)
Создать абстрактный базовый класс Integer (целое) с виртуальными ариф метическими операциями и функцией вывода на экран. Определить производные классы Decimal (десятичное) и Binary (двоичное), реализующие собственные арифметические операции и функцию вывода на экран. Число представляется массивом, каждый элемент которого - цифра.
Решение
#include <iostream.h> #include <windows.h> #include <string.h>
class Integer {
public:
int figure[32], count;
virtual void sum(){}; //вирт. ф. суммы
virtual void diff(){}; //вирт. ф. разности
virtual void pro(){}; //вирт. ф. произведения
virtual void input(){}; //вывод
virtual void output(){}; //ввод
};
//                  
class Decimal : Integer
{
public:
void input()
{
char decimal[32]; int j;
for(int i=0; i<32; i++) figure[i]=0; сои1«"Введите десятичное число: "; cin»decimal; count=strlen(decimal); j=count-l;
for(i=31; i>31-count; i—)
{
figure[i]=decimal[j]-48;
void output()
{
for(int j=0; (j<32)&&(figure[j]==0); j++); for(int i=j; i<32; i++) cout«figure[i]; cout«endl;
void sum()
{
Decimal decimal2; decimal2.input(); for (int i=31; i>0; i--) 
{
figure[i]+=decimal2.figure[i]; figurefi-1 ]+=figure[i]/l 0; figure[i] %=10;
}
со1И«"Результат"; output();
void diff()
!
Decimal decimal2; decimal2.input();
for (int i=31; i>0; i-) {
if (figure[i]>=decimal2.figure[i]) figure[i]-=decimal2.figure[i];
else
{
figure[i]=figure[i]-decimal2.figure[i]+10;
figure[i-l]-=l;
}
}
cout«" Результат";
output(); }
void pro()
{
Decimal d2; d2.input();
int i, j, S, P; //S - Место для формирования двух цифр С-Разряд переноса Decimal W; //результат
if (count>d2.count) W.count=count; else W.count=d2.count; for(i=0; i<32; i++) W.figure[i]=0;
for (i=0; i<32; i++) // По цифрам числа d2
{
P=0; // Сначала переноса нет
for (j = 0; j<32; j++) //По цифрам числа d
{
S = figure[i]* d2.figure[j]+W.figure[i+j]+P;
W.figure[i+j] = S%10; // Временное значение очередной цифры Р = S/10; //Формирование разряда переноса
}
W.figure[j+i] = Р; //Старшая цифра частичного произведения
}
W.output();
//  -—    
class Binary : Integer
{
public:
void inputQ
{ 
char binary[32]; int j;
for(int i=0; i<32; i++) figure[i]=0; сои1«"Введите двоичное число: "; cin»binary; count=strlen(binary); j=count-l;
for(i=31; i>31 -count; i--)
{
if(binary[j]-48==0 || binary[j]-48==l)
{
figure[i]=binary[j]-48; j--;
}
else {
figure[i]=l; j-S
}
}
void output()
{
for(int j=0; (j<32)&&(figure[j]==0); j++); for(int i=j; i<32; i++) cout«figure[i]; cout«endl;
void sum()
{
Binary b2; b2.input();
for (int i=31; i>0; i-) {
figure[i]+=b2.figure[i]; figure[i-1 ]+=figure[i]/2; figurefi] %=2;
}
соиК<"Результат";
output(); }
void diff() {
Binary b2; b2.input();
for (int i=31; i>0; i~) {
if (figure[i]>=b2.figure[i]) figure[i]-=b2.figure[i];
else {
figure[i]=figure[i]-b2.figure[i]+2;
figure[i-l]-=l;
}
}
cout«" Резул ьтат"; 
output();
}
void pro()
{
Decimal d2; d2.input();
int i, j, S, P; //S - Место для формирования двух цифр С-Разряд переноса Decimal W; //результат
if (count>d2.count) W.count=count; else W.count=d2.count; for(i=0; i<32; i++) W.figure[i]=0;
for (i=0; i<32; i++) // По цифрам числа d2
{
P=0; // Сначала переноса нет
for (j = 0; j<32; j++) //По цифрам числа d {
S = figure[i]* d2.figure[j]+W.figure[i+j]+P;
W.figure[i+j] = S%10; // Временное значение очередной цифры
Р = S/10; //Формирование разряда переноса
}
W.figure[j+i] = Р; //Старшая цифра частичного произведения
}
W.output();
}
//—   -—    —-        
main()
f
int menu; Decimal dl; Binary bl;
SetConsoleOutputCP( 1251);
while (1)
{
соиК<"\пДемонстрация работы с классом десятичных чисел\п"; cout«"l. сложение\п"; cout«"2. вычитание\п"; cout«"3. умножение\п";
сои1«"\пДемонстрация работы с классом двоичных чисел\п"; cout«"4. сложение\п"; cout«"5. вычитание\п"; cout«"6. умножение\п";
cout«"\n7. выход\п";
соШ«"Сделайте выбор: ";
cin»menu;
if (menu==7) exit(0);
switch(menu) {
case 1: {dl.inputQ; dl.sumQ; break;}
case 2: {dl.inputQ; dl.diff(); break;}
case3: {dl.input(); dl.pro(); break:}
case4: {bl.input(); bl.sumQ; break;}
case 5: {bl.input(); bl.diffQ; break;}
case 6: {bl.input(); bl.pro(); break;}
default:{cout«"TaKoro пункта меню нет\п"; break;}
} }
return 0; return 0; 
J^II ^подраздел j.-tj
Создать шаблон класса для работы с комплексными числами, обеспечивающий выполнение операций сложения, вычитания и умножения комплексных чисел. Написать программу, использующую этот шаблон, задавая вещественную и мнимую части как числами типа double, так и целыми числами.
Решение
#include <iostream.h> #include <windows.h> #include <math.h>
template <elass Type> class Complex
{
public:
Type Real, Image;
void add(Complex); //функция сложения void sub(Complex); //функция вычитания void mul(Complex); //функция умножения void del(Complex); //функция деления void Output();
void Input();
};
//определение функций для класса Complex
template <class Type> void Complex<Type>::add(Complex C2)
{
Real = Real + C2.Real; Image = Image + C2.Image ; Output();
}
template <class Type> void Complex<Type>:: sub(Complex C2) {
Real=Real -C2.Real; Image=Image -C2.Image ; Output();
template <class Type> void Complex<Type>:: mul(Complex C2)
{
Real=Real *C2.Real -Image *C2.Image; Image=Real*C2.Image+Image *C2.Real; OutputQ;
template <class Type> void Complex<Type>::del(Complex C2) {
Real=(Real *C2.Real+Image *C2.Image)/(pow(C2.Real,2)+pow(C2.Image,2)); Image=(-l)*(Real *C2.Image +Image *C2.Real)/(pow(C2.Real,2)+pow(C2.Image,2)); OutputQ;
template <class Type> void Complex<Type>::Input()
{
соШ«"Введите действительную часть числа: "; cin»Real;
соШ«"Введите мнимую часть числа: "; cin»Image;
}
template <class Туре> void Complex<Type>::Output() {
cout«"Результат: "«Real«"+x*"«Image«endl; }
//основная программа
main() {
int menu;
Complex<int> cintl, cint2; Complex<float> cfloatl, cfloat2; SetConsoleOutputCP( 1251);
while (1)
{
соиК<"\пДемонстрация работы с целыми числами\п";
cout«"l. сложение\п";
cout«"2. вычитание\п";
cout«"3. умножение\п";
cout«"4. деление\п";
соиК<"\пДемонстрация работы с вещественными числами\п";
cout«"5. сложение\п";
cout«"6. вычитание\п";
cout«"7. умножение\п";
cout«"8. деление\п";
cout«"\n9. выход\п";
соиК<"Сделайте выбор: ";
cin»menu;
if (menu==9) exit(O);
switch(menu) {
case 1: {cintl.Input(); cint2.Input(); cintl.add(cint2); break;} case 2: {cintl.Input(); cint2.Input(); cintl.sub(cint2); break;} case 3: {cintl.InputQ; cint2.Input(); cintl,mul(cint2); break;} case 4: {cintl.Input(); cint2.Input(); cintl.del(cint2); break; } case 5: {cfloatl .Input(); cfloat2.Input(); cfloatl ,add(cfloat2); break;} case 6: {cfloatl .Input(); cfloat2.Input(); cfloatl .sub(cfloat2); break;} case 7: {cfloatl .Input(); cfloat2.Input(); cfloatl ,mul(cfloat2); break;} case 8: {cfloatl .Input(); cfloat2.Input(); cfloatl ,del(cfloat2); break;} default: {соЩ«"Такого пункта меню нет\п"; break;}
} }
return 0; return 0; x
0
41 / 41 / 5
Регистрация: 29.04.2012
Сообщений: 185
03.01.2013, 22:35
Вообще как тебе удобно будет, можешь сразу все функции сделать шаблонами, а можешь вначале все функции реализовать, а потом под шаблоны переделать. Вот мой шаблон просто односвязного списка (только начало)
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
#ifndef _TEMP_H
#define _TEMP_H
#include <iostream>
 
using namespace std;
 
template <class T>
struct ListElem
{
    T item;
    ListElem *next;
};
 
template <class T>
class List
{
public:
    List();
    ~List();
    void AddElem(T item);
    void AddElem(T item, int position);
    void SearchMin();
    void SearchMax();
    void ShowList();
    void Sort();
    void Swap(T& theA, T& theB);
    void DelElem (int position);
private:
    ListElem<T> *Head;
    int SizeList;
};
 
template <class T>
List<T>::List()
{
    Head = NULL;
    SizeList = 0;
}
 
template <class T>
List<T>::~List()
{
    while(Head)
    {
        ListElem<T> *temp = Head;
        Head = Head->next;
        delete temp;
        temp = NULL; 
    }
    SizeList = 0;
}
#endif
Добавлено через 2 минуты
400+ строк кода просматривать... проверь сам работоспособность, но сразу могу сказать, что в 73 строчке твоего кода, надо ковычку добавить.
0
 Аватар для correcеt
-1 / 3 / 1
Регистрация: 20.04.2011
Сообщений: 412
04.01.2013, 23:14  [ТС]
Цитата Сообщение от Buildog Посмотреть сообщение
Вообще как тебе удобно будет, можешь сразу все функции сделать шаблонами, а можешь вначале все функции реализовать, а потом под шаблоны переделать. Вот мой шаблон просто односвязного списка (только начало)
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
#ifndef _TEMP_H
#define _TEMP_H
#include <iostream>
 
using namespace std;
 
template <class T>
struct ListElem
{
    T item;
    ListElem *next;
};
 
template <class T>
class List
{
public:
    List();
    ~List();
    void AddElem(T item);
    void AddElem(T item, int position);
    void SearchMin();
    void SearchMax();
    void ShowList();
    void Sort();
    void Swap(T& theA, T& theB);
    void DelElem (int position);
private:
    ListElem<T> *Head;
    int SizeList;
};
 
template <class T>
List<T>::List()
{
    Head = NULL;
    SizeList = 0;
}
 
template <class T>
List<T>::~List()
{
    while(Head)
    {
        ListElem<T> *temp = Head;
        Head = Head->next;
        delete temp;
        temp = NULL; 
    }
    SizeList = 0;
}
#endif
Добавлено через 2 минуты
400+ строк кода просматривать... проверь сам работоспособность, но сразу могу сказать, что в 73 строчке твоего кода, надо ковычку добавить.
будем пробовать..и звать помощи..если что)

Добавлено через 10 минут
Исправил код,но ругается на :ListO;
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
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
#   include <string.h>
#   include <iostream.h>
#   include <windows.h>
class Avia
{
public:
char punkt[15], fio[50]; int namber, data[3]; Avia *Next; Avia();
Avia(char* al, char* bl, int, int*);
};
class List {
public:
Avia* First;
[COLOR="Red"]ListO;[/COLOR]
void Add(Avia *pNext); //äîáàâëåíèå â êîíåö ñïèñêà Avia* Poisk();
void ShowAll(); //ïîêàç âñåãî ñïèñêà
Avia* FindAvia(int nomer, int *datal); //ïîèñê â ñïèñêå Avia* GetPrev(Avia *p); int GetCount();
Avia * GetAt(int n); // ïîëó÷àåò ýëåìåíò ïî åãî íîìåðó bool RemoveAvia(int nomer, int *datal); //óäàëåíèå ýëåìåíòà
};
Avia::Avia()
{
memset(punkt,0,sizeof(punkt)); 
memset(fio,0,sizeof(fio));
Next=NULL; //îáíóëÿåì óêàçàòåëü ïîñëåäíåãî ýëåìåíòà
Avia::Avia(char* al, char* bl, int namberl, int *datal)
{
strcpy(punkt, al); strcpy(fio, b 1); namber=namberl;
for (int i=0; i<3; i++) data[i]=datal[i];
Next=NULL; //îáíóëÿåì óêàçàòåëü ïîñëåäíåãî ýëåìåíòà
}
List::List()
{
First=NULL; //îáíóëÿåì óêàçàòåëü ïåðâîãî ýëåìåíòà
}
void List::Add(Avia *pNext)
{
// Åñëè ñïèñîê íå ïóñò. if(First!=NULL)
Poisk()->Next = pNext;
else
// Åñëè ñïèñîê ïóñò, First = pNext;
}
Avia* List: :Poisk()
{
Avia *X = First;
// Åñëè ñïèñîê ïóñò if(X == NULL) return NULL;
// Ïîêà åñòü ñëåäóþùèé ýëåìåíò ñïèñêà. whi!e(X->Next!=NULL) X = X->Next;
return X;
}
void List::ShowAll()
{
// Óêàçàòåëü íà î÷åðåäíûå äàííûå â ñïèñêå. Avia * pCurr = First; // Åñëè ñïèñîê ïóñò
if(pCurr == NULL)
{
ñîèÊ<"Ñïèñîê ïóñòËï";
}
// Ïîêà åñòü ñëåäóþùèé ýëåìåíò ñïèñêà, do
// Âûâîäèì íà êîíñîëü î÷åðåäíîé ýëåìåíò. cout«pCurr->fio«"\t"«pCurr->punkt«"\t"«pCurr->namber«"\t"«pCurr- >data[0]«"."«pCurr->data[l]«"."«pCurr->data[2]«"\n"; 
while((pCurr = pCurr->Next)!=NULL);
Avia* List::FindAvia(int nomer, int *datal)
{
int flag=0;
// Óêàçàòåëü íà î÷åðåäíûå äàííûå â ñïèñêå. Avia * pCurr = First;
// Åñëè ñïèñîê ïóñò, òî âîçâðàùàåì NULL.
if(pCurr == NULL) {
ñîÙ«"Ñïèñêà íåò";
}
// Îáõîäèì âñå ýëåìåíòû ñïèñêà. do{
// Åñëè íàøëè èñêîìûé ýëåìåíò, òî åãî è âîçâðàùàåì.
if(pCurr->namber==nomer && pCurr->data[0]==datal [0] && pCurr->data[l]==datal[l] &&
pCurr->data[2]==data 1 [2]) {
// Âûâîäèì íà êîíñîëü
coiit<<pCurr->fio<<''\t",<<pCurr->punkt<<''\t''<<pCurr->namber<<''\t''<<pCurr- >data[0]«". "<<pCurr->data[ 1 ]«". "<<pCurr->data[2] <<"\n"; flag=l; return pCurr;
}
}while((pCurr = pCurr->Next)!=NULL);
if (flag==0) ñîÙ«"Òàêîé çàÿâêè HeT"«endl; return pCurr;
}
Avia* List::GetPrev(Avia *p)
{
// Åñëè ïðåäûäóùåãî ýëåìåíòà ñïèñêà íåò (ò. å. íàø ýëåìåíò ñîâïàäàåò ñ ïåðâûì), òî âîçâðàùåì
NULL.
if(p == First)
return NULL; // Åñëè ïðåäûäóùèé ýëåìåíò åñòü. Avia * pCurr = First; do{
if(pCurr->Next==p) { // âîçâðàùàåì î÷åðåäíîé ýëåìåíò, return pCurr;
}
// Ïåðåâîäèì pCurr íà ñëåäóþùèé ýëåìåíò â ñïèñêå. }while((pCurr = pCurr->Next)!=NULL); return NULL;
}
int List::GetCount()
{
// Óêàçàòåëü íà î÷åðåäíûå äàííûå â ñïèñêå. Avia * pCurr = First; // Åñëè ñïèñîê ïóñò
if(pCurr == NULL)
{
return 0;
int count = 1; //×èñëî ýëåìåíòîâ â ñïèñêå. // Ïîêà åñòü ñëåäóþùèé ýëåìåíò ñïèñêà.
while(pCurr->Next!=NULL)
{
// Ïåðåõîäèì íà ñëåäóþþùåãî. pCurr = pCurr->Next; // Óâåëè÷èâàåì ñ÷åò÷èê. count++;
}
return count;
Avia * List::GetAt(int n)
{
// Óêàçàòåëü íà î÷åðåäíûå äàííûå â ñïèñêå. Avia * pCurr = First;
// Åñëè ñïèñîê ïóñò èëè ýëåìåíòà ñ òàêèì íîìåðîì íåò,òî âîçâðàùàåì NULL.
if(pCurr == NULL || n>GetCount()-l)
{
return NULL;
}
// Äîáèðàåìñÿ äî ýëåìåíòà ñ íóæíûì íîìåðîì.
for(int i=0; i<GetCount(); i++) {
if(i==n) {
return pCurr;
}
pCurr = pCurr->Next;
}
return NULL;
bool List::RemoveAvia(int nomer, int *datal)
{
// Åñëè ñïèñîê ïóñò if(First == NULL)
{ ñîØ«"Ñïèñêà íåò"; return false;}
// Ïîëó÷àåì ýëåìåíò äëÿ óäàëåíèÿ. Avia* pData = FindAvia(nomer, datal); // Åñëè òàêîãî ýëåìåíòà â ñïèñêå íåò if(pData == NULL)
{ cout«"TaKoro ýëåìåíòà íåò"; return false;
}
// Åñëè óäàëÿåìûé ýëåìåíò - ïåðâûé â ñïèñêå.
if(pData == First)
{
First = pData->Next; delete pData; return true;
}
// Åñëè óäàëÿåìûé ýëåìåíò - íå ïåðâûé â ñïèñêå. GetPrev(pData)->Next = pData->Next; 
delete pData;
ñîèÊ<"Ýëåìåíò óäàëåí"; return true;
main() {
List list; Avia *pData; char p[15], fio[15];
int n, namber, data[3]; bool flag=false; SetConsoleOutputCP( 1251);
while (1)
{
cout«"l Äîáàâèòü 3anBKy"«endl; cout«"2 Ïîêàçàòü âñå 3aHBKn"«endl; cout«"3 Ïîèñê 3aHBKH"«endl; cout«"4 Óäàëèòü 3aflBKy"«endl; cout«"5 Bbixofl"«endl; cout«"n="; cin»n;
switch (n) {
case 1:
{
ñîèÊ<"Ââåäèòå ïóíêò íàçíà÷åíèÿ"«å1^1; cin»p;
cout«" Â âåäèòå ÔÈÎ nacca>icnpa"«endl; cin»fio;
cout«" Â âåäèòå íîìåð pefica"«endl; cin»namber;
ñîèÊ<"Ââåäèòå äàòó âûëåòà"«åï¸1; ñîèÊ<"×èñëî: "; cin»data[0]; ñîèÊ<"Ìåñÿö: "; cin»data[l]; cout«Tcw "; cin»data[2]; cout«endl;
pData = new Avia(p, fio, namber, data);
list.Add(pData);
break;
}
case 2:
{
list.ShowAll(); break;
}
case 3:
{
ñîè1«"Ââåäèòå íîìåð peiica"«endl; cin»namber;
ñîè1«"Ââåäèòå äàòó BbuieTa"«endl; ñîèÊ<"×èñëî: "; cin»data[0]; cout«"MecHu: "; cin»data[l]; ñîèÊ<"Ãîä: "; cin»data[2];
cout«"\n";
list.FindAvia(namber, data); break;
case 4:
{
ñîè1«"Ââåäèòå íîìåð pefica"«endl; cin»namber;
ñîè1«"Ââåäèòå äàòó BbmeTa"«endl; cout«"4Hono: "; cin»data[0]; cout«"MecHu: "; cin»data[l]; ñîèÊ<"Ãîä: "; cin»data[2]; cout«"\n";
list.RemoveAvia(namber, data); break;
case 5:
return 0;
default:
cout«"TaKoro ïóíêòà ìåíþ íåò. Ïîâòîðèòå ââîä"«åï¸1;
} }
return 0; 
¹16 (ïîäðàçäåë 3.2)
Îïèñàòü êëàññ «ìíîæåñòâî», ïîçâîëÿþùèé âûïîëíÿòü îñíîâíûå îïåðàöèè íàä ìíîæåñòâàìè - äîáàâëåíèå è óäàëåíèå ýëåìåíòà, îïðåäåëåíèå ÷ëåíñòâà, ïåðåñå÷åíèå, îáúåäèíåíèå, ðàçíîñòü è ñèììåòðè÷íàÿ ðàçíîñòü ìíîæåñòâ.
Ïåðåãðóçèòü îïåðàöèè: ïðèñâàèâàíèÿ ìíîæåñòâ (=), ðàâåíñòâà è íåðàâåíñòâà ìíîæåñòâ.
Íàïèñàòü ïðîãðàììó, äåìîíñòðèðóþùóþ ðàáîòó ñ ýòèì êëàññîì. Ïðîãðàììà äîëæíà ñîäåðæàòü ìåíþ, ïîçâîëÿþùåå îñóùåñòâèòü ïðîâåðêó âñåõ ìåòîäîâ êëàññà.
Ðåøåíèå
#include <iostream.h> #include <windows.h> #include <math.h> #include <conio.h>
class Set {
public:
Set();
int count;  //êîëè÷åñòâî ýëåìåíòîâ â ìíîæåñòâå
int element[ 100]; //ìíîæåñòâî ýëåìåíòîâ
void set(); //çàäàíèå ýëåìåíòà ìíîæåñòâà
void get(); //âûâîä ìíîæåñòâà
void addElement(); //äîáàâèòü ýëåìåíò â ìíîæåñòâî
void delElement(); //óäàëèòü ýëåìåíò èç ìíîæåñòâà
Set operator+(Set); //îáúåäèíåíèå
Set operator-(Set); //ðàçíîñòü
Set operator*(Set); //ïåðåñå÷åíèå
Set& operator=(Set);//nepenpHCBaHBaHne
bool operator==(Set);//cpaBHeHne íà ðàâåíñòâî
bool operator<(Set);//cpaBHeiiHe íà íåðàâåíñòâî
};
Set::Set() {
count=0;
\
i
void Set::set() {
ñîèÊ<"Ââåäèòå êîëè÷åñòâî ýëåìåíòîâ ìíîæåñòâà: "; cin»count;
for(int j=0; j<count;j++) {
cout«" Â âåäèòå ýëåìåíò ìíîæåñòâà: "; cin»element[j];
}
void Set::get()
{
for (int i=0; i<count; i++) cout«element[i]«" "; cout«endl; 
void Set::addElement()
{
ñîèÊ<"Ââåäèòå ýëåìåíò ìíîæåñòâà: ";
cin»element[count];
count++;
void Set::delElement() {
int n;
ñîèÊ<"Ââåäèòå íîìåð ýëåìåíòà ìíîæåñòâà äëÿ óäàëåíèÿ: "; cin»n;
for(int i=n; i<count-l; i++) element[i]=element[i+l]; count—;
Set Set::operator+(Set el)
{
Set tmp;
int ij, flag, n;
tmp.count=0;
for(i=0; i<count; i++) tmp.element[i]=element[i]; n=count;
for(i=0; i<el.count;i++)
{
flag = 0;
for(j=0; j<el.count;j++)
if (el.element[i]==tmp.element[j]) flag=l; if (flag==0) {tmp.element[n]=el.element[i]; n++;}
\
tmp.count=n; return tmp;
Set Set::operator*(Set el) {
Set tmp; int i,j, flag, n; tmp.count=0; n=0;
for(i=0; i<count;i++) {
flag = 0;
for(j=0; j<el.count;j++)
if (element[i]==el.element[j]) flag=l; if(flag==l) {tmp.element[n]=element[i]; n++;}
}
tmp.count=n; return tmp;
Set Set::operator-(Set el)
Set tmp;
int ij, flag, n;
n=0;
for(i=0; i<count;i++) {
flag = 0;
for(j=0; j<el.count;j++)
if (element[i]==el.element[j]) flag=l; if(flag==0) {tmp.element[n]=element[i]; n++;}
}
tmp.count=n;
return tmp;
}
Set& Set::operator=(Set el)
{
count=el. count;
for(int i=0; i<count;i++) element[i]=el.element[i]; return *this;
bool Set::operator==(Set el)
{
int flag;
if (el.count!=count) return false;
for(int i=0; i<count;i++)
{
flag = 0;
for(int j=0; j<el.count;j++)
if (element[i]==el.element!]]) flag=l; if (flag==0) return false;
}
return true;
bool Set::operator<(Set el)
{
if (count<=el.count) return true;
else
return false;
int main()
{
int menu; Set setl, set2;
SetConsoleOutputCP( 1251);
while (1)
{
cout«"\n\nMEHK)\n"; 
cout«"l. Ñôîðìèðîâàòü ìíîæåñòâî\ï"; cout«"2. Äîáàâèòü ýëåìåíò\ï"; cout«"3. Óäàëèòü ýëåìåíò\ï"; cout«"4. Ïåðåñå÷åíèå ìíîæåñòâ\ï"; cout«"5. Îáúåäèíåíèå ìíîæåñòâ\ï"; cout«"6. Ðàçíîñòü ìíîæåñòâ\ï"; cout«"7. Ïåðåïðèñâàèâàíèå ìíîæåñòâ\ï"; cout«"8. Ñðàâíåíèå íà ðàâåíñòâî ìíîæåñòâ\ï"; cout«"9. Ñðàâíåíèå íà íåðàâåíñòâî ìíîæåñòâ\ï"; cout«"10. Âûõîä\ï\ï\ï";
ñîØ«"Âûáåðèòå ïóíêò ìåíþ: ";
cin»menu;
if (menu=10) exit(O);
switch(menu)
{
case 1: {setl.set(); break;}
case 2: {set 1 .addElementQ; ñîØ«"Ðåçóëüòàò\ï"; setl .get(); break;} case 3: {setl,delElement(); ñîèÊ<"Ðåçóëüòàò\ï"; setl .get(); break;} case 4: {setl.set(); set2.set(); setl = setl*set2;
cout«"Pe3ynbTaT\n";setl.get(); break; } case 5: {setl ,set(); set2.set(); setl = setl+set2;
ñîØ«"Ðåçóëüòàò\ï";5åÈ^å1(); break; } case 6: {setl .set(); set2.set(); setl = setl-set2;
cout«"Pe3ynbTaT\n";setl.get(); break; } case 7: {setl .setQ; set2 = setl;
ñîèÊ<"Ðåçóëüòàò\ï";5å12^å1(); break; } case 8: {setl.set(); set2.set();
if (setl==set2) ñîè1«"Ìíîæåñòâà ðàâíû";
else ñîØ«"Ìíîæåñòâà íå ðàâíû"; break; } case 9: {setl .set(); set2.set();
if (setl<set2) ñîèÊ<"Ïåðâîå ìíîæåñòâî ìåíüøå âòîðîãî";
else ñîØ«"Ïåðâîå ìíîæåñòâî áîëüøå âòîðîãî"; break; } default:{cout«"TaKoro ïóíêòà ìåíþ íåò. Ïîâòîðèòå ââîä "; break;}
} }
return 0; 
¹13 (ïîäðàçäåë 3.3)
Ñîçäàòü àáñòðàêòíûé áàçîâûé êëàññ Integer (öåëîå) ñ âèðòóàëüíûìè àðèô ìåòè÷åñêèìè îïåðàöèÿìè è ôóíêöèåé âûâîäà íà ýêðàí. Îïðåäåëèòü ïðîèçâîäíûå êëàññû Decimal (äåñÿòè÷íîå) è Binary (äâîè÷íîå), ðåàëèçóþùèå ñîáñòâåííûå àðèôìåòè÷åñêèå îïåðàöèè è ôóíêöèþ âûâîäà íà ýêðàí. ×èñëî ïðåäñòàâëÿåòñÿ ìàññèâîì, êàæäûé ýëåìåíò êîòîðîãî - öèôðà.
Ðåøåíèå
#include <iostream.h> #include <windows.h> #include <string.h>
class Integer {
public:
int figure[32], count;
virtual void sum(){}; //âèðò. ô. ñóììû
virtual void diff(){}; //âèðò. ô. ðàçíîñòè
virtual void pro(){}; //âèðò. ô. ïðîèçâåäåíèÿ
virtual void input(){}; //âûâîä
virtual void output(){}; //ââîä
};
//                  
class Decimal : Integer
{
public:
void input()
{
char decimal[32]; int j;
for(int i=0; i<32; i++) figure[i]=0; ñîè1«"Ââåäèòå äåñÿòè÷íîå ÷èñëî: "; cin»decimal; count=strlen(decimal); j=count-l;
for(i=31; i>31-count; i—)
{
figure[i]=decimal[j]-48;
void output()
{
for(int j=0; (j<32)&&(figure[j]==0); j++); for(int i=j; i<32; i++) cout«figure[i]; cout«endl;
void sum()
{
Decimal decimal2; decimal2.input(); for (int i=31; i>0; i--) 
{
figure[i]+=decimal2.figure[i]; figurefi-1 ]+=figure[i]/l 0; figure[i] %=10;
}
ñî1È«"Ðåçóëüòàò"; output();
void diff()
!
Decimal decimal2; decimal2.input();
for (int i=31; i>0; i-) {
if (figure[i]>=decimal2.figure[i]) figure[i]-=decimal2.figure[i];
else
{
figure[i]=figure[i]-decimal2.figure[i]+10;
figure[i-l]-=l;
}
}
cout«" Ðåçóëüòàò";
output(); }
void pro()
{
Decimal d2; d2.input();
int i, j, S, P; //S - Ìåñòî äëÿ ôîðìèðîâàíèÿ äâóõ öèôð Ñ-Ðàçðÿä ïåðåíîñà Decimal W; //ðåçóëüòàò
if (count>d2.count) W.count=count; else W.count=d2.count; for(i=0; i<32; i++) W.figure[i]=0;
for (i=0; i<32; i++) // Ïî öèôðàì ÷èñëà d2
{
P=0; // Ñíà÷àëà ïåðåíîñà íåò
for (j = 0; j<32; j++) //Ïî öèôðàì ÷èñëà d
{
S = figure[i]* d2.figure[j]+W.figure[i+j]+P;
W.figure[i+j] = S%10; // Âðåìåííîå çíà÷åíèå î÷åðåäíîé öèôðû Ð = S/10; //Ôîðìèðîâàíèå ðàçðÿäà ïåðåíîñà
}
W.figure[j+i] = Ð; //Ñòàðøàÿ öèôðà ÷àñòè÷íîãî ïðîèçâåäåíèÿ
}
W.output();
//  -—  
class Binary : Integer
{
public:
void inputQ
{ 
char binary[32]; int j;
for(int i=0; i<32; i++) figure[i]=0; ñîè1«"Ââåäèòå äâîè÷íîå ÷èñëî: "; cin»binary; count=strlen(binary); j=count-l;
for(i=31; i>31 -count; i--)
{
if(binary[j]-48==0 || binary[j]-48==l)
{
figure[i]=binary[j]-48; j--;
}
else {
figure[i]=l; j-S
}
}
void output()
{
for(int j=0; (j<32)&&(figure[j]==0); j++); for(int i=j; i<32; i++) cout«figure[i]; cout«endl;
void sum()
{
Binary b2; b2.input();
for (int i=31; i>0; i-) {
figure[i]+=b2.figure[i]; figure[i-1 ]+=figure[i]/2; figurefi] %=2;
}
ñîèÊ<"Ðåçóëüòàò";
output(); }
void diff() {
Binary b2; b2.input();
for (int i=31; i>0; i~) {
if (figure[i]>=b2.figure[i]) figure[i]-=b2.figure[i];
else {
figure[i]=figure[i]-b2.figure[i]+2;
figure[i-l]-=l;
}
}
cout«" Ðåçóë üòàò"; 
output();
}
void pro()
{
Decimal d2; d2.input();
int i, j, S, P; //S - Ìåñòî äëÿ ôîðìèðîâàíèÿ äâóõ öèôð Ñ-Ðàçðÿä ïåðåíîñà Decimal W; //ðåçóëüòàò
if (count>d2.count) W.count=count; else W.count=d2.count; for(i=0; i<32; i++) W.figure[i]=0;
for (i=0; i<32; i++) // Ïî öèôðàì ÷èñëà d2
{
P=0; // Ñíà÷àëà ïåðåíîñà íåò
for (j = 0; j<32; j++) //Ïî öèôðàì ÷èñëà d {
S = figure[i]* d2.figure[j]+W.figure[i+j]+P;
W.figure[i+j] = S%10; // Âðåìåííîå çíà÷åíèå î÷åðåäíîé öèôðû
Ð = S/10; //Ôîðìèðîâàíèå ðàçðÿäà ïåðåíîñà
}
W.figure[j+i] = Ð; //Ñòàðøàÿ öèôðà ÷àñòè÷íîãî ïðîèçâåäåíèÿ
}
W.output();
}
//— -—  —-      
main()
f
int menu; Decimal dl; Binary bl;
SetConsoleOutputCP( 1251);
while (1)
{
ñîèÊ<"\ïÄåìîíñòðàöèÿ ðàáîòû ñ êëàññîì äåñÿòè÷íûõ ÷èñåë\ï"; cout«"l. ñëîæåíèå\ï"; cout«"2. âû÷èòàíèå\ï"; cout«"3. óìíîæåíèå\ï";
ñîè1«"\ïÄåìîíñòðàöèÿ ðàáîòû ñ êëàññîì äâîè÷íûõ ÷èñåë\ï"; cout«"4. ñëîæåíèå\ï"; cout«"5. âû÷èòàíèå\ï"; cout«"6. óìíîæåíèå\ï";
cout«"\n7. âûõîä\ï";
ñîØ«"Ñäåëàéòå âûáîð: ";
cin»menu;
if (menu==7) exit(0);
switch(menu) {
case 1: {dl.inputQ; dl.sumQ; break;}
case 2: {dl.inputQ; dl.diff(); break;}
case3: {dl.input(); dl.pro(); break:}
case4: {bl.input(); bl.sumQ; break;}
case 5: {bl.input(); bl.diffQ; break;}
case 6: {bl.input(); bl.pro(); break;}
default:{cout«"TaKoro ïóíêòà ìåíþ íåò\ï"; break;}
} }
return 0; return 0; 
J^II ^ïîäðàçäåë j.-tj
Ñîçäàòü øàáëîí êëàññà äëÿ ðàáîòû ñ êîìïëåêñíûìè ÷èñëàìè, îáåñïå÷èâàþùèé âûïîëíåíèå îïåðàöèé ñëîæåíèÿ, âû÷èòàíèÿ è óìíîæåíèÿ êîìïëåêñíûõ ÷èñåë. Íàïèñàòü ïðîãðàììó, èñïîëüçóþùóþ ýòîò øàáëîí, çàäàâàÿ âåùåñòâåííóþ è ìíèìóþ ÷àñòè êàê ÷èñëàìè òèïà double, òàê è öåëûìè ÷èñëàìè.
Ðåøåíèå
#include <iostream.h> #include <windows.h> #include <math.h>
template <elass Type> class Complex
{
public:
Type Real, Image;
void add(Complex); //ôóíêöèÿ ñëîæåíèÿ void sub(Complex); //ôóíêöèÿ âû÷èòàíèÿ void mul(Complex); //ôóíêöèÿ óìíîæåíèÿ void del(Complex); //ôóíêöèÿ äåëåíèÿ void Output();
void Input();
};
//îïðåäåëåíèå ôóíêöèé äëÿ êëàññà Complex
template <class Type> void Complex<Type>::add(Complex C2)
{
Real = Real + C2.Real; Image = Image + C2.Image ; Output();
}
template <class Type> void Complex<Type>:: sub(Complex C2) {
Real=Real -C2.Real; Image=Image -C2.Image ; Output();
template <class Type> void Complex<Type>:: mul(Complex C2)
{
Real=Real *C2.Real -Image *C2.Image; Image=Real*C2.Image+Image *C2.Real; OutputQ;
template <class Type> void Complex<Type>::del(Complex C2) {
Real=(Real *C2.Real+Image *C2.Image)/(pow(C2.Real,2)+pow(C2.Image,2)); Image=(-l)*(Real *C2.Image +Image *C2.Real)/(pow(C2.Real,2)+pow(C2.Image,2)); OutputQ;
template <class Type> void Complex<Type>::Input()
{
ñîØ«"Ââåäèòå äåéñòâèòåëüíóþ ÷àñòü ÷èñëà: "; cin»Real;
ñîØ«"Ââåäèòå ìíèìóþ ÷àñòü ÷èñëà: "; cin»Image;
}
template <class Òóðå> void Complex<Type>::Output() {
cout«"Ðåçóëüòàò: "«Real«"+x*"«Image«endl; }
//îñíîâíàÿ ïðîãðàììà
main() {
int menu;
Complex<int> cintl, cint2; Complex<float> cfloatl, cfloat2; SetConsoleOutputCP( 1251);
while (1)
{
ñîèÊ<"\ïÄåìîíñòðàöèÿ ðàáîòû ñ öåëûìè ÷èñëàìè\ï";
cout«"l. ñëîæåíèå\ï";
cout«"2. âû÷èòàíèå\ï";
cout«"3. óìíîæåíèå\ï";
cout«"4. äåëåíèå\ï";
ñîèÊ<"\ïÄåìîíñòðàöèÿ ðàáîòû ñ âåùåñòâåííûìè ÷èñëàìè\ï";
cout«"5. ñëîæåíèå\ï";
cout«"6. âû÷èòàíèå\ï";
cout«"7. óìíîæåíèå\ï";
cout«"8. äåëåíèå\ï";
cout«"\n9. âûõîä\ï";
ñîèÊ<"Ñäåëàéòå âûáîð: ";
cin»menu;
if (menu==9) exit(O);
switch(menu) {
case 1: {cintl.Input(); cint2.Input(); cintl.add(cint2); break;} case 2: {cintl.Input(); cint2.Input(); cintl.sub(cint2); break;} case 3: {cintl.InputQ; cint2.Input(); cintl,mul(cint2); break;} case 4: {cintl.Input(); cint2.Input(); cintl.del(cint2); break; } case 5: {cfloatl .Input(); cfloat2.Input(); cfloatl ,add(cfloat2); break;} case 6: {cfloatl .Input(); cfloat2.Input(); cfloatl .sub(cfloat2); break;} case 7: {cfloatl .Input(); cfloat2.Input(); cfloatl ,mul(cfloat2); break;} case 8: {cfloatl .Input(); cfloat2.Input(); cfloatl ,del(cfloat2); break;} default: {ñîÙ«"Òàêîãî ïóíêòà ìåíþ íåò\ï"; break;}
} }
return 0; return 0; x
Добавлено через 30 минут
я так понял...за бесплатно...400 строчек кода смотреть не будет...все самому......

Добавлено через 3 минуты
вообщем разобрался,но с другим кодом....

Добавлено через 37 минут
Люди,решил с нуля писать...точнее по наброскам:
первоя,я напишу функции все,а потом шаблоны....так будет лучше?

Добавлено через 22 часа 29 минут
И так,набросал на скорую руку так сказать...вопрос....почему не выполняется тут действие?
C++
1
ListItem*ref->first = new ListItem;
--------------------------
КОД:
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
# include <iostream>
#include <string>
using namespace std;
class List
{
public:
    struct ListItem
    {
        
        string punkt;
        int nomer;
        string FIO;
        int den;
        int mesac;
        int god;
        ListItem *Next;
    };
 
    ListItem *First;
public:
    List(){
        First=NULL;
    }
    List(ListItem *a)
    {
        First=a;
    }
ListItem* addx (ListItem *a)//добавление элемента в список из проги
{
    ListItem * ref=new ListItem;
    ref->den=a->den;
    ref->god=a->god;
    ref->mesac=a->mesac;
    ref->nomer=a->nomer;
    ref->punkt=a->punkt;
    ref->FIO=a->FIO;
        return First;
}
ListItem*addx()//добавление элемента в список из консоли
{
ListItem*ref->first = new ListItem;
    //string str;
    getline(cin,str);
    cout<<"\nВведите Фамилию и инициалы заказчика:\n";
    getline(cin,str);
    ref->FIO=str;
    cout<<"\nВведите пункт назначения:\n";
    getline(cin,str);
    ref->punkt=str;
    cout<<"\nВведите номе рейса:\n";
    cin>>ref->nomer;
    cout<<"\nВведите дату:\n\tдень:";
    cin>>ref->den;
    cout<<"\n\tмесяц:";
    cin>>ref->mesac;
    cout<<"\n\tгод:";
    cin>>ref->god;
    End = ref;
    return First;
}
void List::InsertFirst(ListItem *w)//вставить в начало списка
{
    ListItem *a=new ListItem;
    a->punkt=w->punkt;
    a->nomer=w->nomer;
    a->FIO=w->FIO;
    a->mesac=w->mesac;
    a->den=w->den;
    a->god=w->god;
    a->Next=First;
    First=a;
}
void deleteThis (ListItem *a)//удаление определенного элемента
{
    try
    {
    ListItem *A=new ListItem;
    A=NULL;
    ListItem *p=new ListItem;
    ListItem *i=new ListItem;
    p=First;
    i=p->Next;
    if((p->FIO==a->FIO)&&(p->nomer==a->nomer)&&(p->den==a->den)&&(p->mesac==a->mesac)&&(p->god==a->god))
    {
        First=First->Next;
        delete  p;
    }
    else
    {
        while (i!=NULL)
        {
            if((i->FIO==a->FIO)&&(i->nomer==a->nomer)&&(i->den==a->den)&&(i->mesac==a->mesac)&&(i->god==a->god))
                A=p;
            
            p=p->Next;
            i=i->Next;
            
        }
        ListItem *tmp=A->Next;
        if (tmp==NULL)
            throw "Нет элемента, коиорый требуется удалить!\n";
        
        A->Next=tmp->Next;
        delete tmp;
    }
}
catch (char*)
{cout<<"Нет элемента, который требуется удалить!\n";}
}
void PrintData(int d,int m,int g)//поиск элементов по дате
{
    int c=0;
    ListItem *q;
    q=First;
    if (q==NULL)
        cout<<"Список пуст!\n";
    else
        while (q!=0)
        {
            if((q->den==d)&&(q->mesac==m)&&(q->god==g))
            {
                cout<<q->FIO<<endl<<q->punkt<<endl<<q->nomer<<endl<<q->den<<"."<<q->mesac<<"."<<q->god<<"\n********\n";
                c++;
            }
            q=q->Next;
        }
        if(c==0)
        {
            cout<<"Такого элемента нет!\n";
        }
}
void PrintList()//распечатка всех элементов
{
 
    ListItem *p=First;
    int n=1;
    if(p==NULL)
        cout<<"Лист пуст\n";
    else
        while(p)
        {   
            cout<<n<<":"<<p->FIO<<endl<<p->punkt<<endl<<p->nomer<<endl<<p->den<<"."<<p->mesac<<"."<<p->god<<"\n********\n";
            n++;
            p=p->Next;
        }
}
};
int main()
{
    setlocale (LC_ALL,".1251");
    List:: ListItem a={"Англия",876,"ТТТ",17,10,2010};
    List::ListItem b={"Франция",123,"MMM",17,8,2009};
    List::  ListItem *r,*y;
    r=&a;
    y=&b;
    List t®;
    List list1;
    list1.PrintList();
    list1.addx®;
    list1.addx®;
    list1.PrintList();
    cout<<"Добавление элемента\n";
    list1.addx(y);
    list1.PrintList();
    cout<<"Удаление элемента\n";
    list1.deleteThis®;
    list1.PrintList();
    cout<<"Поиск элемента\n";
    list1.PrintData(17,8,1990);
    cout<<"**********************************\n";
    t.PrintList();
    list1.PrintList();
    cout<<"***********NEW**********\n";
    list1.addx();//добавляем в список данные сконсоли
    list1.addx();
    list1.PrintList();
    return 0;
}
Добавлено через 14 минут
помогите разобраться....мыслей нет.(

Добавлено через 29 минут
Цитата Сообщение от correcеt Посмотреть сообщение
Вечер добрый,с таким вопросом.
Задание:
шаблон класса "однонарпавленный линейный список". И использовать его при составлении программы, которая содержит текущую информацию о заявках на авиабилеты:
- пункт назначения,
- номер рейса,
- фамилию и инициалы пассажира,
- желаемую дату вылета.
Программа должна обеспечивать:
- хранение всех заявок в виде списка,
- добавление заявок,
- удаление заявок,
- вывод заявок по заданному номеру рейса и дате вылета,
- вывод всех заявок.
-----------------------------------------------
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
# include <iostream>
#include <string>
using namespace std;
class List
{
public:
    struct ListItem
    {
        
        string punkt;
        int nomer;
        string FIO;
        int den;
        int mesac;
        int god;
        ListItem *Next;
    };
 
    ListItem *First;
public:
    List(){
        First=NULL;
    }
    List(ListItem *a)
    {
        First=a;
    }
ListItem* addx (ListItem *a)//добавление элемента в список из проги
{
    ListItem * ref=new ListItem;
    ref->den=a->den;
    ref->god=a->god;
    ref->mesac=a->mesac;
    ref->nomer=a->nomer;
    ref->punkt=a->punkt;
    ref->FIO=a->FIO;
        return First;
}
ListItem*addx()//добавление элемента в список из консоли
{
ListItem*ref->first=new ListItem;
    //string str;
    getline(cin,str);
    cout<<"\nВведите Фамилию и инициалы заказчика:\n";
    getline(cin,str);
    ref->FIO=str;
    cout<<"\nВведите пункт назначения:\n";
    getline(cin,str);
    ref->punkt=str;
    cout<<"\nВведите номе рейса:\n";
    cin>>ref->nomer;
    cout<<"\nВведите дату:\n\tдень:";
    cin>>ref->den;
    cout<<"\n\tмесяц:";
    cin>>ref->mesac;
    cout<<"\n\tгод:";
    cin>>ref->god;
    End = ref;
    return First;
}
void List::InsertFirst(ListItem *w)//вставить в начало списка
{
    ListItem *a=new ListItem;
    a->punkt=w->punkt;
    a->nomer=w->nomer;
    a->FIO=w->FIO;
    a->mesac=w->mesac;
    a->den=w->den;
    a->god=w->god;
    a->Next=First;
    First=a;
}
void deleteThis (ListItem *a)//удаление определенного элемента
{
    try
    {
    ListItem *A=new ListItem;
    A=NULL;
    ListItem *p=new ListItem;
    ListItem *i=new ListItem;
    p=First;
    i=p->Next;
    if((p->FIO==a->FIO)&&(p->nomer==a->nomer)&&(p->den==a->den)&&(p->mesac==a->mesac)&&(p->god==a->god))
    {
        First=First->Next;
        delete  p;
    }
    else
    {
        while (i!=NULL)
        {
            if((i->FIO==a->FIO)&&(i->nomer==a->nomer)&&(i->den==a->den)&&(i->mesac==a->mesac)&&(i->god==a->god))
                A=p;
            
            p=p->Next;
            i=i->Next;
            
        }
        ListItem *tmp=A->Next;
        if (tmp==NULL)
            throw "Нет элемента, коиорый требуется удалить!\n";
        
        A->Next=tmp->Next;
        delete tmp;
    }
}
catch (char*)
{cout<<"Нет элемента, который требуется удалить!\n";}
}
void PrintData(int d,int m,int g)//поиск элементов по дате
{
    int c=0;
    ListItem *q;
    q=First;
    if (q==NULL)
        cout<<"Список пуст!\n";
    else
        while (q!=0)
        {
            if((q->den==d)&&(q->mesac==m)&&(q->god==g))
            {
                cout<<q->FIO<<endl<<q->punkt<<endl<<q->nomer<<endl<<q->den<<"."<<q->mesac<<"."<<q->god<<"\n********\n";
                c++;
            }
            q=q->Next;
        }
        if(c==0)
        {
            cout<<"Такого элемента нет!\n";
        }
}
void PrintList()//распечатка всех элементов
{
 
    ListItem *p=First;
    int n=1;
    if(p==NULL)
        cout<<"Лист пуст\n";
    else
        while(p)
        {   
            cout<<n<<":"<<p->FIO<<endl<<p->punkt<<endl<<p->nomer<<endl<<p->den<<"."<<p->mesac<<"."<<p->god<<"\n********\n";
            n++;
            p=p->Next;
        }
}
};
int main()
{
    setlocale (LC_ALL,".1251");
    List:: ListItem a={"Англия",876,"ТТТ",17,10,2010};
    List::ListItem b={"Франция",123,"MMM",17,8,2009};
    List::  ListItem *r,*y;
    r=&a;
    y=&b;
    List t®;
    List list1;
    list1.PrintList();
    list1.addx®;
    list1.addx®;
    list1.PrintList();
    cout<<"Добавление элемента\n";
    list1.addx(y);
    list1.PrintList();
    cout<<"Удаление элемента\n";
    list1.deleteThis®;
    list1.PrintList();
    cout<<"Поиск элемента\n";
    list1.PrintData(17,8,1990);
    cout<<"**********************************\n";
    t.PrintList();
    list1.PrintList();
    cout<<"***********NEW**********\n";
    list1.addx();//добавляем в список данные сконсоли
    list1.addx();
    list1.PrintList();
    return 0;
}
Заранее,Спасибо!
а может надо другую функцию добавления...или эту переделать..нет мыслей ,как исправить?
0
41 / 41 / 5
Регистрация: 29.04.2012
Сообщений: 185
04.01.2013, 23:20
Обалдеть, у тебя все функции получаются inline, потому что ты их сразу в поле private описываешь, ещё у меня ругается на странные символы ® и вот если inline то эта строчка void List::InsertFirst тоже выдает ошибку
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.01.2013, 23:20
Помогаю со студенческими работами здесь

Шаблон класса. Ошибка `undefined reference`
Доброго вечера. В следующем коде описывается незамысловатый шаблон. При разгрузке кода (т.е в 3 файла : main.cpp , chab.cpp , chab.h) ,...

Шаблон класса строк - ошибка компиляции
Добрый вечер. Пытаюсь выполнить упражнение с учебника. Gcc выдаёт следующее: /home/ilyuha21st/Projects/qtcreator/cpp_some1/main.cpp:148:...

Visual c++ шаблон template <typename TT>
пытаюсь разобраться с шаблонами, но выдает ошибку я даже не знаю куда смотреть https://github.com/Paladin3by/OOP template...

Шаблон класса. Ошибка `missing type specifier`
Вот код: template &lt;int value, typename type&gt; class Class { public: type Array; type Metod(type x); };

Шаблон родительского класса и шаблон класса потомка
Запутался, как правильно пронаследоваться от шаблона класса? #include &lt;iostream&gt; #include &lt;cmath&gt; using namespace std; ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru