Как сделать сортировку по убыванию и привязать фамилии к зарплате
Есть у меня код добавления рабочего и вывод рабочего в табличном варианте, надо сделать сортировку расположив фамилии в порядке убывания зарплаты, определить среднюю зарплату по всем рабочим и подсчитать для каждой бригады количество рабочих, имеющих зарплату ниже средней. Бригады нумеруются подряд, начиная с первой. Я просто начинающий программист и не понимаю, как это правильно реализовать.
Код:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <string>
#include <conio.h>
#include <Windows.h>
using namespace std;
typedef struct brig {
char surname[20]; // Фамилия
int nomer ; // Номер бригады
int zarplata; // зарплата бригадира
} brig;
void add_brig(brig** brigs, int* size, int* capacity) {
SetConsoleCP(1251);// установка кодовой страницы win-cp 1251 в поток ввода
SetConsoleOutputCP(1251); // установка кодовой страницы win-cp 1251 в поток вывода
setlocale(LC_ALL, "ru");
printf("Введите фамилию: ");
scanf("%s", &(*brigs)[*size].surname);
printf("Введите номер бригады: ");
scanf("%d", &(*brigs)[*size].nomer);
printf("Введите заработную плату: ");
scanf("%d", &(*brigs)[*size].zarplata);
(*size)++;
if (*size >= *capacity) {
*capacity *= 2;
*brigs = (brig*)realloc(*brigs, *capacity * sizeof(brig));
}
}
void print_brigs(brig* brigs, int size) {
setlocale(LC_ALL, "ru");
printf("+---------------------+--------------------+--------+\n");
printf("| Фамилия | Номер бригады | Зарплата |\n");
printf("+---------------------+--------------------+--------+\n");
if (size == 0)
printf("| No goods was added... |\n");
for (int i = 0; i < size; i++)
printf("| %20s | %17.5d | %9d |\n", brigs[i].surname, brigs[i].nomer, brigs[i].zarplata);
printf("+---------------------+--------------------+--------+\n");
}
void print_menu() {
setlocale(LC_ALL, "ru");
system("cls"); // очищаем экран
cout << "Выберите пункт" << endl;
cout << "1. Добавить бригадира" << endl;
cout << "2. Увидеть всех бригадиров" << endl;
cout << "5. Exit" << endl;
cout << ">";
}
int get_variant(int count) {
int variant;
string s; // строка для считывания введённых данных
getline (cin, s); // считываем строку
// пока ввод некорректен, сообщаем об этом и просим повторить его
while (sscanf(s.c_str(), "%d", &variant) != 1 || variant < 1 || variant > count) {
cout << "Incorrect input. Try again: "; // выводим сообщение об ошибке
getline(cin, s); // считываем строку повторно
}
return variant;
}
int main() {
int variant; // выбранный пункт меню
int size = 0; // количество элементов массива бригады
int capacity = 1; // ёмкость массива бригады
brig* brigs = (brig*)malloc(capacity * sizeof(brig)); // выделяем память под массив бригады
do {
print_menu(); // выводим меню на экран
variant = get_variant(5); // получаем номер выбранного пункта меню
switch (variant) {
case 1:
add_brig(&brigs, &size, &capacity);
break;
case 2:
print_brigs(brigs, size);
break;
}
if (variant != 5)
system("pause"); // задерживаем выполнение, чтобы пользователь мог увидеть результат выполнения выбранного пункта
} while (variant != 5);
return 0;
}