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

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

20.05.2019, 18:52. Просмотров 2640. Ответов 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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.05.2019, 18:52
Ответы с готовыми решениями:

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

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

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

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

7
3953 / 2228 / 928
Регистрация: 07.02.2019
Сообщений: 5,850
20.05.2019, 20:55 2
Лучший ответ Сообщение было отмечено 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  [ТС] 3
Спасибо за помощь, а как в этом коде реализовать именно ввод данных студентов с клавиатуры , чтобы эта информация хранилась в файле и после с него считывала информацию и сортировала уже с файла

Добавлено через 1 минуту
Спасибо за помощь, а как в этом коде реализовать именно ввод данных студентов с клавиатуры , чтобы эта информация хранилась в файле и после с него считывала информацию и сортировала уже с файла
0
3953 / 2228 / 928
Регистрация: 07.02.2019
Сообщений: 5,850
20.05.2019, 23:07 4
Цитата Сообщение от zava989 Посмотреть сообщение
как в этом коде реализовать именно ввод данных студентов с клавиатуры , чтобы эта информация хранилась в файле и после с него считывала информацию и сортировала уже с файла
Информация и так хранится в файле, и сортируется после того как прочитается. Если нужен ввод с клавиатуры, переделайте функцию fill_fileтак, что бы массив arr заполнялся с клавиатуры.
1
0 / 0 / 0
Регистрация: 20.05.2019
Сообщений: 5
20.05.2019, 23:15  [ТС] 5
Как бы проще сказать, ючусь на заочке и задания приходят по почте и то не всегда,пар нет только инет и ночью перед работой пытаюсь разобраться в непонятном для меня коде( если вас не затруднит помочь с этой реализацией, чтобы увидеть разницу в коде и вникнуть в нее. я понимаю, что это наглость с моей стороны , вы и так помогли очень сильно...и чтобы понимать нужно самому пытаться писать....ну как то так.....
0
4 / 4 / 0
Регистрация: 03.09.2018
Сообщений: 74
20.05.2019, 23:31 6
Цитата Сообщение от zava989 Посмотреть сообщение
ючусь на заочке
Зачем? Что бы - что? Ты ничего не понимаешь, и вряд - ли начнёшь. Попросту тратишь время на ненужное никому.
0
3953 / 2228 / 928
Регистрация: 07.02.2019
Сообщений: 5,850
20.05.2019, 23:53 7
Без обработки ошибок ввода:
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
Разобраться хочется ,но отношение со стороны преподавателей желает лучшего, когда за менее чем месяц направить по 8 ми предметам по 10 лаб. Такое себе ощущение. И приходит просто задача и крутись как хочешь.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.05.2019, 00:09

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.