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

Почти готовое решение.Как создать очередь? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Всего ничего, списочек) http://www.cyberforum.ru/cpp-beginners/thread160096.html
Товарищи, я надеюсь в вашу помощь в решение задачки( написать программу, которая читает числа, пока не введешь ноль. Запоминает их в список а потом распечатывает их квадраты. ) Если не получается решить это чудо, скажите плз хоть где про списки почитать, т.к. это делается через список.
C++ Степень через указатели Ребят, помогите пожалуйста! Трабл жуткий! У меня задача есть, а я с ней повис совсем( Нужно написать функцию, которой передают целое число x, и два указателя на целые числа. А она в первый указатель кладет x^2, а во второй x^3. http://www.cyberforum.ru/cpp-beginners/thread159941.html
Дерево каталогов C++
Помогите решить задачу с деревом каталогов.Условие на картинке.Зараннее благодарен.
Разрешение картинки C++
Есть RAW файл, как узнать разрешение картинки?
C++ вопрос по GUI http://www.cyberforum.ru/cpp-beginners/thread159317.html
Если я изучил с++, по книге(ещё не изучал) и вся книга про то как создавать консольные приложения, а я хочу научится писать windows приложения с графическим интерфейсом, подскажите книгу, сатью или что для этого нужно PS с++ builder не предлагать, только visual c++ express, я не Геиц PSS я только собираюсь начать обучение, можно помягче
C++ Как работать с системным реестром в Windows XP Скоко не слонялся по просторам нашего могучего интернета в поисках подробного описания функций RegCloseKey RegCreateKeyExA RegCreateKeyExW RegDeleteKeyA RegDeleteKeyW RegDeleteValueA RegDeleteValueW RegEnumKeyExA RegEnumKeyExW подробнее

Показать сообщение отдельно
USHЁL
 Аватар для USHЁL
0 / 0 / 0
Регистрация: 15.11.2009
Сообщений: 93
19.08.2010, 16:29     Почти готовое решение.Как создать очередь?
Добрый день.Подскажите,можно ли исправить готовый год?Что не так,объясните пожалуйста,если не затруднит.Задание делал в Dev-C++.
Пытаюсь сохранить объекты в указателе(1 цикл while),а затем добавить их в очередь и удалить из неё.
Work_Queue
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
#include <cstdlib>
#include <iostream>
#include "queue_worker.h"
#include "worker.h"
const int SIZE = 5;
 
int main(int argc, char *argv[])
{
    using std::cin;
    using std::cout;
    using std::endl;
    using std::strchr;
 
    //cout<<"Vvedite razmer ocheredi: ";
    int qsize;
    //cin>>qsize;
    Worker * ws[SIZE]; // !!!
    QueueTp<ws>lolas(5); // !!! // QueueTp<ws> lolas(qsize);
    int ct;
    for (ct = 0; ct < SIZE; ct++)
    {
        char choice;
        cout << "Vvedite kategoriu rabotnika:\n"
            << "w: ofizciant  s: pevezc  "
            << "t: poushiy ofizciant  q: zavershenie\n";
            cin >> choice;
            while (strchr("wstq", choice) == NULL)
           {
                 cout << "Pojaluista vvedite  w, s, t, or q: ";
                 cin >> choice;
           }
            if (choice == 'q')
              break;
            switch(choice)
           {
                 case 'w':   ws[ct] = new Waiter; 
                                 break;
                 case 's':   ws[ct] = new Singer;
                                 break;
                 case 't':   ws[ct] = new SingingWaiter;
                                 break;
           }
           cin.get();
          ws[ct]->Set();
     }
 
    cout << "\nHere is your staff:\n";
    int i;
    for (i = 0; i < ct; i++)
    {
          cout << endl;
          ws[i]->Show();
    }
   // Mojno li vot tak[/COLOR]                    
    cout<<"Realizuu ochered' iz vnesennih objectov...\n";   // realizovat' ili net?
    int ct = 0;                                                                  
     while(!lolas.isfull())  // !!!                                                   
     {                                                                              
            lolas.enqueue(ws[ct++]);                                         
           //lolas.enqueue(ws[ct++]);                                     
     }                                   
      cout<<"Ochered' zapolnena. Nachalo obslujivania!\n"; 
     while(!lolas.isempty())  // !!!                                              
       {                                                                              
              lolas.dequeue(ws[ct--]);                           
              cout<<"Obslujivaetsya "<<ws[ct--]<<"...\n";        
       }                                                                 
               
     cout<<"Udalaem massiv ukazateley na Worker...\n";
     for (i = 0; i < ct; i++)
        delete ws[i];
    cout << "Vsego horoshego.\n";
    system("PAUSE");
    return EXIT_SUCCESS;
}

queue_worker.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
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
#ifndef QUEUE_W_H_
#define QUEUE_W_H_
#include <string>
#include <iostream>
 
template <typename T>
class QueueTp
{
    private:
        
        struct Node 
        {
            T item;            //dannie,hranimie v Uzle
            struct Node * next;//ukazatel na sleduushy uzel
        };
        enum{Q_SIZE = 10};
        Node * front;      //ukazatel na nachalo ocheredi
        Node * rear;       //ukazatel na konezc ocheredi
        int items;         //tekushee kol-vo elementov v ocheredi
        const int qsize;
    
        QueueTp(const QueueTp & p) :qsize(0) {}
        QueueTp & operator=(const Queue & q) { return *this; }
    public:
           explicit QueueTp(int qs = Q_SIZE);
           ~QueueTp();
           bool isempty() const;
           bool isfull() const;
           //int queuecount() const;
           bool enqueue(const T & item);
           bool dequeue(T & item);
};
 
template <typename T>
QueueTp<T>::QueueTp(int qs) :qsize(qs)
{
    front = rear = NULL;
    items = 0;
}
 
template <typename T>
QueueTp<T>::~QueueTp()
{
    Node * temp;
    while(front != NULL)
    {
        temp = front;
        front = front->next;
        delete temp;
    }
}
 
template <typename T>
bool QueueTp<T>::isempty() const
{
    return items == 0;
}
 
template <typename T>
bool QueueTp<T>::isfull() const
{
    return items == qsize;
}
 
/*template <typename T>
int QueueTp<T>::queuecount() const
{
    return items;
}*/
template <typename T>
bool QueueTp<T>::enqueue(const T & item)
{
    if (isfull())
        return false;
    Node * add = new Node;
    if (add == NULL)
        return false;
    add->item = item;      
    add->next = NULL;
    items++;
    if (front == NULL) 
        front = add;        
    else
        rear->next = add;   
    rear = add;             
    return true;
}
 
 
template <typename T>
bool QueueTp<T>::dequeue(T & item)
{
    if (front == NULL)
        return false;
    item = front->item;     
    items--;
    Node * temp = front;    
    front = front->next;    
    delete temp;            
    if (items == 0)
        rear = NULL;
    return true;
}
#endif

worker.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
#include "worker.h"
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
 
Worker::~Worker() { }
 
// protected methods
void Worker::Data() const
{
    cout << "Imya: " << fullname << endl;
    cout << "Identificator ID: " << id << endl;
}
 
void Worker::Get()
{
    getline(cin, fullname);
    cout << "Vvedite ID rabotnika: ";
    cin >> id;
    while (cin.get() != '\n')
        continue;
}
 
// Waiter methods
void Waiter::Set()
{
    cout << "Vvedite imya i familiu ofizcianta: ";
    Worker::Get();
    Get();
}
 
void Waiter::Show() const
{
    cout << "Ktegoria: ofizciant\n";
    Worker::Data();
    Data();
}
 
// protected methods
void Waiter::Data() const
{
    cout << "Indeks shegol'stva: " << panache << endl;
}
 
void Waiter::Get()
{
    cout << "Vvedite indeks shegol'stva ofizcianta: ";
    cin >> panache;
    while (cin.get() != '\n')
        continue;
}
 
// Singer methods
 
char * Singer::pv[Singer::Vtypes] = {"other", "alto", "contralto",
            "soprano", "bass", "baritone", "tenor"};
 
void Singer::Set()
{
    cout << "Vvedite imya i familiu pevzca: ";
    Worker::Get();
    Get();
}
 
void Singer::Show() const
{
    cout << "Kategoria: pevezc\n";
    Worker::Data();
    Data();
}
 
// protected methods
void Singer::Data() const
{
    cout << "Vokalny diapozon: " << pv[voice] << endl;
}
 
void Singer::Get()
{
    cout << "Vvedite chislo,sootvetstvuushee vokalnomu diapazonu pevzca:\n";
    int i;
    for (i = 0; i < Vtypes; i++)
    {
        cout << i << ": " << pv[i] << "   ";
        if ( i % 4 == 3)
            cout << endl;
    }
    if (i % 4 != 0)
        cout << '\n';
    cin >>  voice;
    while (cin.get() != '\n')
        continue;
}
 
// SingingWaiter methods
void SingingWaiter::Data() const
{
    Singer::Data();
    Waiter::Data();
}
 
void SingingWaiter::Get()
{
    Waiter::Get();
    Singer::Get();
}
 
void SingingWaiter::Set()
{
    cout << "Vvedite imya i familiu poushego ofizcianta: ";
    Worker::Get();
    Get();
}
 
void SingingWaiter::Show() const
{
    cout << "Kategoria: poushiy ofizciant\n";
    Worker::Data();
    Data();
}

worker.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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#ifndef WORKER_H_
#define WORKER_H_
#include <string>
 
class Worker   // an abstract base class
{
private:
    std::string fullname;
    long id;
protected:
    virtual void Data() const;
    virtual void Get();
public:
    Worker() : fullname("no one"), id(0) {}
    Worker(const std::string & s, long n)
            : fullname(s), id(n) {}
    virtual ~Worker() = 0; // pure virtual function
    virtual void Set() = 0;
    virtual void Show() const = 0;
};
 
class Waiter : virtual public Worker
{
private:
    int panache;
protected:
    void Data() const;
    void Get();
public:
    Waiter() : Worker(), panache(0) {}
    Waiter(const std::string & s, long n, int p = 0)
            : Worker(s, n), panache(p) {}
    Waiter(const Worker & wk, int p = 0)
            : Worker(wk), panache(p) {}
    void Set();
    void Show() const;
};
 
class Singer : virtual public Worker
{
protected:
enum {other, alto, contralto, soprano,
                    bass, baritone, tenor};
    enum {Vtypes = 7};
    void Data() const;
    void Get();
private:
    static char *pv[Vtypes];    // string equivs of voice types
    int voice;
public:
    Singer() : Worker(), voice(other) {}
    Singer(const std::string & s, long n, int v = other)
            : Worker(s, n), voice(v) {}
    Singer(const Worker & wk, int v = other)
            : Worker(wk), voice(v) {}
    void Set();
    void Show() const;
};
 
// multiple inheritance
class SingingWaiter : public Singer, public Waiter
{
protected:
    void Data() const;
    void Get();
public:
    SingingWaiter()  {}
    SingingWaiter(const std::string & s, long n, int p = 0,
                            int v = other)
            : Worker(s,n), Waiter(s, n, p), Singer(s, n, v) {}
    SingingWaiter(const Worker & wk, int p = 0, int v = other)
            : Worker(wk), Waiter(wk,p), Singer(wk,v) {}
    SingingWaiter(const Waiter & wt, int v = other)
            : Worker(wt),Waiter(wt), Singer(wt,v) {}
    SingingWaiter(const Singer & wt, int p = 0)
            : Worker(wt),Waiter(wt,p), Singer(wt) {}
    void Set();
    void Show() const; 
};
#endif

 Комментарий модератора 
Обрамляйте код соответствующими тегами, а проблемные участки в нём сопровождайте комментариями.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 13:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru