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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Виkтория
1 / 1 / 0
Регистрация: 04.06.2013
Сообщений: 63
#1

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

26.12.2013, 12:39. Просмотров 224. Ответов 0
Метки нет (Все метки)

есть такой основной код , но он не мой !! а так как сегодня нужно сдать , я пользуюсь им , но не могу написать файл.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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Курсовая ( нужно задать клас контейнер очередь с сортировкою ) (C++):

Создать на базе класса с реализацией очереди клас потомок — кольцевая очередь - C++
Доброго времени суток. Я хотел создать на базе класса с реализацией очереди клас потомок - кольцевая очередь. Исходник: #include...

Создать контейнер по типу очередь, состоящий из символов (библиотека STL) - C++
Ребят, помогите пожалуйста решить задачу : Создать контейнер по типу очередь, состоящий из символов. Данные в очередь ввести с клавиатуры....

Задача по STL (Создать объект-контейнер, очередь с приоритетом, заполнить ее данными, тип char) - C++
Помогите,пожалуйста, заранее спасибо)) Вот задание: 1. Создать объект-контейнер, очередь с приоритетом, заполнить ее данными, тип...

С помощью cin.getline считать все строки файла в контейнер (вектор или очередь) - C++
Можете пожалуйсто написать код, где можно с помощью cin.getline считать все строки файла в контейнер (вектор или очередь), потом из...

клас Letter, клас Person - C++
Створити клас Letter, що мiстить наступнi елементи: - поле «вiдправник» Person*Sender; - поле «одержувач» Person*Receiver; - поле...

Как правильно задать http запрос, если нужно задать reqest header? - Java Сети
В программе нужно перезагрузить роутер, исспользуя httpanalazer получилось определить какой запрос я должен отослать - он на фото ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.12.2013, 12:39
Привет! Вот еще темы с ответами:

нужно подобрать контейнер аналогичный set в stl - C++ Qt
Мне нужен qt контейнер, как в stl set. QSet построен на хеш-таблице, поэтому не подходит. просто нужно заносить элементы в контейнер, без...

нужно создать очередь на яве - Java
здравствуйте, помогите пожалуйста создать очередь на Java. смысл задачи в том что нужно определить сколько памяти занимает массив при входе...

Как нужно организовать очередь на сервере? - C++ Qt
Если я правильно понимаю то для того чтобы обрабатывать запросы по очереди на TCP сервере в Qt нужно организовать очередь на сервере...

Какое железо в первую очередь нужно фотошопу? - Компьютерное железо
Здравствуйте! Проц - Intel Core 2 Duo 6400 2.13Ghz 2.14ГГц. 2 гб озу. 512мб видео карта. Но при масштабировании больших...


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru