Да се състави програма на С++, която въвежда от клавиатурата име, дата на раждане, средния успех на 1

Въпрос

Да се състави програма на С++, която въвежда от клавиатурата име, дата на раждане, средния успех на всеки ученик, броят извинени отсъствия. - Да се изведе на екрана учениците с успех от 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, представляваща информация за всеки ученик, и използва вектор от тези структури за съхранение на данните за всички ученици. След това програмата изпълнява всяка от изискваните задачи.