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

Ошибка в сортировке через библиотеку "алгоритм" - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Двоичный 12-разрядный регистр http://www.cyberforum.ru/cpp-beginners/thread1198109.html
Что это вообще такое? Мне нужно реализовать класс, конструктор которого позволяет реализацию регистра произвольным значением или нулем. Так как это в принципе может выглядеть? Это случайно не массив из 12 элементов?
C++ Дан двумерный массив чисел. Найти количество всех нечётных элементов массива и умножить их на значение второг Помогите, пожалуйста, решить задачу. Дан двумерный массив чисел. Найти количество всех нечётных элементов массива и умножить их на значение второго элемента в первом столбце. Вот начало #include<iostream> #include<stdlib.h> #include<time.h> using namespace std; void read(int mass , const int nstr, const int nstb) { srand(time(NULL)); for(int i=0; i<nstr; i++) http://www.cyberforum.ru/cpp-beginners/thread1198106.html
C++ Какое название у этого порождающего шаблона?
class GameObject { public: virtual void update() =0; virtual void render() =0; virtual ~GameObject() {}; }; class StateManager {
C++ Найти приближенное значение функции exp(x) разложением в ряд (Pascal -> C++)
Помогите пожалуйста. Имеется код на паскале, нужно перевести на С++. Условие задачи таково: Описать функцию Exp1(x,eps) вещественного типа (параметры x, eps — вещественные, eps > 0), находящую приближенное значение функции exp(x): exp(x) = 1 + x + x2 / 2! + x3 / 3! + ... + xn / n! + ... . В сумме учитывать все слагаемые, большие eps. С помощью Exp1 найти приближенное значение экспоненты для...
C++ Как реализовать структуру http://www.cyberforum.ru/cpp-beginners/thread1198089.html
Доброго времени суток. Никак не могу скомпиллировать эту структуру. struct tree{ char inf; list<tree*> lt;}; Выдает вот эти ошибки Ошибка 1 error C2143: синтаксическая ошибка: отсутствие ";" перед "<" \\densmoke-nb\документы\visual studio 2013\projects\yacc — копия (2)\yacc\ytab.h 6 1 yacc Ошибка 2 error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не...
C++ Добавить к каждому элементу массива корень из модуля произведения минимального элемента и последнего числа Помогите с задачей пожалуйста. Добавить к каждому элементы корень квадратный из абсолютного значения произведения минимального элемента массива и последнего числа подробнее

Показать сообщение отдельно
Borg00500
0 / 0 / 0
Регистрация: 02.05.2014
Сообщений: 4
03.06.2014, 20:19     Ошибка в сортировке через библиотеку "алгоритм"
Мне помогли написать программу, когда я начал разбираться, увидел, что две подпрограммы не работают и они связаны с библиотекой algorithm, при этом компилятор ошибок не выдаёт. Прошу помочь выявить и исправить ошибку.
Код:
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
#include "stdafx.h"
#include <iostream>                                                     // Консольный ввод/вывод
#include <fstream>                                                      // Файловый ввод/вывод
#include <cstdlib>                                                      // Для паузы и смены кодировки
#include <string>                                                       // std::string - строки
#include <algorithm>                                                    // Сортировка
 
using namespace std;                                                    // Используем глобальное пространство имён
 
enum Complexity{EASY, NORMAL, HARD};                                    // Перечисление сложностей (0-EASY,1-NORMAL,2-HARD)
enum Location{EUROPE, ASIA, NORTHERN_AMERICA, SOUTH_AMERICA};           // Перечисление (0 - EUROPE и т.д.) для местоположения горы
const int DECK_SIZE = 10;                                               // Максимальный размер хранилища под горы(т.е. больше 10 и файл не считается)
 
struct Mountain                                                         // Объявляем структуру Mountain
{
    string name;                                                        // Название горы
    Location location;                                                  // Её местоположение(EUROPE, ASIA,...)
    string vertex_name;                                                 // Название вершины
    unsigned long height;                                               // Высота
    Complexity complexity;                                              // Сложность подъёма(EASY, NORMAL, HARD)
    int time;                                                           // Время подъема в часах
    double cost;                                                        // Цена в $
} deck[DECK_SIZE];                                                      // Создаём массив гор размером DECK_SIZE
 
void menu();                                                            // Функция реализующая меню
int readMountains();                                                    // Функция считывающая в массив из файла информацию о горах
void displayMountains(int);                                             // Вывод всех гор
void displayOneMountain(const Mountain);                                // Функция выводящая одну гору(которую ей передадут в аргументе)
void sortByCost(int);                                                   // Сортировка гор по цене
bool comparByCost(const Mountain&, const Mountain&);                    // Функция сравнения (т.е. сортируем по критерию: цена)
void sortByComplexity(int);                                             // Сортировка гор по сложности подъема
bool comparByComplexity(const Mountain&, const Mountain&);              // Функция сравнения(сравниваем по сложности)
Mountain getComplexAndExpensive(int count);                             // Функция возвращающая самый сложный и дорогой подъем
void totalCruise(int count);                                            // Расчет круиза по всем горам(во сколько обойдётся и сколько времени будет потрачено)
void addMountain(int& count);                                               // Функция добавления горы в файл(чтобы данные обновились требуется перезагрузить программу)
 
int main()
{
    setlocale(LC_ALL, "russian");                                       // Ставим русскую кодировку
    
    menu();                                                             // Вызываем меню
    
    system("pause");                                                    // Ставим паузу
    return 0;                                                               
}
 
void menu()                                                             // Функция реализующая меню
{
    int count = readMountains();                                        // Считываем в массив гор информацию с файлов и получаем количество считанных гор
    const char EXIT_CODE = '7';                                         // Код для выхода(6)
    char ans;                                                           // Символ для ввода в меню
    bool b;                                                             // Флаг продолжения
    do
    {
        cout << "Введите: " << endl;
        cout << "1 - Показать список проводимых экскурсий в горы" << endl;
        cout << "2 - Отсортировать список по стоимости экскурсии" << endl;
        cout << "3 - Отсортировать список по сложности подъёма" << endl;
        cout << "4 - Подобрать самый дорогой и сложный подъём" << endl;
        cout << "5 - Круиз по всем горам" << endl;
        cout << "6 - Добавить информацию о горе" << endl;
        cout << EXIT_CODE << " - Выход" << endl;
        cin >> ans;                                                     // Вводим нужный пункт
        switch (ans)                                                    // Проверяем что ввели (что в ans)
        {
        case '1':                                                       // Если ввели 1 то:
            displayMountains(count);                                    // Выводим информацию о горах
            break;                                                      // Прерываем switch
        case '2':                                                       // Если 2:
            sortByCost(count);                                          // Сортируем массив гор по цене
            break;                                          
        case '3':                                                       // Если 3:
            sortByComplexity(count);                                    // Сортируем массив по сложности
            break;
        case '4':                                                       // Если 4:
            displayOneMountain(getComplexAndExpensive(count));          // Выводим самую дорогую гору и сложную по подъёму(передаем в аргумент самую сложную и дорогую)
            break;
        case '5':
            totalCruise(count);                                         // Расчёт круиза по всем горам
            break;
        case '6':
            addMountain(count);
            break;
        case EXIT_CODE:                                                 // Если ввели EXIT_CODE то нечего не делаем
            break;
        default:                                                        // Если введено что-то левое то
            cout << "Неизвестная команда" << endl;                      // 
        }
        b = (ans == EXIT_CODE) ? false : true;                          // В флаг b записываем ложь если ввели EXIT_CODE(т.е. хотим выйти) иначе true
    } while (b);                                                        // Продолжаем цикл пока b==true
}
 
 
int readMountains()                                                     // Функция считывающая информацию с файла
{
    ifstream in("file.txt");                                            // Связываем поток in с файлом file.txt
    
    if (!in.is_open())                                                  // Если файл не открылся
    {
        cout << "Файл открыть не удалось..." << endl;
        system("pause");                                                // Ставим паузу
        exit(1);                                                        // Завершаем программу
    }
 
    int j = 0;                                                          
    while (!in.eof() && j < DECK_SIZE)                                  // Будем считывать пока не дойдем до конца файла и j должна быть меньше DECK_SIZE, т.е. j на выходе будет меньше DECK_SIZE, больше DECK_SIZE записывать нельзя
    {
        int loc, comp;                                                  // Переменные для местоположения и сложности подъема
        in >> deck[j].name >> loc >> deck[j].vertex_name >> deck[j].height  // Считываем в порядке: название горы, местоположение, вершина, высота, сложность подъема, время подъема, цена
           >> comp >> deck[j].time >> deck[j].cost;
        deck[j].complexity = Complexity(comp);                          // Приводим к типу Complexity переменную comp, т.к. считать сразу в тип Complexity мы не можем(операция не перегружена)
        deck[j].location   = Location(loc);                             // Аналогично
        ++j;                                                            // Увеличиваем счетчик
    }
    cout << "Информация о горах считана!" << endl;
    system("pause");                                                    // Если мы здесь то ставим паузу(т.е. мы уже считали всю информацию)
    system("cls");                                                      // Стираем экран
    return j;                                                           // Возвращаем количество гор считанных
}
 
 
void displayMountains(int count)                                        // Функция выводящая информацию о всех считанных горах
{
    cout << endl;                                                       // Переходим на новую строку 
    for (int i = 0; i < count; ++i)                                     // от i до count  
        displayOneMountain(deck[i]);                                    // Выводим очередную гору
}
 
void displayOneMountain(const Mountain m)                               // Функция выводящая конкретную гору m
{
    cout << "Название горы: " << m.name << endl;                        // Выводим название
    cout << "Местонахождение: ";
    if (m.location == ASIA)                                             // смотри что лежит в m.location если ASIA(1)
        cout << "Азия";                                                 // То выводим "Азия"
    else if (m.location == EUROPE)                                      // аналогично со всеми случаями
        cout << "Европа";
    else if (m.location == SOUTH_AMERICA)
        cout << "Южная Америка";
    else
        cout << "Северная Америка";
 
    cout << endl;
    cout << "Вершина: " << m.vertex_name << endl;                       // Выводим название вершины
    cout << "Высота: " << m.height << endl;                             // Высоту 
    cout << "Сложность подъема: ";
    if (m.complexity == EASY)                                           // Смотрим что лежит в m.complexity если EASY(т.е. 0)
        cout << "Низкая";                                               // то выводим низкая
    else if (m.complexity == NORMAL)                                    // и т.д.
        cout << "Средняя";
    else
        cout << "Большая";
    cout << endl;
    cout << "Время подъема: " << m.time << " часов" << endl;            // Выводим время подъема в часах
    cout << "Стоимость экскурсии: $" << m.cost << endl << endl;         // Цена экскурсии
 
}
 
///////////////////////////////////////////////////////////
void sortByCost(int count)                                              // Сортировка гор по цене
{
    sort(deck, deck + count, comparByCost);                             // Вызываем функцию sort из <algorithm> передаем ей в аргумент адрес начала массива &deck[0] = deck и адрес указывающий за конец массива и функцию которая знает как сортировать наш массив comparByCost
}
 
bool comparByCost(const Mountain& lhs, const Mountain& rhs)             // Функция сортирующая по критерию: цена
{
    return lhs.cost < rhs.cost;                                         // Сортируем по возрастанию цены
}
//////////////////////////////////////////////////////////
void sortByComplexity(int count)                                        // Функция сортирующая по сложности
{
    sort(deck, deck + count, comparByComplexity);                       // Передаем в sort(начало массива, адрес за концом массива, функцию сортировки массива);
}
 
bool comparByComplexity(const Mountain& lhs, const Mountain& rhs)       // Сортируем структуры по полю complexity (сложность подъема)
{
    return lhs.complexity < rhs.complexity;                             
}
//////////////////////////////////////////////////////////
 
Mountain getComplexAndExpensive(int count)                              // Функция возвращающая гору с максимальной сложностью и и ценой
{
    Mountain compexp = deck[0];                                         // Предполагаем что искомая гора самая первая
    for (int i = 1; i < count; ++i)                                     // Начиная со второй и до конца
    {
        if ((compexp.complexity <= deck[i].complexity) && (compexp.cost <= deck[i].cost)) // Если цена и сложность очередной горы больше горы с максимальной ценой и сложностью то
            compexp = deck[i];                                          // Запоминаем такую гору(она искомая)
    }
    return compexp;                                                     // Возвращаем
}
 
void totalCruise(int count)                                             // Функция расчитывающая цену и затраченное время по всем горам
{
    int total_time    = 0;                                              // Общее время
    double total_cost = 0;                                              // Общая цена
 
    for (int i = 0; i < count; ++i)                                     // просматриваем все горы
    {
        total_time += deck[i].time;                                     // Складываем все часы
        total_cost += deck[i].cost;                                     // и все цены
    }
 
    cout << "Экскурсия по всем горам ободётся вам в $" << total_cost << " и займёт " << total_time << " часов" << endl; // выводим результат
}
 
void addMountain(int& count)                                // Функция добавления горы
{
    if (count >= DECK_SIZE)                                 // Если count >= DECK_SIZE(т.е. если переполнение массива) то
    {
        cout << "Массив переполнен" << endl;
        system("pause");                                    // Ставим паузу
        return;                                             // Завершаем работу функции
    }
    cout << "Информацию следует вводить английскими буквами!!!" << endl;
    cout << "Введите название горы(1 слово): ";
    cin >> deck[count].name;                                // Ввод горы
 
    int select;                                             // Переменная выбора
    do
    {
        cout << "Введите её расположение" << endl
             << "0 - Европа\n"
             << "1 - Азия\n"
             << "2 - Северная Америка\n"
             << "3 - Южная Америка\n";
        cin >> select;                                      // Вводим
        deck[count].location = Location(select);            // Присваиваем 
    } while (select != 0 && select != 1 &&                  // Если введено не 0 не 1 не 2 не 3 то цикл начнется заного
             select != 2 && select != 3);
 
    cout << "Введите название вершины(1 слово): ";
    cin >> deck[count].vertex_name;                         // Ввод вершины
 
    cout << "Введите высоту в метрах: ";
    cin >> deck[count].height;                              // Ввод высоты
 
    do
    { 
        cout << "Введите сложность подъёма в гору" << endl
             << "0 - Легко\n"
             << "1 - Средне\n"
             << "2 - Сложно\n";
        cin >> select;
        deck[count].complexity = Complexity(select);
    } while (select != 0 && select != 1 && select != 2);    // Если ввели отличное от 0,1,2 , цикл повторяется
    
    do
    {
        cout << "Введите время подъёма в часах(одно число): ";
        cin >> deck[count].time;
    } while (deck[count].time <= 0);                        // Если время ввели отрицательное или 0 то цикл заного
 
    
    do
    {
        cout << "Введите стоимость экскурсии в $: ";
        cin >> deck[count].cost;
    } while (deck[count].cost <= 0);                        // Если цена отрицательна или 0 то ввод заного
    
    
    ofstream out("file.txt", ios::app);                     // Создаём файловый поток для добавления в конец файла file.txt
 
    out << endl << deck[count].name << " " << deck[count].location << " "   // Записываем поля горы в файл
        << deck[count].vertex_name << " " << deck[count].height << " "
        << deck[count].complexity << " " << deck[count].time << " "
        << deck[count].cost;
 
    ++count;                                                // Увеличиваем количество гор
}
Добавлено через 22 минуты
Разобрался до конца, и увидел, что программы сортировки не должны были после запроса команды выводить отсортированный список, нужно было после запроса сортировки, ещё раз вызвать список на экран. Проблема решена.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 17:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru