Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
0 / 0 / 2
Регистрация: 03.01.2013
Сообщений: 113
1

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

29.04.2013, 17:11. Просмотров 387. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.04.2013, 17:11
Ответы с готовыми решениями:

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

Сортировка указателей
Здравствуйте! Делаю упражнение из книги Лафоре по указателям, там надо сделать сортировку дней...

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

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

2
433 / 368 / 149
Регистрация: 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
0 / 0 / 2
Регистрация: 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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.04.2013, 17:39

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Сортировка массива указателей на структуру
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;string&gt; using namespace std; struct Person...

Сортировка массива указателей на строки
Приветствую. Есть задание: &quot;Напишите программу, которая вводит строки с клавиатуры с помощью...

Сортировка массива указателей на строки
Здравствуйте. Есть две функции, которые используются для сортировки - одна, реализуя метод...

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

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

Быстрая» сортировка (разделением) с использованием указателей
У меня не принимают работу, так как говорят, что не по заданию. В чем ошибка? #include &quot;stdafx.h&quot;...


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

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

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