Advertisement
Razorspined

Задача

Jan 3rd, 2023
847
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.15 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <string>
  4.  
  5. using namespace std;
  6.  
  7. /*
  8. ---
  9. Един клас, който описва студент в класно отделение. Един студент се характеризира със следните неща:
  10. - факултетен номер
  11. - име (без значение дали едно или три)
  12. - курс в който се намира
  13. - общ списък с оценки (т.е. няма значение коя оценка по каква дисциплина е, просто каква е самата оценка)
  14.  
  15. Да се направят следните функции:
  16. - функция, която вписва оценка за студента;
  17. - функция, която вписва списък от оценки;
  18. - функция, която принтира всичките оценки на студента;
  19. - функция, която смята средно-аритметичния успех на студента;
  20.  
  21. Да се направят следните оператори:
  22. - оператор за събиране със число, като въпросното число се вписва към оценките на студента
  23. - оператор за еднаквост с число, като този оператор връща колко оценки има които съвпадат с числото
  24.  
  25. ---
  26. Един клас, който описва класно отделение. Едно класно отделение се характеризира със
  27. следните неща:
  28. - номер на класното отделение;
  29. - списък със студенти във въпросното класно отделение;
  30.  
  31. Да се направят следните функции:
  32. - функция, която вписва студент към класното отделение;
  33. - функция, която смята средния успех на цялото класно;
  34. - функция, която връща колко студента имат среден успех под дадена от нас оценка;
  35. - функция, която връща списък със всички студенти, които имат поне една двойка като оценка;
  36.  
  37. Да се направят следните оператори:
  38. - оператор за събиране със студент, като въпросният студент се вписва към класното отделение
  39. - оператор за сравнение (по-голямо) със число, като този оператор връща колко на брой студенти имат среден успех по-голям от даденото число
  40. - оператор за извеждане към конзола (<<), като се принтира името, факултетния номер и списъка с оценки на всеки студент
  41.  
  42. 1. класове
  43. 2. функции
  44. 3. оператори
  45.  
  46. */
  47.  
  48. class Student {
  49. public:
  50.     int id;
  51.     string name;
  52.     int year;
  53.     vector<int> grades;
  54.  
  55.     Student() {}
  56.  
  57.     Student(int i, string n, int y, vector<int> g) {
  58.         id = i;
  59.         name = n;
  60.         year = y;
  61.         grades = g;
  62.     }
  63.  
  64.     void addGrade(int newGrade) {
  65.         grades.push_back(newGrade);
  66.     }
  67.  
  68.     void addGrades(vector<int> newGrades) {
  69.         for (int i = 0; i < newGrades.size(); i++) {
  70.             grades.push_back(newGrades[i]);
  71.         }
  72.         //for (int grade : newGrades) {
  73.         //  grades.push_back(grade);
  74.         //}
  75.     }
  76.  
  77.     void printGrades() {
  78.         for (int i = 0; i < grades.size(); i++) {
  79.             cout << grades[i] << " ";
  80.         }
  81.     }
  82.  
  83.     float averageGrade() {
  84.         int sum = 0;
  85.         for (int i = 0; i < grades.size(); i++) {
  86.             sum += grades[i];
  87.         }
  88.  
  89.         return (float)sum / (float)grades.size();
  90.     }
  91.  
  92.     Student operator+(int grade) {
  93.         grades.push_back(grade);
  94.  
  95.         return *this;
  96.     }
  97.  
  98.     Student operator+=(int grade) {
  99.         grades.push_back(grade);
  100.  
  101.         return *this;
  102.     }
  103.  
  104.     int operator==(int grade) {
  105.         int count = 0;
  106.  
  107.         for (int g : grades) {
  108.             count += (grade == g) ? 1 : 0;
  109.         }
  110.         return count;
  111.     }
  112. };
  113.  
  114. // Student + 6
  115. // Student == 6 ( да получа бройка колко шестици има тоя студент)
  116.  
  117. class StudentGroup {
  118. public:
  119.     int id;
  120.     vector<Student> students;
  121.  
  122.     StudentGroup() {}
  123.  
  124.     StudentGroup(int i, vector<Student> s) {
  125.         id = i;
  126.         students = s;
  127.     }
  128.  
  129.     void addStudent(Student newStudent) {
  130.         students.push_back(newStudent);
  131.     }
  132.  
  133.     float averageGrade() {
  134.         float sum = 0;
  135.         for (int i = 0; i < students.size(); i++) {
  136.             sum += students[i].averageGrade();
  137.         }
  138.  
  139.         return (float)sum / (float)students.size();
  140.     }
  141.  
  142.     int averageBelow(int grade) {
  143.         int counter = 0;
  144.  
  145.         for (int i = 0; i < students.size(); i++) {
  146.             if (students[i].averageGrade() < grade) {
  147.                 counter++;
  148.             }
  149.         }
  150.  
  151.         return counter;
  152.     }
  153.  
  154.     vector<Student> failingStudents() {
  155.         vector<Student> result;
  156.  
  157.         /*for (int i = 0; i < students.size(); i++) {
  158.             for (int j = 0; j < students[i].grades.size(); j++) {
  159.                 if(students[i].grades[j] == 2)
  160.             }
  161.         }*/
  162.  
  163.         for (Student s : students) {
  164.             for (int grade : s.grades) {
  165.                 if (grade == 2) {
  166.                     result.push_back(s);
  167.                     break;
  168.                 }
  169.             }
  170.         }
  171.  
  172.         return result;
  173.     }
  174.  
  175.     StudentGroup operator+(Student s) {
  176.         students.push_back(s);
  177.  
  178.         return *this;
  179.     }
  180.  
  181.     StudentGroup operator+=(Student s) {
  182.         students.push_back(s);
  183.  
  184.         return *this;
  185.     }
  186.  
  187.     int operator>(int grade) {
  188.         int count = 0;
  189.  
  190.         for (Student s : students) {
  191.             count += (s.averageGrade() > grade) ? 1 : 0;
  192.         }
  193.  
  194.         return count;
  195.     }
  196.  
  197.     friend ostream& operator<<(ostream& os, StudentGroup g);
  198. };
  199.  
  200. // ostream == << == cout
  201. // istream == >> == cin
  202. ostream& operator<<(ostream& os, StudentGroup g) {
  203.     for (Student s : g.students) {
  204.         os << s.id << "," << s.name << ",";
  205.         for (int grade : s.grades) {
  206.             os << grade << " ";
  207.         }
  208.         os << endl;
  209.     }
  210.  
  211.     return os;
  212. }
  213.  
  214. // StudentGroup + Student
  215. // StudentGroup > 5 ( колко студента имат среден успех над 5 )
  216. // cout << StudentGroup (принтираме име,id,оценки за всеки студент в класното)
  217.  
  218. int main() {
  219.     Student s1(1234, "pesho", 3, { 5,3,2,5 });
  220.     Student s2(5678, "gosho", 3, { 3,3,4,4 });
  221.     Student s3(0000, "misho", 3, { 3,4,5,6 });
  222.  
  223.     s2.addGrade(6);
  224.     s3.addGrades({ 2,2,2 });
  225.     s2.printGrades();
  226.     s3.printGrades();
  227.     cout << endl;
  228.  
  229.     StudentGroup g1(123, { s1, s2, s3 });
  230.     Student newStudent(123,"ivo", 3, { 2, 6, 6, 6, 6 });
  231.     g1.addStudent(newStudent);
  232.     cout << g1.averageGrade();
  233.     cout << endl;
  234.     cout << g1.averageBelow(4);
  235.     cout << endl;
  236.  
  237.     vector<Student> failing = g1.failingStudents();
  238.     for (Student s : failing) {
  239.         s.printGrades();
  240.         cout << endl;
  241.     }
  242.  
  243.     s2 += 2;
  244.     s2 += 2;
  245.     cout << "gosho ima " <<  (s2 == 2) << endl;
  246.  
  247.     g1 += Student(123,"mariq", 0, { 5,5,5,4 });
  248.     cout << "studenti s obsht uspeh nad 4 " << (g1 > 4) << endl;
  249.  
  250.     cout << g1;
  251.     // TODO: оператора + (или +=) за студент не променя самия обект в
  252.     // класното отделение, как да го оправим?
  253.  
  254.     return 0;
  255. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement