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

Отсортировать список студентов по фамилии в обратном алфавитному порядке

20.05.2019, 18:52. Показов 8168. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Составить список, содержащий сведения об N студентах. Для каждого учащегося указать фамилию, дату рождения, оценки сессии по трем предметам. Информацию о каждом студенте оформить в виде структуры. Совокупность структур объединить в массив. Информацию о студентах хранить в файле.
Составить программу, которая обеспечивает ввод исходных данных, сортировку, обработку и вывод на экран информации в соответствии с требованиями:
Отсортировать студентов по фамилии в обратном алфавитному порядке. Вывести на экран фамилии и даты рождения студентов, не получивших за все время обучения ни одной оценки 2. N = 6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include "pch.h" 
#include <iostream> 
#include <windows.h> 
#include <fstream> 
#include <cstring> 
#include <cstdlib> 
using namespace std; 
 
int main() 
{ 
setlocale(LC_ALL, "Russian"); 
ifstream fin("input.txt"); 
ofstream fout("output.txt"); 
int k; 
struct student { 
char *name[20]; //или char name[] 
int day; 
int month; 
int year; 
int marks[3]; 
}; 
 
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.05.2019, 18:52
Ответы с готовыми решениями:

Как отсортировать слова в обратном алфавитному порядке
Как отсортировать слова в обратном алфавитному порядке?

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

Отсортировать слова в данной строке в порядке, обратном алфавитному (qsort), и посчитать число слов с первой гласной
Здравствуйте! Нужно написать программу, которая сортирует слова в данной строке в порядке, обратном алфавитному, и считает кол-во слов с...

7
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
20.05.2019, 20:55
Лучший ответ Сообщение было отмечено zava989 как решение

Решение

zava989,
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
#include <iostream>
#include <fstream>
#include <iomanip>
#include <algorithm>
 
constexpr size_t N = 6;             // количество записей
constexpr size_t str_size = 20;     // размер символьной строки
constexpr size_t marks_count = 3;   // количество оценок
 
struct Date
{   // дата
    unsigned short day;
    unsigned short month;
    unsigned short year;
};
 
struct Student
{   // студент
    char name[str_size];
    Date birth_date;
    unsigned short marks[marks_count];
};
 
void fill_file(const char*);                        // запись первоначальной информации в файл
size_t read_from_file(const char*, Student(&)[N]);  // чтение из файла
bool by_name(const Student&, const Student&);       // предикат сортировки в порядке, обратном алфавитному
 
std::ostream& operator<<(std::ostream&, const Date&);   // форматированный вывод даты
std::ostream& operator<<(std::ostream&, const Student&);// форматированный вывод информации о студенте
 
 
int main()
{
    fill_file("data.bin");
    Student arr[N];
    size_t count = read_from_file("data.bin", arr);
    std::sort(std::begin(arr), std::end(arr), by_name);
    for (size_t i = 0; i < count; ++i)
    {
        bool to_print = true;
        for (size_t j = 0; j < marks_count; ++j)
            if (arr[i].marks[j] == 2)
            {
                to_print = false;
                break;
            }
        if (to_print) std::cout << arr[i] << std::endl;
    }
}
 
void fill_file(const char* fname)
{
    Student arr[N]
    {
        {"Ivanov",   {1,1,1999}, {3,2,2}},
        {"Petrov",   {2,2,1999}, {3,4,5}},
        {"Sidorov",  {3,3,1999}, {5,2,5}},
        {"Ivanova",  {4,4,2000}, {3,3,3}},
        {"Petrova",  {5,5,2000}, {4,4,4}},
        {"Sidorova", {6,6,2000}, {5,5,5}}
    };
    std::ofstream ofs(fname, std::ios::trunc | std::ios::binary);
    ofs.write(reinterpret_cast<const char*>(arr), sizeof(arr));
}
 
size_t read_from_file(const char* fname, Student(&arr)[N])
{
    size_t count = 0;
    std::ifstream ifs(fname, std::ios::binary);
    for (; count < N && ifs.read(reinterpret_cast<char*>(&arr[count++]), sizeof(Student)););
    return count;
}
 
bool by_name(const Student& lh, const Student& rh)
{
    return strcmp(lh.name, rh.name) > 0;
}
 
std::ostream& operator<<(std::ostream& os, const Date& d)
{
    return os << std::setfill('0')
              << std::setw(2) << d.day << '/'
              << std::setw(2) << d.month << '/'
              << std::setw(4) << d.year << std::setfill(' ');
}
 
std::ostream& operator<<(std::ostream& os, const Student& st)
{
    os  << std::setw(str_size) << std::setiosflags(std::ios::left) << st.name
        << std::resetiosflags(std::ios::left) << ' ' << st.birth_date << ' ';
    for (size_t i = 0; i < marks_count; os << st.marks[i++] << ' ');
    return os;
}
1
0 / 0 / 0
Регистрация: 20.05.2019
Сообщений: 5
20.05.2019, 22:32  [ТС]
Спасибо за помощь, а как в этом коде реализовать именно ввод данных студентов с клавиатуры , чтобы эта информация хранилась в файле и после с него считывала информацию и сортировала уже с файла

Добавлено через 1 минуту
Спасибо за помощь, а как в этом коде реализовать именно ввод данных студентов с клавиатуры , чтобы эта информация хранилась в файле и после с него считывала информацию и сортировала уже с файла
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
20.05.2019, 23:07
Цитата Сообщение от zava989 Посмотреть сообщение
как в этом коде реализовать именно ввод данных студентов с клавиатуры , чтобы эта информация хранилась в файле и после с него считывала информацию и сортировала уже с файла
Информация и так хранится в файле, и сортируется после того как прочитается. Если нужен ввод с клавиатуры, переделайте функцию fill_fileтак, что бы массив arr заполнялся с клавиатуры.
1
0 / 0 / 0
Регистрация: 20.05.2019
Сообщений: 5
20.05.2019, 23:15  [ТС]
Как бы проще сказать, ючусь на заочке и задания приходят по почте и то не всегда,пар нет только инет и ночью перед работой пытаюсь разобраться в непонятном для меня коде( если вас не затруднит помочь с этой реализацией, чтобы увидеть разницу в коде и вникнуть в нее. я понимаю, что это наглость с моей стороны , вы и так помогли очень сильно...и чтобы понимать нужно самому пытаться писать....ну как то так.....
0
168 / 146 / 32
Регистрация: 03.09.2018
Сообщений: 499
20.05.2019, 23:31
Цитата Сообщение от zava989 Посмотреть сообщение
ючусь на заочке
Зачем? Что бы - что? Ты ничего не понимаешь, и вряд - ли начнёшь. Попросту тратишь время на ненужное никому.
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
20.05.2019, 23:53
Без обработки ошибок ввода:
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
void fill_file(const char* fname)
{
    std::ofstream ofs(fname, std::ios::trunc | std::ios::binary);
    for (size_t count = 0; count < N; ++count)
    {
        Student st;
        std::cout << "name: >";
        if (!std::cin.getline(st.name, str_size))
        {
            std::cin.clear();
            std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
        }
        std::cout << "birth date (DD MM YYYY): >";
        std::cin >> st.birth_date.day >> st.birth_date.month >> st.birth_date.year;
        for (size_t j = 0; j < marks_count; ++j)
        {
            std::cout << "mark[" << j + 1 << "]: >";
            std::cin >> st.marks[j];
        }
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
        ofs.write(reinterpret_cast<const char*>(&st), sizeof(Student));
    }
    std::cout << std::endl;
}
1
0 / 0 / 0
Регистрация: 20.05.2019
Сообщений: 5
21.05.2019, 00:09  [ТС]
Разобраться хочется ,но отношение со стороны преподавателей желает лучшего, когда за менее чем месяц направить по 8 ми предметам по 10 лаб. Такое себе ощущение. И приходит просто задача и крутись как хочешь.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.05.2019, 00:09
Помогаю со студенческими работами здесь

Отсортировать список студентов по фамилии
Здравствуйте гуру Паскаля!!!) у меня такая проблемка возникла... вообщем давно за паскаль не садился, а точнее за эту задачу , а вот...

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

Написать список студентов в порядке убывания по фамилии
Люди добрые, помогите с задачей, если есть таковы! &quot;Написать список студентов в порядке убывания по фамилии.&quot;

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

Отсортировать список в алфавитном порядке по фамилии, а затем по возрастанию года рождения
В текстовом файле содержатся записи о студентах. Для каждого студента известны его фамилия, имя, отчество, год рождения, оценки по пяти...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru