Другие языки программирования и технологии
Нужно решить задачу на языке программирования С++
Вычислить средний балл учеников класса, если известны оценки каждого по математике, русскому языку и физике. Распечатать список учеников, имеющих средний балл выше среднего в классе.
#include <iostream>
#include <string>
#include <set>
#include <algorithm>
#include <iterator>
#include <iomanip>
#include <numeric>
using namespace std;
class Schoolkid {
public:
Schoolkid() : name_("-"), maths_(0), physics_(0), russian_(0) {}
double average()const { return (maths_ + physics_ + russian_) / 3.0; }
void name(const string& value) { name_ = value; }
string name()const { return name_; }
void maths(const int value) { maths_ = value; }
int maths()const { return maths_; }
void physics(const int value) { physics_ = value; }
int physics()const { return physics_; }
void russian(const int value) { russian_ = value; }
int russian()const { return russian_; }
private:
string name_;
int maths_;
int physics_;
int russian_;
friend bool operator<(const Schoolkid& a, const Schoolkid& b) { return a.average() < b.average(); }
friend ostream& operator<<(ostream& out, const Schoolkid& sk) {
out << sk.name_ << '\n'
<< " * Математика: " << sk.maths_ << '\n'
<< " * Физика: " << sk.physics_ << '\n'
<< " * Русский язык: " << sk.russian_ << '\n'
<< " # Средний балл: " << fixed << setprecision(2) << sk.average() << '\n';
cout.unsetf(ios::fixed);
return out;
}
};
class Group {
public:
Group(const string& id) : id_(id) {}
void add(const Schoolkid& sk) { box_.insert(sk); }
void add(Schoolkid&& sk) { box_.emplace(sk); }
string id()const { return id_; }
double average()const {
auto avg = [](double acc, const Schoolkid& sk) {
return acc += sk.average();
};
return accumulate(box_.begin(), box_.end(), .0, avg) / box_.size();
}
void show()const {
copy(box_.begin(), box_.end(), ostream_iterator<Schoolkid>(cout, "\n"));
}
void best()const {
auto avg = average();
for (const auto& item : box_) if (item.average() > avg) cout << item << '\n';
}
private:
string id_;
multiset<Schoolkid> box_;
};
int point(const char* msg, int min = 1, int max = 5) {
int value;
do {
cout << msg;
cin >> value;
} while (value < min || value > max);
cin.ignore(numeric_limits<streamsize>::max(), '\n');
return value;
}
Schoolkid input_sk() {
Schoolkid sk;
cout << "Ф. И. О.: ";
string name;
getline(cin, name);
sk.name(name);
sk.maths(point("Математика: "));
sk.physics(point("Физика: "));
sk.russian(point("Русский язык: "));
return sk;
}
int main() {
system("chcp 1251 > nul");
int limit = point("Количество учеников: ", 8, 24);
Group group("10а");
for (auto i = 0; i < limit; ++i) {
auto sk = input_sk();
group.add(sk);
}
cout
<< "\tСредний балл учеников " << group.id() << " класса: " << group.average() << "\n"
<< "\tУченики, чей средний балл выше среднего в классе: \n";
group.best();
system("pause");
}
#include <string>
#include <set>
#include <algorithm>
#include <iterator>
#include <iomanip>
#include <numeric>
using namespace std;
class Schoolkid {
public:
Schoolkid() : name_("-"), maths_(0), physics_(0), russian_(0) {}
double average()const { return (maths_ + physics_ + russian_) / 3.0; }
void name(const string& value) { name_ = value; }
string name()const { return name_; }
void maths(const int value) { maths_ = value; }
int maths()const { return maths_; }
void physics(const int value) { physics_ = value; }
int physics()const { return physics_; }
void russian(const int value) { russian_ = value; }
int russian()const { return russian_; }
private:
string name_;
int maths_;
int physics_;
int russian_;
friend bool operator<(const Schoolkid& a, const Schoolkid& b) { return a.average() < b.average(); }
friend ostream& operator<<(ostream& out, const Schoolkid& sk) {
out << sk.name_ << '\n'
<< " * Математика: " << sk.maths_ << '\n'
<< " * Физика: " << sk.physics_ << '\n'
<< " * Русский язык: " << sk.russian_ << '\n'
<< " # Средний балл: " << fixed << setprecision(2) << sk.average() << '\n';
cout.unsetf(ios::fixed);
return out;
}
};
class Group {
public:
Group(const string& id) : id_(id) {}
void add(const Schoolkid& sk) { box_.insert(sk); }
void add(Schoolkid&& sk) { box_.emplace(sk); }
string id()const { return id_; }
double average()const {
auto avg = [](double acc, const Schoolkid& sk) {
return acc += sk.average();
};
return accumulate(box_.begin(), box_.end(), .0, avg) / box_.size();
}
void show()const {
copy(box_.begin(), box_.end(), ostream_iterator<Schoolkid>(cout, "\n"));
}
void best()const {
auto avg = average();
for (const auto& item : box_) if (item.average() > avg) cout << item << '\n';
}
private:
string id_;
multiset<Schoolkid> box_;
};
int point(const char* msg, int min = 1, int max = 5) {
int value;
do {
cout << msg;
cin >> value;
} while (value < min || value > max);
cin.ignore(numeric_limits<streamsize>::max(), '\n');
return value;
}
Schoolkid input_sk() {
Schoolkid sk;
cout << "Ф. И. О.: ";
string name;
getline(cin, name);
sk.name(name);
sk.maths(point("Математика: "));
sk.physics(point("Физика: "));
sk.russian(point("Русский язык: "));
return sk;
}
int main() {
system("chcp 1251 > nul");
int limit = point("Количество учеников: ", 8, 24);
Group group("10а");
for (auto i = 0; i < limit; ++i) {
auto sk = input_sk();
group.add(sk);
}
cout
<< "\tСредний балл учеников " << group.id() << " класса: " << group.average() << "\n"
<< "\tУченики, чей средний балл выше среднего в классе: \n";
group.best();
system("pause");
}
Похожие вопросы
- Программирование задач на языке программирования C++.
- Решение задачи на языке программирования С++.
- Помогите решить задачу на языке Паскаль. Найти сумму всех чётных чисел от 1 до 1000 (задачу решить 2 способами)
- Мальчики! Помогите пожалуйста с задачей на языке программирования C#
- Нужна помощь в решении задачи по языку программирования С++!!срочно!
- Помогите решить задачу на языке c++. Не понимаю условия в конце кода.
- что нужно, чтобы начать изучать язык программирования??? посоветуйте с какого языка начать
- С чего нужно начинать путь изучения языков программирования чтобы стать программистом?
- Нужно решить задачу в Паскале.
- Что нужно учить перед изучением языка программирования?