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

Сортировка структуры по параметру

22.03.2023, 10:25. Показов 2304. Ответов 21

Студворк — интернет-сервис помощи студентам
Требуется отсортировать структуру по нескольким критериям, желательно во всех сортировках привязывать название к данным. Вот сама структура и варианты для сортировки:
C++
1
2
3
4
5
6
7
8
9
10
11
12
struct team
{
    char name[15];
    int day;
    int month;
    int year;
    double Stonks;
    double Sels;
    double FO;
    double Plus;
    int TOP;
};
1.Сортировка выручки; (double Stonks)
2.Сортировка по дате; (int day; int month; int year)
3.Сортировка по названию компании. (cahr name[15])



N постоянная и равна 3.
Пример работы:
выбран 1ый пункт;
Вывод в консоль:
1 *Название* 1000
2 *Название* 500
3 *Название* 100
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.03.2023, 10:25
Ответы с готовыми решениями:

Вывод записей структуры, удовлетворяющих параметру
Нужно вывести ЭВМ, ёмкость жесткого диска которых больше чем введенное с клавиатуры значение. Почему-то у меня выводит все записи, а не...

структуры. убрать из полученного списка людей по определенному параметру (возраст)
Здравствуйте. Можно ли как-то в моём решении реализовать запрос ввода возрастного диапазона, после чего будут удаляться студенты,...

Описать процедуру maxmin (x, y) присваивает параметру х большее из вещественных чисел x и y, а параметру у -- меньшее
Процедура maxmin (x, y) присваивает параметру х большее из вещественных чисел x и y, а параметру у -- меньшее. Описать данную процедуру и...

21
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
22.03.2023, 10:28
Алгоритмы сортировок
0
0 / 0 / 0
Регистрация: 23.05.2022
Сообщений: 22
22.03.2023, 11:44  [ТС]
Применил 1ю сортировку:

0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
22.03.2023, 11:53
Тебе не нужен цикл в case и под свой тип массива адаптируй условие.
C++
1
2
case 1:
    selectSort(C, N);
C++
1
void selectSort(team *arr, int size)
C++
1
if (arr[j].Stonks < tmp.Stonks)
1
0 / 0 / 0
Регистрация: 23.05.2022
Сообщений: 22
22.03.2023, 12:15  [ТС]
Сделал:


Вывод сортировки по сути должен выглядеть так:
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
22.03.2023, 12:36
Тип tmp тоже скорректируй.
Цитата Сообщение от Nemio Посмотреть сообщение
Вывод сортировки по сути должен выглядеть так
Поле желаемое указывай. Нельзя просто выводить arr[i].
1
0 / 0 / 0
Регистрация: 23.05.2022
Сообщений: 22
22.03.2023, 12:41  [ТС]
Получается вот так:
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
22.03.2023, 13:04
C++
1
team tmp;
1
0 / 0 / 0
Регистрация: 23.05.2022
Сообщений: 22
22.03.2023, 13:12  [ТС]

0
33 / 25 / 8
Регистрация: 18.12.2022
Сообщений: 83
22.03.2023, 13:15
Лучший ответ Сообщение было отмечено Nemio как решение

Решение

Держи код на C++. Если я правильно понял задачу, то тогда всё должно работать
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
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
 
struct team
{
    char name[15];
    int day;
    int month;
    int year;
    double Stonks;
    double Sels;
    double FO;
    double Plus;
    int TOP;
};
 
// Comparison functions for sorting by different criteria
bool cmpStonks(team a, team b){
    return a.Stonks > b.Stonks;
}
 
bool cmpDate(team a, team b){
    if (a.year != b.year)
        return a.year > b.year;
    if (a.month != b.month)
        return a.month > b.month;
    return a.day > b.day;
}
 
bool cmpName(team a, team b){
    return strcmp(a.name, b.name) < 0;
}
 
int main(){
    const int N = 3;
    team teams[N] = {
        {"Team C", 10, 3, 2021, 1000, 200, 20, 5, 1},
        {"Team A", 1, 2, 2022, 500, 300, 15, 3, 2},
        {"Team B", 30, 1, 2023, 100, 400, 10, 2, 3}
    };
 
    // Sort by revenue
    sort(teams, teams+N, cmpStonks);
    cout << "Sort by revenue:\n";
    for(int i=0; i<N; i++)
        cout << i+1 << " " << teams[i].name << " " << teams[i].Stonks << endl;
    cout << endl;
 
    // Sort by date
    sort(teams, teams+N, cmpDate);
    cout << "Sort by date:\n";
    for(int i=0; i<N; i++)
        cout << i+1 << " " << teams[i].name << " " << teams[i].day << "." << teams[i].month << "." << teams[i].year << endl;
    cout << endl;
 
    // Sort by name
    sort(teams, teams+N, cmpName);
    cout << "Sort by name:\n";
    for(int i=0; i<N; i++)
        cout << i+1 << " " << teams[i].name << " " << teams[i].Stonks << endl;
    cout << endl;
 
    return 0;
}
Код определяет структуру `team` и реализует три функции сравнения `cmpStonks`, `cmpDate` и `cmpName` для сортировки структуры по доходу, дате и названию соответственно. Основная функция инициализирует массив структур `team`, сортирует его по каждому критерию, используя функцию `sort` из библиотеки `<algorithm>`, и выводит отсортированные результаты на консоль.
1
0 / 0 / 0
Регистрация: 23.05.2022
Сообщений: 22
22.03.2023, 13:24  [ТС]
Если у меня ввод данных происходит в отдельной функции, будет ли работать?
Данные ввожу от руки в консоль, не в main():
0
0 / 0 / 0
Регистрация: 23.05.2022
Сообщений: 22
22.03.2023, 17:57  [ТС]
Сделал всё, только это выдаёт в ошибку:
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
22.03.2023, 18:00
Ну подсказка же тебе говорит, что совпадение имён. Другое имя дай.
1
0 / 0 / 0
Регистрация: 23.05.2022
Сообщений: 22
22.03.2023, 18:57  [ТС]
Вот как выглядит список после моего заполнения:
Вложение 1409305

Вот что происходит после сортировки каждого из параметров:
Вложение 1409306
Вложение 1409307
Вложение 1409308
0
0 / 0 / 0
Регистрация: 23.05.2022
Сообщений: 22
22.03.2023, 18:58  [ТС]



0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
22.03.2023, 20:08
Программу показывай.
1
0 / 0 / 0
Регистрация: 23.05.2022
Сообщений: 22
22.03.2023, 20:14  [ТС]
Sort и функции до main:


Вызов в main:
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
22.03.2023, 22:08
А массив-то заполнен? Если там нет этих N элементов, то будет ошибка.
1
0 / 0 / 0
Регистрация: 23.05.2022
Сообщений: 22
22.03.2023, 22:16  [ТС]
Заполнение я делаю до этого. То есть я ввожу данные через отдельную функцию:
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
22.03.2023, 22:23
У тебя массив элементов свой в каждой функции, а должен быть общим для всех. В main() объяви и передавай всем, кому он нужен.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.03.2023, 22:23
Помогаю со студенческими работами здесь

Двусвязный список. Загрузка, сохранение в файл, сортировка по вводимому параметру
Здравствуйте! Нужна помощь с функцией загрузки информации из файла. Файл создается, информация сохраняется, но не извлекается. Выдает,...

Структуры. Сортировка массива структуры
Здравствуйте! В чем моя ошибка?? Нужно отсортировать массив структуры по возрастанию среднего балла?? Делаю это с помощью...

Сортировка данных более чем по одному параметру
Доброго времени суток!По скольку новый вопрос, по правилам, создаю новую тему. Помогите решить следующую проблему. Готова прога с...

Сортировка по параметру
Подскажите пожалуйста. Есть класс public class el{ int number; String name; Date date; } Если ArrayList:

Сортировка по параметру в отчете
Здравствуйте всем! В 1С новичок. Делаю балансовый отчет, необходимо, чтобы сортировка шла по полю КодСтроки, которую я ввожу...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru