Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma once
- #include <iostream>
- #include <fstream>
- using namespace std;
- struct Bad_index {};
- class Zachetka_ABS
- {
- public:
- virtual int * AverageMark() = 0;
- virtual int * CountGoodMarks() = 0;
- virtual int * MinMarks() = 0;
- };
- struct element
- {
- int ZachetkaNum;//номер зачётки
- int *a;
- element()
- {
- a = new int[4];
- }
- friend ostream & operator << (ostream & out, element & m)
- {
- out << m.ZachetkaNum<< " ";
- for (int i = 0; i < 4; i++)
- out << m.a[i] << " ";
- return out;
- }
- friend istream & operator >> (istream & in, element & m)
- {
- in >> m.ZachetkaNum;
- for (int i = 0; i < 4; i++)
- in >> m.a[i];
- return in;
- }
- int AverageMark()
- {
- int res = 0;
- for (int i = 0; i < 4; i++)
- res += a[i];
- return res/4;
- }
- int CountGoodMarks()
- {
- int res = 0;
- for (int i = 0; i < 4; i++)
- if (a[i] >= 9)
- res++;
- return res;
- }
- int MinMarks()
- {
- int res = 0;
- for (int i = 0; i < 3; i++)
- for (int j = 0; j < 3; j++)
- if (a[j+1] < a[j])
- swap(a[j], a[j + 1]);
- return a[0];
- }
- };
- class Zachetka : public Zachetka_ABS
- {
- private:
- int count;
- element * massiv;
- public:
- Zachetka()
- {
- count = 10;
- massiv = new element[10];
- }
- Zachetka(int count)
- {
- this->count = count;
- massiv = new element[count];
- }
- ~Zachetka()
- {
- delete[] massiv;
- }
- element & operator[](int key)
- {
- if (key<0 || key >count)
- throw Bad_index();
- else
- return massiv[key];
- }
- friend ostream & operator << (ostream & out, Zachetka & m)
- {
- for (int i = 0; i < m.count; i++)
- out << m[i] << endl;
- return out;
- }
- friend istream & operator >> (istream & in, Zachetka & m)
- {
- for (int i = 0; i < m.count; i++)
- in >> m[i];
- return in;
- }
- int* AverageMark()
- {
- int *arr = new int[count];
- for (int i = 0; i < count; i++)
- arr[i] = massiv[i].AverageMark();
- return arr;
- }
- int* CountGoodMarks()
- {
- int *arr = new int[count];
- for (int i = 0; i < count; i++)
- arr[i] = 0;
- for (int i = 0; i < count; i++)
- arr[i]=massiv[i].CountGoodMarks();
- return arr;
- }
- int* MinMarks()
- {
- int *arr = new int[count];
- for (int i = 0; i < count; i++)
- arr[i] = 0;
- for (int i = 0; i < count; i++)
- arr[i] = massiv[i].MinMarks();
- return arr;
- }
- };
- struct Container1
- {
- char SurName[50];
- char Name[50];
- char patronymic[50];
- int ZachetkaNum;
- int kurs;
- int group;
- friend ostream & operator << (ostream & out, Container1 & C1)
- {
- out << C1.SurName << " " << C1.Name << " " << C1.patronymic << " " << C1.ZachetkaNum << " " << C1.kurs << " " << C1.group << " " << endl;
- return out;
- }
- friend istream & operator >> (istream & in, Container1 & C1)
- {
- in >> C1.SurName >> C1.Name >> C1.patronymic >> C1.ZachetkaNum >> C1.kurs >> C1.group;
- return in;
- }
- };
- struct Container3
- {
- char SurName[25];
- int ZachetkaNum;
- int kurs;
- int group;
- int CountGoodMarks;
- int AverageMark;
- int MinMark;
- friend ostream & operator << (ostream & out, Container3 & m)
- {
- out << m.SurName <<" "<< m.ZachetkaNum << " " << m.AverageMark << " " << m.group << " " << m.CountGoodMarks << " " << m.kurs << " " << m.MinMark << endl;
- return out;
- }
- friend istream & operator >> (istream & in, Container3 & C1)
- {
- in >> C1.SurName >>C1.ZachetkaNum>>C1.kurs>>C1.group >> C1.CountGoodMarks >> C1.AverageMark >> C1.MinMark;
- return in;
- }
- };
- template<class T>
- class Student
- {
- private:
- int count;
- T *M;
- public:
- Student()
- {
- count = 30;
- M = new T[count];
- }
- Student(int a)
- {
- count = a;
- M = new T[count];
- }
- Student(Student <T> & m)
- {
- count = m.count;
- for (int i = 0; i < count; i++)
- M[i] = m.M[i];
- }
- ~Student()
- {
- delete[] M;
- }
- T & operator[](int key)
- {
- if (key<0 || key >count)
- throw Bad_index();
- else
- return M[key];
- }
- friend ostream & operator << (ostream & out, Student <T> &m)
- {
- for (int i = 0; i < m.count; i++)
- out << m[i] << " ";
- return out;
- }
- friend istream & operator >> (istream & in, Student <T> & m)
- {
- for (int i = 0; i < m.count; i++)
- in >> m[i];
- return in;
- }
- int get_count() {
- return count;
- }
- void set_count(int count)
- {
- this->count = count;
- }
- int* AverageMark(Zachetka_ABS * p)
- {
- return (p->AverageMark());
- }
- int * CountGoodMarks(Zachetka_ABS * p)
- {
- return (p->CountGoodMarks());
- }
- int * MinMarks(Zachetka_ABS * p)
- {
- return (p->MinMarks());
- }
- void Sum(Student<Container1> &students, Zachetka & c1)
- {
- for (int i = 0; i < students.get_count(); i++)
- {
- strcpy_s(M[i].SurName, students[i].SurName);
- M[i].ZachetkaNum = c1[i].ZachetkaNum;
- M[i].kurs = students[i].kurs;
- M[i].group = students[i].group;
- M[i].AverageMark = c1[i].AverageMark();
- M[i].CountGoodMarks = c1[i].CountGoodMarks();
- M[i].MinMark = c1[i].MinMarks();
- }
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement