Tranvick

Untitled

Jan 12th, 2013
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.96 KB | None | 0 0
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <fstream>
  4.  
  5. using namespace std;
  6.  
  7. class Man {
  8. protected:
  9.     char * name;
  10.     int age;
  11. public:
  12.     Man(char *, int);
  13.     virtual ~Man();
  14.     const char * getname() const;
  15.     int getage() const;
  16. };
  17.  
  18. Man :: Man(char * s, int x) : age(x) {
  19.     name = new char[strlen(s) + 1];
  20.     strcpy(name, s);
  21. }
  22.  
  23. Man :: ~Man() {
  24.     delete [] name;
  25. }
  26.  
  27. const char * Man :: getname() const {
  28.     return name;
  29. }
  30.  
  31. int Man :: getage() const {
  32.     return age;
  33. }
  34.  
  35. class Student : public Man {
  36. private:
  37.     int group, mark;
  38. public:
  39.     Student(char *, int, int, int);
  40.     int getgroup() const;
  41.     int getmark() const;
  42. };
  43.  
  44. Student :: Student(char * s, int a, int b, int c) : Man(s, a), group(b), mark(c) {}
  45.  
  46. int Student :: getgroup() const {
  47.     return group;
  48. }
  49.  
  50. int Student :: getmark() const {
  51.     return mark;
  52. }
  53.  
  54. class Staff : public Man {
  55. private:
  56.     int * group, cv;
  57. public:
  58.     Staff(char *, int, int *, int);
  59.     virtual ~Staff();
  60.     void getgroup(int *, int &) const;
  61. };
  62.  
  63. Staff :: Staff(char * s, int a, int * q, int n) : Man(s, a), cv(n) {
  64.     group = new int [n];
  65.     for (int i = 0; i < n; ++i) group[i] = q[i];
  66. }
  67.  
  68. Staff :: ~Staff() {
  69.     delete [] group;
  70. }
  71.  
  72. void Staff :: getgroup(int * a, int & n) const {
  73.     n = cv;
  74.     for (int i = 0; i < n; ++i) a[i] = group[i];
  75. }
  76.  
  77. bool cmp1(Student * a, Student * b) {
  78.     return a -> getgroup() < b -> getgroup();
  79. }
  80.  
  81. int main() {
  82.     setlocale(LC_ALL, ".1251");
  83.     cout << "Введите количество студентов: ";
  84.     int n, x, y, z, t[100], c1, c2, m;
  85.     char s[100];
  86.     c1 = c2 = 0;
  87.     cin >> n;
  88.     Student **a = new Student* [n];
  89.     for (int i = 0; i < n; ++i) {
  90.         cout << "Введите имя, возраст, номер группы и оценку " << i + 1 << "-ого студента: \n";
  91.         cin >> s >> x >> y >> z;
  92.         a[i] = new Student(s, x, y, z);
  93.     }
  94.     sort(a, a + n, cmp1);
  95.     for (int i = 0; i < n; ++i) {
  96.         cout << a[i] -> getname() << " " << a[i] -> getage() << " " << a[i] -> getgroup() << " " << a[i] -> getmark() << endl;
  97.         delete a[i];
  98.     }
  99.     delete [] a;
  100.  
  101.     cout << "Введите количество преподователей: ";
  102.     cin >> n;
  103.     Staff **b = new Staff *[n];
  104.     for (int i = 0; i < n; ++i) {
  105.         cout << "Введите имя, возраст, количество и номера групп,\nв которых преподаватель принимал экзамен:\n";
  106.         cin >> s >> x >> y;
  107.         for (int j = 0; j < y; ++j) cin >> t[j];
  108.         b[i] = new Staff(s, x, t, y);
  109.     }
  110.     int num = 0;
  111.     for (int i = 1; i < n; ++i)
  112.         if (b[i] -> getage() < b[num] -> getage()) num = i;
  113.     cout << "Самый молодой преподаватель:\n"
  114.          << b[num] -> getname() << " " << b[num] -> getage() << endl;
  115.     for (int i = 0; i < n; ++i) delete b[i];
  116.     delete [] b;
  117.  
  118.     ifstream fin("input.txt");
  119.     fin >> n;
  120.     Man **c = new Man *[n];
  121.     for (int i = 0; i < n; ++i) {
  122.         int g;
  123.         fin >> g;
  124.         if (g == 0) {
  125.             fin >> s >> x >> y >> z;
  126.             c[i] = new Student(s, x, y, z);
  127.         } else {
  128.             fin >> s >> x >> y;
  129.             for (int j = 0; j < y; ++j) fin >> t[j];
  130.             c[i] = new Staff(s, x, t, y);
  131.         }
  132.     }
  133.     for (int i = 0; i < n; ++i)
  134.         if (typeid(*c[i]) == typeid(Student)) ++c1;
  135.         else ++c2;
  136.     cout << "Количество студентов в файле: " << c1 << "\nКоличество преподователей в файле: " << c2 << endl;
  137.     int mx = -1;
  138.     Staff * ans;
  139.     for (int i = 0; i < n; ++i) {
  140.         if (typeid(*c[i]) != typeid(Staff)) continue;
  141.         int co = 0;
  142.         for (int j = 0; j < n; ++j)
  143.             if (typeid(*c[j]) == typeid(Student)) {
  144.                 int g = dynamic_cast<Student*> (c[j]) -> getgroup();
  145.                 dynamic_cast<Staff*> (c[i]) -> getgroup(t, m);
  146.                 for (int k = 0; k < m; ++k)
  147.                     if (t[k] == g) {
  148.                         ++co;
  149.                         break;
  150.                     }
  151.             }
  152.         if (co > mx) {
  153.             mx = co;
  154.             ans = dynamic_cast<Staff*> (c[i]);
  155.         }
  156.     }
  157.     cout << "Преподаватель, выставивший максимальное количество оценок:\n";
  158.     cout << ans -> getname() << endl;
  159.     return 0;
  160. }
Advertisement
Add Comment
Please, Sign In to add comment