#include <iostream>
#include <list>
#include <string>
#include <algorithm>
using namespace std;
struct Student {
string surname;
int course;
int mathan;
int algebra;
};
bool compareBySurname(const Student& a, const Student& b) {
return a.surname < b.surname;
}
bool compareByCourse(const Student& a, const Student& b) {
return a.course < b.course;
}
bool hasLowGrades(const Student& s) {
return s.mathan < 60 || s.algebra < 60;
}
void printList(const list<Student>& lst) {
list<Student>::const_iterator it;
for (it = lst.begin(); it != lst.end(); ++it) {
cout << it->surname << " курс " << it->course
<< " mathan - " << it->mathan
<< " algebra - " << it->algebra << endl;
}
cout << endl;
}
int main() {
list<Student> students = {
{"Іваненко", 1, 75, 82},
{"Петренко", 2, 91, 88},
{"Сидоренко", 1, 58, 64},
{"Бондар", 2, 67, 59},
{"Коваль", 1, 45, 51},
{"Ткаченко", 2, 88, 79},
{"Литвин", 1, 62, 65}
};
cout << "📋 Початковий список студентів:\n";
printList(students);
students.sort(compareBySurname);
cout << "🔤 Відсортовано за прізвищем (compareBySurname):\n";
printList(students);
students.sort(compareByCourse);
cout << "🎓 Відсортовано за курсом (compareByCourse):\n";
printList(students);
cout << "Після переведення на наступний курс (mathan > 60 && algebra > 60):\n";
printList(students);
students.remove_if(hasLowGrades);
cout << "❌ Після видалення студентів з оцінками < 60:\n";
printList(students);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bGlzdD4KI2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGFsZ29yaXRobT4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpzdHJ1Y3QgU3R1ZGVudCB7CiAgICBzdHJpbmcgc3VybmFtZTsKICAgIGludCBjb3Vyc2U7CiAgICBpbnQgbWF0aGFuOwogICAgaW50IGFsZ2VicmE7Cn07Cgpib29sIGNvbXBhcmVCeVN1cm5hbWUoY29uc3QgU3R1ZGVudCYgYSwgY29uc3QgU3R1ZGVudCYgYikgewogICAgcmV0dXJuIGEuc3VybmFtZSA8IGIuc3VybmFtZTsKfQoKYm9vbCBjb21wYXJlQnlDb3Vyc2UoY29uc3QgU3R1ZGVudCYgYSwgY29uc3QgU3R1ZGVudCYgYikgewogICAgcmV0dXJuIGEuY291cnNlIDwgYi5jb3Vyc2U7Cn0KCmJvb2wgaGFzTG93R3JhZGVzKGNvbnN0IFN0dWRlbnQmIHMpIHsKICAgIHJldHVybiBzLm1hdGhhbiA8IDYwIHx8IHMuYWxnZWJyYSA8IDYwOwp9CgoKdm9pZCBwcmludExpc3QoY29uc3QgbGlzdDxTdHVkZW50PiYgbHN0KSB7CiAgICBsaXN0PFN0dWRlbnQ+Ojpjb25zdF9pdGVyYXRvciBpdDsKICAgIGZvciAoaXQgPSBsc3QuYmVnaW4oKTsgaXQgIT0gbHN0LmVuZCgpOyArK2l0KSB7CiAgICAgICAgY291dCA8PCBpdC0+c3VybmFtZSA8PCAiICDQutGD0YDRgSAiIDw8IGl0LT5jb3Vyc2UKICAgICAgICAgICAgIDw8ICIgIG1hdGhhbiAtICIgPDwgaXQtPm1hdGhhbgogICAgICAgICAgICAgPDwgIiAgYWxnZWJyYSAtICIgPDwgaXQtPmFsZ2VicmEgPDwgZW5kbDsKICAgIH0KICAgIGNvdXQgPDwgZW5kbDsKfQoKaW50IG1haW4oKSB7CiAgICBsaXN0PFN0dWRlbnQ+IHN0dWRlbnRzID0gewogICAgICAgIHsi0IbQstCw0L3QtdC90LrQviIsIDEsIDc1LCA4Mn0sCiAgICAgICAgeyLQn9C10YLRgNC10L3QutC+IiwgMiwgOTEsIDg4fSwKICAgICAgICB7ItCh0LjQtNC+0YDQtdC90LrQviIsIDEsIDU4LCA2NH0sCiAgICAgICAgeyLQkdC+0L3QtNCw0YAiLCAyLCA2NywgNTl9LAogICAgICAgIHsi0JrQvtCy0LDQu9GMIiwgMSwgNDUsIDUxfSwKICAgICAgICB7ItCi0LrQsNGH0LXQvdC60L4iLCAyLCA4OCwgNzl9LAogICAgICAgIHsi0JvQuNGC0LLQuNC9IiwgMSwgNjIsIDY1fQogICAgfTsKCiAgICBjb3V0IDw8ICLwn5OLINCf0L7Rh9Cw0YLQutC+0LLQuNC5INGB0L/QuNGB0L7QuiDRgdGC0YPQtNC10L3RgtGW0LI6XG4iOwogICAgcHJpbnRMaXN0KHN0dWRlbnRzKTsKCiAgICBzdHVkZW50cy5zb3J0KGNvbXBhcmVCeVN1cm5hbWUpOwogICAgY291dCA8PCAi8J+UpCDQktGW0LTRgdC+0YDRgtC+0LLQsNC90L4g0LfQsCDQv9GA0ZbQt9Cy0LjRidC10LwgKGNvbXBhcmVCeVN1cm5hbWUpOlxuIjsKICAgIHByaW50TGlzdChzdHVkZW50cyk7CgogICAgCiAgICBzdHVkZW50cy5zb3J0KGNvbXBhcmVCeUNvdXJzZSk7CiAgICBjb3V0IDw8ICLwn46TINCS0ZbQtNGB0L7RgNGC0L7QstCw0L3QviDQt9CwINC60YPRgNGB0L7QvCAoY29tcGFyZUJ5Q291cnNlKTpcbiI7CiAgICBwcmludExpc3Qoc3R1ZGVudHMpOwoKICAgIGNvdXQgPDwgItCf0ZbRgdC70Y8g0L/QtdGA0LXQstC10LTQtdC90L3RjyDQvdCwINC90LDRgdGC0YPQv9C90LjQuSDQutGD0YDRgSAobWF0aGFuID4gNjAgJiYgYWxnZWJyYSA+IDYwKTpcbiI7CiAgICBwcmludExpc3Qoc3R1ZGVudHMpOwoKICAgCiAgICBzdHVkZW50cy5yZW1vdmVfaWYoaGFzTG93R3JhZGVzKTsKICAgIGNvdXQgPDwgIuKdjCDQn9GW0YHQu9GPINCy0LjQtNCw0LvQtdC90L3RjyDRgdGC0YPQtNC10L3RgtGW0LIg0Lcg0L7RhtGW0L3QutCw0LzQuCA8IDYwOlxuIjsKICAgIHByaW50TGlzdChzdHVkZW50cyk7CgogICAgcmV0dXJuIDA7Cn0=