Advertisement
developer10

Zadatak - StudentObaveze - Dev10

Jul 3rd, 2015
274
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.09 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. char CRT[] = "\n==============================================\n";
  5.  
  6. enum VrsteObaveza { Seminarski, Parcijalni1, Parcijalni2, Integralni };
  7.  
  8. struct Datum {
  9.  
  10.     int *_dan, *_mjesec, *_godina;
  11.  
  12.     void Unos(int d, int m, int g) {
  13.         _dan = new int;
  14.         *_dan = d;
  15.         _mjesec = new int;
  16.         *_mjesec = m;
  17.         _godina = new int;
  18.         *_godina = g;
  19.     }
  20.  
  21.     void Ispis()
  22.     {
  23.         cout << *_dan << "/" << *_mjesec << "/" << *_godina << endl;
  24.     }
  25.  
  26.     void Dealociraj()
  27.     {
  28.         delete _dan;
  29.         delete _mjesec;
  30.         delete _godina;
  31.     }
  32.  
  33. };
  34.  
  35. struct ObavezeNaPredmetu {
  36.  
  37.     VrsteObaveza _vrstaObaveze;
  38.     Datum* _datumIzvrsenja;
  39.     int _ocjena; // 5-10
  40.     char* _komentar;
  41.  
  42.     void Unos(VrsteObaveza vrsta, Datum* datum, int ocjena) {
  43.         _vrstaObaveze = vrsta;
  44.         _datumIzvrsenja = new Datum;
  45.         _datumIzvrsenja->Unos(*datum->_dan, *datum->_mjesec, *datum->_godina);
  46.         _ocjena = ocjena;
  47.         _komentar = new char[200];
  48.     }
  49.  
  50.     void Ispis()
  51.     {
  52.         char* _vo[] = { "Seminarski", "Parcijalni1", "Parcijalni2", "Integralni" };
  53.  
  54.         cout << "<" << _vo[_vrstaObaveze] << "> Ocjena <" << _ocjena << "> Datum: ";
  55.         _datumIzvrsenja->Ispis();
  56.         //cout << "Komentar: " << _komentar << endl;
  57.         cout << endl;
  58.     }
  59.  
  60.     void Dealociraj()
  61.     {
  62.         delete _datumIzvrsenja;
  63.         delete[] _komentar;
  64.     }
  65.  
  66. };
  67.  
  68. struct PolozeniPredmeti {
  69.    
  70.     Datum* _datumPolaganja;
  71.  
  72.     // u okviru jednog predmeta studenti mogu imati 10 obaveza
  73.     ObavezeNaPredmetu _listaIzvrsenihObaveza[10];
  74.  
  75.     int _trenutnoIzvrsenihObaveza;
  76.     int* _konacnaOcjena;
  77.  
  78.     void Unos(Datum* d, ObavezeNaPredmetu obaveza) {
  79.        
  80.         // Na osnovu vrijednosti primljenih parametara izvrsiti inicijalizaciju odgovarajucih atributa
  81.  
  82.         //_datumPolaganja = new Datum;
  83.         //_datumPolaganja = d;
  84.  
  85.  
  86.     //  obaveza._vrstaObaveze;
  87.     //  obaveza._datumIzvrsenja;
  88.     //  obaveza._ocjena;
  89.        
  90.         _listaIzvrsenihObaveza[_trenutnoIzvrsenihObaveza].Unos(obaveza._vrstaObaveze, obaveza._datumIzvrsenja, obaveza._ocjena);
  91.        
  92.         ObavezeNaPredmetu* ob = &obaveza;
  93.        
  94.         DodajKomentarIzvrsenojObavezi( ob, obaveza._komentar );
  95.         _trenutnoIzvrsenihObaveza++;
  96.     }
  97.  
  98.  
  99.     bool DodajKomentarIzvrsenojObavezi(ObavezeNaPredmetu* obaveza, char* komentar)
  100.     {
  101.         /* Funkcija ima zadatak da na osnovu primljenog parametra 'obaveza' pronadje izvrsenu obavezu,
  102.           te joj doda komentar koji je takodje proslijedjen kao parametar. Voditi racuna o tome
  103.           da jedna obaveza moze imati veci broj komentara. U slucaju da
  104.           trazena obaveza ne postoji, funkcija vraca false. */
  105.  
  106.         obaveza->_komentar = komentar;
  107.  
  108.         return true;
  109.     }
  110.  
  111.     int FormirajKonacnuOcjenu()
  112.     {
  113.  
  114.         /* Funkcija je zaduzena za formiranje konacne ocjene na polozenom ispitu. Za formiranje konacne ocjene
  115.           na polozenom predmetu, treba imati najmanje 3 izvrsene obaveze od kojih jedna mora
  116.           biti seminarski rad ukoliko je student integralno polozio ispit. U slucaju da komentar na obavezi sadrzi rijec 'varanje'
  117.           ocjena na toj obavezi se umanjuje za 1. Ukoliko svi pomenuti uslovi nisu izvrseni,
  118.           konacna ocjena treba biti postavljena na vrijednost 5
  119.           Funkcija vraca vrijednost atributa _konacnaOcjena.*/
  120.  
  121.         _konacnaOcjena = new int(5);
  122.         bool polozioIntegralno = false;
  123.         bool imaSeminarski = false;
  124.         int sumaOcjena=0;
  125.  
  126.         if(_trenutnoIzvrsenihObaveza >= 3){
  127.  
  128.             for(int i=0; i<_trenutnoIzvrsenihObaveza; i++){
  129.            
  130.                 if( strcmp(_listaIzvrsenihObaveza[i]._komentar, "varanje") )
  131.                     _listaIzvrsenihObaveza[i]._ocjena--;
  132.  
  133.                 if(_listaIzvrsenihObaveza[i]._vrstaObaveze == 3)
  134.                     polozioIntegralno = true;
  135.  
  136.                 if(_listaIzvrsenihObaveza[i]._vrstaObaveze == 0)
  137.                     imaSeminarski = true;
  138.  
  139.                 sumaOcjena += _listaIzvrsenihObaveza[i]._ocjena;
  140.             }
  141.  
  142.             if(polozioIntegralno)
  143.                 if(!imaSeminarski)
  144.                     return *_konacnaOcjena;
  145.  
  146.             *_konacnaOcjena = sumaOcjena / _trenutnoIzvrsenihObaveza;
  147.  
  148.         }
  149.  
  150.         return *_konacnaOcjena;
  151.     }
  152.  
  153. };
  154.  
  155. int Pretraga(PolozeniPredmeti* p, int max)
  156. {
  157.     /* Funkcija ima zadatak da ispise informacije o svim polozenim predmetima kod kojih je
  158.     student ispit polozio putem parcijalnih ispita, te tom prilikom ostvario prosjecnu ocjenu
  159.     vecu od 8,5. Da bi informacije o polozenom predmetu bile ispisane, moraju biti ispunjeni svi uslovi za formiranje konacne ocjene.
  160.     Nakon ispisa, funkcija vraca broj polozenih predmeta koji su zadovoljili navedeni kriterij.
  161.     */
  162.  
  163.     int brPredmeta=0, sumaOcjena=0;
  164.     float prosjek=0;
  165.     bool polParc1=false, polParc2=false;
  166.  
  167.     for(int i=0; i<max; i++){
  168.    
  169.         p[i].FormirajKonacnuOcjenu();
  170.  
  171.         int* konOc = p[i]._konacnaOcjena;
  172.  
  173.         if(*konOc > 5){
  174.  
  175.             for(int j=0; j<3; j++){
  176.  
  177.                 if(p[i]._listaIzvrsenihObaveza[j]._vrstaObaveze == 1)
  178.                     polParc1=true;
  179.                 if(p[i]._listaIzvrsenihObaveza[j]._vrstaObaveze == 2)
  180.                     polParc2=true;
  181.  
  182.                 sumaOcjena += p[i]._listaIzvrsenihObaveza[j]._ocjena;
  183.             }
  184.  
  185.             prosjek = sumaOcjena / 3;
  186.  
  187.         }
  188.  
  189.         if(prosjek >= 8.5)
  190.             brPredmeta++;
  191.  
  192.     }
  193.  
  194.     return brPredmeta;
  195. }
  196.  
  197.  
  198.  
  199. int main()
  200. {
  201.     int maxPredmeta=2, minObaveza=3;
  202.     Datum* date = new Datum, * datePP = new Datum;
  203.     PolozeniPredmeti* pp = new PolozeniPredmeti[maxPredmeta];
  204.     ObavezeNaPredmetu* op = new ObavezeNaPredmetu[minObaveza];
  205.     VrsteObaveza vo;
  206.    
  207.     // PP 1
  208.     pp[0]._trenutnoIzvrsenihObaveza = 0;
  209.     datePP->Unos(1,1,2011);
  210.     pp[0]._datumPolaganja = datePP;
  211.    
  212.  
  213.     vo = Parcijalni1;
  214.     date->Unos(9,4,2014);
  215.     op[0]._vrstaObaveze = vo;
  216.     op[0]._datumIzvrsenja = date;
  217.     op[0]._ocjena = 7;
  218.    
  219.     op[0]._komentar = "Uoceno varanje";
  220.  
  221.     pp[0].Unos(datePP, op[0]);
  222.  
  223.     vo = Seminarski;
  224.     date->Unos(17,2,2014);
  225.     op[1]._vrstaObaveze = vo;
  226.     op[1]._datumIzvrsenja = date;
  227.     op[1]._ocjena = 6;
  228.     op[1]._komentar = "varanje";
  229.     pp[0].Unos(datePP, op[1]);
  230.    
  231.     vo = Integralni;
  232.     date->Unos(14,6,2015);
  233.     op[2]._vrstaObaveze = vo;
  234.     op[2]._datumIzvrsenja = date;
  235.     op[2]._ocjena = 9;
  236.     op[2]._komentar = "Moglo je i bolje";
  237.     pp[0].Unos(datePP, op[2]);
  238.    
  239.  
  240.     // PP 2
  241.     pp[1]._trenutnoIzvrsenihObaveza = 0;
  242.     datePP->Unos(3,3,2013);
  243.     pp[1]._datumPolaganja = datePP;
  244.    
  245.  
  246.     vo = Parcijalni1;
  247.     date->Unos(28,3,2014);
  248.     op[0]._vrstaObaveze = vo;
  249.     op[0]._datumIzvrsenja = date;
  250.     op[0]._ocjena = 7;
  251.     op[0]._komentar = "Neuredan rad";
  252.     pp[1].Unos(datePP, op[0]);
  253.  
  254.     vo = Parcijalni2;
  255.     date->Unos(2,10,2014);
  256.     op[1]._vrstaObaveze = vo;
  257.     op[1]._datumIzvrsenja = date;
  258.     op[1]._ocjena = 7;
  259.     op[1]._komentar = "varanje na ispitu";
  260.     pp[1].Unos(datePP, op[1]);
  261.    
  262.     vo = Seminarski;
  263.     date->Unos(11,4,2015);
  264.     op[2]._vrstaObaveze = vo;
  265.     op[2]._datumIzvrsenja = date;
  266.     op[2]._ocjena = 10;
  267.     op[2]._komentar = "Jos vjezbati";
  268.     pp[1].Unos(datePP, op[2]);
  269.  
  270.  
  271.     cout << CRT << "\t FUNKCIJA PRETRAGA" << CRT;
  272.     cout << "Broj predmeta koji su polozeni putem dva parcijalna ispita " << endl;
  273.     cout << "i gdje je prosjecna ocjena veca od 8.5 iznosi " << Pretraga(pp, maxPredmeta) << CRT;
  274.    
  275.     for(int i=0; i<maxPredmeta; i++){
  276.  
  277.         cout << CRT << "\t:: PREDMET " << i+1 << ":: Polozen: ";
  278.         pp[i]._datumPolaganja->Ispis();
  279.         cout << CRT;
  280.  
  281.         cout << "Trenutno izvrsenih obaveza: " << pp[i]._trenutnoIzvrsenihObaveza << endl;
  282.  
  283.         cout << endl << "\t== OBAVEZE ==" << endl;
  284.         for(int j=0; j<minObaveza; j++){
  285.             pp[i]._listaIzvrsenihObaveza[j].Ispis();
  286.         }
  287.         cout << endl;
  288.     }
  289.  
  290.  
  291.  
  292.     system("Pause > 0");
  293.     return 0;
  294. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement