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

Курсовая ( нужно задать клас контейнер очередь с сортировкою ) - C++

Восстановить пароль Регистрация
 
Виkтория
 Аватар для Виkтория
1 / 1 / 0
Регистрация: 04.06.2013
Сообщений: 63
26.12.2013, 12:39     Курсовая ( нужно задать клас контейнер очередь с сортировкою ) #1
есть такой основной код , но он не мой !! а так как сегодня нужно сдать , я пользуюсь им , но не могу написать файл.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
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
#include "queue.h"
 
queue::queue(void)
{
    head=NULL;//головы нет
    tail=NULL;//хвоста нет
    length=0;//длинна - 0
}
 
queue::~queue(void)
{
    while(length>0)//пока есть элементы
        Pop();//удалем их
}
 
void queue::Push(virib* cr)
{
    node* newnode=new node();//создали объект
    newnode->cr=cr;
    if (length>0)//если очередь не пуста 
    {
        tail->next=newnode;//последний указывает на новый
        tail=newnode;//новый становится последним
    }
    else//если очередь пуста
        head=tail=newnode;//новый - начало и конец очереди.
    length++;
}
 
void queue::Pop()
{
    if (length>0)//если очередь не пуста
    {
        node* todelete=head;//запоминаем, что удалить
        head=head->next;//перемещаем head на следующий элемент
        delete todelete;//удаляем элемент
        length--;
    }
}
 
void queue::Printall()
{
    node* currentprinting=head;//тот что печатается сейчас
    for (int i = 0; i < length; i++)
    {
        currentprinting->cr->print();//выводится этот элемент
        currentprinting=currentprinting->next;//переходит на следующий
    }
}
 
void queue::Tofile()
{
    ofstream file;
    file.open("Detailbase.dat");//открылся файл
    file<<length<<'\n';//в первую строку сохраняется количество элементов для более удобного считывания
    node* currentobject=head;//тот, что сохраняется сейчас
    for (int i = 0; i < length; i++)//для всех элементов списка
    {
        file<<(*currentobject->cr);//записался поточный элемент
        currentobject=currentobject->next;//выбрали следующий
    }
}
 
void queue::Fromfile()
{
    ifstream file;
    string input;
    int length;
    file.open("Detailbase.dat");//открыли файл
    getline(file,input,'\n');//считали первую строку(количество записей)
    length=atoi(input.c_str());
    for (int i = 0; i < length; i++)//считываем все записи:
    {
        string material,name,colour;
        int kost,massa;
        getline(file,type,'\\');//считать до разделителя (тип продукта)
        if (type!="detal" && type!="usel")
            return;
        getline(file,material,'\\');//считать до разделителя(название)
        getline(file,name,'\\');
        duty=atoi(input.c_str());//номер смены
        getline(file,input,'\\');
        kost=atof(input.c_str());//цена
        if (type=="detal")//если тип - деталь
        {
            
            getline(file,input,'\n');//считать массу
            mass=atof(input.c_str());
            detal *x=new detal(material, name, kost, massa,colour);//создать делать
            this->Push(x);//добавить её в базу
        }
        if (type=="usel")//если узел
        {
            int kilkist;
            getline(file,input,'\n');
            kilkist=atoi(input.c_str());//считать количество связей
            kilkist *x=new usel(material, name, kost, kilkist);//создать узел
            this->Push(x);//добавить его в базу
        }
    }//for все записи
}
 
void queue::Sort()
{
    int n=2;
    int prevlength=length;//сохраняем изначальную длинну списка
    while(n<=length)
        n=2*n;//создаём массив длинной 2^k, 2^k>=длинны массива
    queue* quearr=new queue[n];//создаём 2^k новых списков(вспомагательных)
    for (int i = 0; i < prevlength; i++)//сохраняем length элементов в первый length вспом.списков
    {
        quearr[i].Push(head->cr);
        Pop();//и удаляем их из основного списка
    }
    while(n>1)//n=2^k:n>1:n=n/2;
    {
        for (int i = 0; i < n/2; i++)
        {
            quearr[i]=Sort_conc(&quearr[2*i],&quearr[2*i+1]);
            //последовательности i присвоить результат слияния последовательностей 2*i и 2*i+1
        }
        n=n/2;
    }
    //в результате получится одно отсортированная последовательность
    for (int i = 0; i < prevlength; i++)
    {
        Push(quearr[0].head->cr);//перенести все элементы из первой вспомогательной последовательности...
        quearr[0].Pop();//...в основную, при этом очищая вспомогательную
    }
    delete [] quearr;//освободить память
}
 
queue& queue::Sort_conc(queue *q1, queue *q2)//операция слияния
{
    queue *newque=new queue();//создаём список, который будет результирующим
    while(q1->head || q2->head)//если есть хоть один элемент в одном из списков
    {
        if (!q2->head)//если второй список пуст
        {
            newque->Push(q1->head->cr);//добавлять в результат минимальный из первого списка
            q1->Pop();//и убирать его из первого
        }
        else if (!q1->head)//и наоборот
        {
            newque->Push(q2->head->cr);
            q2->Pop();
        }
        else
        {//если оба списка не пусты
            if (q1->head->cr->getprice()<q2->head->cr->getprice())
            {
                newque->Push(q1->head->cr);//то добавляется минимальный среди двух списков
                q1->Pop();
            }
            else
            {
                newque->Push(q2->head->cr);
                q2->Pop();
            }
        }
    }
    return *newque;//возвращается результирующая очередь
}
 
void queue::Filter()
{
    cout<<"Vvedite stoimost v $'\n";
    double price;
    cin>>price;//ввод цены для фильтрации
    cout<<"Detali deshevle $"<<price<<" :\n";
    node* currentprinting=head;//тот, что проверяется сейчас
 
    for (int i = 0; i < length; i++)
    {
        if (typeid(*currentprinting->cr)==typeid(detail) && currentprinting->cr->getprice()<price)//если тип объекта - деталь и цена меньше
        {
            currentprinting->cr->print();//вывести объект
        }
        currentprinting=currentprinting->next;//проверять дальше
    }
}
void queue::Find()
{
    cout<<"Vvedite articul'\n";
    string article;
    getline(cin, article,'\n');//ввод наименования для поиска
    cout<<"Searching...\n";
    node* currentprinting=head;//тот, который проверяем
    for (int i = 0; i < length; i++)//для всех элементов
    {
        if (currentprinting->cr->getarticle()==article)//если имя совпало с искомым
        {
            currentprinting->cr->print();//вывести элемент
        }
        currentprinting=currentprinting->next;//проверяем дальше
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.12.2013, 12:39     Курсовая ( нужно задать клас контейнер очередь с сортировкою )
Посмотрите здесь:

С помощью cin.getline считать все строки файла в контейнер (вектор или очередь) C++
Задача на очередь (вывод сообщения, что очередь пуста) C++
C++ Задача по STL (Создать объект-контейнер, очередь с приоритетом, заполнить ее данными, тип char)
C++ Очередь (сделать очередь, чтобы добавляло, удаляло, читало. Не STL.)
C++ клас Letter, клас Person
C++ Курсовая-нужно Создать файл, содержащий сведения о телефонах абонентов
C++ Создать на базе класса с реализацией очереди клас потомок — кольцевая очередь
Курсовая, нужно заменить символы на графику C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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