Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <fstream>
- #include <algorithm>
- using namespace std;
- class Persoana
- {
- protected:
- string nume, sex;
- public:
- Persoana(string nume = "", string sex = "") :
- nume(nume), sex(sex) {}
- virtual void afisare()
- {
- cout << "Nume : " << nume << endl;
- cout << "Sex : " << sex << endl;
- }
- };
- class Student : public Persoana
- {
- protected:
- int grupa;
- float medie;
- public:
- Student(string nume = "", string sex = "", int grupa = 0, float medie = 0) :
- Persoana(nume, sex), grupa(grupa), medie(medie) {}
- int getGrupa()
- {
- return grupa;
- }
- float getMedie()
- {
- return medie;
- }
- void afisare()
- {
- Persoana::afisare();
- cout << "Grupa : " << grupa << endl;
- cout << "Medie : " << medie << endl;
- }
- };
- class Profesor : public Persoana
- {
- protected:
- int grad;
- float salariu;
- public:
- Profesor(string nume = "", string sex = "", int grad = 0, float salariu = 0) :
- Persoana(nume, sex), grad(grad), salariu(salariu) {}
- int getGrad()
- {
- return grad;
- }
- float getSalariu()
- {
- return salariu;
- }
- void afisare()
- {
- Persoana::afisare();
- cout << "Grad : " << grad << endl;
- cout << "Salariu : " << salariu << endl;
- }
- };
- int main()
- {
- ifstream fin("persoane.in");
- int nrStud, nrProf;
- fin >> nrStud >> nrProf;
- Persoana** pers = new Persoana * [nrStud + nrProf];
- for (int index = 0; index < nrStud + nrProf; ++index)
- {
- string nume, sex;
- fin >> nume >> sex;
- if (index < nrStud)
- {
- int grupa;
- float medie;
- fin >> grupa >> medie;
- pers[index] = new Student(nume, sex, grupa, medie);
- }
- else
- {
- int grad;
- float salariu;
- fin >> grad >> salariu;
- pers[index] = new Profesor(nume, sex, grad, salariu);
- }
- }
- auto comp1 = [](Persoana* p1, Persoana* p2)
- {
- Student* s1 = dynamic_cast<Student*>(p1);
- Student* s2 = dynamic_cast<Student*>(p2);
- return s1->getGrupa() < s2->getGrupa();
- };
- sort(pers, pers + nrStud, comp1);
- auto comp2 = [](Persoana* p1, Persoana* p2)
- {
- Profesor* pr1 = dynamic_cast<Profesor*>(p1);
- Profesor* pr2 = dynamic_cast<Profesor*>(p2);
- return pr1->getSalariu() < pr2->getSalariu();
- };
- sort(pers + nrStud, pers + nrStud + nrProf, comp2);
- for (int index = 0; index < nrStud + nrProf; ++index)
- {
- pers[index]->afisare();
- cout << endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement