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

Сортировка в алфавитном порядке

14.04.2022, 20:02. Показов 1082. Ответов 14

Студворк — интернет-сервис помощи студентам
Здравствуйте. Нужна помощь в сортировке. Код принимает информацию о абитуриентах (ФИО, группа, город, 3 оценки по экзам) и выводит список абитуриентов (и группу), проживающих в Минске и имеющих ср. балл по экзам не менее 8.5 баллов. Все работает но в задании сказано вывести этот список в алфавитном порядке (по ФИО), что у меня не получается(.

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
#include <iostream>
#include <Windows.h>
#include <string>
#include <iomanip> 
 
using namespace std;
 
struct stud
{
    string group;
    string fio;
    string adress;
    int marks[3];
};
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    int n;
    cout << "Введите количество студентов: ";
    cin >> n;
 
    stud* mas = new stud[n];
 
    double* sr = new double[n];//средние баллы
 
    for (int i = 0; i < n; i++)
    {
        cin.ignore();
        cout << endl << "Введите ФИО: ";
        getline(cin, mas[i].fio);
        cout << endl << "Введите группу: ";
        getline(cin, mas[i].group);
        cout << endl << "Введите адрес: ";
        getline(cin, mas[i].adress);
 
        for (int j = 0; j < 3; j++)
        {
            cout << endl << "Введите " << j + 1 << " оценку: ";
            cin >> mas[i].marks[j];
        }
    }
 
    double sum;
    for (int i = 0; i < n; i++)
    {
        sum = 0.;
        for (int j = 0; j < 3; j++)
        {
            sum += mas[i].marks[j];
        }
        sr[i] = sum / 3.;
    }
 
    cout << endl << "Средний балл не ниже 8.5 абитуриентов проживающих в Минске: " << endl;
    int k = 0;
    cout << "Группа" << setw(10) << "ФИО" << endl;
    for (int i = 0; i < n; i++)
    {
        if (mas[i].adress == "Минск" && sr[i] >= 8.5)
        {
            k++;
            cout << mas[i].group << setw(10) << mas[i].fio << endl;
        }
    }
 
    cout << "Всего " << k << " студентов";
    delete[] mas;
    delete[] sr;
    return 0;
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.04.2022, 20:02
Ответы с готовыми решениями:

Сортировка в алфавитном порядке
Добрый день, мне нужно отсортировать таблицу в алфавитном порядке по фамилии, найти как это правильно сделать я не смог, может тут смогут...

Сортировка в алфавитном порядке
Мне нужно сведения об абонентах, выведенные в алфавитном порядке. Нужно отсортировать по фамилиям , фамилии это стринг,помогите пожалуйста...

Сортировка в алфавитном порядке
Написал скрипт сортировки по алфавиту. По идее работать должен, но к сожалению не работает. Вот код: struct stud{ char...

14
8 / 4 / 4
Регистрация: 13.05.2021
Сообщений: 57
14.04.2022, 21:51
LogoTipe, добрый вечер.
Для string определена сортировка по алфавиту, для этого нужно сделать так :

C++
1
2
3
4
5
6
7
#include <algorithm>
 
bool studentFioComparator(const stud* first, const stud* second) {
    return first->fio > second->fio;
}
 
sort(mas, (mas + n), studentFioComparator);
1
0 / 0 / 0
Регистрация: 19.12.2021
Сообщений: 46
14.04.2022, 22:44  [ТС]
я так понял есть несколько видов сортировок: Selection sort, Bubble sort, Insertion sort, Merge sort, Quick sort. в вашем примере какая?
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
14.04.2022, 23:34
Цитата Сообщение от LogoTipe Посмотреть сообщение
в вашем примере какая?
В std::sort скорее всего introsort: некоторая комбинация quick sort, heap sort и insertion sort.
1
0 / 0 / 0
Регистрация: 19.12.2021
Сообщений: 46
14.04.2022, 23:51  [ТС]
Это наверное слишком сложная сортировка для начинающего. Мне потом препод наганяй устроит. Есть какие-нибудь альтернативы попроще (скорость сортировки не столь важна)?
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
15.04.2022, 00:07
Цитата Сообщение от LogoTipe Посмотреть сообщение
Есть какие-нибудь альтернативы попроще (скорость сортировки не столь важна)?
В стандартной библиотеке C++? В принципе, есть отдельно heap sort и отдельно quick sort. Но если тебе преподаватель точно предъявит за std::sort, то скорее всего и за все остальные тоже. Если задача явно не подразумевает написание своего алгоритма сортировки, то обычно как раз используют std::sort.
А так, всегда можно написать свою функцию сортировки с тем же bubble sort внутри.
1
0 / 0 / 0
Регистрация: 19.12.2021
Сообщений: 46
15.04.2022, 09:22  [ТС]
Значит тут можно использовать Quick sort?

Добавлено через 25 минут
Как мне его сделать?
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38168 / 21103 / 4307
Регистрация: 12.02.2012
Сообщений: 34,692
Записей в блоге: 14
15.04.2022, 09:29
Пузырьковая сортировка массива строк:

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
#include <iostream>
 
using namespace std;
 
void bsort(string *arr, int size)
{
    int i,c,k=1;
    string tmp;
    
    while (1)
    {
        c=0;
        for (i=0; i<size-k; i++)
        {
            if (arr[i]>arr[i+1])
            {
                tmp=arr[i];
                arr[i]=arr[i+1];
                arr[i+1]=tmp;
                c++;
            }
        }
        if (c==0) return;
        k++;
    }
    
}
 
int main()
{
    string a[4]={"qwa","ggg","ccc","aaa"};
    
    bsort(a,4);
    
    for (int i=0; i<4; i++) cout << a[i] << " ";
 
    return 0;
}
1
0 / 0 / 0
Регистрация: 19.12.2021
Сообщений: 46
15.04.2022, 09:51  [ТС]
А если у меня к массиву ФИО привязаны еще массивы групп, адресов и оценок, я отсортирую массив ФИО, а с остальными массивами что делать?
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
15.04.2022, 10:09
Цитата Сообщение от LogoTipe Посмотреть сообщение
а с остальными массивами что делать?
Просто тебе нужно сортировать не массив строк, а свой массив stud. Просто когда выполняешь сравнение двух элементов, сравниваешь только по fio. Например, в функции, предоставленной Catstail, для этого достаточно лишь поменять несколько строк:
C++
1
2
3
4
5
6
7
8
void bsort(stud *arr, int size)
{
    // ...
    stud tmp;
    // ...
    if (arr[i].fio>arr[i+1].fio)
    // ...
}
Цитата Сообщение от LogoTipe Посмотреть сообщение
Значит тут можно использовать Quick sort?
Цитата Сообщение от LogoTipe Посмотреть сообщение
Как мне его сделать?
Можешь использовать любой алгоритм сортировки. Я бы рекомендовал либо не париться и использовать std::sort, либо написать функцию со своим алгоритмом.
1
0 / 0 / 0
Регистрация: 19.12.2021
Сообщений: 46
15.04.2022, 12:17  [ТС]
и куда мне это все засунуть?

Добавлено через 6 минут
Цитата Сообщение от Catstail Посмотреть сообщение
tmp=arr[i];
                arr[i]=arr[i+1];
                arr[i+1]=tmp;
в этих строчках компилятор ругается на "=", не понимаю почему и как это исправить?
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38168 / 21103 / 4307
Регистрация: 12.02.2012
Сообщений: 34,692
Записей в блоге: 14
15.04.2022, 12:24
LogoTipe, покажи код, попробуем разобраться.
1
0 / 0 / 0
Регистрация: 19.12.2021
Сообщений: 46
15.04.2022, 13:11  [ТС]
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#include <iostream>
#include <Windows.h>
#include <string>
#include <iomanip> 
 
using namespace std;
 
struct stud
{
    string group;
    string fio;
    string adress;
    int marks[3];
};
 
void bsort(stud* arr, int size)
{
    int c, k = 1;
    string tmp;
 
    while (1)
    {
        c = 0;
        for (int i = 0; i <  - k; i++)
        {
            if (arr[i].fio > arr[i + 1].fio)
            {
                tmp = arr[i];
                arr[i] = arr[i + 1];
                arr[i + 1] = tmp;
                c++;
            }
        }
        if (c == 0) return;
        k++;
    }
 
}
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    int n;
    cout << "Введите количество студентов: ";
    cin >> n;
 
    stud* mas = new stud[n];
 
    double* sr = new double[n];//средние баллы
 
    for (int i = 0; i < n; i++)
    {
        cin.ignore();
        cout << endl << "Введите ФИО: ";
        getline(cin, mas[i].fio);
        cout << endl << "Введите группу: ";
        getline(cin, mas[i].group);
        cout << endl << "Введите адрес: ";
        getline(cin, mas[i].adress);
 
        for (int j = 0; j < 3; j++)
        {
            cout << endl << "Введите " << j + 1 << " оценку: ";
            cin >> mas[i].marks[j];
        }
    }
 
    double sum;
    for (int i = 0; i < n; i++)
    {
        sum = 0.;
        for (int j = 0; j < 3; j++)
        {
            sum += mas[i].marks[j];
        }
        sr[i] = sum / 3.;
    }
 
    bsort(mas, n);
 
    cout << endl << "Средний балл не ниже 8.5 абитуриентов проживающих в Минске: " << endl;
    int k = 0;
    cout << "Группа" << setw(10) << "ФИО" << endl;
    for (int i = 0; i < n; i++)
    {
        if (mas[i].adress == "Минск" && sr[i] >= 8.5)
        {
            k++;
            cout << mas[i].group << setw(10) << mas[i].fio << endl;
        }
    }
 
    cout << "Всего " << k << " студентов";
    delete[] mas;
    delete[] sr;
    return 0;
}
Добавлено через 30 секунд
в 28 и 30 строках ругается на =

Добавлено через 41 минуту
Так, с этой проблемой я разобрался, но оно ничего не сортирует

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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#include <iostream>
#include <Windows.h>
#include <string>
#include <iomanip> 
 
using namespace std;
 
struct stud
{
    string group;
    string fio;
    string adress;
    int marks[3];
};
 
void bsort(stud* mas, int size)
{
    int c, k = 1;
    stud tmp;
 
    while (1)
    {
        c = 0;
        for (int i = 0; i <  - k; i++)
        {
            if (mas[i].fio > mas[i + 1].fio)
            {
                tmp = mas[i];
                mas[i] = mas[i + 1];
                mas[i + 1] = tmp;
                c++;
            }
        }
        if (c == 0) return;
        k++;
    }
 
}
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    int n;
    cout << "Введите количество студентов: ";
    cin >> n;
 
    stud* mas = new stud[n];
 
    double* sr = new double[n];//средние баллы
 
    for (int i = 0; i < n; i++)
    {
        cin.ignore();
        cout << endl << "Введите ФИО: ";
        getline(cin, mas[i].fio);
        cout << endl << "Введите группу: ";
        getline(cin, mas[i].group);
        cout << endl << "Введите адрес: ";
        getline(cin, mas[i].adress);
 
        for (int j = 0; j < 3; j++)
        {
            cout << endl << "Введите " << j + 1 << " оценку: ";
            cin >> mas[i].marks[j];
        }
    }
 
    double sum;
    for (int i = 0; i < n; i++)
    {
        sum = 0.;
        for (int j = 0; j < 3; j++)
        {
            sum += mas[i].marks[j];
        }
        sr[i] = sum / 3.;
    }
 
    bsort(mas, n);
 
    cout << endl << "Средний балл не ниже 8.5 абитуриентов проживающих в Минске: " << endl;
    int k = 0;
    cout << "Группа" << setw(10) << "ФИО" << endl;
    for (int i = 0; i < n; i++)
    {
        if (mas[i].adress == "Минск" && sr[i] >= 8.5)
        {
            k++;
            cout << mas[i].group << setw(10) << mas[i].fio << endl;
        }
    }
 
    cout << "Всего " << k << " студентов";
    delete[] mas;
    delete[] sr;
    return 0;
}
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
15.04.2022, 13:20
Лучший ответ Сообщение было отмечено LogoTipe как решение

Решение

Цитата Сообщение от LogoTipe Посмотреть сообщение
for (int i = 0; i <  - k; i++)
Ты вот тут что-то неправильно скопировал и потерял size в итоге.
1
0 / 0 / 0
Регистрация: 19.12.2021
Сообщений: 46
15.04.2022, 13:28  [ТС]
АААА, спасибо огромное, всем!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.04.2022, 13:28
Помогаю со студенческими работами здесь

Сортировка в алфавитном порядке...
Здравствуйте, не могли бы вы помочь мне с задачей? Просто мы на лекциях ещё не разобрали как работать с файлами и текстом на C++, а на...

Сортировка в алфавитном порядке
Мне нужно создать функцию, которая сортирует список книг указанного автора в алфавитном порядке наименований. Помогите исправить код,...

Сортировка слов в алфавитном порядке
Дан текст из несколько слов. Нужно вывести слова в алфавитном порядке по первой букве.

Сортировка слов в алфавитном порядке
Задан любой текст.Выпонить сортировку слов этого текста в алфавитном порядке.

Сортировка структур в алфавитном порядке
Есть массив структур, которые содержат русское слово и его английский перевод. Надо отсортировать по английским словам в алфавитном...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru