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;
- _dan = NULL;
- delete _mjesec;
- _mjesec = NULL;
- delete _godina;
- _godina = NULL;
- }
- };
- struct ObavezeNaPredmetu {
- VrstaObaveze _vrstaObaveze;
- Datum * _datumIzvrsenja;
- char * _napomena;
- int _ocjena; // 5 - 10
- void Unos(VrstaObaveze vrsta, Datum * datum, int ocjena, char * napomena) {
- _vrstaObaveze = vrsta;
- _datumIzvrsenja = new Datum;
- _datumIzvrsenja->Unos(*datum->_dan, *datum->_mjesec, *datum->_godina);
- _ocjena = ocjena;
- int size = strlen(napomena) + 1;
- _napomena = new char[size];
- strcpy_s(_napomena, size, napomena);
- }
- void Ispis() {
- cout << _vrstaObaveze << " " << _ocjena << " " << _napomena;
- _datumIzvrsenja->Ispis();
- cout << endl;
- }
- void Dealociraj() {
- delete _datumIzvrsenja;
- _datumIzvrsenja->Dealociraj();
- }
- };
- struct PolozeniPredmet {
- Datum _datumPolaganja;
- ObavezeNaPredmetu * _listaIzvrsenihObaveza[10];
- int _trenutnoIzvrsenihObaveza;
- int _konacnaOcjena; //formira se na osnovu ocjena izvrsenih obaveza
- int max = 10;
- void Unos(Datum * d) {
- /*Na osnovu vrijednosti primljenog parametra izvrsiti inicijalizaciju odgovarajucih atributa*/
- cout << "Datum polaganja" << endl;
- _datumPolaganja.Unos(*d->_dan, *d->_mjesec, *d->_godina);
- _trenutnoIzvrsenihObaveza = 0;
- _konacnaOcjena = 0;
- }
- bool DodajIzvrsenuObavezu(ObavezeNaPredmetu o) {
- /*Na osnovu vrijednosti primljenog parametra osigurati dodavanje novoizvrsene obaveze na predmetu.
- Potrebno je onemoguciti dodavanje identicnih obaveza, a izmedju izvrsenja pojedinih obaveza mora proci najmanje 7 dana.
- Identicna vrsta obaveze se moze dodati samo u slucaju da se radi o Seminarskom ili je prethodno dodana obaveza (identicne vrste)
- imala ocjenu 5. Ukoliko je moguce, osigurati prosirenje niza*/
- for (int i = 0; i < _trenutnoIzvrsenihObaveza; i++)
- {
- if (_listaIzvrsenihObaveza[i]->_vrstaObaveze == o._vrstaObaveze && _listaIzvrsenihObaveza[i]->_vrstaObaveze != Seminarski) {
- cout << "Ista obaveza" << endl;
- return false;
- }
- }
- for (int i = 0; i < _trenutnoIzvrsenihObaveza; i++)
- {
- if (_listaIzvrsenihObaveza[i]->_vrstaObaveze == o._vrstaObaveze &&
- _listaIzvrsenihObaveza[i]->_ocjena == 5) {
- cout << "Ne moze se dodati identicna vrsta obaveze i koja ima ocjenu 5" << endl;
- return false;
- }
- else
- if (*o._datumIzvrsenja->_dan < *_listaIzvrsenihObaveza[i]->_datumIzvrsenja->_dan +7) {
- cout << "Mora proci 7 dana" << endl;
- return false;
- }
- }
- if (_trenutnoIzvrsenihObaveza == 0) {
- _listaIzvrsenihObaveza[_trenutnoIzvrsenihObaveza] = new ObavezeNaPredmetu;
- _listaIzvrsenihObaveza[_trenutnoIzvrsenihObaveza]->Unos(o._vrstaObaveze, o._datumIzvrsenja, o._ocjena, o._napomena);
- _trenutnoIzvrsenihObaveza++;
- cout << "Uspjesno dodano" << endl;
- return true;
- }
- if (_trenutnoIzvrsenihObaveza == max) {
- ObavezeNaPredmetu * temp = new ObavezeNaPredmetu[max * 2];
- for (int i = 0; i < _trenutnoIzvrsenihObaveza; i++)
- {
- temp[i] = *_listaIzvrsenihObaveza[i];
- _listaIzvrsenihObaveza[i]->Dealociraj();
- }
- delete[] _listaIzvrsenihObaveza;
- *_listaIzvrsenihObaveza = temp;
- _listaIzvrsenihObaveza[_trenutnoIzvrsenihObaveza]->Unos(o._vrstaObaveze, o._datumIzvrsenja, o._ocjena, o._napomena);
- _trenutnoIzvrsenihObaveza++;
- max = max * 2;
- return true;
- }
- _listaIzvrsenihObaveza[_trenutnoIzvrsenihObaveza] = new ObavezeNaPredmetu;
- _listaIzvrsenihObaveza[_trenutnoIzvrsenihObaveza]->Unos(o._vrstaObaveze, o._datumIzvrsenja, o._ocjena, o._napomena);
- _trenutnoIzvrsenihObaveza++;
- return true;
- }
- int FormirajKonacnuOcjenu() {
- /*Konacna ocjene predstavlja prosjecnu ocjenu na predmetu,
- a za njeno formiranje student mora posjedovati polozen integralni ili dva parijcalna ispita.
- Ukoliko je ispit polozen putem parcijalnih ispita, student takodjer mora imati pozitivno (ocjenom vecom od 5)
- ocijenjena najmanje dva seminarska rada. U slucaju da bilo koji od navedenih uslova nije zadovoljen konacna
- ocjena treba biti postavljena na vrijednost 5. Konacna ocjena, takodjer, ne smije biti formirana u slucaju da
- u napomeni od dvije obaveze stoji rijec 'prepisivao' ili 'izbacen'.*/
- int brojacParcijalnih = 0, brojacSeminarskih = 0,brojacNapomena=0, _sumaOcjeneSeminarskih=0;
- float suma = 0;
- for (int i = 0; i < _trenutnoIzvrsenihObaveza; i++)
- {
- if (strstr(_listaIzvrsenihObaveza[i]->_napomena, "prepisivao") != 0 || strstr(_listaIzvrsenihObaveza[i]->_napomena, "izbacen") != 0) {
- cout << "varao si " << endl;
- brojacNapomena++;
- }
- }
- if (brojacNapomena >= 2) {
- cout << "2 napomene" << endl;
- return false;
- }
- for (int i = 0; i < _trenutnoIzvrsenihObaveza; i++)
- {
- if (_listaIzvrsenihObaveza[i]->_vrstaObaveze == Integralni) {
- _konacnaOcjena = _listaIzvrsenihObaveza[i]->_ocjena;
- return _konacnaOcjena;
- }
- }
- for (int i = 0; i < _trenutnoIzvrsenihObaveza; i++)
- {
- if (_listaIzvrsenihObaveza[i]->_vrstaObaveze == Parcijalni1) {
- for (int j = 0; j < _trenutnoIzvrsenihObaveza; j++)
- {
- if (_listaIzvrsenihObaveza[j]->_vrstaObaveze == Parcijalni2)
- {
- for (int k = 0; k < _trenutnoIzvrsenihObaveza; k++) {
- if (_listaIzvrsenihObaveza[k]->_vrstaObaveze == Seminarski && _listaIzvrsenihObaveza[k]->_ocjena >= 6) {
- brojacSeminarskih++;
- _sumaOcjeneSeminarskih += _listaIzvrsenihObaveza[k]->_ocjena;
- if (brojacSeminarskih >= 2) {
- return (_listaIzvrsenihObaveza[i]->_ocjena + _listaIzvrsenihObaveza[j]->_ocjena + _sumaOcjeneSeminarskih) / 4;
- }
- }
- }
- }
- }
- }
- }
- return 5;
- }
- };
- //
- //int Pretraga(PolozeniPredmet * p, int max) {
- // /*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.*/
- //}
- void main() {
- //cout << "Izvinjavam se na kasnjenju post-a. Bio sam ubijedjen da sam postavio zadatak...." << endl;
- Datum d1, d2,d3,d4;
- d1.Unos(12, 12, 2013);
- d2.Unos(12, 3, 2014);
- d3.Unos(12, 2, 2015);
- d4.Unos(12, 5, 2011);
- ObavezeNaPredmetu o0,o1, o2, o3, o4;
- o0.Unos(Seminarski, &d1, 8, "polozio");
- o1.Unos(Seminarski, &d2, 8, "polozio");
- o2.Unos(Parcijalni1, &d3, 10, "polozio");
- o3.Unos(Parcijalni2, &d4, 10, "polozio");
- o4.Unos(Integralni, &d1, 7, "polozio");
- o0.Ispis();
- o1.Ispis();
- o2.Ispis();
- o3.Ispis();
- o4.Ispis();
- PolozeniPredmet p;
- p.Unos(&d1);
- //p.DodajIzvrsenuObavezu(o2);
- //p.DodajIzvrsenuObavezu(o3);
- //p.DodajIzvrsenuObavezu(o1);
- //p.DodajIzvrsenuObavezu(o1);
- p.DodajIzvrsenuObavezu(o0);
- p.DodajIzvrsenuObavezu(o1);
- p.DodajIzvrsenuObavezu(o2);
- p.DodajIzvrsenuObavezu(o3);
- //p.DodajIzvrsenuObavezu(o[3]);
- cout << "Konacna ocjena = " << p.FormirajKonacnuOcjenu() << endl;
- //izbjegavajte koristenje vlastitog imena i prezimena.
- //provjeriti validnost izvrsenja svih dostupnih funkcionalnosti
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement