Advertisement
neogz

PR1 - video

Sep 8th, 2014
231
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.63 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3. enum VrstaObaveze{Seminarski, Parcijalni1, Parcijalni2, Integralni, Prakticni};
  4. char * niz[] = { "Seminarski", "Parcijalni1", "Parcijalni2", "Integralni", "Prakticni" };
  5. struct Datum {
  6.     int *_dan, *_mjesec, *_godina;
  7.     void Unos(int d, int m, int g){
  8.         _dan = new int(d);
  9.         _mjesec = new int(m);
  10.         _godina = new int(g);
  11.     }
  12.     void Ispis(){
  13.         cout << *_dan << "/" << *_mjesec << "/" << *_godina << endl;
  14.     }
  15.     void Dealociraj(){
  16.         delete _dan;
  17.         delete _mjesec;
  18.         delete _godina;
  19.     }
  20.     bool IstiJe(Datum d){
  21.         if (*_dan == *d._dan && *_mjesec == *d._mjesec && *_godina == *d._godina) return true;
  22.         else return false;
  23.     }
  24.     bool StarijiJe(Datum d){
  25.         if (*d._godina > *_godina) return true;
  26.         else if (*d._godina == *_godina){
  27.             if (*d._mjesec > *_mjesec) return true;
  28.             else if (*d._mjesec == *_mjesec){
  29.                 if (*d._dan > *_dan) return true;
  30.             }
  31.         }
  32.         return false;
  33.     }
  34. };
  35. struct ObavezeNaPredmetu {
  36.     VrstaObaveze *_vrstaObaveze;
  37.     Datum *_datumIzvrsenja;
  38.     int *_ocjena;
  39.     void Unos(VrstaObaveze * vrsta, Datum * datum, int ocjena){
  40.         _vrstaObaveze = new VrstaObaveze(*vrsta);
  41.         _datumIzvrsenja = new Datum;
  42.         _datumIzvrsenja->Unos(*datum->_dan, *datum->_mjesec, *datum->_godina);
  43.         _ocjena = new int(ocjena);
  44.     }
  45.     void Ispis(){
  46.         cout << niz[*_vrstaObaveze] << " " << *_ocjena;
  47.         _datumIzvrsenja->Ispis();
  48.         cout << endl;
  49.     }
  50.     void Dealociraj(){
  51.         delete _vrstaObaveze;
  52.         _datumIzvrsenja->Dealociraj();
  53.         delete _datumIzvrsenja;
  54.         delete _ocjena;
  55.     }
  56. };
  57. struct PolozeniPredmet{
  58.     Datum _datumpolaganja;
  59.     ObavezeNaPredmetu _listaIzvrsenihObaveza[10];
  60.     int _trenutnoIzvrsenihObaveza;
  61.     int _konacnaOcjena;
  62.     void Unos(Datum * d){
  63.         _trenutnoIzvrsenihObaveza = 0;
  64.         _datumpolaganja.Unos(*d->_dan, *d->_mjesec, *d->_godina);
  65.         _konacnaOcjena = 5;
  66.     }
  67.     bool DodajIzvrsenuObavezu(ObavezeNaPredmetu o){
  68.         /* Funkcija ima zadatak da na osnovu primljenog parametra osigura dodavanje novoizvrsene obaveze na predmetu.
  69.         Potrebno je onemogućiti dodavanje identicnih obaveza, te u zavisnosti od uspješnosti operacije funkcija treba vratiti True ili False.
  70.         Svaka novoizvrsena obaveza ne smije imati stariji datum od prethodno izvrsene. */
  71.         if (_trenutnoIzvrsenihObaveza > 10) return false;
  72.         else {
  73.             for (int i = 0; i < _trenutnoIzvrsenihObaveza; i++){
  74.                 if (_datumpolaganja.IstiJe(*o._datumIzvrsenja) && *_listaIzvrsenihObaveza[i]._ocjena == *o._ocjena && *_listaIzvrsenihObaveza[i]._vrstaObaveze == *o._vrstaObaveze)
  75.                     return false;
  76.             }
  77.             if (!_listaIzvrsenihObaveza[_trenutnoIzvrsenihObaveza-1]._datumIzvrsenja->StarijiJe(*o._datumIzvrsenja)) return false;
  78.         }
  79.  
  80.         _listaIzvrsenihObaveza[_trenutnoIzvrsenihObaveza].Unos(o._vrstaObaveze, o._datumIzvrsenja, *o._ocjena);
  81.         _trenutnoIzvrsenihObaveza++;
  82.         return true;
  83.     }
  84.     int FormirajKonacnuOcjenu(Datum datumPredaje){
  85.         /*Funkcija je zaduzena za formiranje konacne ocjene na predmetu.
  86.         Za formiranje konačne ocjene predmeta potrebno je posjedovati položen integralni ili dva parcijalna ispista.
  87.         Ukoliko je ispit položen putem parcijalnih ispita, student takodjer mora imati polozen i prakticni rad koji je predao
  88.         prije datuma oznacenog parametrom datumPredaje. ukoliko svi pomenuti uslovi nisu zadovoljeni, konacna ocjena treba biti
  89.         postavljena na vrijednost 5. Funkcija vraca vrijednost atributa _konacnaocjena */
  90.  
  91.         int brojacParcijalnih = 0, lokacijaPrakticnog = -1;
  92.         float suma = 0;
  93.  
  94.         for (int i = 0; i < _trenutnoIzvrsenihObaveza; i++){
  95.             if (*_listaIzvrsenihObaveza[i]._vrstaObaveze == Integralni){
  96.                 _konacnaOcjena = *_listaIzvrsenihObaveza[i]._ocjena;
  97.                 return _konacnaOcjena;
  98.             }
  99.             // 2 parcijalna + prakticni rad predat poslije datuma datumPredaje
  100.             else if (*_listaIzvrsenihObaveza[i]._vrstaObaveze == Parcijalni1 || *_listaIzvrsenihObaveza[i]._vrstaObaveze == Parcijalni2){
  101.                     brojacParcijalnih++;
  102.                     suma += *_listaIzvrsenihObaveza[i]._ocjena;
  103.             }
  104.             else if (*_listaIzvrsenihObaveza[i]._vrstaObaveze == Prakticni ){
  105.                 lokacijaPrakticnog = i;
  106.             }
  107.  
  108.         }
  109.  
  110.             if (lokacijaPrakticnog!=-1 && _listaIzvrsenihObaveza[lokacijaPrakticnog]._datumIzvrsenja->StarijiJe(datumPredaje) && brojacParcijalnih >= 2){
  111.                 _konacnaOcjena = suma / brojacParcijalnih;
  112.                 return _konacnaOcjena;
  113.             }
  114.  
  115.             _konacnaOcjena = 5;
  116.             return _konacnaOcjena;
  117.        
  118.        
  119.        
  120.     }
  121. };
  122. int Pretraga(PolozeniPredmet * p, int max){
  123.     /* Funkcija ima zadatak da ispise infromacije o svim polozenim predmetima kod kojih je student imao
  124.     najmanje dva seminarska rada, a koja su rađena u septembarskom ispitnom roku. Da bi informacije o polozenom
  125.     predmetu bile ispisane moraju biti ispunjeni svi uslovi neophodni za formiranje konačne ocjene. Nakon ispisa,
  126.     funkcija vraća broj položenih predmeta koji su zadovoljili pomenute kriterije. */
  127.  
  128.     int brojPolozenih = 0, brojSeminarskih = 0;
  129.     for (int i = 0; i < max; i++){
  130.         for (int j = 0; j < p[i]._trenutnoIzvrsenihObaveza; j++){
  131.             if (*p[i]._listaIzvrsenihObaveza->_vrstaObaveze == Seminarski && *p[i]._listaIzvrsenihObaveza->_datumIzvrsenja->_mjesec == 9)
  132.             {  
  133.  
  134.                 brojSeminarskih++;
  135.             }
  136.             if (brojSeminarskih >= 2){
  137.                 brojPolozenih++;
  138.  
  139.                 p[i]._datumpolaganja.Ispis();
  140.                 p[i]._listaIzvrsenihObaveza[j].Ispis();
  141.                 cout <<"Konacna ocjena: " <<p[i]._konacnaOcjena;
  142.             }
  143.         }
  144.        
  145.     }
  146.  
  147.     return brojPolozenih;
  148. }
  149. int main(){
  150.     // izbjegavati korištenje vlastitog imena i prezimena
  151.     // provjeriti validnost izvršenja svih dostupnih funkcionalnosti
  152.     Datum d;
  153.     d.Unos(10, 4, 2014);
  154.  
  155.     ObavezeNaPredmetu obaveza;
  156.     VrstaObaveze vrsta = Integralni;
  157.     obaveza.Unos(&vrsta, &d, 9);
  158.    
  159.     PolozeniPredmet UIT;
  160.     UIT.Unos(&d);
  161.  
  162.     obaveza.Ispis();
  163.  
  164.     system("pause > null");
  165.     return 0;
  166.  
  167. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement