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

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

Войти
Регистрация
Восстановить пароль
 
nedsi
2 / 2 / 0
Регистрация: 18.09.2013
Сообщений: 65
#1

Не работает функция сортировки - C++

07.11.2013, 19:40. Просмотров 205. Ответов 3
Метки нет (Все метки)

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
void Sort(char path[])
{
    Rect *MyRect = new Rect [100]; //дин массив
    Rect temp;                  //буффер
    int k = 0,x1,y1,x2,y2;      //вершины прямоугольника
    char buff[5];               //буфер для чтения вершин с файла
    fstream file(path);         //открытие для чтения
    if (!file) exit(1);         //если не открылся файл  - > безопасный выход
    else 
        while (true)
        {
            if (file.eof()) break; //проверка на открытие
            file>>buff;             //сичтал первый элемент
            x1 = atoi(buff);        //перевел в int
            file>>buff;
            y1 = atoi(buff);
            file>>buff;
            x2 = atoi(buff);
            file>>buff;
            y2 = atoi(buff);
            MyRect[k] = Rect(x1,y1,x2,y2); // вызов конструктора для k-го элемента массива
            k++;
        }
        for ( int i =0; i<k; i++) 
        {
            for (int j = 0; j<k-1; j++)
            {
                if (MyRect[j].GetArea()<MyRect[j+1].GetArea()) //сортирую элементы по упаданию площади
                {
                    temp = MyRect[j];
                    MyRect[j] = MyRect[j+1];
                    MyRect[j+1] = temp;
 
                }
            }
        }
    int i = 1;
    delete [] MyRect; // освобождение памяти
    file.close(); // закрытие файла
    fstream f(path,ios::trunc); // ios::trunk насколько я понял, удаляет существовавший файл и создает новый
    while (true)
    {
        if (k == 0) break;
        f<<MyRect[i].ItsUpperLeftGetX(); // запись в файл
        f<<" "<<MyRect[i].ItsUpperLeftGetY();
        f<<" "<<MyRect[i].ItsLowerRightGetX();
        f<<" "<<MyRect[i].ItsLowerRightGetY()<<"\n";
        k--;
        i++;
    }
    f.close();
}
Реакции 0! Вызываю так:
C++
1
Sort("E:\\data.txt");
В чем проблема? Благодарю.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.11.2013, 19:40     Не работает функция сортировки
Посмотрите здесь:

Функция сортировки - C++
День добрый, пишу сортировку чисел, столкнулся с проблемой, комментирую в коде: #include &lt;iostream&gt; using namespace std; ...

Функция сортировки - C++
А ваше есть ли функция для сортировки массива, если да то как ей пользоваться ?

Функция сортировки - C++
Здравствуйте,коллеги! Подскажите какую-нибудь функцию сортировки с наименьшим количеством операций сравнения. В общем необходимо сравнить...

Функция сортировки массива - C++
Задание - необходимо осуществить сортировку, используя функцию. Я написал код, но он не работает. Прошу помочь его исправить. ...

Функция сортировки массива - C++
Дан массив целых чисел. Напишите функцию, которая получает данный массив в качестве аргумента и сортирует его по возрастанию, а также...

Функция сортировки массива - C++
Необходимо написать функцию сортировки массива структур с информацией по книгам по возрастанию года издания и возвращающую отсортированный...

Функция сортировки матрицы - C++
Функция сортировки матрицы по убыванию элементов 1 строки

Функция сортировки и поиска - C++
Ужасная функция...неделю бился так ничего и не смог придумать...Само условие поставленное в задаче звучит так: &quot;Написать алгоритм,...

Функция сортировки двумерного массива - C++
необходимо написать функцию сортирующую двумерный массив. за основу взял сортировку при помощи указателей типа: for (int g=0; g&lt;n*m;...

Функция сортировки массива в структуре - C++
Помогите пожалуйста в написании функции осуществляющей перестановку строк двухмерного массива: первую и последнюю вторую и предпоследнюю,...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
mat_for_c
132 / 127 / 28
Регистрация: 26.04.2013
Сообщений: 636
Завершенные тесты: 2
07.11.2013, 20:38     Не работает функция сортировки #2
Цитата Сообщение от nedsi Посмотреть сообщение
for ( int i =0; i<k; i++)
{
for (int j = 0; j<k-1; j++)
{
if (MyRect[j].GetArea()<MyRect[j+1].GetArea()) //сортирую элементы по упаданию площади
{
temp = MyRect[j];
MyRect[j] = MyRect[j+1];
MyRect[j+1] = temp;
}
}
}
может
C++
1
2
for (i = 0; i < k-1; ++i)
   for (j=i+1; j < k; ++j)
nedsi
2 / 2 / 0
Регистрация: 18.09.2013
Сообщений: 65
07.11.2013, 20:48  [ТС]     Не работает функция сортировки #3
Цитата Сообщение от mat_for_c Посмотреть сообщение
может
C++
1
2
for (i = 0; i < k-1; ++i)
   for (j=i+1; j < k; ++j)
Видимо ошибка в записи в файл...
mat_for_c
132 / 127 / 28
Регистрация: 26.04.2013
Сообщений: 636
Завершенные тесты: 2
07.11.2013, 21:21     Не работает функция сортировки #4
C++
1
if (MyRect[j].GetArea()<MyRect[j+1].GetArea()) //сортирую элементы по упаданию площади
а надо

C++
1
if (MyRect[i].GetArea()<MyRect[j].GetArea()) //сортирую элементы по упаданию площади
Цитата Сообщение от nedsi Посмотреть сообщение
while (true)
* * {
* * * * if (k == 0) break;
а нельзя ли проще?
C++
1
2
for (i=0; i<k; ++i) {
   ...
Yandex
Объявления
07.11.2013, 21:21     Не работает функция сортировки
Ответ Создать тему
Опции темы

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