Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- using namespace std;
- enum VrstaObaveze { Seminarski, Parcijalni1, Parcijalni2, Integralni, Prakticni };
- struct Datum {
- int * _dan, *_mjesec, *_godina;
- void Unos(int d, int m, int g) {
- _dan = new int(d);
- _mjesec = new int(m);
- _godina = new int(g);
- }
- void Ispis() { cout << *_dan << "/" << *_mjesec << "/" << *_godina << endl; }
- void Dealociraj() { delete _dan; delete _mjesec; delete _godina; }
- };
- struct ObavezeNaPredmetu {
- VrstaObaveze _vrstaObaveze;
- Datum * _datumIzvrsenja;
- int * _ocjena; // 5 - 10
- void Unos(VrstaObaveze vrsta, Datum * datum, int ocjena) {
- _vrstaObaveze = vrsta;
- _datumIzvrsenja = new Datum;
- _datumIzvrsenja->Unos(*datum->_dan, *datum->_mjesec, *datum->_godina);
- _ocjena = new int(ocjena);
- }
- void Ispis() {
- cout << _vrstaObaveze << " " << *_ocjena;
- _datumIzvrsenja->Ispis();
- cout << endl;
- }
- void Dealociraj() { delete _datumIzvrsenja; delete _ocjena; }
- };
- bool provjeraDatuma(Datum predat, Datum datumPredaje) {
- if (*predat._godina < *datumPredaje._godina)
- return true;
- else if (*predat._godina == *datumPredaje._godina)
- {
- if (*predat._mjesec < *datumPredaje._mjesec)
- return true;
- else
- return false;
- }
- else
- return false;
- }
- struct PolozeniPredmet {
- Datum * _datumPolaganja;
- ObavezeNaPredmetu * _listaIzvrsenihObaveza[10]; //Niz pokazivaca :D
- int _trenutnoIzvrsenihObaveza;
- int _konacnaOcjena; //formira se na osnovu ocjena izvrsenih obaveza
- void Unos(Datum * d) {
- _datumPolaganja = new Datum;
- _datumPolaganja->Unos(*d->_dan, *d->_mjesec, *d->_godina);
- _trenutnoIzvrsenihObaveza = 0;
- for (size_t i = 0; i < 10; i++)
- {
- _listaIzvrsenihObaveza[i] = nullptr;
- }
- _konacnaOcjena = 5;
- //Na osnovu vrijednosti primljenog parametra izvrsiti inicijalizaciju odgovarajucih
- //atributa
- }
- bool DodajIzvrsenuObavezu(ObavezeNaPredmetu o) {
- if (_trenutnoIzvrsenihObaveza == 9) {
- cout << "Lista obavezqa je puna!" << endl;
- return false;
- }
- for (size_t i = 0; i < _trenutnoIzvrsenihObaveza; i++)
- {
- if (o._vrstaObaveze == _listaIzvrsenihObaveza[i]->_vrstaObaveze && *o._ocjena == *_listaIzvrsenihObaveza[i]->_ocjena)
- return false;
- }
- cout << "Uspjesjno dodan predmet!" << endl;
- return true;
- /*Funkcija ima zadatak da na osnovu primljenog parametra osigura dodavanje
- novoizvrsene obaveze na predmetu. Potrebno je onemoguciti dodavanje identicnih obaveza, te u
- zavisnosti od uspjesnosti operacije funkcija treba vratiti true ili false. */
- }
- int FormirajKonacnuOcjenu(Datum * datumPredaje) {
- bool integralni = false;
- int o = 0;
- for (size_t i = 0; i < _trenutnoIzvrsenihObaveza; i++)
- {
- if (_listaIzvrsenihObaveza[i]->_vrstaObaveze == integralni && *_listaIzvrsenihObaveza[i]->_ocjena > 5) {
- integralni = true;
- o = *_listaIzvrsenihObaveza[i]->_ocjena;
- break;
- }
- }
- if (integralni)
- {
- _konacnaOcjena = o;
- return _konacnaOcjena;
- }
- //parcijalni ispiti provjera
- bool parc1 = false;
- bool parc2 = false;
- int prvaOcj = 0;
- int drugaOcj = 0;
- for (size_t i = 0; i < _trenutnoIzvrsenihObaveza; i++)
- {
- if (_listaIzvrsenihObaveza[i]->_vrstaObaveze == Parcijalni1&&*_listaIzvrsenihObaveza[i]->_ocjena > 5) {
- parc1 = true;
- prvaOcj = *_listaIzvrsenihObaveza[i]->_ocjena;
- }
- else if (_listaIzvrsenihObaveza[i]->_vrstaObaveze == Parcijalni2&&*_listaIzvrsenihObaveza[i]->_ocjena>5)
- parc2 = true;
- drugaOcj = *_listaIzvrsenihObaveza[i]->_ocjena;
- }
- if (parc1 == false || parc2 == false)
- {
- _konacnaOcjena = 5;
- return _konacnaOcjena;
- }
- //prakticni rad provjera
- for (size_t i = 0; i < _trenutnoIzvrsenihObaveza; i++)
- {
- if (_listaIzvrsenihObaveza[i]->_vrstaObaveze == Prakticni && provjeraDatuma(*_listaIzvrsenihObaveza[i]->_datumIzvrsenja, *datumPredaje) == true)
- {
- _konacnaOcjena = (prvaOcj + drugaOcj + *_listaIzvrsenihObaveza[i]->_ocjena) / 3;
- return _konacnaOcjena;
- }
- }
- cout << "Student nije polozio" << endl;
- _konacnaOcjena = 5;
- return _konacnaOcjena;
- /*Funkcija je zaduzena za formiranje konacne ocjene na polozenom predmetu. Za
- formiranje konacne ocjene predmeta potrebno je posjedovati polozen integralni ili dva parijcalna
- ispita. Ukoliko je ispit polozen putem parcijalnih ispita, student takodjer mora imati polozen i
- prakticni rad kojeg je predao prije datuma oznacenog parametrom datumPredaje. Ukoliko svi pomenuti
- uslovi nisu zadovoljeni, konacna ocjena treba biti postavljena na vrijednost 5. Funkcija vraca
- vrijednost atributa _konacnaOcjena*/
- }
- void ispis() {
- cout << "Datum polaganja : ";
- _datumPolaganja->Ispis();
- cout << "Lista izvrsenih obaveza" << endl;
- for (size_t i = 0; i < _trenutnoIzvrsenihObaveza; i++)
- {
- _listaIzvrsenihObaveza[i]->Ispis();
- }
- cout << "Konacna ocjena : " << _konacnaOcjena << endl;
- }
- };
- int Pretraga(PolozeniPredmet * p, int max) {
- /*Funkcija ima zadatak da ispise informacije o svim polozenim predmetima kod kojih je student
- imao najmanje dva seminarska rada, a koja su rađena u junsko-julskom ispitnom roku. Da bi
- informacije o polozenom predmetu bile ispisane moraju biti ispunjeni svi uslovi neophodni za
- formiranje konacne ocjene. Nakon ispisa, funkcija vraca broj polozenih predmeta koji su zadovoljili
- pomenute kriterije.*/
- }
- void main() {
- //izbjegavajte koristenje vlastitog imena i prezimena.
- //provjeriti validnost izvrsenja svih dostupnih funkcionalnosti
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement