Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <algorithm>
- #include <fstream>
- using namespace std;
- class Man {
- protected:
- char * name;
- int age;
- public:
- Man(char *, int);
- virtual ~Man();
- const char * getname() const;
- int getage() const;
- };
- Man :: Man(char * s, int x) : age(x) {
- name = new char[strlen(s) + 1];
- strcpy(name, s);
- }
- Man :: ~Man() {
- delete [] name;
- }
- const char * Man :: getname() const {
- return name;
- }
- int Man :: getage() const {
- return age;
- }
- class Student : public Man {
- private:
- int group, mark;
- public:
- Student(char *, int, int, int);
- int getgroup() const;
- int getmark() const;
- };
- Student :: Student(char * s, int a, int b, int c) : Man(s, a), group(b), mark(c) {}
- int Student :: getgroup() const {
- return group;
- }
- int Student :: getmark() const {
- return mark;
- }
- class Staff : public Man {
- private:
- int * group, cv;
- public:
- Staff(char *, int, int *, int);
- virtual ~Staff();
- void getgroup(int *, int &) const;
- };
- Staff :: Staff(char * s, int a, int * q, int n) : Man(s, a), cv(n) {
- group = new int [n];
- for (int i = 0; i < n; ++i) group[i] = q[i];
- }
- Staff :: ~Staff() {
- delete [] group;
- }
- void Staff :: getgroup(int * a, int & n) const {
- n = cv;
- for (int i = 0; i < n; ++i) a[i] = group[i];
- }
- bool cmp1(Student * a, Student * b) {
- return a -> getgroup() < b -> getgroup();
- }
- int main() {
- setlocale(LC_ALL, ".1251");
- cout << "Введите количество студентов: ";
- int n, x, y, z, t[100], c1, c2, m;
- char s[100];
- c1 = c2 = 0;
- cin >> n;
- Student **a = new Student* [n];
- for (int i = 0; i < n; ++i) {
- cout << "Введите имя, возраст, номер группы и оценку " << i + 1 << "-ого студента: \n";
- cin >> s >> x >> y >> z;
- a[i] = new Student(s, x, y, z);
- }
- sort(a, a + n, cmp1);
- for (int i = 0; i < n; ++i) {
- cout << a[i] -> getname() << " " << a[i] -> getage() << " " << a[i] -> getgroup() << " " << a[i] -> getmark() << endl;
- delete a[i];
- }
- delete [] a;
- cout << "Введите количество преподователей: ";
- cin >> n;
- Staff **b = new Staff *[n];
- for (int i = 0; i < n; ++i) {
- cout << "Введите имя, возраст, количество и номера групп,\nв которых преподаватель принимал экзамен:\n";
- cin >> s >> x >> y;
- for (int j = 0; j < y; ++j) cin >> t[j];
- b[i] = new Staff(s, x, t, y);
- }
- int num = 0;
- for (int i = 1; i < n; ++i)
- if (b[i] -> getage() < b[num] -> getage()) num = i;
- cout << "Самый молодой преподаватель:\n"
- << b[num] -> getname() << " " << b[num] -> getage() << endl;
- for (int i = 0; i < n; ++i) delete b[i];
- delete [] b;
- ifstream fin("input.txt");
- fin >> n;
- Man **c = new Man *[n];
- for (int i = 0; i < n; ++i) {
- int g;
- fin >> g;
- if (g == 0) {
- fin >> s >> x >> y >> z;
- c[i] = new Student(s, x, y, z);
- } else {
- fin >> s >> x >> y;
- for (int j = 0; j < y; ++j) fin >> t[j];
- c[i] = new Staff(s, x, t, y);
- }
- }
- for (int i = 0; i < n; ++i)
- if (typeid(*c[i]) == typeid(Student)) ++c1;
- else ++c2;
- cout << "Количество студентов в файле: " << c1 << "\nКоличество преподователей в файле: " << c2 << endl;
- int mx = -1;
- Staff * ans;
- for (int i = 0; i < n; ++i) {
- if (typeid(*c[i]) != typeid(Staff)) continue;
- int co = 0;
- for (int j = 0; j < n; ++j)
- if (typeid(*c[j]) == typeid(Student)) {
- int g = dynamic_cast<Student*> (c[j]) -> getgroup();
- dynamic_cast<Staff*> (c[i]) -> getgroup(t, m);
- for (int k = 0; k < m; ++k)
- if (t[k] == g) {
- ++co;
- break;
- }
- }
- if (co > mx) {
- mx = co;
- ans = dynamic_cast<Staff*> (c[i]);
- }
- }
- cout << "Преподаватель, выставивший максимальное количество оценок:\n";
- cout << ans -> getname() << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment