Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- char CRT[] = "\n==============================================\n";
- enum VrsteObaveza { Seminarski, Parcijalni1, Parcijalni2, Integralni };
- struct Datum {
- int *_dan, *_mjesec, *_godina;
- void Unos(int d, int m, int g) {
- _dan = new int;
- *_dan = d;
- _mjesec = new int;
- *_mjesec = m;
- _godina = new int;
- *_godina = g;
- }
- void Ispis()
- {
- cout << *_dan << "/" << *_mjesec << "/" << *_godina << endl;
- }
- void Dealociraj()
- {
- delete _dan;
- delete _mjesec;
- delete _godina;
- }
- };
- struct ObavezeNaPredmetu {
- VrsteObaveza _vrstaObaveze;
- Datum* _datumIzvrsenja;
- int _ocjena; // 5-10
- char* _komentar;
- void Unos(VrsteObaveza vrsta, Datum* datum, int ocjena) {
- _vrstaObaveze = vrsta;
- _datumIzvrsenja = new Datum;
- _datumIzvrsenja->Unos(*datum->_dan, *datum->_mjesec, *datum->_godina);
- _ocjena = ocjena;
- _komentar = new char[200];
- }
- void Ispis()
- {
- char* _vo[] = { "Seminarski", "Parcijalni1", "Parcijalni2", "Integralni" };
- cout << "<" << _vo[_vrstaObaveze] << "> Ocjena <" << _ocjena << "> Datum: ";
- _datumIzvrsenja->Ispis();
- //cout << "Komentar: " << _komentar << endl;
- cout << endl;
- }
- void Dealociraj()
- {
- delete _datumIzvrsenja;
- delete[] _komentar;
- }
- };
- struct PolozeniPredmeti {
- Datum* _datumPolaganja;
- // u okviru jednog predmeta studenti mogu imati 10 obaveza
- ObavezeNaPredmetu _listaIzvrsenihObaveza[10];
- int _trenutnoIzvrsenihObaveza;
- int* _konacnaOcjena;
- void Unos(Datum* d, ObavezeNaPredmetu obaveza) {
- // Na osnovu vrijednosti primljenih parametara izvrsiti inicijalizaciju odgovarajucih atributa
- //_datumPolaganja = new Datum;
- //_datumPolaganja = d;
- // obaveza._vrstaObaveze;
- // obaveza._datumIzvrsenja;
- // obaveza._ocjena;
- _listaIzvrsenihObaveza[_trenutnoIzvrsenihObaveza].Unos(obaveza._vrstaObaveze, obaveza._datumIzvrsenja, obaveza._ocjena);
- ObavezeNaPredmetu* ob = &obaveza;
- DodajKomentarIzvrsenojObavezi( ob, obaveza._komentar );
- _trenutnoIzvrsenihObaveza++;
- }
- bool DodajKomentarIzvrsenojObavezi(ObavezeNaPredmetu* obaveza, char* komentar)
- {
- /* Funkcija ima zadatak da na osnovu primljenog parametra 'obaveza' pronadje izvrsenu obavezu,
- te joj doda komentar koji je takodje proslijedjen kao parametar. Voditi racuna o tome
- da jedna obaveza moze imati veci broj komentara. U slucaju da
- trazena obaveza ne postoji, funkcija vraca false. */
- obaveza->_komentar = komentar;
- return true;
- }
- int FormirajKonacnuOcjenu()
- {
- /* Funkcija je zaduzena za formiranje konacne ocjene na polozenom ispitu. Za formiranje konacne ocjene
- na polozenom predmetu, treba imati najmanje 3 izvrsene obaveze od kojih jedna mora
- biti seminarski rad ukoliko je student integralno polozio ispit. U slucaju da komentar na obavezi sadrzi rijec 'varanje'
- ocjena na toj obavezi se umanjuje za 1. Ukoliko svi pomenuti uslovi nisu izvrseni,
- konacna ocjena treba biti postavljena na vrijednost 5
- Funkcija vraca vrijednost atributa _konacnaOcjena.*/
- _konacnaOcjena = new int(5);
- bool polozioIntegralno = false;
- bool imaSeminarski = false;
- int sumaOcjena=0;
- if(_trenutnoIzvrsenihObaveza >= 3){
- for(int i=0; i<_trenutnoIzvrsenihObaveza; i++){
- if( strcmp(_listaIzvrsenihObaveza[i]._komentar, "varanje") )
- _listaIzvrsenihObaveza[i]._ocjena--;
- if(_listaIzvrsenihObaveza[i]._vrstaObaveze == 3)
- polozioIntegralno = true;
- if(_listaIzvrsenihObaveza[i]._vrstaObaveze == 0)
- imaSeminarski = true;
- sumaOcjena += _listaIzvrsenihObaveza[i]._ocjena;
- }
- if(polozioIntegralno)
- if(!imaSeminarski)
- return *_konacnaOcjena;
- *_konacnaOcjena = sumaOcjena / _trenutnoIzvrsenihObaveza;
- }
- return *_konacnaOcjena;
- }
- };
- int Pretraga(PolozeniPredmeti* p, int max)
- {
- /* Funkcija ima zadatak da ispise informacije o svim polozenim predmetima kod kojih je
- student ispit polozio putem parcijalnih ispita, te tom prilikom ostvario prosjecnu ocjenu
- vecu od 8,5. Da bi informacije o polozenom predmetu bile ispisane, moraju biti ispunjeni svi uslovi za formiranje konacne ocjene.
- Nakon ispisa, funkcija vraca broj polozenih predmeta koji su zadovoljili navedeni kriterij.
- */
- int brPredmeta=0, sumaOcjena=0;
- float prosjek=0;
- bool polParc1=false, polParc2=false;
- for(int i=0; i<max; i++){
- p[i].FormirajKonacnuOcjenu();
- int* konOc = p[i]._konacnaOcjena;
- if(*konOc > 5){
- for(int j=0; j<3; j++){
- if(p[i]._listaIzvrsenihObaveza[j]._vrstaObaveze == 1)
- polParc1=true;
- if(p[i]._listaIzvrsenihObaveza[j]._vrstaObaveze == 2)
- polParc2=true;
- sumaOcjena += p[i]._listaIzvrsenihObaveza[j]._ocjena;
- }
- prosjek = sumaOcjena / 3;
- }
- if(prosjek >= 8.5)
- brPredmeta++;
- }
- return brPredmeta;
- }
- int main()
- {
- int maxPredmeta=2, minObaveza=3;
- Datum* date = new Datum, * datePP = new Datum;
- PolozeniPredmeti* pp = new PolozeniPredmeti[maxPredmeta];
- ObavezeNaPredmetu* op = new ObavezeNaPredmetu[minObaveza];
- VrsteObaveza vo;
- // PP 1
- pp[0]._trenutnoIzvrsenihObaveza = 0;
- datePP->Unos(1,1,2011);
- pp[0]._datumPolaganja = datePP;
- vo = Parcijalni1;
- date->Unos(9,4,2014);
- op[0]._vrstaObaveze = vo;
- op[0]._datumIzvrsenja = date;
- op[0]._ocjena = 7;
- op[0]._komentar = "Uoceno varanje";
- pp[0].Unos(datePP, op[0]);
- vo = Seminarski;
- date->Unos(17,2,2014);
- op[1]._vrstaObaveze = vo;
- op[1]._datumIzvrsenja = date;
- op[1]._ocjena = 6;
- op[1]._komentar = "varanje";
- pp[0].Unos(datePP, op[1]);
- vo = Integralni;
- date->Unos(14,6,2015);
- op[2]._vrstaObaveze = vo;
- op[2]._datumIzvrsenja = date;
- op[2]._ocjena = 9;
- op[2]._komentar = "Moglo je i bolje";
- pp[0].Unos(datePP, op[2]);
- // PP 2
- pp[1]._trenutnoIzvrsenihObaveza = 0;
- datePP->Unos(3,3,2013);
- pp[1]._datumPolaganja = datePP;
- vo = Parcijalni1;
- date->Unos(28,3,2014);
- op[0]._vrstaObaveze = vo;
- op[0]._datumIzvrsenja = date;
- op[0]._ocjena = 7;
- op[0]._komentar = "Neuredan rad";
- pp[1].Unos(datePP, op[0]);
- vo = Parcijalni2;
- date->Unos(2,10,2014);
- op[1]._vrstaObaveze = vo;
- op[1]._datumIzvrsenja = date;
- op[1]._ocjena = 7;
- op[1]._komentar = "varanje na ispitu";
- pp[1].Unos(datePP, op[1]);
- vo = Seminarski;
- date->Unos(11,4,2015);
- op[2]._vrstaObaveze = vo;
- op[2]._datumIzvrsenja = date;
- op[2]._ocjena = 10;
- op[2]._komentar = "Jos vjezbati";
- pp[1].Unos(datePP, op[2]);
- cout << CRT << "\t FUNKCIJA PRETRAGA" << CRT;
- cout << "Broj predmeta koji su polozeni putem dva parcijalna ispita " << endl;
- cout << "i gdje je prosjecna ocjena veca od 8.5 iznosi " << Pretraga(pp, maxPredmeta) << CRT;
- for(int i=0; i<maxPredmeta; i++){
- cout << CRT << "\t:: PREDMET " << i+1 << ":: Polozen: ";
- pp[i]._datumPolaganja->Ispis();
- cout << CRT;
- cout << "Trenutno izvrsenih obaveza: " << pp[i]._trenutnoIzvrsenihObaveza << endl;
- cout << endl << "\t== OBAVEZE ==" << endl;
- for(int j=0; j<minObaveza; j++){
- pp[i]._listaIzvrsenihObaveza[j].Ispis();
- }
- cout << endl;
- }
- system("Pause > 0");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement