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

Сортировка указателей - C++

Восстановить пароль Регистрация
 
IvanInanovich
0 / 0 / 0
Регистрация: 03.01.2013
Сообщений: 113
29.04.2013, 17:11     Сортировка указателей #1
Добрый день. Нужно создать функцию, которая будет сортировать массив указателей по зарплате работников.

Написал следующий код:


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
#include <iostream>
#include <string>                 
using namespace std;
////////////////////////////////////////////////////////////////
class person                      
   {
   protected:
      string name;
      float salary;                
   public:
      void setdata()              
         { 
           cout << "Enter name: "; cin >> name;
           cout << "Enter salary: "; cin >> salary;
         }
      void printdata()           
         { 
            cout <<  "\nName: " << name << endl
                 << "Salary: " << salary << endl; 
            
         }
      string getname()
        { return name; }
        
        float gatsalary()
        { return salary; }
   };
////////////////////////////////////////////////////////////////
int main()
{
void salsort(person**,const int);
 
       person* array[15];
       char i = 'd';
       int n = 0;
       do
       {
           array[n]= new person;
           array[n]->setdata();
           n++;
           cout << "\nAgain? "; cin >> i;
       }
       while (i == 'd');
 
        cout << "\n\nNO SORTED ARRAY \n ______________________________: ";
        for(int i = 0; i < n; i++)
        array[i]->printdata();
 
 
 
       salsort(array,n);
 
       cout << "\n\nSORTED ARRAY \n ______________________________: ";
       for(int i = 0; i < n; i++)
        array[i]->printdata();
 
 
 
   return 0;
   } 
 
void salsort(person** arr, const int n)
{
    int i,j;
 
    for(i=0; i < n-1; i++)
        for(j=0; j < n; j++)
            if((*(arr+i))->gatsalary() > (*(arr+j))->gatsalary());
                {
                    person* temp = *(arr+i);
                    *(arr+i) = *(arr+j);
                    *(arr+j) = temp;
                }
 
}
2 проблемы:
1. Программа закрывается аварийно. Ночью была похожа ситуация с другой программой, которая категорически отказывалась работать в течении часа. Затем тот же самый код на удивление стал работать нормально. Возможно снова глюк.
Причем вылазит ошибка во время последней итерации вывода данных.
2. Не сортируется массив указателей. Видно накосячил в функции salsort.
Можете подсказать что не так?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.04.2013, 17:11     Сортировка указателей
Посмотрите здесь:

Массив из указателей на масив из указателей на массив из int) C++
C++ Сортировка массива указателей на абстрактный базовый класс
Сортировка указателей в массиве C++
C++ Сортировка массива указателей на char
C++ Как обойтись без указателей и указателей на указатель?
C++ сортировка массива стуктур посредством указателей
Простая сортировка выбором с использованием указателей C++
Сортировка элементов массивов указателей на char C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Issues
429 / 364 / 37
Регистрация: 06.08.2012
Сообщений: 961
29.04.2013, 17:23     Сортировка указателей #2
Цитата Сообщение от IvanInanovich Посмотреть сообщение
if((*(arr+i))->gatsalary() > (*(arr+j))->gatsalary());
зачемь здесь ; ?
Цитата Сообщение от IvanInanovich Посмотреть сообщение
for(i=0; i < n-1; i++)
почему здесь n-1 ?
IvanInanovich
0 / 0 / 0
Регистрация: 03.01.2013
Сообщений: 113
29.04.2013, 17:39  [ТС]     Сортировка указателей #3
SeregaC++, точку с запятой не увидел. По привычке после метода видно влепил.
а n-1 сделал, т.к. нету смысла проверять последний элемент (зарплату).
Переделал немного циклы и убрал точку с запятой - заработало.
C++
1
2
3
for(i=0; i < n-1; i++)
        for(j=i+1; j < n; j++)
            if((*(arr+i))->gatsalary() > (*(arr+j))->gatsalary())
Благодарю.
Yandex
Объявления
29.04.2013, 17:39     Сортировка указателей
Ответ Создать тему
Опции темы

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