0 / 0 / 0
Регистрация: 09.01.2016
Сообщений: 19
1

Сортировка массива структур по заданному полю

09.01.2016, 16:42. Показов 2809. Ответов 36
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Нужна помощь в сортировке.

Вот само задание:
Составить таблицу, содержащую следующие сведения о сотрудниках кафедры:
  • ФИО
  • должность
  • оклад
  • домашний телефон
  • рабочий телефон
  • среднее время, проводимое в компьютерном классе (час)
  • надбавка к зарплате для тех, кто проводит более 3часов в компьютерном классе каждый день (12%от оклада)
  • общая сумма заработка

Вывести:
  • список сотрудников (10), отсортированный по алфавиту
  • список сотрудников,отсортированный по общей сумме заработка

Собственно, вот что я смог сделать:
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
#include<iostream>
#include<string>
#include<math.h>
using namespace std;
struct depatment{ string fio; string post; int homephone; int workphone; int pay; int meantime; }dep[10];
int main()
    string text1, text2;
}
int i, n, k, s, j;
for (i = 0; i < 10; i++)
    cout << "Enter fio of fellow:" << i + 1 << endl;
getline(cin, dep[i].fio, '$');
cout << "Enter post of fellow:" << i + 1 << endl;
getline(cin, dep[i].post, '$');
cout << "Enter homephone of fellow:" << i + 1 << endl;
cin >> dep[i].homephone;
cout << "Enter workphone of fellow:" << i + 1 << endl;
cin >> dep[i].workphone;
cout << "Enter meantime of fellow:" << i + 1 << endl;
cin >> dep[i].meantime;
cout << "Enter pay of fellow:" << i + 1 << endl;
cin >> dep[i].pay;
if (dep[i].meantime > 3);
dep[i].pay * 0.12;
string alph = "ABCDEFGHIKLMNOPQRSTUVWXYZ";
for (i = 0; i < 25; i++);
for (j = 0; j <19; j++);
{text1 = text1.append(dep[i].fio, 0, 1);
 
text2 = alph[i];
n = text1.compare(text2)
if (n == 0){
    cout << "dep[i].fio" << endl;
}
text2.erase();
Text1.erase();
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.01.2016, 16:42
Ответы с готовыми решениями:

Сортировка массива структур по заданному полю
Задание под вариантом такое : Упорядочить список студентов по предмету физика, и вывести весь...

Сортировка массива (вектора) структур по заданному полю
Нужно отсортировать массив по полю структуры. Все поля типа string. struct DatabaseData{...

Сортировка "пузырьком" массива структур по заданному полю
Нужно отсортировать структуру по фамилии доктора, но что то он не сортирует. void...

Std::min_element по заданному полю массива структур
Есть структура Point{double x,y}. Есть вектор vector&lt;Point&gt;. Как правильно определить функцию...

36
505 / 317 / 236
Регистрация: 18.02.2013
Сообщений: 754
10.01.2016, 21:23 21
Author24 — интернет-сервис помощи студентам
Кан Дмитрий, именно
0
0 / 0 / 0
Регистрация: 09.01.2016
Сообщений: 19
10.01.2016, 22:18  [ТС] 22
и ещё, можно ли написать так??
C++
1
2
3
4
5
cin >> dep[i].pay;
        if (dep[i].meantime > 3)
            dep[i].pay +=dep[i].salary*0.12;
    
    }
Тем самым я хочу чтобы если время проводимое в комп.классе превышало больше 3 часов то к зарплате прибавляется дополнительно ещё 12% от оклада, если же меньше 3 часов то зарплата оставалась такой же как и была.

Добавлено через 18 минут
Изменил
C++
1
2
3
4
5
struct depatment{
    string fio; string post; int homephone; int workphone; int meantime; int
    salary; double pay;
}dep[10];
int main(){
Результат остался прежним.
0
505 / 317 / 236
Регистрация: 18.02.2013
Сообщений: 754
10.01.2016, 22:40 23
Цитата Сообщение от Кан Дмитрий Посмотреть сообщение
dep[i].salary
это еще одно поле?
0
0 / 0 / 0
Регистрация: 09.01.2016
Сообщений: 19
10.01.2016, 22:46  [ТС] 24
это оклад, по заданию берется 12% от оклада и прибавляются к зарплате
0
505 / 317 / 236
Регистрация: 18.02.2013
Сообщений: 754
10.01.2016, 23:04 25
Кан Дмитрий, но он не описан в структуре
0
0 / 0 / 0
Регистрация: 09.01.2016
Сообщений: 19
11.01.2016, 11:03  [ТС] 26
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
#include "stdafx.h"
#include<iostream>
#include<string>
using namespace std;
struct depatment{
    string fio; string post; int homephone; int workphone; int meantime; int
    salary; double pay;
}dep[10];
int main(){
    int i, n = 2, j, z; string text1, text2;
    for (i = 0; i < n; i++){
        cout << "Enter fio of fellow:" << i + 1 << endl;
        getline(cin, dep[i].fio, '$');
        cout << "Enter post of fellow:" << i + 1 << endl;
        getline(cin, dep[i].post, '$');
        cout << "Enter homephone of fellow:" << i + 1 << endl;
        cin >> dep[i].homephone;
        cout << "Enter workphone of fellow:" << i + 1 << endl;
        cin >> dep[i].workphone;
        cout << "Enter meantime of fellow:" << i + 1 << endl;
        cin >> dep[i].meantime;
        cout << "Enter salary of fellow:" << i + 1 << endl;
        cin >> dep[i].salary;
        cout << "Enter pay of fellow:" << i + 1 << endl;
        cin >> dep[i].pay;
        if (dep[i].meantime > 3)
            dep[i].pay +=dep[i].salary *0.12;
    
    }
 
 
    for (i = 0; i < n; i++)
    for (j = 0; j < n - 1; j++)
    {
        if (dep[j].fio>dep[j + 1].fio)
        {
            depatment buf = dep[j];
            dep[j] = dep[j + 1];
            dep[j + 1] = buf;
        }
 
 
    }
    for (int i = 0; i < n; i++)
        cout << dep[i].fio << endl;
    text2.erase();
    text1.erase();
 
    for (int i = 0; i < n; i++)
    for (int k = 0; k < n - 1; k++)
    if (dep[k].pay < dep[k + 1].pay)
    {
        z = dep[k].pay;
        dep[k].pay = dep[k + 1].pay;
        dep[k + 1].pay = z;
    }
    cout << dep[i].fio << dep[i].pay << endl;
    return 0;
}
Добавлено через 8 часов 10 минут
Я описал его в структуре,только у меня вопрос, его тоже вводить как double??

Добавлено через 3 часа 46 минут
olya7, и еще либо я не неправильно что-то делаю либо сортировка по алфавиту немного не корректна:
Enter fio of fellow:1
Jin Tut$
Enter post of fellow:1
prepod$
Enter homephone of fellow:1
5555
Enter workphone of fellow:1
6666
Enter meantime of fellow:1
4
Enter pay of fellow:1
14000
Enter fio of fellow:2
Zeta Nur$
Enter post of fellow:2
prepod$
Enter homephone of fellow:2
222
Enter workphone of fellow:2
1111
Enter meantime of fellow:2
2
Enter pay of fellow:2
20000

Zeta Nur
Jin Tut

Zeta Nur20000
0
505 / 317 / 236
Регистрация: 18.02.2013
Сообщений: 754
11.01.2016, 17:44 27
Кан Дмитрий,
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
//#include "stdafx.h"
#include<iostream>
#include<cstring>
using namespace std;
struct depatment{
    string fio; string post; int homephone; int workphone; int meantime; int
    salary; double pay;
}dep[10];
int main(){
    int i, n = 2, j, z; string text1, text2;
    for (i = 0; i < n; i++){
        cout << "Enter fio of fellow:" << i + 1 << endl;
        getline(cin, dep[i].fio, '$');
        /*cout << "Enter post of fellow:" << i + 1 << endl;
        getline(cin, dep[i].post, '$');
        cout << "Enter homephone of fellow:" << i + 1 << endl;
        cin >> dep[i].homephone;
        cout << "Enter workphone of fellow:" << i + 1 << endl;
        cin >> dep[i].workphone;
        cout << "Enter meantime of fellow:" << i + 1 << endl;
        cin >> dep[i].meantime;
        cout << "Enter salary of fellow:" << i + 1 << endl;
        cin >> dep[i].salary;
        cout << "Enter pay of fellow:" << i + 1 << endl;
        cin >> dep[i].pay;
        if (dep[i].meantime > 3)
            dep[i].pay +=dep[i].salary *0.12;*/
    
    }
 
 
    for (i = 0; i < n; i++)
    for (j = 0; j < n - 1; j++)
    {
        if (!strcmp((dep[j].fio).c_str(),(dep[j + 1].fio).c_str()))
        {
            depatment buf = dep[j];
            dep[j] = dep[j + 1];
            dep[j + 1] = buf;
        }
 
 
    }
    for (int i = 0; i < n; i++)
        cout << dep[i].fio << endl;
    
    return 0;
}
vot

 Комментарий модератора 
olya7, ссылка на песочницу может дополнять ответ, но не заменять его.
Код должен быть размещён в сообщении.
0
0 / 0 / 0
Регистрация: 09.01.2016
Сообщений: 19
11.01.2016, 18:31  [ТС] 28
Спасибо, я так понял он сравнивает полностью сроку? а можно сделать так чтобы он сравнивал только первую заглавную букву строки, т.е. первую букву фамилии и сортировал их по алфавиту?
0
505 / 317 / 236
Регистрация: 18.02.2013
Сообщений: 754
11.01.2016, 19:19 29
можно, только это не будет алфавитной сортировкой
0
0 / 0 / 0
Регистрация: 09.01.2016
Сообщений: 19
11.01.2016, 19:29  [ТС] 30
Просто эта сортировка не сортирует так как надо, вот опять Enter fio of fellow:1
Kan$
Enter fio of fellow:2
Kim$
Enter fio of fellow:3
Abakarov$
Enter fio of fellow:4
Hun$
Enter fio of fellow:5
Zak$
Kan

Kim

Abakarov

Hun

Zak
0
0 / 0 / 0
Регистрация: 09.01.2016
Сообщений: 19
12.01.2016, 11:17  [ТС] 31
Вот в чем проблема, нужно сделать две сортировки:
1) сортировка сотрудников по алфавиту;
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
#include "stdafx.h"
#include<iostream>
#include<string>
using namespace std;
struct depatment{ string fio; string post; int homephone; int workphone; double pay; int meantime; }dep[4];
int main(){
    int i, n,t=4, j, z; string text1, text2;
    for (i = 0; i < t; i++){
        cout << "Enter fio of fellow:" << i + 1 << endl;
        getline(cin, dep[i].fio, '$');
 
        cout << "Enter post of fellow:" << i + 1 << endl;
        getline(cin, dep[i].post, '$');
        cout << "Enter homephone of fellow:" << i + 1 << endl;
        cin >> dep[i].homephone;
        cout << "Enter workphone of fellow:" << i + 1 << endl;
        cin >> dep[i].workphone;
        cout << "Enter meantime of fellow:" << i + 1 << endl;
        cin >> dep[i].meantime;
        cout << "Enter pay of fellow:" << i + 1 << endl;
        cin >> dep[i].pay;
    }
 
    for (i = 0; i < t; i++){
        if (dep[i].meantime > 3)
            dep[i].pay = dep[i].pay +dep[i].pay* 0.12;
    }
    string alph = "ABCDEFGHIKLMNOPQRSTUVWXYZ";
    for (i = 0; i < 25; i++)
    for (j = 0; j < t; j++)
    {
        text1 = text1.append(dep[j].fio, 0, 1);
        text2 = alph[i];
        n = text1.compare(text2);
        if (n == 0){
            cout << dep[j].fio << endl;
        }
        text2.erase();
        text1.erase();
    }
 
    for (int i = 0; i < t - 1; i++)
    for (int k = 0; k < t - 1 - i; k++){
 
        if (dep[k].pay < dep[k + 1].pay)
 
            swap(dep[k], dep[k + 1]);
 
        cout << dep[i].fio << dep[i].pay << endl;
        return 0;
    }
}
 Комментарий модератора 

П. 4.3. Создавайте темы с осмысленными и понятными названиями - это серьезно повышает шансы, что на Ваш вопрос ответят.
П. 5.5. Запрещено размещать тему в нескольких подразделах одного раздела одновременно (кросспостинг), а также дублировать тему в одном разделе.
0
38 / 1 / 0
Регистрация: 09.08.2012
Сообщений: 44
12.01.2016, 11:50 32
А сколько должно выводится?
Ты return 0; в теле цикла поставил - она и завершается на первом проходе
0
0 / 0 / 0
Регистрация: 09.01.2016
Сообщений: 19
12.01.2016, 11:59  [ТС] 33
в данном коде я ввел 4 фамилии, а так должно 10 фамилий выводиться.
0
474 / 426 / 290
Регистрация: 10.03.2015
Сообщений: 1,782
12.01.2016, 12:14 34
Лучший ответ Сообщение было отмечено Кан Дмитрий как решение

Решение

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
#include<iostream>
#include<string>
 
using namespace std;
 
struct depatment 
{ 
    string fio; 
    string post; 
    int homephone; 
    int workphone; 
    double pay; 
    int meantime; 
}dep[4];
 
int main() 
{
    for (int i = 0; i < 4; i++) 
    {
        cout << "Enter fio of fellow " << i + 1 << ": ";
        getline(cin, dep[i].fio);
        //cout << "Enter post of fellow " << i + 1 << ": ";
        //getline(cin, dep[i].post);
        //cout << "Enter homephone of fellow " << i + 1 << ": ";
        //cin >> dep[i].homephone;
        //cout << "Enter workphone of fellow " << i + 1 << ": ";
        //cin >> dep[i].workphone;
        //cout << "Enter meantime of fellow " << i + 1 << ": ";
        //cin >> dep[i].meantime;
        cout << "Enter pay of fellow " << i + 1 << ": ";
        cin >> dep[i].pay;
        cin.get();
    }
    cout << "\n\nSort alph:" << endl;
    for (int i = 0; i < 3; i++)
        for (int j = i + 1; j < 4; j++)
        if (dep[i].fio > dep[j].fio)
            swap(dep[i], dep[j]);
 
    for (int i = 0; i < 4; i++)
        cout << dep[i].fio << endl;
 
    cout << "\n\nSort pay:" << endl;
    for (int i = 0; i < 3; i++)
        for (int j = i + 1; j < 4; j++)
            if (dep[i].pay < dep[j].pay)
                swap(dep[i], dep[j]);
 
    for (int i = 0; i < 4; i++)
        cout << dep[i].fio << " " << dep[i].pay << endl;
    system("pause");
    return 0;
}
Сортировка массива структур по заданному полю
0
0 / 0 / 0
Регистрация: 09.01.2016
Сообщений: 19
12.01.2016, 12:24  [ТС] 35
Спасибо,а куда можно вставить
C++
1
2
 if (dep[i].meantime > 3)
            dep[i].pay = dep[i].pay +dep[i].pay* 0.12;
?? если среднее время больше 3 часов то идет прибавка 12%.
0
474 / 426 / 290
Регистрация: 10.03.2015
Сообщений: 1,782
12.01.2016, 12:39 36
Кан Дмитрий, да хоть после ввода. Это уже твои причуды)
1
0 / 0 / 0
Регистрация: 09.01.2016
Сообщений: 19
12.01.2016, 12:56  [ТС] 37
Уже разобрался). Большое спасибо за помощь!
0
12.01.2016, 12:56
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.01.2016, 12:56
Помогаю со студенческими работами здесь

Реализовать сортировку массива структур по заданному полю
Помогите правильно отсортировать структуры по среднему балу и записать их в файл структура:...

Сортировка массива структур по полю
Дана структура: struct elecHelp1 { char fio, name, sname, nameElection, constituensy; double...

Сортировка массива структур по одному полю
Приветствую. Задача: отсортировать по возрастанию структуру по одному полю. Вчера поднимал тему:...

Сортировка массива структур по полю lastname
имеется структура struct { char lastname, firstname; unsigned int math, inf, phys; }rat,...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru