ivana_andreevska

Zadaca 3

Jun 23rd, 2021
246
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 11.74 KB | None | 0 0
  1. #include<iostream>
  2. #include<cstring>
  3. #include<cmath>
  4. using namespace std;
  5.  
  6. class NoCourseException{
  7. private:
  8.     int indeks;
  9. public:
  10.     NoCourseException(int indeks){
  11.         this->indeks = indeks;
  12.     }void msg(){
  13.         cout << "Demonstratorot so indeks " << indeks << " ne drzi laboratoriski vezbi" << endl;
  14.     }
  15. };
  16.  
  17. class Kurs{
  18. private:
  19.     char ime[20];
  20.     int krediti;
  21. public:
  22.     Kurs (char *ime,int krediti){
  23.         strcpy(this->ime, ime);
  24.         this->krediti = krediti;
  25.     }Kurs (){
  26.         strcpy(this->ime, "");
  27.         krediti=0;
  28.     }bool operator==(const char *ime) const{
  29.         return strcmp(this->ime, ime) == 0;
  30.     }char const * getIme()const{
  31.         return ime;
  32.     }void print ()const{
  33.         cout << ime << " " << krediti << "ECTS";
  34.     }
  35. };
  36.  
  37. class Student{
  38. private:
  39.     int *ocenki;
  40.     int brOcenki;
  41.  
  42. protected:
  43.     int indeks;
  44.     void copy(const Student& s){
  45.         this->indeks = s.indeks;
  46.         this->brOcenki = s.brOcenki;
  47.         this->ocenki = new int[s.brOcenki];
  48.         for (int i = 0; i < s.brOcenki; i++){
  49.             this->ocenki[i] = s.ocenki[i];
  50.         }
  51.     }
  52.     void deleteGrades(){
  53.         delete[] ocenki;
  54.     }
  55. public:
  56.     Student(int indeks = 000000,const int *ocenki = new int[0], int brOcenki = 0){
  57.         this->indeks = indeks;
  58.         this->brOcenki = brOcenki;
  59.         this->ocenki = new int[brOcenki];
  60.         for (int i = 0; i < brOcenki; i++){
  61.             this->ocenki[i] = ocenki[i];
  62.         }
  63.     }Student(const Student &s){
  64.         copy(s);
  65.     }Student operator=(const Student &s){
  66.         if (this!=&s) {
  67.             delete [] ocenki;
  68.             copy(s);
  69.         }return *this;
  70.     }~Student(){
  71.         delete [] ocenki;
  72.     }virtual int getPoints(){
  73.         int counter = 0;
  74.         for (int i = 0; i < brOcenki; ++i) {
  75.             if (ocenki[i] > 5){
  76.                 counter++;
  77.             }
  78.         }return floor(100 / (float)brOcenki * (float)counter);
  79.     }virtual void print(){
  80.         cout << indeks << " ";
  81.     }
  82.  
  83. };
  84.  
  85. class Predavach{
  86. private:
  87.     Kurs kursoj[10];
  88.     int brKursoj;
  89.  
  90. protected:
  91.     char *imePredavajne;
  92.     void copy(const Predavach& p){
  93.         this->brKursoj = p.brKursoj;
  94.         for (int i = 0; i < p.brKursoj; i++){
  95.             this->kursoj[i] = p.kursoj[i];
  96.         }this->imePredavajne = new char[strlen(p.imePredavajne) + 1];
  97.         strcpy(this->imePredavajne, p.imePredavajne);
  98.     }
  99.     void deleteNameOfLecturer(){
  100.         delete[] imePredavajne;
  101.     }
  102. public:
  103.     Predavach(const char *imePredavajne = "", Kurs *kursoj = new Kurs[0], int brKursoj = 0) {
  104.         this->brKursoj = brKursoj;
  105.         for (int i = 0; i < brKursoj; i++){
  106.             this->kursoj[i] = kursoj[i];
  107.         }this->imePredavajne = new char[strlen(imePredavajne) + 1];
  108.         strcpy(this->imePredavajne, imePredavajne);
  109.     }Predavach(const Predavach &p){
  110.         copy(p);
  111.     }Predavach operator=(const Predavach &p){
  112.         if (this!=&p) {
  113.             delete [] imePredavajne;
  114.             copy(p);
  115.         }return *this;
  116.     }~Predavach(){
  117.         delete[] imePredavajne;
  118.     }int getCourses()const {
  119.         return brKursoj;
  120.     }char * const getNameOfLecturer()const{
  121.         return imePredavajne;
  122.     }Kurs operator[](int i) const {
  123.         if (i < brKursoj && i >= 0) {
  124.             return kursoj[i];
  125.         }else{
  126.             return Kurs();
  127.         }
  128.     }virtual void print() const  {
  129.         cout << imePredavajne << " (";
  130.         for (int i=0; i < brKursoj; i++){
  131.             kursoj[i].print();
  132.             if (i < brKursoj - 1){
  133.                 cout << ", ";
  134.             }else{
  135.                 cout << ")";
  136.             }
  137.         }
  138.     }
  139.     int getNumCourses(){
  140.         return brKursoj;
  141.     }
  142. };
  143.  
  144.  
  145. class Demonstrator : public Student, public Predavach{
  146. private:
  147.     int brLab;
  148.     void copy (const Demonstrator& d){
  149.         Student::copy(d);
  150.         Predavach::copy(d);
  151.         this->brLab = d.brLab;
  152.     }
  153. public:
  154.     Demonstrator(int indeks = 000000,const int *ocenki = new int[0], int brOcenki = 0,
  155.                  const char *imePredavajne = "", Kurs *kursoj = new Kurs[0], int brKursoj = 0, int brLab = 0) :
  156.             Student(indeks,ocenki,brOcenki), Predavach(imePredavajne,kursoj,brKursoj){
  157.         this->brLab = brLab;
  158.     }Demonstrator(const Demonstrator& d){
  159.         copy(d);
  160.     }Demonstrator& operator= (const Demonstrator& d){
  161.         if (this != &d) {
  162.             deleteGrades();
  163.             deleteNameOfLecturer();
  164.             copy(d);
  165.         }return *this;
  166.     }void print() override{
  167.         cout << indeks << ": ";
  168.         Predavach::print();
  169.     }int getPoints() override {
  170.         if (getNumCourses() == 0){
  171.             throw NoCourseException(indeks);
  172.         }return Student::getPoints() + (20 * brLab) / getNumCourses();
  173.     }
  174. };
  175.  
  176. Student &vratiNajdobroRangiran(Student **studenti, int n) {
  177.     Student *bestRankedStudent = studenti[0];
  178.     int bestSIndex, pointsOne, pointsTwo;
  179.     bestSIndex = pointsOne = pointsTwo = 0;
  180.     for (int i = 0; i < n; ++i) {
  181.         try{
  182.             pointsOne = bestRankedStudent->getPoints();
  183.         }catch (NoCourseException& e){
  184.             pointsOne = 0;
  185.             e.msg();
  186.         }try{
  187.             pointsTwo = studenti[i]->getPoints();
  188.         } catch (NoCourseException& e) {
  189.             pointsTwo = 0;
  190.             e.msg();
  191.         }if (pointsOne < pointsTwo) {
  192.             bestRankedStudent = studenti[i];
  193.             bestSIndex = i;
  194.         }
  195.     }
  196.     return *studenti[bestSIndex];
  197. }
  198.  
  199. void pecatiDemonstratoriKurs(const char *kurs, Student **studenti, int n) {
  200.     for (int i = 0; i < n; ++i) {
  201.         Demonstrator *test = dynamic_cast<Demonstrator *>(studenti[i]);
  202.         if (test) {
  203.             for (int j = 0; j < test->getNumCourses(); ++j) {
  204.                 if ((*test)[i] == kurs) {
  205.                     test->print();
  206.                     cout << endl;
  207.                     break;
  208.                 }
  209.             }
  210.         }
  211.     }
  212. }
  213.  
  214. int main(){
  215.  
  216.     Kurs kursevi[10];
  217.     int indeks,brojKursevi, ocenki[20],ocenka,brojOcenki,tip,brojCasovi,krediti;
  218.     char ime[20],imeIPrezime[50];
  219.  
  220.     cin>>tip;
  221.  
  222.     if (tip==1) //test class Demonstrator
  223.     {
  224.         cout<<"-----TEST Demonstrator-----"<<endl;
  225.         cin>>indeks>>brojOcenki;
  226.         for (int i=0;i<brojOcenki;i++){
  227.             cin>>ocenka;
  228.             ocenki[i]=ocenka;
  229.         }
  230.         cin>>imeIPrezime>>brojKursevi;
  231.         for (int i=0;i<brojKursevi;i++){
  232.             cin>>ime>>krediti;
  233.             kursevi[i]=Kurs(ime,krediti);
  234.         }
  235.         cin>>brojCasovi;
  236.  
  237.         Demonstrator d(indeks,ocenki,brojOcenki,imeIPrezime,kursevi,brojKursevi,brojCasovi);
  238.         cout<<"Objekt od klasata Demonstrator e kreiran";
  239.  
  240.     } else if (tip==2) //funkcija print vo Student
  241.     {
  242.         cout<<"-----TEST pecati-----"<<endl;
  243.         cin>>indeks>>brojOcenki;
  244.         for (int i=0;i<brojOcenki;i++){
  245.             cin>>ocenka;
  246.             ocenki[i]=ocenka;
  247.         }
  248.  
  249.         Student s(indeks,ocenki,brojOcenki);
  250.         s.print();
  251.  
  252.     } else if (tip==3) //funkcija getVkupnaOcenka vo Student
  253.     {
  254.         cout<<"-----TEST getVkupnaOcenka-----"<<endl;
  255.         cin>>indeks>>brojOcenki;
  256.         for (int i=0;i<brojOcenki;i++){
  257.             cin>>ocenka;
  258.             ocenki[i]=ocenka;
  259.         }
  260.         Student s(indeks,ocenki,brojOcenki);
  261.         try {
  262.             cout << "Broj na bodovi: " << s.getPoints() << endl;
  263.         }catch (NoCourseException& e){
  264.             e.msg();
  265.         }
  266.  
  267.     } else if (tip==4) //funkcija getVkupnaOcenka vo Demonstrator
  268.     {
  269.         cout<<"-----TEST getVkupnaOcenka-----"<<endl;
  270.         cin>>indeks>>brojOcenki;
  271.         for (int i=0;i<brojOcenki;i++){
  272.             cin>>ocenka;
  273.             ocenki[i]=ocenka;
  274.         }
  275.         cin>>imeIPrezime>>brojKursevi;
  276.         for (int i=0;i<brojKursevi;i++){
  277.             cin>>ime>>krediti;
  278.             kursevi[i]=Kurs(ime,krediti);
  279.         }
  280.         cin>>brojCasovi;
  281.  
  282.         Demonstrator d(indeks,ocenki,brojOcenki,imeIPrezime,kursevi,brojKursevi,brojCasovi);
  283.         cout<<"Broj na bodovi: "<<d.getPoints()<<endl;
  284.  
  285.     } else if (tip==5) //funkcija print vo Demonstrator
  286.     {
  287.         cout<<"-----TEST pecati -----"<<endl;
  288.         cin>>indeks>>brojOcenki;
  289.         for (int i=0;i<brojOcenki;i++){
  290.             cin>>ocenka;
  291.             ocenki[i]=ocenka;
  292.         }
  293.         cin>>imeIPrezime>>brojKursevi;
  294.         for (int i=0;i<brojKursevi;i++){
  295.             cin>>ime>>krediti;
  296.             kursevi[i]=Kurs(ime,krediti);
  297.         }
  298.         cin>>brojCasovi;
  299.  
  300.         Demonstrator d(indeks,ocenki,brojOcenki,imeIPrezime,kursevi,brojKursevi,brojCasovi);
  301.         d.print();
  302.  
  303.     } else if (tip==6) //site klasi
  304.     {
  305.         cout<<"-----TEST Student i Demonstrator-----"<<endl;
  306.         cin>>indeks>>brojOcenki;
  307.         for (int i=0;i<brojOcenki;i++){
  308.             cin>>ocenka;
  309.             ocenki[i]=ocenka;
  310.         }
  311.         cin>>imeIPrezime>>brojKursevi;
  312.         for (int i=0;i<brojKursevi;i++){
  313.             cin>>ime>>krediti;
  314.             kursevi[i]=Kurs(ime,krediti);
  315.         }
  316.         cin>>brojCasovi;
  317.  
  318.         Student *s=new Demonstrator(indeks,ocenki,brojOcenki,imeIPrezime,kursevi,brojKursevi,brojCasovi);
  319.         s->print();
  320.         cout<<"\nBroj na bodovi: "<<s->getPoints()<<endl;
  321.         delete s;
  322.  
  323.  
  324.     } else if (tip==7) //funkcija vratiNajdobroRangiran
  325.     {
  326.         cout<<"-----TEST vratiNajdobroRangiran-----"<<endl;
  327.         int k, opt;
  328.         cin>>k;
  329.         Student **studenti=new Student*[k];
  330.         for (int j=0;j<k;j++){
  331.             cin>>opt; //1 Student 2 Demonstrator
  332.             cin>>indeks>>brojOcenki;
  333.             for (int i=0;i<brojOcenki;i++)
  334.             {
  335.                 cin>>ocenka;
  336.                 ocenki[i]=ocenka;
  337.             }
  338.             if (opt==1){
  339.                 studenti[j]=new Student(indeks,ocenki,brojOcenki);
  340.             }else{
  341.                 cin>>imeIPrezime>>brojKursevi;
  342.                 for (int i=0;i<brojKursevi;i++){
  343.                     cin>>ime>>krediti;
  344.                     kursevi[i]=Kurs(ime,krediti);
  345.                 }
  346.                 cin>>brojCasovi;
  347.                 studenti[j]=new Demonstrator(indeks,ocenki,brojOcenki,imeIPrezime,kursevi,brojKursevi,brojCasovi);
  348.             }
  349.         }
  350.         Student& najdobar=vratiNajdobroRangiran(studenti,k);
  351.         cout<<"Maksimalniot broj na bodovi e:"<<najdobar.getPoints();
  352.         cout<<"\nNajdobro rangiran:";
  353.         najdobar.print();
  354.  
  355.         for (int j=0;j<k;j++) delete studenti[j];
  356.         delete [] studenti;
  357.     } else if (tip==8) //funkcija pecatiDemonstratoriKurs
  358.     {
  359.         cout<<"-----TEST pecatiDemonstratoriKurs-----"<<endl;
  360.         int k, opt;
  361.         cin>>k;
  362.         Student **studenti=new Student*[k];
  363.         for (int j=0;j<k;j++){
  364.             cin>>opt; //1 Student 2 Demonstrator
  365.             cin>>indeks>>brojOcenki;
  366.             for (int i=0;i<brojOcenki;i++)
  367.             {
  368.                 cin>>ocenka;
  369.                 ocenki[i]=ocenka;
  370.             }
  371.             if (opt==1){
  372.                 studenti[j]=new Student(indeks,ocenki,brojOcenki);
  373.             }else{
  374.                 cin>>imeIPrezime>>brojKursevi;
  375.                 for (int i=0;i<brojKursevi;i++)
  376.                 {
  377.                     cin>>ime>>krediti;
  378.                     kursevi[i]=Kurs(ime,krediti);
  379.                 }
  380.                 cin>>brojCasovi;
  381.                 studenti[j]=new Demonstrator(indeks,ocenki,brojOcenki,imeIPrezime,kursevi,brojKursevi,brojCasovi);
  382.             }
  383.         }
  384.         char kurs[20];
  385.         cin>>kurs;
  386.         cout<<"Demonstratori na "<<kurs<<" se:"<<endl;
  387.         pecatiDemonstratoriKurs (kurs,studenti,k);
  388.         for (int j=0;j<k;j++) delete studenti[j];
  389.         delete [] studenti;
  390.  
  391.     }
  392.  
  393.  
  394.     return 0;
  395. }
  396.  
  397.  
Advertisement
Add Comment
Please, Sign In to add comment