Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

29.04.2013, 17:11. Просмотров 280. Ответов 2
Метки нет (Все метки)

Добрый день. Нужно создать функцию, которая будет сортировать массив указателей по зарплате работников.

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


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.
Можете подсказать что не так?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.04.2013, 17:11
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сортировка указателей (C++):

Массив указателей на массив строк и сортировка массива указателей - C++
Добрый день. Поступил вопрос. Есть задача. У нас встроенный массив char mass;.Мы вводим строки до тех пор, пока не будет заполнен массив...

Сортировка массива указателей - C++
Всем доброго вечера Столкнулся я с проблемой примерно вот такого: типа у меня есть класс class tourism { friend tourism...

Сортировка указателей в массиве - C++
Выполните сортировку данных по алфавиту (по фамилии) - причем сортировать потребуется только указатели в массиве. Выведите...

Сортировка массива указателей на char - C++
Есть массив указателей на char-ы. Нужно отсортировать их по алфавиту. Прошу помочь как можно скорее, если это возможно.

Сортировка динамического массива указателей - C++
Собственно я написал шаблон класса, а там нужно сделать сортировку выбором. Как это сделать с указателями я не знаю. Получилось вот...

Сортировка массива указателей на строки - C++
Приветствую. Есть задание: &quot;Напишите программу, которая вводит строки с клавиатуры с помощью cin&gt;&gt;...в объявленный Вами двухмерный...

2
Issues
430 / 365 / 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 ?
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())
Благодарю.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.04.2013, 17:39
Привет! Вот еще темы с ответами:

сортировка массива стуктур посредством указателей - C++
Доброго времени суток. Есть у меня 1 задачка: пытаюсь её решить: #include&lt;iostream&gt; #include&lt;fstream&gt; using namespace...

Простая сортировка выбором с использованием указателей - C++
Всем доброго времени суток! Прошу участников форума подсказать как доработать программу, чтобы ее работа была корректной. Нужно...

Сортировка элементов массивов указателей на char - C++
Ни как не получается отсортировать это. Помогите отладить прогу плиз int main() { _getch(); char *arrptrs = {&quot;g&quot;,&quot;e&quot;, ...

Сортировка массива указателей на абстрактный базовый класс - C++
Я создал абстрактный базовый класс (с названием Base) и два производных класса (с названиями Two и Three). После инициализации объектов...


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

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

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