Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 09.01.2016
Сообщений: 19

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

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

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

Вот само задание:
Составить таблицу, содержащую следующие сведения о сотрудниках кафедры:
  • ФИО
  • должность
  • оклад
  • домашний телефон
  • рабочий телефон
  • среднее время, проводимое в компьютерном классе (час)
  • надбавка к зарплате для тех, кто проводит более 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
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.01.2016, 16:42
Ответы с готовыми решениями:

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

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

Сортировка "пузырьком" массива структур по заданному полю
Нужно отсортировать структуру по фамилии доктора, но что то он не сортирует. void sortDoc(Doctor doctor) { int size; ...

36
Dimension
595 / 463 / 223
Регистрация: 08.04.2014
Сообщений: 1,710
10.01.2016, 17:28
поменять
C++
1
2
3
z = dep[k].pay;
        dep[k].pay = dep[k + 1].pay;
        dep[k + 1].pay = z;
на
C++
1
swap(dep[k],dep[k+1]);
Добавлено через 1 минуту
C++
1
for (int i = 0; i < n; i++)
на
C++
1
for (int i = 0; i < n-1; i++)
C++
1
for (int k = 0; k < n - 1; k++)
на
Assembler
1
for (int k = 0; k < n - 1-i; k++)
0
505 / 317 / 236
Регистрация: 18.02.2013
Сообщений: 754
10.01.2016, 17:32
фамильная сортировка
C++
1
2
3
4
5
6
7
8
9
10
11
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;
        }
 
 
    }
0
0 / 0 / 0
Регистрация: 09.01.2016
Сообщений: 19
10.01.2016, 18:26  [ТС]
После ввода всех данных выводится 0.
0
505 / 317 / 236
Регистрация: 18.02.2013
Сообщений: 754
10.01.2016, 18:35
Кан Дмитрий,
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 "stdafx.h"
#include<iostream>
#include<string>
using namespace std;
struct depatment{ string fio; string post; int homephone; int workphone; int pay; int meantime; }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 pay of fellow:" << i + 1 << endl;
    cin >> dep[i].pay;
    if (dep[i].meantime > 3)
        dep[i].pay *= 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[j].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; 
}
вот
0
0 / 0 / 0
Регистрация: 09.01.2016
Сообщений: 19
10.01.2016, 18:57  [ТС]
Я ввел данные там же и в конце он выводит только инициалы первого сотрудника и всё.
0
505 / 317 / 236
Регистрация: 18.02.2013
Сообщений: 754
10.01.2016, 19:04
Кан Дмитрий, это сортированный массив по фамилии
0
0 / 0 / 0
Регистрация: 09.01.2016
Сообщений: 19
10.01.2016, 19:36  [ТС]
Я не понимаю каким образом он сортирует ФИО по алфавиту?
0
505 / 317 / 236
Регистрация: 18.02.2013
Сообщений: 754
10.01.2016, 19:56
сравнивает строки, содержащие фамилии, и , в случае чего меняет записи массива структур местами
0
0 / 0 / 0
Регистрация: 09.01.2016
Сообщений: 19
10.01.2016, 20:06  [ТС]
по какому принципу он меняет местами строки если алфавита нет?
0
505 / 317 / 236
Регистрация: 18.02.2013
Сообщений: 754
10.01.2016, 20:15
он сравнивает две переменные string
C++
1
dep[j].fio>dep[j+1].fio
0
0 / 0 / 0
Регистрация: 09.01.2016
Сообщений: 19
10.01.2016, 20:22  [ТС]
и как он выбирает что поставить первее?Просто при вводе нескольких фамилий в конце он выводит только первую фамилию.
0
505 / 317 / 236
Регистрация: 18.02.2013
Сообщений: 754
10.01.2016, 20:22
пример того, что вводите
0
0 / 0 / 0
Регистрация: 09.01.2016
Сообщений: 19
10.01.2016, 20:27  [ТС]
Enter fio of fellow:1
Kan Dima$
Enter post of fellow:1
zav kaf$
Enter homephone of fellow:1
321789
Enter workphone of fellow:1
123789
Enter meantime of fellow:1
5
Enter pay of fellow:1
15000
Enter fio of fellow:2
Abar Paric$
Enter post of fellow:2
prepod$
Enter homephone of fellow:2
789123
Enter workphone of fellow:2
01982321
Enter meantime of fellow:2
9
Enter pay of fellow:2
19000
Kan Dima
Kan Dima
0
0
505 / 317 / 236
Регистрация: 18.02.2013
Сообщений: 754
10.01.2016, 20:40
вместо
C++
1
2
for (int i = 0; i < n; i++)
        cout<<dep[j].fio<<endl;
нужно
C++
1
2
for (int i = 0; i < n; i++)
        cout<<dep[i].fio<<endl;
1
0 / 0 / 0
Регистрация: 09.01.2016
Сообщений: 19
10.01.2016, 20:56  [ТС]
Спасибо,исправил). Теперь буду разбираться с зарплатой.

Добавлено через 9 минут
Не понимаю почему dep[i].pay не умножается на 0.12??
0
505 / 317 / 236
Регистрация: 18.02.2013
Сообщений: 754
10.01.2016, 21:01
оно умножается, но ха счет объявления в структуре
Цитата Сообщение от Кан Дмитрий Посмотреть сообщение
int pay;
оно не меняется
0
0 / 0 / 0
Регистрация: 09.01.2016
Сообщений: 19
10.01.2016, 21:04  [ТС]
не понял) можете объяснить по подробнее?
0
505 / 317 / 236
Регистрация: 18.02.2013
Сообщений: 754
10.01.2016, 21:13
pay - итовое число результат умножения на вещественное число обрезается и скидывается в pay
C++
1
double pay;
вот так изменения будут заметны
0
0 / 0 / 0
Регистрация: 09.01.2016
Сообщений: 19
10.01.2016, 21:19  [ТС]
т.е. нужно только заменить int на double?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.01.2016, 21:19
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru