C/C++
Программирование на C++
Опишите структуру Abiturient (ФИО; серия, номер паспорта; балл ЕГЭ по математике; балл ЕГЭ по русскому языку; балл ЕГЭ по обществознанию, направление подготовки). Выведите алфавитный список абитуриентов с общей суммой баллов ЕГЭ по 3- предметам.
#include <algorithm>
#include <iostream>
#include <string>
#include <set>
using namespace std;
string line(istream& inp, const char* msg) {
cout << msg;
string str;
getline(inp, str);
return str;
}
short grade(istream& inp, const char* msg, short max) {
short value = 0;
do {
cout << msg;
inp >> value;
inp.ignore(inp.rdbuf()->in_avail());
} while (value > max);
return value;
}
struct Abiturient {
short math;
short russian;
short social;
string name;
string passport;
string direction;
Abiturient() : math(0), russian(0), social(0) {}
int sum()const {
return math + russian + social;
}
private:
friend bool operator<(const Abiturient& a, const Abiturient& b) {
return a.name < b.name;
}
friend istream& operator>>(istream& inp, Abiturient& ab) {
ab.name = line(inp, "Ф. И. О.: ");
ab.passport = line(inp, "Серия и номер паспорта: ");
ab.direction = line(inp, "Направление подготовки: ");
ab.math = grade(inp, "Математика: ", 5);
ab.russian = grade(inp, "Русский язык: ", 5);
ab.social = grade(inp, "Обществознание: ", 5);
return inp;
}
};
int main() {
system("chcp 1251 > nul");
const auto length = 3;
set<Abiturient> list;
cout << "Введите данные на " << length << " абитуриентов: ";
for (auto i = 0; i < length; ++i) {
Abiturient ab;
cin >> ab;
list.emplace(ab);
puts("");
}
for (const auto& item : list) {
cout << item.name << ' ' << item.sum() << '\n';
}
system("pause > nul");
}
#include <iostream>
#include <string>
#include <set>
using namespace std;
string line(istream& inp, const char* msg) {
cout << msg;
string str;
getline(inp, str);
return str;
}
short grade(istream& inp, const char* msg, short max) {
short value = 0;
do {
cout << msg;
inp >> value;
inp.ignore(inp.rdbuf()->in_avail());
} while (value > max);
return value;
}
struct Abiturient {
short math;
short russian;
short social;
string name;
string passport;
string direction;
Abiturient() : math(0), russian(0), social(0) {}
int sum()const {
return math + russian + social;
}
private:
friend bool operator<(const Abiturient& a, const Abiturient& b) {
return a.name < b.name;
}
friend istream& operator>>(istream& inp, Abiturient& ab) {
ab.name = line(inp, "Ф. И. О.: ");
ab.passport = line(inp, "Серия и номер паспорта: ");
ab.direction = line(inp, "Направление подготовки: ");
ab.math = grade(inp, "Математика: ", 5);
ab.russian = grade(inp, "Русский язык: ", 5);
ab.social = grade(inp, "Обществознание: ", 5);
return inp;
}
};
int main() {
system("chcp 1251 > nul");
const auto length = 3;
set<Abiturient> list;
cout << "Введите данные на " << length << " абитуриентов: ";
for (auto i = 0; i < length; ++i) {
Abiturient ab;
cin >> ab;
list.emplace(ab);
puts("");
}
for (const auto& item : list) {
cout << item.name << ' ' << item.sum() << '\n';
}
system("pause > nul");
}
Давай по памяти покомпактнее положим. Считаем
ФИО - 3 символа
Балл по ЕГЭ - от 0 до 100, если память не изменяет. Значит, можно в 3 символа уложить, что компактнее, нежели int. А можно и в 1, т. к char до 256 даст
Паспорт: серия - 4 цифры, номер - 6 цифр, итого 10. А вот тут можно и 2 int обойтись, если они у тебя по 4 байта будут
Направление подготовки - понятие не имею, что то, но если направлений меньше 256 - можно как байт записать и приводить к энуму
Итого
class PackedAbiturient
{
char m_data[ 3 + 3 + 1 = 7 ];
int passport[2];
}
ФИО - 3 символа
Балл по ЕГЭ - от 0 до 100, если память не изменяет. Значит, можно в 3 символа уложить, что компактнее, нежели int. А можно и в 1, т. к char до 256 даст
Паспорт: серия - 4 цифры, номер - 6 цифр, итого 10. А вот тут можно и 2 int обойтись, если они у тебя по 4 байта будут
Направление подготовки - понятие не имею, что то, но если направлений меньше 256 - можно как байт записать и приводить к энуму
Итого
class PackedAbiturient
{
char m_data[ 3 + 3 + 1 = 7 ];
int passport[2];
}
class Abiturient{
std::string name;
int EGEMath, EGERussian, EGESocialEducation;
std::string PrepareDirection;
};
// Откуда брать список не понятно, так что вторая часть не очень выполнима из-за не описанных источников данных
std::string name;
int EGEMath, EGERussian, EGESocialEducation;
std::string PrepareDirection;
};
// Откуда брать список не понятно, так что вторая часть не очень выполнима из-за не описанных источников данных
Rustam Halimov
из головы: D
Похожие вопросы
- Программирование на C++
- Программирование на C++
- Помоги написать лабу по программированию на c++
- Помогите решить задачу по программированию на C++
- Программирование на C. Помогите бездарю
- На каком языке программирования написан C (Си)?
- Программирование на c++
- Программирование на C++
- Помогите с программированием на C++
- Задание по программированию язык C/СИ