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

Не понятно с сортировкой! - C++

Восстановить пароль Регистрация
 
Asdf
1 / 1 / 0
Регистрация: 18.03.2012
Сообщений: 110
14.05.2012, 22:05     Не понятно с сортировкой! #1
Добрый вечер! Возникла неясность с пузырьковой сортировкой. В чём загвоздка? В задании надо присвоить в структуру оператор <, чтобы прямоугольник с меньшей площадью ,считался меньшим. И также отсортировать при помощи пузырьковой сортировки. Прототип функции void PSortRectangle( Rectangle *mas, int masLength ); Массив у меня динамический, может в нём проблема? Или в присвоении оператора я накосячил? Укажите на ошибку
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
#include <iostream>
#include <fstream>
#include <conio.h>
#include <ctime>
 
using namespace std;
 
const int n = 10;
 
struct rectangle
{    
    double width, height, area;
    bool operator < (const rectangle &sg)
    {
        return (this->width * this->height < sg.width * sg.height);
    }
};
void PSortRectangle(rectangle *arr_rectangle, int size) // пузырьковая сортировка
{   
  int i, j;
  rectangle temp;
 
  for(i=0; i < size-1; ++i)
  {
    for(j=0; j < size -1; ++j)
    {
      if(arr_rectangle[j+1] < arr_rectangle[j])
      {
        /* exchange elements*/
        temp = arr_rectangle[j+1];
        arr_rectangle[j+1] = arr_rectangle[j];
        arr_rectangle[j] = temp;
      }
    }
  }
}
int main()
{
    setlocale(0, "Russian");
    int i;
    srand((unsigned)time(NULL));
    rectangle *arr_rectangle = new rectangle[10];
    for (i=0; i<n; i++)
    {
        arr_rectangle[i].width=rand()%10+1;
        arr_rectangle[i].height=rand()%10+1;
        cout << arr_rectangle[i].height << "\t" << arr_rectangle[i].width << "\t";
        arr_rectangle[i].area=arr_rectangle[i].width*arr_rectangle[i].height;
        cout << arr_rectangle[i].area << "" << endl;
    }
cout << "Сортировка пузырьком \n";
    PSortRectangle(&arr_rectangle[0], n);
    cout << "Press Any Key to Exit..";
    getch();
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.05.2012, 22:05     Не понятно с сортировкой!
Посмотрите здесь:

не понятно... C++
Не понятно C++
C++ не понятно
Не понятно работает C++
как i двигается понятно но вот не понятно как это делает j ? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
14.05.2012, 22:14     Не понятно с сортировкой! #2
Ну, здесь просто нет вывода результата.
После PSortRectangle(&arr_rectangle[0], n); добавить надо:
C++
1
2
3
4
5
    for (i=0; i<n; i++)
    {
        cout << arr_rectangle[i].height << "\t" << arr_rectangle[i].width << "\t";
        cout << arr_rectangle[i].area << endl;
    }
Asdf
1 / 1 / 0
Регистрация: 18.03.2012
Сообщений: 110
14.05.2012, 22:22  [ТС]     Не понятно с сортировкой! #3
Оу, блин спс Совсем про вывод забыл... А вставка оператора и сама сортировка с этим всё окей?
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
14.05.2012, 22:27     Не понятно с сортировкой! #4
Ну я бы оператор константным ещё объявил. И поле area в данном случае излишнее. Всё-равно площадь вычисляется при каждом сравнении.

Добавлено через 2 минуты
Ну и ещё переменные лучше локализовать, так что "rectangle temp;" можно внести прям внутрь if.
Asdf
1 / 1 / 0
Регистрация: 18.03.2012
Сообщений: 110
14.05.2012, 22:39  [ТС]     Не понятно с сортировкой! #5
Без area в структуре, площадь в массиве не вычисляется

Добавлено через 3 минуты
Спс, за помощь. Буду дальше сидеть разбираться
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
14.05.2012, 22:40     Не понятно с сортировкой! #6
Чего же ей не вычисляться?
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
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <conio.h>
#include <ctime>
 
using namespace std;
 
const int n = 10;
 
struct rectangle
{    
    double width, height;
    bool operator < (const rectangle &sg) const
    {
        return (this->width * this->height < sg.width * sg.height);
    }
};
 
void PSortRectangle(rectangle *arr_rectangle, int size) // пузырьковая сортировка
{   
    for(int i=0; i < size-1; ++i)
    {
        for(int j=0; j < size -1; ++j)
        {
            if(arr_rectangle[j+1] < arr_rectangle[j])
            {
                /* exchange elements*/
                rectangle temp = arr_rectangle[j+1];
                arr_rectangle[j+1] = arr_rectangle[j];
                arr_rectangle[j] = temp;
            }
        }
    }
}
 
int main()
{
    setlocale(LC_ALL, "");
    srand((unsigned)time(NULL));
    rectangle *arr_rectangle = new rectangle[10];
    for (int i=0; i<n; i++)
    {
        arr_rectangle[i].width=rand()%10+1;
        arr_rectangle[i].height=rand()%10+1;
        cout << arr_rectangle[i].height << "\t" << arr_rectangle[i].width << "\t";
        cout << arr_rectangle[i].width*arr_rectangle[i].height << endl;
    }
    cout << "Сортировка пузырьком \n";
    PSortRectangle(&arr_rectangle[0], n);
 
    for (int i=0; i<n; i++)
    {
        cout << arr_rectangle[i].height << "\t" << arr_rectangle[i].width << "\t";
        cout << arr_rectangle[i].width*arr_rectangle[i].height << endl;
    }
 
    cout << "Press Any Key to Exit..";
    getch();
    
    return 0;
}
Asdf
1 / 1 / 0
Регистрация: 18.03.2012
Сообщений: 110
14.05.2012, 22:54  [ТС]     Не понятно с сортировкой! #7
Нууу да, но просто потом немного меньше писать, если area оставлять.
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
14.05.2012, 23:00     Не понятно с сортировкой! #8
Тогда так
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
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <conio.h>
#include <ctime>
 
using namespace std;
 
const int n = 10;
 
struct rectangle
{    
    double width, height;
    bool operator < (const rectangle &sg) const
    {
        return (this->width * this->height < sg.width * sg.height);
    }
};
 
void PSortRectangle(rectangle *arr_rectangle, int size) // пузырьковая сортировка
{   
    for(int i=0; i < size-1; ++i)
    {
        for(int j=0; j < size -1; ++j)
        {
            if(arr_rectangle[j+1] < arr_rectangle[j])
            {
                /* exchange elements*/
                rectangle temp = arr_rectangle[j+1];
                arr_rectangle[j+1] = arr_rectangle[j];
                arr_rectangle[j] = temp;
            }
        }
    }
}
 
void print_rectangles(rectangle const* arr, size_t size)
{
    for (size_t i = 0; i < size; ++i)
    {
        cout << arr[i].height << "\t" << arr[i].width << "\t";
        cout << arr[i].width*arr[i].height << endl;
    }
}
 
int main()
{
    setlocale(LC_ALL, "");
    srand((unsigned)time(NULL));
    rectangle *arr_rectangle = new rectangle[10];
    for (int i=0; i<n; i++)
    {
        arr_rectangle[i].width=rand()%10+1;
        arr_rectangle[i].height=rand()%10+1;
    }
    
    print_rectangles(arr_rectangle, n);
 
    cout << "Сортировка пузырьком \n";
    PSortRectangle(&arr_rectangle[0], n);
 
    print_rectangles(arr_rectangle, n);
 
    cout << "Press Any Key to Exit..";
    getch();
    
    return 0;
}
Asdf
1 / 1 / 0
Регистрация: 18.03.2012
Сообщений: 110
14.05.2012, 23:04  [ТС]     Не понятно с сортировкой! #9
Вопрос, какую полезную вещь несёт в себе библиотека cstdlib?

Добавлено через 33 секунды
Ведь не критично же без неё делать? ))

Добавлено через 2 минуты
Хмм... 2-ой вариант очень даж меня заинтересовал, буду изучать Не надо каждый раз писать большой вывод!
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
14.05.2012, 23:05     Не понятно с сортировкой! #10
В cstdlib объявлены srand() и rand(). У меня без него не компилируется. В твоём компиляторе он, видимо, в каком-то другом заголовке подключается.
И заголовочный файл не библиотека
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.05.2012, 23:19     Не понятно с сортировкой!
Еще ссылки по теме:

C++ Не понятно шо за ошибка?
C++ Не понятно с const_cast
Не понятно тз C++

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

Или воспользуйтесь поиском по форуму:
Asdf
1 / 1 / 0
Регистрация: 18.03.2012
Сообщений: 110
14.05.2012, 23:19  [ТС]     Не понятно с сортировкой! #11
У меня через заголовочный файл ctime подключены srand() и rand().

Добавлено через 2 минуты
Ой точно, заголовочный файл ))) Библиотека этж не один файл!

Добавлено через 52 секунды
Ещё раз спс за помощь
Yandex
Объявления
14.05.2012, 23:19     Не понятно с сортировкой!
Ответ Создать тему
Опции темы

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