Advertisement
Guest User

Untitled

a guest
Feb 6th, 2016
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.39 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.     int max = 10;
  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.  
  65.         for (int i = 0; i < _trenutnoIzvrsenihObaveza; i++)
  66.         {
  67.             if (_listaIzvrsenihObaveza[i]->_vrstaObaveze == o._vrstaObaveze && _listaIzvrsenihObaveza[i]->_vrstaObaveze != Seminarski) {
  68.                 cout << "Ista obaveza" << endl;
  69.                 return false;
  70.             }
  71.         }
  72.         for (int i = 0; i < _trenutnoIzvrsenihObaveza; i++)
  73.         {
  74.             if (_listaIzvrsenihObaveza[i]->_vrstaObaveze == o._vrstaObaveze &&
  75.                 _listaIzvrsenihObaveza[i]->_ocjena == 5) {
  76.                 cout << "Ne moze se dodati identicna vrsta obaveze i koja ima ocjenu 5" << endl;
  77.                 return false;
  78.             }
  79.             else
  80.                 if (*o._datumIzvrsenja->_dan < *_listaIzvrsenihObaveza[i]->_datumIzvrsenja->_dan +7) {
  81.                     cout << "Mora proci 7 dana" << endl;
  82.                     return false;
  83.                 }
  84.     }
  85.         if (_trenutnoIzvrsenihObaveza == 0) {
  86.             _listaIzvrsenihObaveza[_trenutnoIzvrsenihObaveza] = new ObavezeNaPredmetu;
  87.             _listaIzvrsenihObaveza[_trenutnoIzvrsenihObaveza]->Unos(o._vrstaObaveze, o._datumIzvrsenja, o._ocjena, o._napomena);
  88.             _trenutnoIzvrsenihObaveza++;
  89.             cout << "Uspjesno dodano" << endl;
  90.             return true;
  91.         }
  92.         if (_trenutnoIzvrsenihObaveza == max) {
  93.             ObavezeNaPredmetu * temp = new ObavezeNaPredmetu[max * 2];
  94.             for (int i = 0; i < _trenutnoIzvrsenihObaveza; i++)
  95.             {
  96.                 temp[i] = *_listaIzvrsenihObaveza[i];
  97.                 _listaIzvrsenihObaveza[i]->Dealociraj();
  98.  
  99.             }
  100.             delete[] _listaIzvrsenihObaveza;
  101.             *_listaIzvrsenihObaveza = temp;
  102.             _listaIzvrsenihObaveza[_trenutnoIzvrsenihObaveza]->Unos(o._vrstaObaveze, o._datumIzvrsenja, o._ocjena, o._napomena);
  103.             _trenutnoIzvrsenihObaveza++;
  104.             max = max * 2;
  105.             return true;
  106.         }
  107.         _listaIzvrsenihObaveza[_trenutnoIzvrsenihObaveza] = new ObavezeNaPredmetu;
  108.         _listaIzvrsenihObaveza[_trenutnoIzvrsenihObaveza]->Unos(o._vrstaObaveze, o._datumIzvrsenja, o._ocjena, o._napomena);
  109.         _trenutnoIzvrsenihObaveza++;
  110.         return true;
  111.     }
  112.     int FormirajKonacnuOcjenu() {
  113.         /*Konacna ocjene predstavlja prosjecnu ocjenu na predmetu,
  114.         a za njeno formiranje student mora posjedovati polozen integralni ili dva parijcalna ispita.
  115.         Ukoliko je ispit polozen putem parcijalnih ispita, student takodjer mora imati pozitivno (ocjenom vecom od 5)
  116.         ocijenjena najmanje dva seminarska rada. U slucaju da bilo koji od navedenih uslova nije zadovoljen konacna
  117.         ocjena treba biti postavljena na vrijednost 5. Konacna ocjena, takodjer, ne smije biti formirana u slucaju da
  118.         u napomeni od dvije obaveze stoji rijec 'prepisivao' ili 'izbacen'.*/
  119.         int brojacParcijalnih = 0, brojacSeminarskih = 0,brojacNapomena=0, _sumaOcjeneSeminarskih=0;
  120.         float suma = 0;
  121.         for (int i = 0; i < _trenutnoIzvrsenihObaveza; i++)
  122.         {
  123.             if (strstr(_listaIzvrsenihObaveza[i]->_napomena, "prepisivao") != 0 || strstr(_listaIzvrsenihObaveza[i]->_napomena, "izbacen") != 0) {
  124.                 cout << "varao si " << endl;
  125.                 brojacNapomena++;
  126.             }
  127.         }
  128.         if (brojacNapomena >= 2) {
  129.             cout << "2 napomene" << endl;
  130.             return false;
  131.         }
  132.             for (int i = 0; i < _trenutnoIzvrsenihObaveza; i++)
  133.             {
  134.                 if (_listaIzvrsenihObaveza[i]->_vrstaObaveze == Integralni) {
  135.                     _konacnaOcjena = _listaIzvrsenihObaveza[i]->_ocjena;
  136.                     return _konacnaOcjena;
  137.                 }
  138.             }
  139.         for (int i = 0; i < _trenutnoIzvrsenihObaveza; i++)
  140.         {
  141.             if (_listaIzvrsenihObaveza[i]->_vrstaObaveze == Parcijalni1) {
  142.                 for (int j = 0; j < _trenutnoIzvrsenihObaveza; j++)
  143.                 {
  144.                     if (_listaIzvrsenihObaveza[j]->_vrstaObaveze == Parcijalni2)
  145.                     {
  146.                         for (int k = 0; k < _trenutnoIzvrsenihObaveza; k++) {
  147.                             if (_listaIzvrsenihObaveza[k]->_vrstaObaveze == Seminarski && _listaIzvrsenihObaveza[k]->_ocjena >= 6) {
  148.                                 brojacSeminarskih++;
  149.                                 _sumaOcjeneSeminarskih += _listaIzvrsenihObaveza[k]->_ocjena;
  150.                                 if (brojacSeminarskih >= 2) {
  151.                                     return (_listaIzvrsenihObaveza[i]->_ocjena + _listaIzvrsenihObaveza[j]->_ocjena + _sumaOcjeneSeminarskih) / 4;
  152.                                 }
  153.                             }
  154.                         }
  155.                     }
  156.                 }
  157.             }
  158.         }
  159.         return 5;
  160.     }
  161. };
  162. //
  163. //int Pretraga(PolozeniPredmet * p, int max) {
  164. //  /*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.*/
  165. //}
  166.  
  167. void main() {
  168.     //cout << "Izvinjavam se na kasnjenju post-a. Bio sam ubijedjen da sam postavio zadatak...." << endl;
  169.     Datum d1, d2,d3,d4;
  170.     d1.Unos(12, 12, 2013);
  171.     d2.Unos(12, 3, 2014);
  172.     d3.Unos(12, 2, 2015);
  173.     d4.Unos(12, 5, 2011);
  174.     ObavezeNaPredmetu o0,o1, o2, o3, o4;
  175.     o0.Unos(Seminarski, &d1, 8, "polozio");
  176.     o1.Unos(Seminarski, &d2, 8, "polozio");
  177.     o2.Unos(Parcijalni1, &d3, 10, "polozio");
  178.     o3.Unos(Parcijalni2, &d4, 10, "polozio");
  179.     o4.Unos(Integralni, &d1, 7, "polozio");
  180.     o0.Ispis();
  181.     o1.Ispis();
  182.     o2.Ispis();
  183.     o3.Ispis();
  184.     o4.Ispis();
  185.     PolozeniPredmet p;
  186.     p.Unos(&d1);
  187.     //p.DodajIzvrsenuObavezu(o2);
  188.     //p.DodajIzvrsenuObavezu(o3);
  189.     //p.DodajIzvrsenuObavezu(o1);
  190.     //p.DodajIzvrsenuObavezu(o1);
  191.     p.DodajIzvrsenuObavezu(o0);
  192.     p.DodajIzvrsenuObavezu(o1);
  193.     p.DodajIzvrsenuObavezu(o2);
  194.     p.DodajIzvrsenuObavezu(o3);
  195.  
  196.     //p.DodajIzvrsenuObavezu(o[3]);
  197.     cout << "Konacna ocjena = " << p.FormirajKonacnuOcjenu() << endl;
  198.     //izbjegavajte koristenje vlastitog imena i prezimena.
  199.     //provjeriti validnost izvrsenja svih dostupnih funkcionalnosti
  200. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement