Koki99

Kурс - Втор колоквиум - Пример

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