Потърси помощ за своята домашна
Програма Добавете учебите си часове за седмицата.
Да се състави програма на С++, която въвежда от клавиатурата име, дата на раждане, средния успех на
1
Bahar Ismailova Попитан на 22 февруари 2024 г. в 12:17
Въпрос
Да се състави програма на С++, която въвежда от клавиатурата име, дата на раждане, средния успех на всеки ученик, броят извинени отсъствия.
- Да се изведе на екрана учениците с успех
от 3 до 3,49
от 3,50 до 4,49
от 4,50 до 5,49
от 5,50 до 6,00
- Да се изведе на екрана средният успех на целия клас
- Да се изведе името на ученика/ците с най-нисък и най-висок успех. Ако са няколко с еднакъв брой-извежда имената на всички.
- Да се изведе на екрана името на ученика с най-много и най-малко извинени отсъствия. Ако са няколко с еднакъв брой-извежда имената на всички.
- Да се изведе на екрана името на ученика с най-много и най-малко неизвинени отсъствия. Ако са няколко с еднакъв брой-извежда имената на всички.
- Да се изведе сборът от всички извинени и неизвинени
- Програмиране
Отговор
Ето един възможен начин за написване на програмата на C++, която изпълнява посочените задачи:
```cpp
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
struct Student {
std::string name;
std::string birthdate;
double average_grade;
int excuses;
int unexcused_absences;
};
int main() {
std::vector<Student> students;
// Въвеждане на данни за учениците
int num_students;
std::cout << "Enter the number of students: ";
std::cin >> num_students;
for (int i = 0; i < num_students; ++i) {
Student s;
std::cout << "Enter name, birthdate, average grade, and number of excuses for student " << i + 1 << ": ";
std::cin >> s.name >> s.birthdate >> s.average_grade >> s.excuses >> s.unexcused_absences;
students.push_back(s);
}
// Извеждане на учениците според успеха
std::cout << "\nStudents with average grades:\n";
for (const auto& student : students) {
std::cout << student.name << ": ";
if (student.average_grade >= 3 && student.average_grade < 3.5) {
std::cout << "from 3 to 3.49\n";
} else if (student.average_grade >= 3.5 && student.average_grade < 4.5) {
std::cout << "from 3.5 to 4.49\n";
} else if (student.average_grade >= 4.5 && student.average_grade < 5.5) {
std::cout << "from 4.5 to 5.49\n";
} else if (student.average_grade >= 5.5 && student.average_grade <= 6) {
std::cout << "from 5.5 to 6\n";
}
}
// Изчисляване на среден успех на класа
double class_average = 0;
for (const auto& student : students) {
class_average += student.average_grade;
}
class_average /= students.size();
std::cout << "\nClass average grade: " << class_average << "\n";
// Извеждане на ученика с най-висок и най-нисък успех
auto minmax_grade = std::minmax_element(students.begin(), students.end(),
[](const Student& s1, const Student& s2) { return s1.average_grade < s2.average_grade; });
double min_grade = minmax_grade.first->average_grade;
double max_grade = minmax_grade.second->average_grade;
std::vector<std::string> lowest_grades;
std::vector<std::string> highest_grades;
for (const auto& student : students) {
if (student.average_grade == min_grade) {
lowest_grades.push_back(student.name);
}
if (student.average_grade == max_grade) {
highest_grades.push_back(student.name);
}
}
std::cout << "\nStudents with lowest grades: ";
for (const auto& name : lowest_grades) {
std::cout << name << " ";
}
std::cout << "\nStudents with highest grades: ";
for (const auto& name : highest_grades) {
std::cout << name << " ";
}
// Извеждане на ученика с най-много и най-малко извинени отсъствия
auto minmax_excuses = std::minmax_element(students.begin(), students.end(),
[](const Student& s1, const Student& s2) { return s1.excuses < s2.excuses; });
int min_excuses = minmax_excuses.first->excuses;
int max_excuses = minmax_excuses.second->excuses;
std::vector<std::string> most_excused;
std::vector<std::string> least_excused;
for (const auto& student : students) {
if (student.excuses == min_excuses) {
least_excused.push_back(student.name);
}
if (student.excuses == max_excuses) {
most_excused.push_back(student.name);
}
}
std::cout << "\nStudents with least excuses: ";
for (const auto& name : least_excused) {
std::cout << name << " ";
}
std::cout << "\nStudents with most excuses: ";
for (const auto& name : most_excused) {
std::cout << name << " ";
}
// Извеждане на ученика с най-много и най-малко неизвинени отсъствия
auto minmax_unexcused_absences = std::minmax_element(students.begin(), students.end(),
[](const Student& s1, const Student& s2) { return s1.unexcused_absences < s2.unexcused_absences; });
int min_unexcused_absences = minmax_unexcused_absences.first->unexcused_absences;
int max_unexcused_absences = minmax_unexcused_absences.second->unexcused_absences;
std::vector<std::string> most_unexcused;
std::vector<std::string> least_unexcused;
for (const auto& student : students) {
if (student.unexcused_absences == min_unexcused_absences) {
least_unexcused.push_back(student.name);
}
if (student.unexcused_absences == max_unexcused_absences) {
most_unexcused.push_back(student.name);
}
}
std::cout << "\nStudents with least unexcused absences: ";
for (const auto& name : least_unexcused) {
std::cout << name << " ";
}
std::cout << "\nStudents with most unexcused absences: ";
for (const auto& name : most_unexcused) {
std::cout << name << " ";
}
// Извеждане на сборът от всички извинени и неизвинени отсъствия
int total_excuses = 0;
int total_unexcused_absences = 0;
for (const auto& student : students) {
total_excuses += student.excuses;
total_unexcused_absences += student.unexcused_absences;
}
std::cout << "\nTotal excuses: " << total_excuses << "\n";
std::cout << "Total unexcused absences: " << total_unexcused_absences << "\n";
return 0;
}
```
Тази програма създава структура Student, представляваща информация за всеки ученик, и използва вектор от тези структури за съхранение на данните за всички ученици. След това програмата изпълнява всяка от изискваните задачи.