Advertisement
Guest User

Zamcko

a guest
Jul 20th, 2017
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.40 KB | None | 0 0
  1. #include<iostream>
  2. using namespace std;
  3.  
  4.  
  5. enum VrstaObaveze { Seminarski, Parcijalni1, Parcijalni2, Integralni, Prakticni };
  6.  
  7. struct Datum {
  8.     int * _dan, *_mjesec, *_godina;
  9.     void Unos(int d, int m, int g) {
  10.         _dan = new int(d);
  11.         _mjesec = new int(m);
  12.         _godina = new int(g);
  13.     }
  14.     void Ispis() { cout << *_dan << "/" << *_mjesec << "/" << *_godina << endl; }
  15.     void Dealociraj() { delete _dan; delete _mjesec; delete _godina; }
  16. };
  17. struct ObavezeNaPredmetu {
  18.     VrstaObaveze _vrstaObaveze;
  19.     Datum * _datumIzvrsenja;
  20.     int * _ocjena; // 5 - 10
  21.     void Unos(VrstaObaveze vrsta, Datum * datum, int ocjena) {
  22.         _vrstaObaveze = vrsta;
  23.         _datumIzvrsenja = new Datum;
  24.         _datumIzvrsenja->Unos(*datum->_dan, *datum->_mjesec, *datum->_godina);
  25.         _ocjena = new int(ocjena);
  26.     }
  27.     void Ispis() {
  28.         cout << _vrstaObaveze << " " << *_ocjena;
  29.         _datumIzvrsenja->Ispis();
  30.         cout << endl;
  31.     }
  32.     void Dealociraj() { delete _datumIzvrsenja; delete _ocjena; }
  33. };
  34. bool provjeraDatuma(Datum predat, Datum datumPredaje) {
  35.     if (*predat._godina < *datumPredaje._godina)
  36.         return true;
  37.     else if (*predat._godina == *datumPredaje._godina)
  38.     {
  39.         if (*predat._mjesec < *datumPredaje._mjesec)
  40.             return true;
  41.         else
  42.             return false;
  43.     }
  44.     else
  45.         return false;
  46. }
  47. struct PolozeniPredmet {
  48.     Datum * _datumPolaganja;
  49.     ObavezeNaPredmetu * _listaIzvrsenihObaveza[10]; //Niz pokazivaca :D
  50.     int _trenutnoIzvrsenihObaveza;
  51.     int _konacnaOcjena; //formira se na osnovu ocjena izvrsenih obaveza
  52.     void Unos(Datum * d) {
  53.         _datumPolaganja = new Datum;
  54.         _datumPolaganja->Unos(*d->_dan, *d->_mjesec, *d->_godina);
  55.         _trenutnoIzvrsenihObaveza = 0;
  56.         for (size_t i = 0; i < 10; i++)
  57.         {
  58.             _listaIzvrsenihObaveza[i] = nullptr;
  59.         }
  60.         _konacnaOcjena = 5;
  61.         //Na osnovu vrijednosti primljenog parametra izvrsiti inicijalizaciju odgovarajucih
  62.         //atributa
  63.     }
  64.     bool DodajIzvrsenuObavezu(ObavezeNaPredmetu o) {
  65.         if (_trenutnoIzvrsenihObaveza == 9) {
  66.             cout << "Lista obavezqa je puna!" << endl;
  67.             return false;
  68.         }
  69.         for (size_t i = 0; i < _trenutnoIzvrsenihObaveza; i++)
  70.         {
  71.             if (o._vrstaObaveze == _listaIzvrsenihObaveza[i]->_vrstaObaveze && *o._ocjena == *_listaIzvrsenihObaveza[i]->_ocjena)
  72.                 return false;
  73.         }
  74.         cout << "Uspjesjno dodan predmet!" << endl;
  75.         return true;
  76.         /*Funkcija ima zadatak da na osnovu primljenog parametra osigura dodavanje
  77.         novoizvrsene obaveze na predmetu. Potrebno je onemoguciti dodavanje identicnih obaveza, te u
  78.         zavisnosti od uspjesnosti operacije funkcija treba vratiti true ili false. */
  79.     }
  80.     int FormirajKonacnuOcjenu(Datum * datumPredaje) {
  81.         bool integralni = false;
  82.         int o = 0;
  83.         for (size_t i = 0; i < _trenutnoIzvrsenihObaveza; i++)
  84.         {
  85.             if (_listaIzvrsenihObaveza[i]->_vrstaObaveze == integralni && *_listaIzvrsenihObaveza[i]->_ocjena > 5) {
  86.                 integralni = true;
  87.                 o = *_listaIzvrsenihObaveza[i]->_ocjena;
  88.                 break;
  89.             }
  90.         }
  91.         if (integralni)
  92.         {
  93.             _konacnaOcjena = o;
  94.             return _konacnaOcjena;
  95.         }
  96.         //parcijalni ispiti provjera
  97.         bool parc1 = false;
  98.         bool parc2 = false;
  99.         int prvaOcj = 0;
  100.         int drugaOcj = 0;
  101.         for (size_t i = 0; i < _trenutnoIzvrsenihObaveza; i++)
  102.         {
  103.             if (_listaIzvrsenihObaveza[i]->_vrstaObaveze == Parcijalni1&&*_listaIzvrsenihObaveza[i]->_ocjena > 5) {
  104.                 parc1 = true;
  105.                 prvaOcj = *_listaIzvrsenihObaveza[i]->_ocjena;
  106.             }
  107.             else if (_listaIzvrsenihObaveza[i]->_vrstaObaveze == Parcijalni2&&*_listaIzvrsenihObaveza[i]->_ocjena>5)
  108.                 parc2 = true;
  109.             drugaOcj = *_listaIzvrsenihObaveza[i]->_ocjena;
  110.         }
  111.         if (parc1 == false || parc2 == false)
  112.         {
  113.             _konacnaOcjena = 5;
  114.             return _konacnaOcjena;
  115.         }
  116.         //prakticni rad provjera
  117.         for (size_t i = 0; i < _trenutnoIzvrsenihObaveza; i++)
  118.         {
  119.             if (_listaIzvrsenihObaveza[i]->_vrstaObaveze == Prakticni && provjeraDatuma(*_listaIzvrsenihObaveza[i]->_datumIzvrsenja, *datumPredaje) == true)
  120.             {
  121.                 _konacnaOcjena = (prvaOcj + drugaOcj + *_listaIzvrsenihObaveza[i]->_ocjena) / 3;
  122.                 return _konacnaOcjena;
  123.             }
  124.         }
  125.         cout << "Student nije polozio" << endl;
  126.         _konacnaOcjena = 5;
  127.         return _konacnaOcjena;
  128.         /*Funkcija je zaduzena za formiranje konacne ocjene na polozenom predmetu. Za
  129.         formiranje konacne ocjene predmeta potrebno je posjedovati polozen integralni ili dva parijcalna
  130.         ispita. Ukoliko je ispit polozen putem parcijalnih ispita, student takodjer mora imati polozen i
  131.         prakticni rad kojeg je predao prije datuma oznacenog parametrom datumPredaje. Ukoliko svi pomenuti
  132.         uslovi nisu zadovoljeni, konacna ocjena treba biti postavljena na vrijednost 5. Funkcija vraca
  133.         vrijednost atributa _konacnaOcjena*/
  134.     }
  135.     void ispis() {
  136.         cout << "Datum polaganja : ";
  137.         _datumPolaganja->Ispis();
  138.         cout << "Lista izvrsenih obaveza" << endl;
  139.         for (size_t i = 0; i < _trenutnoIzvrsenihObaveza; i++)
  140.         {
  141.             _listaIzvrsenihObaveza[i]->Ispis();
  142.         }
  143.         cout << "Konacna ocjena : " << _konacnaOcjena << endl;
  144.     }
  145. };
  146. int Pretraga(PolozeniPredmet * p, int max) {
  147.     /*Funkcija ima zadatak da ispise informacije o svim polozenim predmetima kod kojih je student
  148.     imao najmanje dva seminarska rada, a koja su rađena u junsko-julskom ispitnom roku. Da bi
  149.     informacije o polozenom predmetu bile ispisane moraju biti ispunjeni svi uslovi neophodni za
  150.     formiranje konacne ocjene. Nakon ispisa, funkcija vraca broj polozenih predmeta koji su zadovoljili
  151.     pomenute kriterije.*/
  152. }
  153. void main() {
  154.     //izbjegavajte koristenje vlastitog imena i prezimena.
  155.     //provjeriti validnost izvrsenja svih dostupnih funkcionalnosti
  156. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement