С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.85/40: Рейтинг темы: голосов - 40, средняя оценка - 4.85
55 / 39 / 18
Регистрация: 21.05.2015
Сообщений: 184

Сортировка записей Структуры по алфавиту

24.10.2017, 22:24. Показов 7606. Ответов 49
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
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
#include <iostream>
#include <iomanip>
using namespace std;
struct STUD // Структура STUD
{        
    char *Name; // Фамилия и инициалы          
    char *GROUP;  // Название группы (факультет, курс, номер группы)
    float SES [4]; // Успеваемость (баллы)
};                 
int main()
{
    setlocale (LC_ALL, ""); // подключение русского языка
    int STUD1_size = 10; // количество записей
    STUD STUD1[STUD1_size]; // массив STUD1 из 10 структур типа STUD
    int counter = 0; // счётчик записей
    while (counter < STUD1_size) // пока не внесено 10 записей
    {
        cout << "Введите Фамилию и инициалы через пробел: ";
        cin.getline(STUD1[counter].Name,20);
        cout << "Введите Название группы (факультет, курс, номер группы) через пробел: ";
        cin.getline(STUD1[counter].GROUP,10);
        cout << "Введите баллы через точку (округление до 0.1): ";
        cin >> setw(3) >> STUD1[counter].SES[0]; // считать первые три символа, первый балл
        cin.ignore(); // пропустить символ точки
        cin >> setw(3) >> STUD1[counter].SES[1]; // считать следующие три символа, второй балл
        cin.ignore(); // пропустить символ точки
        cin >> setw(3) >> STUD1[counter].SES[2]; // считать следующие три символа, третий балл
        cin.ignore(); // пропустить символ точки
        cin >> setw(3) >> STUD1[counter].SES[3]; // считать последние три символа, четвёртый балл
        cin.get(); // считываем символ новой строки '\n'
        counter++; // инкремент счётчика записей
    }
return 0;
}
Необходимо упорядочить записи структуры STUD по полю Name в алфавитном порядке и вывести результат на экран
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.10.2017, 22:24
Ответы с готовыми решениями:

Сортировка структуры по алфавиту
Доброго времени суток!Возник вопрос, как отсортировать структуру по алфавиту,пробовал сделать по примерам из других тем,но ничего не...

Сортировка по алфавиту структуры
Прошу помощи, так как уже просто несколько дней подряд никак не получается сделать лабу по программированию. Препод у нас не самый лучший,...

Сортировка Структуры по алфавиту
подскажите как сортировать фамилии по алфавиту? struct WORKER{ char lastnamepip; char posada; int year; }; ...

49
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
24.10.2017, 22:39
Name и GROUP должны быть массивами. Сортировка - sort().
0
55 / 39 / 18
Регистрация: 21.05.2015
Сообщений: 184
24.10.2017, 22:42  [ТС]
Цитата Сообщение от nmcf Посмотреть сообщение
Name и GROUP должны быть массивами. Сортировка - sort().
По условию задания массив лишь поле SES и массив структур STUD1. Скорее всего надо сортировать именно STUD1 и я не так понял
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
24.10.2017, 22:45
Тогда надо память выделять через new.
А в конце освобождать.
0
55 / 39 / 18
Регистрация: 21.05.2015
Сообщений: 184
24.10.2017, 22:50  [ТС]
Цитата Сообщение от nmcf Посмотреть сообщение
Тогда надо память выделять через new.
А в конце освобождать.
Не представляю как это делать. Собственно условие:
"Написать программу выполняющую ввод с клавиатуры данных в массив STUD1, состоящий из 10 структур типа STUD, записи должны быть упорядочены по алфавиту и выведены на экран"
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
24.10.2017, 23:36
C++
1
2
STUD1[counter].Name = new char[20];
cin.getline(STUD1[counter].Name,20);
0
55 / 39 / 18
Регистрация: 21.05.2015
Сообщений: 184
24.10.2017, 23:42  [ТС]
Я имел ввиду что вообще не знаю как отсортировать, выделив память, а потом освободить. Как я понял
Цитата Сообщение от nmcf Посмотреть сообщение
1
2
STUD1[counter].Name = new char[20];
cin.getline(STUD1[counter].Name,20);
лишь выделяет память
0
55 / 39 / 18
Регистрация: 21.05.2015
Сообщений: 184
01.11.2017, 10:17  [ТС]
При компиляции кода
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 "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std;
struct STUD // Структура STUD
{        
    char *Name; // Фамилия и инициалы          
    char *GROUP;  // Название группы (факультет, курс, номер группы)
    float SES [4]; // Успеваемость (баллы)
};                 
int main()
{
    setlocale (LC_ALL, ""); // подключение русского языка
    int STUD1_size = 10; // количество записей
    STUD STUD1[STUD1_size]; // массив STUD1 из 10 структур типа STUD
    int counter = 0; // счётчик записей
    while (counter < STUD1_size) // пока не внесено 10 записей
    {
        cout << "Введите Фамилию и инициалы через пробел: ";
        cin.getline(STUD1[counter].Name,20); // считать фамилию и инициалы
        cout << "Введите Название группы (факультет, курс, номер группы) через пробел: ";
        cin.getline(STUD1[counter].GROUP,10); // считать название группы
        cout << "Введите баллы через точку (округление до 0.1): ";
        cin >> setw(3) >> STUD1[counter].SES[0]; // считать первые три символа, первый балл
        cin.ignore(); // пропустить символ точки
        cin >> setw(3) >> STUD1[counter].SES[1]; // считать следующие три символа, второй балл
        cin.ignore(); // пропустить символ точки
        cin >> setw(3) >> STUD1[counter].SES[2]; // считать следующие три символа, третий балл
        cin.ignore(); // пропустить символ точки
        cin >> setw(3) >> STUD1[counter].SES[3]; // считать последние три символа, четвёртый балл
        cin.get(); // считываем символ новой строки '\n'
        counter++; // инкремент счётчика записей
    }
return 0;
system("pause");
}
в VS 2017 выбивает ряд ошибок
E0028 выражение должно иметь константное значение 15 значение переменная "STUD1_size" (объявлено в строке 14) невозможно использовать как константу
C2131 выражение не определяется константой 15
+ повторяющийся ряд ошибок вида
C2228 выражение слева от ".SES" должно представлять класс, структуру или объединение
, только вместо .SES также другие поля

Добавлено через 23 минуты
Добавление
C++
1
const
в 14 строке решило проблему, но после ввода первой записи программа вылетает с ошибкой при чтении строки
Вызвано исключение по адресу 0x00007FFACA58ED59 (msvcp140d.dll) в AR 1.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0xFFFFFFFFFFFFFFFF.
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
01.11.2017, 19:29
Я для кого писал про массивы?
C++
1
2
3
4
5
6
struct STUD // Структура STUD
{        
    char Name[50]; // Фамилия и инициалы          
    char GROUP[50];  // Название группы (факультет, курс, номер группы)
    float SES [4]; // Успеваемость (баллы)
};
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
01.11.2017, 19:56
C++
1
const int STUD1_size = 10;
0
55 / 39 / 18
Регистрация: 21.05.2015
Сообщений: 184
03.11.2017, 18:42  [ТС]
Цитата Сообщение от nmcf Посмотреть сообщение
Я для кого писал про массивы?
C++Выделить код
struct STUD // Структура STUD
{ * * * *
* * char Name[50]; // Фамилия и инициалы * * * * *
* * char GROUP[50]; *// Название группы (факультет, курс, номер группы)
* * float SES [4]; // Успеваемость (баллы)
};
Так тоже пробовал. Вот список ошибок
Миниатюры
Сортировка записей Структуры по алфавиту  
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
03.11.2017, 19:23
Актуальный вариант показывай.
0
55 / 39 / 18
Регистрация: 21.05.2015
Сообщений: 184
03.11.2017, 20:06  [ТС]
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 "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std;
struct STUD // Структура STUD
{        
    char Name; // Фамилия и инициалы          
    char GROUP;  // Название группы (факультет, курс, номер группы)
    float SES [4]; // Успеваемость (баллы)
};                 
int main()
{
    setlocale (LC_ALL, ""); // подключение русского языка
    const int STUD1_size = 10; // количество записей
    STUD STUD1[STUD1_size]; // массив STUD1 из 10 структур типа STUD
    int counter = 0; // счётчик записей
    while (counter < STUD1_size) // пока не внесено 10 записей
    {
        cout << "Введите Фамилию и инициалы через пробел: ";
        cin.getline(STUD1[counter].Name,20); // считать фамилию и инициалы
        cout << "Введите Название группы (факультет, курс, номер группы) через пробел: ";
        cin.getline(STUD1[counter].GROUP,10); // считать название группы
        cout << "Введите баллы через точку (округление до 0.1): ";
        cin >> setw(3) >> STUD1[counter].SES[0]; // считать первые три символа, первый балл
        cin.ignore(); // пропустить символ точки
        cin >> setw(3) >> STUD1[counter].SES[1]; // считать следующие три символа, второй балл
        cin.ignore(); // пропустить символ точки
        cin >> setw(3) >> STUD1[counter].SES[2]; // считать следующие три символа, третий балл
        cin.ignore(); // пропустить символ точки
        cin >> setw(3) >> STUD1[counter].SES[3]; // считать последние три символа, четвёртый балл
        cin.get(); // считываем символ новой строки '\n'
        counter++; // инкремент счётчика записей
    }
return 0;
system("pause");
}
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
03.11.2017, 20:08
Вы вообще каким местом форум читаете?
Сортировка записей Структуры по алфавиту
Вам плевать на все различия между вашим кодом и кодом nmcf?
0
55 / 39 / 18
Регистрация: 21.05.2015
Сообщений: 184
03.11.2017, 20:43  [ТС]
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 "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std;
struct STUD // Структура STUD
{
    char Name[30]; // Фамилия и инициалы          
    char GROUP[30];  // Название группы (факультет, курс, номер группы)
    float SES[4]; // Успеваемость (баллы)
};
int main()
{
    setlocale (LC_ALL, ""); // подключение русского языка
    const int STUD1_size = 10; // количество записей
    STUD STUD1[STUD1_size]; // массив STUD1 из 10 структур типа STUD
    int counter = 0; // счётчик записей
    while (counter < STUD1_size) // пока не внесено 10 записей
    {
        cout << "Введите Фамилию и инициалы через пробел: ";
        cin.getline(STUD1[counter].Name,30); // считать фамилию и инициалы
        cout << "Введите Название группы (факультет, курс, номер группы) через пробел: ";
        cin.getline(STUD1[counter].GROUP,30); // считать название группы
        cout << "Введите баллы через точку (4 числа): ";
        cin >> setw(3) >> STUD1[counter].SES[0]; // считать первые три символа, первый балл
        cin.ignore(); // пропустить символ точки
        cin >> setw(3) >> STUD1[counter].SES[1]; // считать следующие три символа, второй балл
        cin.ignore(); // пропустить символ точки
        cin >> setw(3) >> STUD1[counter].SES[2]; // считать следующие три символа, третий балл
        cin.ignore(); // пропустить символ точки
        cin >> setw(3) >> STUD1[counter].SES[3]; // считать последние три символа, четвёртый балл
        cin.get(); // считываем символ новой строки '\n'
        counter++; // инкремент счётчика записей
    }
return 0;
system("pause");
}
Как отсортировать по алфавиту все записи структуры в этой программе и вывести их на экран(сортировка по полю Name)?
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
03.11.2017, 22:01
Здесь смотри: Сортировка структуры в файле
0
55 / 39 / 18
Регистрация: 21.05.2015
Сообщений: 184
03.11.2017, 22:38  [ТС]
Цитата Сообщение от nmcf Посмотреть сообщение
Здесь смотри: Сортировка структуры в файле
Мне необходима просто сортировка и вывод на экран консоли без участия файлов
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
03.11.2017, 22:41
Сортировку делай по образцу, на файлы не смотри.
0
55 / 39 / 18
Регистрация: 21.05.2015
Сообщений: 184
08.11.2017, 11:31  [ТС]
Подключил
C++
1
#include <algorithm>
Перед return 0; добавил
C++
1
2
3
int count = 0;
STUD * cc = new STUD[count];
std::sort(cc, cc + count, [](const STUD & a, const STUD & b) { return strcmp(a.Name, b.Name) < 0; });
Добавлено через 10 минут
Как теперь уже отсортированную структуру вывести на экран консоли?

Добавлено через 11 минут
Также требуется вывести данные структуры при условии, когда средний бал (SES) > 4.2 (вывод упорядочить по возрастанию среднего бала)
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
08.11.2017, 11:41
Programist_NKPC, ну у тебя же свой массив, зачем ты ещё один создаёшь?
C++
1
std::sort(STUD1, STUD1 + STUD1_size, [](const STUD & a, const STUD & b) { return strcmp(a.Name, b.Name) < 0; });
Цитата Сообщение от Programist_NKPC Посмотреть сообщение
Как теперь уже отсортированную структуру вывести на экран консоли?
Ну например, используй такой же цикл:
C++
1
2
3
4
5
6
7
    counter = 0; // счётчик записей
    while (counter < STUD1_size)
    {
        cout << STUD1[counter].Name << endl;
        //...
        ++counter;
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.11.2017, 11:41
Помогаю со студенческими работами здесь

Сортировка структуры по алфавиту
Здравствуйте, написал прогу, но с сортировкой не получается, и извините, что там все криво-косо.В чем ошибка(и)? #include...

Структуры.Сортировка фамилий по алфавиту
Не могу отсортировать по фамилиям.Необходимо использовать функцию bool compare(){...},чтобы сравнить две фамилии.Как это сделать?Что нужно...

Сортировка записей по алфавиту
всем привет! подскажите плиз! у меня в файле есть записи (там фамилии людей) мне нужно сделать все отсортировать по алфавиту! и вывести на...

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

Сортировка структуры слов по алфавиту
В структуре нам даны имена автора(или просто слова) и другие составляющие(название песни, жанр), необходимо отсортировать по алфавиту, но я...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 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 считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru