Advertisement
Guest User

Untitled

a guest
Feb 5th, 2016
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.02 KB | None | 0 0
  1. #include<iostream>
  2. using namespace std;
  3. enum VrstaObaveze { Seminarski, Parcijalni1, Parcijalni2, Integralni, Prakticni };
  4. struct Datum {
  5.     int * _dan, *_mjesec, *_godina;
  6.     void Unos(int d, int m, int g) {
  7.         _dan = new int(d);
  8.         _mjesec = new int(m);
  9.         _godina = new int(g);
  10.     }
  11.     void Ispis() { cout << *_dan << "/" << *_mjesec << "/" << *_godina << endl; }
  12.     void Dealociraj() {
  13.         delete _dan;
  14.         _dan = NULL;
  15.         delete _mjesec;
  16.         _mjesec = NULL;
  17.         delete _godina;
  18.         _godina = NULL;
  19.     }
  20. };
  21. struct ObavezeNaPredmetu {
  22.     VrstaObaveze _vrstaObaveze;
  23.     Datum * _datumIzvrsenja;
  24.     char * _napomena;
  25.     int _ocjena; // 5 - 10
  26.     void Unos(VrstaObaveze vrsta, Datum * datum, int ocjena, char * napomena) {
  27.  
  28.         _vrstaObaveze = vrsta;
  29.         _datumIzvrsenja = new Datum;
  30.         _datumIzvrsenja->Unos(*datum->_dan, *datum->_mjesec, *datum->_godina);
  31.         _ocjena = ocjena;
  32.         int size = strlen(napomena) + 1;
  33.         _napomena = new char[size];
  34.         strcpy_s(_napomena, size, napomena);
  35.     }
  36.     void Ispis() {
  37.         cout << _vrstaObaveze << " " << _ocjena << " " << _napomena;
  38.         _datumIzvrsenja->Ispis();
  39.         cout << endl;
  40.     }
  41.     void Dealociraj() {
  42.         delete _datumIzvrsenja;
  43.         _datumIzvrsenja->Dealociraj();
  44.     }
  45. };
  46. struct PolozeniPredmet {
  47.     Datum _datumPolaganja;
  48.     ObavezeNaPredmetu * _listaIzvrsenihObaveza[10];
  49.     int _trenutnoIzvrsenihObaveza;
  50.     int _konacnaOcjena; //formira se na osnovu ocjena izvrsenih obaveza
  51.  
  52.     void Unos(Datum * d) {
  53.         /*Na osnovu vrijednosti primljenog parametra izvrsiti inicijalizaciju odgovarajucih atributa*/
  54.         cout << "Datum polaganja" << endl;
  55.         _datumPolaganja.Unos(*d->_dan, *d->_mjesec, *d->_godina);
  56.         _trenutnoIzvrsenihObaveza = 0;
  57.         _konacnaOcjena = 0;
  58.     }
  59.     bool DodajIzvrsenuObavezu(ObavezeNaPredmetu o) {
  60.         /*Na osnovu vrijednosti primljenog parametra osigurati dodavanje novoizvrsene obaveze na predmetu.
  61.         Potrebno je onemoguciti dodavanje identicnih obaveza, a izmedju izvrsenja pojedinih obaveza mora proci najmanje 7 dana.
  62.         Identicna vrsta obaveze se moze dodati samo u slucaju da se radi o Seminarskom ili je prethodno dodana obaveza (identicne vrste)
  63.         imala ocjenu 5. Ukoliko je moguce, osigurati prosirenje niza*/
  64.         if (_trenutnoIzvrsenihObaveza > 10) {
  65.             cout << "Izvrseno vec 10 obaveza" << endl;
  66.             return false;
  67.         }
  68.         for (int i = 0; i < _trenutnoIzvrsenihObaveza; i++)
  69.         {
  70.             if (_listaIzvrsenihObaveza[i]->_vrstaObaveze == o._vrstaObaveze)
  71.                 return false;
  72.         }
  73.         for (int i = 0; i < _trenutnoIzvrsenihObaveza; i++)
  74.         {
  75.             if (!_listaIzvrsenihObaveza[i]->_vrstaObaveze == Seminarski) {
  76.                 return false;
  77.             }
  78.             else
  79.             if (_listaIzvrsenihObaveza[i]->_vrstaObaveze == o._vrstaObaveze ||
  80.                 _listaIzvrsenihObaveza[i]->_ocjena == 5) {
  81.                 cout << "Ne moze se dodati identicna vrsta obaveze" << endl;
  82.                 return false;
  83.             }
  84.             else
  85.             if ((_listaIzvrsenihObaveza[i]->_datumIzvrsenja->_dan < _listaIzvrsenihObaveza[i]->_datumIzvrsenja->_dan + 7))
  86.                 return false;
  87.         }
  88.         _listaIzvrsenihObaveza[_trenutnoIzvrsenihObaveza] = new ObavezeNaPredmetu;
  89.         _listaIzvrsenihObaveza[_trenutnoIzvrsenihObaveza]->Unos(o._vrstaObaveze, o._datumIzvrsenja, o._ocjena, o._napomena);
  90.         _trenutnoIzvrsenihObaveza++;
  91.         cout << "Uspjesno dodano" << endl;
  92.         return true;
  93.  
  94.     }
  95.     int FormirajKonacnuOcjenu() {
  96.         /*Konacna ocjene predstavlja prosjecnu ocjenu na predmetu,
  97.         a za njeno formiranje student mora posjedovati polozen integralni ili dva parijcalna ispita.
  98.         Ukoliko je ispit polozen putem parcijalnih ispita, student takodjer mora imati pozitivno (ocjenom vecom od 5)
  99.         ocijenjena najmanje dva seminarska rada. U slucaju da bilo koji od navedenih uslova nije zadovoljen konacna
  100.         ocjena treba biti postavljena na vrijednost 5. Konacna ocjena, takodjer, ne smije biti formirana u slucaju da
  101.         u napomeni od dvije obaveze stoji rijec 'prepisivao' ili 'izbacen'.*/
  102.         int brojacParcijalnih = 0, brojacSeminarskih = 0, sumaSeminarskih = 0;
  103.         float suma = 0;
  104.  
  105.         for (int i = 0; i < _trenutnoIzvrsenihObaveza; i++)
  106.         {
  107.             if (strstr(_listaIzvrsenihObaveza[i]->_napomena, "prepisivao") != 0 || strstr(_listaIzvrsenihObaveza[i]->_napomena, "izbacen") != 0) {
  108.                 cout << "varao si " << endl;
  109.                 return 5;
  110.             }
  111.         }
  112.  
  113.         for (int i = 0; i < _trenutnoIzvrsenihObaveza; i++){
  114.             if (_listaIzvrsenihObaveza[i]->_vrstaObaveze == Integralni)
  115.                 return _listaIzvrsenihObaveza[i]->_ocjena;
  116.  
  117.             if (_listaIzvrsenihObaveza[i]->_vrstaObaveze == Parcijalni1){
  118.                 for (int j = i; j < _trenutnoIzvrsenihObaveza; j++){
  119.                     if (_listaIzvrsenihObaveza[j]->_vrstaObaveze == Parcijalni2){
  120.                         for (int k = 0; k < _trenutnoIzvrsenihObaveza; k++){
  121.                             if (_listaIzvrsenihObaveza[k]->_vrstaObaveze == Seminarski){
  122.                                 brojacSeminarskih++;
  123.                                 sumaSeminarskih += _listaIzvrsenihObaveza[k]->_ocjena;
  124.                                 if (brojacSeminarskih == 2){
  125.                                     return (_listaIzvrsenihObaveza[i]->_ocjena + _listaIzvrsenihObaveza[j]->_ocjena + sumaSeminarskih) / 4;
  126.                                 }
  127.                             }
  128.                         }
  129.                     }
  130.                 }
  131.             }
  132. else
  133.             return 5;
  134.         }
  135.        
  136.  
  137.  
  138.  
  139.     }
  140. };
  141. //
  142. //int Pretraga(PolozeniPredmet * p, int max) {
  143. //  /*Funkcija ima zadatak da ispise informacije o svim polozenim predmetima kod kojih je student sve obaveze na predmetu izvrsio prije odredjenog datuma i ostvario konacnu ocjenu vecu od definisane (ocjenu i datum unosi korisnik). Nakon ispisa, funkcija vraca prosjecnu ocjenu polozenih predmeta koji su zadovoljili pomenute kriterije.*/
  144. //}
  145.  
  146. void main() {
  147.     //cout << "Izvinjavam se na kasnjenju post-a. Bio sam ubijedjen da sam postavio zadatak...." << endl;
  148.     Datum d1, d2;
  149.     d1.Unos(12, 12, 2013);
  150.     d2.Unos(12, 12, 2014);
  151.     ObavezeNaPredmetu o1, o2, o3, o4;
  152.     o1.Unos(Seminarski, &d1, 6, "polozio");
  153.     o2.Unos(Parcijalni1, &d2, 7, "polozio");
  154.     o3.Unos(Parcijalni2, &d1, 10, "polozio");
  155.     o4.Unos(Integralni, &d1, 7, "polozio");
  156.     PolozeniPredmet p;
  157.     p.Unos(&d1);
  158.     p.DodajIzvrsenuObavezu(o1);
  159.     p.DodajIzvrsenuObavezu(o4);
  160.     p.DodajIzvrsenuObavezu(o4);
  161.     //p.DodajIzvrsenuObavezu(o[3]);
  162.     cout << "Konacna ocjena = " << p.FormirajKonacnuOcjenu() << endl;
  163.     //izbjegavajte koristenje vlastitog imena i prezimena.
  164.     //provjeriti validnost izvrsenja svih dostupnih funkcionalnosti
  165. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement