Добрый преподаватель Иванов Иван Иваныч решил на последнем занятии улучшить всем ребятам из его класса средний балл. Для этого он решил добавлять им пятерки, пока средний балл не станет равен хотя бы 4.5.
Напишите функцию void add_mark(Student &s, int mark), которая добавляет ученику s оценку mark.
Воспользовавшись функциями, написанными в предыдущем занятии, и функцией add_mark, считайте с клавиатуры 5 учащихся, которые учатся у Ивана Иваныча, подредактируйте их оценки, и выведите новый журнал учащихся.
Формат входных данных
C клавиатуры подряд вводятся описания 5 учеников: имя и фамилия (слова из латинских букв не длиннее 50 символов), возраст (натуральное число, не превышающее 100), класс (целое число от 1 до 11), количество оценок ( целое неотрицательно число, не превышающее 30), оценки. Каждая из оценок — целое число от 2 до 5.
Формат выходных данных
Требуется вывести 5 учащихся в том же формате, в котором они и вводились (но без перевода строк между учениками).
входные данные
Bill Gates 15 7 3
2 5 3
Sergey Brin 10 4 5
5 3 4 5 4
Linus Torvalds 12 5 2
4 5
Larry Ellison 17 11 4
4 4 4 4
выходные данные
Steve Jobs 16 9 3
2 2 3
Bill Gates 15 7 10
2 5 3 5 5 5 5 5 5 5
Sergey Brin 10 4 8
5 3 4 5 4 5 5 5
Linus Torvalds 12 5 2
4 5
Larry Ellison 17 11 8
4 4 4 4 5 5 5 5
Steve Jobs 16 9 16
2 2 3 5 5 5 5 5 5 5 5 5 5 5 5 5
Кому интересно, вот код:
#include < iostream>
#include < cmath>
#include < iomanip>
using namespace std;
struct Student {
char name [56];
char surname [56];
int age;
int grade;
int mark_count;
int *marks;
};
Student read_student() {
Student s;
cin >> s.name >> s.surname >> s.age >> s.grade >> s.mark_count;
s.marks = new int[s.mark_count];
for (int i = 0; i < s.mark_count; i++) cin >> s.marks[i];
return s;
}
void add_mark (Student &person) {
double sum = 0;
for (int i = 0; i < person.mark_count; i++) {
sum += person.marks[i];
}
double rez = sum / person.mark_count;
int counter = 0;
double sum_del = sum;
double rez_del = rez;
int person_mark_count_del = person.mark_count;
if (rez < 4.5) {
while (rez_del < 4.5) {
rez_del = sum_del / person_mark_count_del;
sum_del += 5;
person_mark_count_del += 1;
counter++;
}
counter--;
}
int *marks = new int[person_mark_count_del];
for (int i = 0; i < person.mark_count; i++) marks[i] = person.marks[i];
for (int i = person.mark_count; i < person_mark_count_del; i++) marks[i] = 5;
delete [] person.marks;
person.marks = marks;
person.mark_count = person_mark_count_del;
}
void student (Student &person) {
cout << person.name << " " << person.surname << " " << person.age << " " << person.grade << " " << person.mark_count << " " << endl;
for (int i = 0; i < person.mark_count; i++) cout << person.marks[i] << " ";
cout << endl;
}
int main() {
Student data[5];
for (int i = 0; i < 5; i++)
data[i] = read_student();
for (int i = 0; i < 5; i++)
add_mark(data[i]);
for (int i = 0; i < 5; i++)
student(data[i]);
for (int i = 0; i < 5; i++)
delete [] data[i].marks;
return 0;
}
Другие языки программирования и технологии
C++ помогите пожалуйста! Без вашей помощи никак не получается
#include <iostream>
#include <string>
#include <vector>
#include <numeric>
using namespace std;
struct Student {
string name;
string surname;
unsigned age;
unsigned group;
unsigned quantity;
vector<unsigned> box;
double avg() {
return accumulate(box.begin(), box.end(), .0) / box.size();
}
void falsification(double value) {
if (value < 1 || value > 5) return;
auto x = avg();
while (x < value) {
box.push_back(5);
++quantity;
x = avg();
}
}
friend istream& operator>>(istream& in, Student& o) {
cin >> o.name >> o.surname >> o.age >> o.group >> o.quantity;
for (auto i = 0U; i < o.quantity; ++i) {
unsigned x;
in >> x;
o.box.push_back(x);
}
return in;
}
friend ostream& operator<<(ostream& out, const Student& o) {
out << o.name << ' '
<< o.surname << ' '
<< o.age << ' '
<< o.group << ' '
<< o.quantity << '\n';
for (auto v : o.box) out << v << ' ';
return out;
}
};
class StudentJournal {
public:
void add(unsigned n) {
for (auto i = 0U; i < n; ++i) {
Student person;
cin >> person;
box_.push_back(person);
}
}
void fake(double f) {
for (auto& x : box_) x.falsification(f);
}
void show()const {
for (const auto& x : box_) cout << x << '\n';
}
private:
vector<Student> box_;
};
int main() {
auto n = 5U;
StudentJournal journal;
journal.add(n);
cout.put('\n');
journal.fake(4.5);
journal.show();
system("pause > nul");
}
#include <string>
#include <vector>
#include <numeric>
using namespace std;
struct Student {
string name;
string surname;
unsigned age;
unsigned group;
unsigned quantity;
vector<unsigned> box;
double avg() {
return accumulate(box.begin(), box.end(), .0) / box.size();
}
void falsification(double value) {
if (value < 1 || value > 5) return;
auto x = avg();
while (x < value) {
box.push_back(5);
++quantity;
x = avg();
}
}
friend istream& operator>>(istream& in, Student& o) {
cin >> o.name >> o.surname >> o.age >> o.group >> o.quantity;
for (auto i = 0U; i < o.quantity; ++i) {
unsigned x;
in >> x;
o.box.push_back(x);
}
return in;
}
friend ostream& operator<<(ostream& out, const Student& o) {
out << o.name << ' '
<< o.surname << ' '
<< o.age << ' '
<< o.group << ' '
<< o.quantity << '\n';
for (auto v : o.box) out << v << ' ';
return out;
}
};
class StudentJournal {
public:
void add(unsigned n) {
for (auto i = 0U; i < n; ++i) {
Student person;
cin >> person;
box_.push_back(person);
}
}
void fake(double f) {
for (auto& x : box_) x.falsification(f);
}
void show()const {
for (const auto& x : box_) cout << x << '\n';
}
private:
vector<Student> box_;
};
int main() {
auto n = 5U;
StudentJournal journal;
journal.add(n);
cout.put('\n');
journal.fake(4.5);
journal.show();
system("pause > nul");
}
Если k - количество существующих оценок, s - сумма оценок, n - кол-во добавляемых пятёрок, то:
(s + 5 * n) / (k + n) = 4.5
s + 5 * n = 4.5 * k + 4.5 * n
0.5 * n = 4.5 * k - s
n = 9 * k - 2 * s
По заданию add_mark добавляет ОДНУ оценку:
void add_mark(Student &person, int mark) {
int *old = person.marks;
person.marks = new int[person.mark_count + 1];
for (int i = 0; i < person.mark_count; ++i) { person.marks[i] = old[i]; }
person.marks[person.mark_count++] = mark;
delete[] old;
}
// Добавление пятёрок в коде main
for (int i = 0; i < 5; ++i) {
int s = 0;
for (int j = 0; j < data[i].mark_count; ++j) { s += data[i].marks[j]; }
for (int j = 9 * data[i].mark_count - 2 * s; j > 0; --j) { add_mark(data[i], 5); }
}
(s + 5 * n) / (k + n) = 4.5
s + 5 * n = 4.5 * k + 4.5 * n
0.5 * n = 4.5 * k - s
n = 9 * k - 2 * s
По заданию add_mark добавляет ОДНУ оценку:
void add_mark(Student &person, int mark) {
int *old = person.marks;
person.marks = new int[person.mark_count + 1];
for (int i = 0; i < person.mark_count; ++i) { person.marks[i] = old[i]; }
person.marks[person.mark_count++] = mark;
delete[] old;
}
// Добавление пятёрок в коде main
for (int i = 0; i < 5; ++i) {
int s = 0;
for (int j = 0; j < data[i].mark_count; ++j) { s += data[i].marks[j]; }
for (int j = 9 * data[i].mark_count - 2 * s; j > 0; --j) { add_mark(data[i], 5); }
}
Viktor Tschanko
Давайте я прикреплю код выше к задаче и вы посмотрите на него?
Viktor Tschanko
Вот, я прикрепил код к задаче, можете пожалуйста посмотреть и сказать в чем я ошибся?
встречный вопрос, этому сейчас в школах учат? (личный интерес, сейчас что-нибудь наваяю)
Viktor Tschanko
Это не совсем школа, я хожу на курсы программирования. Но проблема в том что я сейчас не могу сделать эту задачу) У меня есть код, но не совсем верный, могу скинуть посмотрите)
Похожие вопросы
- Перевести C++ => C# Помогите пожалуйста!
- Програмрование C# .Помогите пожалуйста решить задачу . Бьюсь головой об экран уже ...
- Программирование C# Помогите пожалуйста, кто понимает...
- Помогите пожалуйста, мне нужна помощь насчёт будущего. Что выбрать?
- помогите пожалуйста кто смыслит в C# или в C++, очень нужна ваша помощь, нужен код программы, точнее двух
- Помогите пожалуйста разобрать задачу по програмированию на C++.
- Язык Arduino(C, C++) Нужна помощь: в изучении arduino встретил знак "&" помогите, пожалуйста, что он означает!
- здравствуйте, помогите пожалуйста, что не так вот c C++ кодом:
- Помогите пожалуйста!Какое различие от ОЗУ и диска C или D ?
- Помогите пожалуйста решить на языке C++