Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <string>
- using namespace std;
- /*
- ---
- Един клас, който описва студент в класно отделение. Един студент се характеризира със следните неща:
- - факултетен номер
- - име (без значение дали едно или три)
- - курс в който се намира
- - общ списък с оценки (т.е. няма значение коя оценка по каква дисциплина е, просто каква е самата оценка)
- Да се направят следните функции:
- - функция, която вписва оценка за студента;
- - функция, която вписва списък от оценки;
- - функция, която принтира всичките оценки на студента;
- - функция, която смята средно-аритметичния успех на студента;
- Да се направят следните оператори:
- - оператор за събиране със число, като въпросното число се вписва към оценките на студента
- - оператор за еднаквост с число, като този оператор връща колко оценки има които съвпадат с числото
- ---
- Един клас, който описва класно отделение. Едно класно отделение се характеризира със
- следните неща:
- - номер на класното отделение;
- - списък със студенти във въпросното класно отделение;
- Да се направят следните функции:
- - функция, която вписва студент към класното отделение;
- - функция, която смята средния успех на цялото класно;
- - функция, която връща колко студента имат среден успех под дадена от нас оценка;
- - функция, която връща списък със всички студенти, които имат поне една двойка като оценка;
- Да се направят следните оператори:
- - оператор за събиране със студент, като въпросният студент се вписва към класното отделение
- - оператор за сравнение (по-голямо) със число, като този оператор връща колко на брой студенти имат среден успех по-голям от даденото число
- - оператор за извеждане към конзола (<<), като се принтира името, факултетния номер и списъка с оценки на всеки студент
- 1. класове
- 2. функции
- 3. оператори
- */
- class Student {
- public:
- int id;
- string name;
- int year;
- vector<int> grades;
- Student() {}
- Student(int i, string n, int y, vector<int> g) {
- id = i;
- name = n;
- year = y;
- grades = g;
- }
- void addGrade(int newGrade) {
- grades.push_back(newGrade);
- }
- void addGrades(vector<int> newGrades) {
- for (int i = 0; i < newGrades.size(); i++) {
- grades.push_back(newGrades[i]);
- }
- //for (int grade : newGrades) {
- // grades.push_back(grade);
- //}
- }
- void printGrades() {
- for (int i = 0; i < grades.size(); i++) {
- cout << grades[i] << " ";
- }
- }
- float averageGrade() {
- int sum = 0;
- for (int i = 0; i < grades.size(); i++) {
- sum += grades[i];
- }
- return (float)sum / (float)grades.size();
- }
- Student operator+(int grade) {
- grades.push_back(grade);
- return *this;
- }
- Student operator+=(int grade) {
- grades.push_back(grade);
- return *this;
- }
- int operator==(int grade) {
- int count = 0;
- for (int g : grades) {
- count += (grade == g) ? 1 : 0;
- }
- return count;
- }
- };
- // Student + 6
- // Student == 6 ( да получа бройка колко шестици има тоя студент)
- class StudentGroup {
- public:
- int id;
- vector<Student> students;
- StudentGroup() {}
- StudentGroup(int i, vector<Student> s) {
- id = i;
- students = s;
- }
- void addStudent(Student newStudent) {
- students.push_back(newStudent);
- }
- float averageGrade() {
- float sum = 0;
- for (int i = 0; i < students.size(); i++) {
- sum += students[i].averageGrade();
- }
- return (float)sum / (float)students.size();
- }
- int averageBelow(int grade) {
- int counter = 0;
- for (int i = 0; i < students.size(); i++) {
- if (students[i].averageGrade() < grade) {
- counter++;
- }
- }
- return counter;
- }
- vector<Student> failingStudents() {
- vector<Student> result;
- /*for (int i = 0; i < students.size(); i++) {
- for (int j = 0; j < students[i].grades.size(); j++) {
- if(students[i].grades[j] == 2)
- }
- }*/
- for (Student s : students) {
- for (int grade : s.grades) {
- if (grade == 2) {
- result.push_back(s);
- break;
- }
- }
- }
- return result;
- }
- StudentGroup operator+(Student s) {
- students.push_back(s);
- return *this;
- }
- StudentGroup operator+=(Student s) {
- students.push_back(s);
- return *this;
- }
- int operator>(int grade) {
- int count = 0;
- for (Student s : students) {
- count += (s.averageGrade() > grade) ? 1 : 0;
- }
- return count;
- }
- friend ostream& operator<<(ostream& os, StudentGroup g);
- };
- // ostream == << == cout
- // istream == >> == cin
- ostream& operator<<(ostream& os, StudentGroup g) {
- for (Student s : g.students) {
- os << s.id << "," << s.name << ",";
- for (int grade : s.grades) {
- os << grade << " ";
- }
- os << endl;
- }
- return os;
- }
- // StudentGroup + Student
- // StudentGroup > 5 ( колко студента имат среден успех над 5 )
- // cout << StudentGroup (принтираме име,id,оценки за всеки студент в класното)
- int main() {
- Student s1(1234, "pesho", 3, { 5,3,2,5 });
- Student s2(5678, "gosho", 3, { 3,3,4,4 });
- Student s3(0000, "misho", 3, { 3,4,5,6 });
- s2.addGrade(6);
- s3.addGrades({ 2,2,2 });
- s2.printGrades();
- s3.printGrades();
- cout << endl;
- StudentGroup g1(123, { s1, s2, s3 });
- Student newStudent(123,"ivo", 3, { 2, 6, 6, 6, 6 });
- g1.addStudent(newStudent);
- cout << g1.averageGrade();
- cout << endl;
- cout << g1.averageBelow(4);
- cout << endl;
- vector<Student> failing = g1.failingStudents();
- for (Student s : failing) {
- s.printGrades();
- cout << endl;
- }
- s2 += 2;
- s2 += 2;
- cout << "gosho ima " << (s2 == 2) << endl;
- g1 += Student(123,"mariq", 0, { 5,5,5,4 });
- cout << "studenti s obsht uspeh nad 4 " << (g1 > 4) << endl;
- cout << g1;
- // TODO: оператора + (или +=) за студент не променя самия обект в
- // класното отделение, как да го оправим?
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement