Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //********************************************juni
- //karate: https://pastebin.com/rgygcLJV
- #include<iostream>
- using namespace std;
- /*
- 1. BROJ I VRSTA PARAMETARA MORAJU BITI IDENTICNI KAO U PRIMJERIMA. U SUPROTNOM SE RAD NECE BODOVATI
- 2. STAVITE KOMENTAR NA DIJELOVE CODE-A KOJE NE BUDETE IMPLEMENTIRALI
- 3. KREIRAJTE .DOC FAJL SA VAŠIM BROJEM INDEKSA ( NPR. IB160061.DOC BEZ IMENA I PREZIMENA), TE NA KRAJU ISPITA U NJEGA KOPIRAJTE RJEŠENJA VAŠIH ZADATAKA. NE PREDAVATI .TXT ILI .CPP FAJLOVE
- 4. TOKOM IZRADE ISPITA NIJE DOZVOLJENO KORIŠTENJE HELP-A
- 5. TOKOM IZRADE ISPITA MOGU BITI POKRENUTA SAMO TRI PROGRAMA: PDF READER (ISPITNI ZADACI), MS VISUAL STUDIO, MS WORD (U KOJI CETE KOPIRATI VAŠA RJEŠENJA)
- 6. BEZ OBZIRA NA TO DA LI SU ISPITNI ZADACI URAÐENI, SVI STUDENTI KOJI SU PRISTUPILI ISPITU MORAJU PREDATI SVOJ RAD
- */
- //narednu liniju code-a ignorisite, osim u slucaju da vam bude predstavljala smetnje u radu
- #pragma warning(disable:4996)
- enum VrstaAktivnosti { Tehnike, Kata, Borba };
- enum Pojas { Zuti, Narandzasti, Zeleni, Plavi, Smedji, Crni };
- 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 Aktivnost {
- unique_ptr<VrstaAktivnosti> _vrsta;
- Datum _datumIzvrsenja;
- char * _nazivOpis;
- int _ocjena; // 1 - 10
- void Unos(VrstaAktivnosti vrsta, Datum * datum, int ocjena, const char * nazivOpis) {
- _datumIzvrsenja.Unos(*datum->_dan, *datum->_mjesec, *datum->_godina);
- _ocjena = ocjena;
- int size = strlen(nazivOpis) + 1;
- _nazivOpis = new char[size];
- strcpy_s(_nazivOpis, size, nazivOpis);
- }
- void Ispis() {
- cout << *_vrsta << " " << _ocjena << " " << _nazivOpis;
- _datumIzvrsenja.Ispis();
- cout << endl;
- }
- void Dealociraj() {
- _datumIzvrsenja.Dealociraj();
- delete[] _nazivOpis; _nazivOpis = nullptr;
- }
- };
- struct KaratePojas {
- Datum * _datumPolaganja;//datum koji ce se evidentirati kao datum polaganja pojasa tj. kada su ispunjene sve aktivnosti/obaveze
- Pojas _pojas;
- Aktivnost * _listaIzvrsenihAktivnosti;
- int _trenutnoIzvrsenihAktivnosti;
- void Unos(Pojas pojas) {
- _listaIzvrsenihAktivnosti = nullptr;
- _trenutnoIzvrsenihAktivnosti = 0;
- _datumPolaganja = nullptr;
- _pojas = pojas;
- }
- void Dealociraj() {
- _datumPolaganja->Dealociraj(); _datumPolaganja = nullptr;
- for (size_t i = 0; i < _trenutnoIzvrsenihAktivnosti; i++)
- _listaIzvrsenihAktivnosti[i].Dealociraj();
- delete[] _listaIzvrsenihAktivnosti;
- _listaIzvrsenihAktivnosti = nullptr;
- }
- void Ispis() {
- _datumPolaganja->Ispis();
- cout << _pojas <<endl;
- for (size_t i = 0; i < _trenutnoIzvrsenihAktivnosti; i++)
- _listaIzvrsenihAktivnosti[i].Ispis();
- }
- };
- struct Kandidat {
- char * _imePrezime;
- shared_ptr<KaratePojas> _pojasevi[6];
- void Unos(const char * imePrezime) {
- int size = strlen(imePrezime) + 1;
- _imePrezime = new char[size];
- strcpy_s(_imePrezime, size, imePrezime);
- for (size_t i = 0; i < 6; i++)
- _pojasevi[i] = nullptr;
- }
- void Dealociraj() {
- delete[] _imePrezime; _imePrezime = nullptr;
- for (size_t i = 0; i < 6; i++)
- if (_pojasevi[i] != nullptr) {
- _pojasevi[i]->Dealociraj();
- _pojasevi[i].reset();
- }
- }
- void Ispis() {
- cout << _imePrezime << endl;
- for (size_t i = 0; i < 6; i++)
- if (_pojasevi[i] != nullptr)
- _pojasevi[i]->Ispis();
- }
- };
- void main() {
- //BROJ I VRSTA PARAMETARA MORAJU BITI IDENTICNI KAO U PRIMJERIMA
- //STAVITE KOMENTAR NA DIJELOVE CODE-A KOJE NE BUDETE IMPLEMENTIRALI
- Datum datumPolaganja1, datumPolaganja2, datumPolaganja3, datumPolaganja4;
- datumPolaganja1.Unos(10, 6, 2018);
- datumPolaganja2.Unos(18, 6, 2018);
- datumPolaganja3.Unos(22, 3, 2018);
- datumPolaganja4.Unos(22, 7, 2018);
- Aktivnost aktivnost1, aktivnost2, aktivnost3, aktivnost4, aktivnost5;
- aktivnost1.Unos(Tehnike, &datumPolaganja1, 6, "Tehnike za zuti pojas");
- aktivnost2.Unos(Kata, &datumPolaganja1, 8, "Taiki joko shodan - zuti pojas");
- aktivnost3.Unos(Borba, &datumPolaganja1, 2, "Jednostavne borbene tehnike sa partnerom");
- aktivnost4.Unos(Borba, &datumPolaganja1, 6, "Jednostavne borbene tehnike sa partnerom");
- aktivnost5.Unos(Borba, &datumPolaganja4, 6, "Jednostavne borbene tehnike sa partnerom");
- KaratePojas pojasZuti, pojasNarandzasti, pojasZeleni;
- pojasZuti.Unos(Zuti);
- /*Na osnovu vrijednosti primljenog parametra osigurati dodavanje novoizvrsene aktivnosti za potrebe stjecanja odredjenog pojasa. Broj aktivnosti nije ogranicen.
- Identicna aktivnost se moze dodati jedino u slucaju kada je prethodna (identivna aktivnost po vrsti i datumu izvrsenja) imala ocjenu manju od 6.
- Uspjesnom aktivnoscu se smatraju one aktivnosti koje imaju ocjenu vecu od 5, a svaka naredna identicna aktivnost, bez obzira da li je uspjesna ili ne,
- moze biti dodana jedino ako je proslo najmanje 15 dana od izvrsenja prethodne. Onemoguciti dodavanje aktivnosti uspjesno polozenom pojasu.*/
- if (pojasZuti.DodajIzvrsenuAktivnost(&aktivnost1))
- cout << "Aktivnost uspjesno dodana!" << endl;
- if (pojasZuti.DodajIzvrsenuAktivnost(&aktivnost2))
- cout << "Aktivnost uspjesno dodana!" << endl;
- if (pojasZuti.DodajIzvrsenuAktivnost(&aktivnost3))
- cout << "Aktivnost uspjesno dodana!" << endl;
- if (pojasZuti.DodajIzvrsenuAktivnost(&aktivnost4))//15 dana...
- cout << "Aktivnost uspjesno dodana!" << endl;
- if (pojasZuti.DodajIzvrsenuAktivnost(&aktivnost5))
- cout << "Aktivnost uspjesno dodana!" << endl;
- //Koristeci neki od obradjenih algoritama, po ocjeni sortirati aktivnosti u okviru odredjenog pojasa
- pojasZuti.Sortiraj();
- /* Karate pojas zahtijeva uspjesnu realizaciju svih planiranih aktivnosti, a one se za jedan povecavaju sa svakim novim pojasom, npr.
- zuti pojas: 1 x tehnika, 1 x kata, 1 x borba; narandzasti pojas: 2 x tehnika, 2 x kata, 2 x borba; i td...
- Funkcija vraca false u slucaju da: su kandidatu u listu aktivnosti evidentirane tri negativno ocijenjene identicne vrste aktivnosti (npr. tri negativne ocjene iz borbi), onda se taj pojas ne moze smatrati uspjesno stecenim
- i, te ukoliko nedostaje bilo koja od aktivnosti zahtijevanih u okviru tog pojasa. Ukoliko je kandidat uspjesno realizovao sve aktivnost, datum polaganja se postavlja na datum posljednje uspjesno realizovane aktivnosti*/
- if (pojasZuti.DaLiJePolozen())
- pojasZuti.Ispis();
- /*Funkcija vraca prosjecnu ocjenu svih uspjesno realizovanih aktivnosti koja u nazivu ili opisu sadrze vrijednost primljenog parametra. Ukoliko smatrate da je potrebno, mozete dodati i druge parametre za potrebe implementacije ove funkcije*/
- cout << "Prosjecna ocjena za zuti pojas -> " << pojasZuti.PretragaRekrzivno("pojas") << endl;
- //ispisuje sve dostupne podatke o pojasu
- pojasZuti.Ispis();
- Kandidat jasmin;
- jasmin.Unos("Jasmin Azemovic");
- /*
- Karate pojasevi se moraju dodavati po redoslijedu tj. ne smije se dozvoliti dodavanje zelenog pojasa ukoliko prethodno nije dodan zuti i narandzasti. Za provjeru lokacije (unutar funkcije DodajPojas) na koju ce se dodati novi karate pojas, te da li su nizi pojasevi prethodno dodani koristiti lambda funkciju.
- */
- if (jasmin.DodajPojas(pojasZuti))
- cout << "Pojas uspjesno dodan!" << endl;
- if (jasmin.DodajPojas(pojasZeleni))//prethodno je trebao biti dodan narandzasti pojas
- cout << "Pojas uspjesno dodan!" << endl;
- if (jasmin.DodajPojas(pojasNarandzasti))
- cout << "Pojas uspjesno dodan!" << endl;
- float prosjek = 0;
- Pojas pojas;
- //Funkcija GetNajbolji vraca par koji sadrzi oznaku i prosjecnu ocjenu (uspjesno okoncanih aktivnosti) pojasa sa najvecim prosjekom
- tie(pojas, prosjek) = jasmin.GetNajbolji();
- cout << "Najbolji rezultat od " << prosjek << " je ostvaren tokom stjecanja pojasa " << pojas << endl;
- datumPolaganja1.Dealociraj(), datumPolaganja2.Dealociraj(), datumPolaganja3.Dealociraj(), datumPolaganja4.Dealociraj();
- aktivnost1.Dealociraj(), aktivnost2.Dealociraj(), aktivnost3.Dealociraj(), aktivnost4.Dealociraj(), aktivnost5.Dealociraj();
- pojasZuti.Dealociraj(), pojasNarandzasti.Dealociraj(), pojasZeleni.Dealociraj();
- jasmin.Dealociraj();
- system("pause");
- }
- //vozacki ispit: https://pastebin.com/VVKtx6PZ
- #include<iostream>
- using namespace std;
- /*
- 1. BROJ I VRSTA PARAMETARA MORAJU BITI IDENTICNI KAO U PRIMJERIMA. U SUPROTNOM SE RAD NECE BODOVATI
- 2. STAVITE KOMENTAR NA DIJELOVE CODE-A KOJE NE BUDETE IMPLEMENTIRALI
- 3. KREIRAJTE .DOC FAJL SA VAŠIM BROJEM INDEKSA ( NPR. IB160061.DOC BEZ IMENA I PREZIMENA), TE NA KRAJU ISPITA U NJEGA KOPIRAJTE RJEŠENJA VAŠIH ZADATAKA. NE PREDAVATI .TXT ILI .CPP FAJLOVE
- 4. TOKOM IZRADE ISPITA NIJE DOZVOLJENO KORIŠTENJE HELP-A
- 5. TOKOM IZRADE ISPITA MOGU BITI POKRENUTA SAMO TRI PROGRAMA: PDF READER (ISPITNI ZADACI), MS VISUAL STUDIO, MS WORD (U KOJI CETE KOPIRATI VAŠA RJEŠENJA)
- 6. BEZ OBZIRA NA TO DA LI SU ISPITNI ZADACI URAÐENI, SVI STUDENTI KOJI SU PRISTUPILI ISPITU MORAJU PREDATI SVOJ RAD
- */
- //narednu liniju code-a ignorisite, osim u slucaju da vam bude predstavljala smetnje u radu
- #pragma warning(disable:4996)
- enum VrstaAktivnosti { Poligon, Gradska, Nocna, Parkiranje };
- enum Kategorija { A, B, C, D, E };
- const int maxKategorija = 5;
- 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 Aktivnost {
- unique_ptr<VrstaAktivnosti> _vrsta;
- Datum _datumIzvrsenja;
- char * _komentar;
- int _ocjena; // 1 - 5
- void Unos(VrstaAktivnosti vrsta, Datum * datum, int ocjena, const char * komentar) {
- _datumIzvrsenja.Unos(*datum->_dan, *datum->_mjesec, *datum->_godina);
- _ocjena = ocjena;
- int size = strlen(komentar) + 1;
- _komentar = new char[size];
- strcpy_s(_komentar, size, komentar);
- }
- void Ispis() {
- cout << *_vrsta << " " << _ocjena << " " << _komentar;
- _datumIzvrsenja.Ispis();
- cout << endl;
- }
- void Dealociraj() {
- _datumIzvrsenja.Dealociraj();
- delete[] _komentar; _komentar = nullptr;
- }
- };
- struct VozackaKategorija {
- Datum * _datumPolaganja;//datum koji ce se evidentirati kao datum polaganja kategorije tj. kada su ispunjene sve aktivnosti/obaveze
- Kategorija _kategorija;
- Aktivnost * _listaIzvrsenihAktivnosti;
- int _trenutnoIzvrsenihAktivnosti;
- void Unos(Kategorija kategorija) {
- _listaIzvrsenihAktivnosti = nullptr;
- _trenutnoIzvrsenihAktivnosti = 0;
- _datumPolaganja = nullptr;
- _kategorija = kategorija;
- }
- void Dealociraj() {
- _datumPolaganja->Dealociraj();
- for (size_t i = 0; i < _trenutnoIzvrsenihAktivnosti; i++)
- _listaIzvrsenihAktivnosti[i].Dealociraj();
- delete[] _listaIzvrsenihAktivnosti;
- _listaIzvrsenihAktivnosti = nullptr;
- }
- void Ispis() {
- _datumPolaganja->Ispis();
- cout << _kategorija << endl;
- for (size_t i = 0; i < _trenutnoIzvrsenihAktivnosti; i++)
- _listaIzvrsenihAktivnosti[i].Ispis();
- }
- };
- struct Kandidat {
- char * _imePrezime;
- shared_ptr<VozackaKategorija> _kategorije[maxKategorija];
- int _trenutnoKategorija;
- void Unos(const char * imePrezime) {
- int size = strlen(imePrezime) + 1;
- _imePrezime = new char[size];
- strcpy_s(_imePrezime, size, imePrezime);
- _trenutnoKategorija = 0;
- }
- void Dealociraj() {
- delete[] _imePrezime; _imePrezime = nullptr;
- for (size_t i = 0; i < _trenutnoKategorija; i++) {
- _kategorije[i]->Dealociraj();
- _kategorije[i].reset();
- }
- }
- void Ispis() {
- cout << _imePrezime << endl;
- for (size_t i = 0; i < _trenutnoKategorija; i++)
- _kategorije[i]->Ispis();
- }
- };
- void main() {
- //BROJ I VRSTA PARAMETARA MORAJU BITI IDENTICNI KAO U PRIMJERIMA
- //STAVITE KOMENTAR NA DIJELOVE CODE-A KOJE NE BUDETE IMPLEMENTIRALI
- Datum datumPolaganja1, datumPolaganja2, datumPolaganja3, datumPolaganja4;
- datumPolaganja1.Unos(10, 6, 2018);
- datumPolaganja2.Unos(18, 6, 2018);
- datumPolaganja3.Unos(22, 3, 2018);
- datumPolaganja4.Unos(28, 7, 2018);
- VozackaKategorija kategorijaA, kategorijaB, kategorijaC;
- kategorijaA.Unos(A);
- /*Na osnovu vrijednosti primljenog parametra osigurati dodavanje novoizvrsene aktivnosti za potrebe stjecanja odredjene vozacke kategorije. Broj aktivnosti nije ogranicen.
- Identicna aktivnost se moze dodati jedino u slucaju kada je prethodna (identivna aktivnost po vrsti i datumu izvrsenja) imala ocjenu manju od 3.
- Uspjesnom aktivnoscu se smatraju one aktivnosti koje imaju ocjenu vecu od 2, a svaka naredna identicna aktivnost, bez obzira da li je uspjesna ili ne,
- moze biti dodana jedino ako je proslo najmanje 30 dana od izvrsenja prethodne. Onemoguciti dodavanje aktivnosti uspjesno polozenoj kategoriji.*/
- if (kategorijaA.DodajIzvrsenuAktivnost(Poligon, &datumPolaganja1, 3, "izuzetno dobra orijentacija"))
- cout << "Aktivnost uspjesno dodana!" << endl;
- if (kategorijaA.DodajIzvrsenuAktivnost(Gradska, &datumPolaganja1, 2, "nesigurnost u raskrsnicama"))
- cout << "Aktivnost uspjesno dodana!" << endl;
- if (kategorijaA.DodajIzvrsenuAktivnost(Gradska, &datumPolaganja2, 4, "raskrsnice savladane"))//datum?
- cout << "Aktivnost uspjesno dodana!" << endl;
- if (kategorijaA.DodajIzvrsenuAktivnost(Gradska, &datumPolaganja4, 4, "raskrsnice savladane"))
- cout << "Aktivnost uspjesno dodana!" << endl;
- //koristeci neki od obradjenih algoritama, po ocjeni sortirati aktivnosti u okviru odredjene kategorije
- kategorijaA.Sortiraj();
- /*Stjecanje kategorije zahtijeva uspjesnu realizaciju svih planiranih aktivnosti, a one se za jedan povecavaju sa svakom novom kategorijom, npr.
- A: 1 x poligon, 1 x gradska, 1 x nocna, 1 x parkiranje;
- B: 2 x poligon, 2 x gradska, 2 x nocna, 2 x parkiranje; i td...
- Funkcija vraca false u slucaju da: su kandidatu u listu aktivnosti evidentirane tri negativno ocijenjene identicne vrste aktivnosti (npr. tri negativne ocjene iz gradske voznje), onda se ta kategorija ne moze smatrati uspjesno polozenom
- ,te ukoliko nedostaje bilo koja od aktivnosti zahtijevanih u okviru te kategorije. Ukoliko je kandidat uspjesno realizovao sve aktivnost, datum polaganja se postavlja na datum posljednje uspjesno realizovane aktivnosti*/
- if (kategorijaA.DaLiJePolozena())
- kategorijaA.Ispis();
- /*Funkcija vraca prosjecnu ocjenu svih uspjesno realizovanih aktivnosti koja u nazivu ili opisu sadrze vrijednost primljenog parametra. Ukoliko smatrate da je potrebno, mozete dodati i druge parametre za potrebe implementacije ove funkcije*/
- cout << "Prosjecna ocjena za kategoriju A -> " << kategorijaA.PretragaRekrzivno("nesigurno") << endl;
- //ispisuje sve dostupne podatke o kategoriji
- kategorijaA.Ispis();
- Kandidat jasmin;
- jasmin.Unos("Jasmin Azemovic");
- /*
- Pretpostavka je da se kategorije moraju polagati po redoslijedu tj. ne smije se dozvoliti dodavanje kategorije C ukoliko prethodno nisu uspjesno polozene kategorije B i C. Za provjeru ispunjenosti preduslova dodavanja nove kategorije, unutar funkcije DodajKategoriju, kreirati lambda funkciju.
- */
- if (jasmin.DodajKategoriju(kategorijaA))
- cout << "Kategorija uspjesno dodan!" << endl;
- if (jasmin.DodajKategoriju(kategorijaC))
- cout << "Kategorija uspjesno dodan!" << endl;
- if (jasmin.DodajKategoriju(kategorijaB))
- cout << "Kategorija uspjesno dodan!" << endl;
- float prosjek = 0;
- Kategorija kategorija;
- //Funkcija GetNajboljuKategoriju vraca par koji sadrzi oznaku i prosjecnu ocjenu (uspjesno okoncanih aktivnosti) kategorije sa najvecim prosjekom
- tie(kategorija, prosjek) = jasmin.GetNajboljuKategoriju();
- cout << "Najbolji rezultat od " << prosjek << " je ostvaren tokom polaganja kategorije " << kategorija << endl;
- datumPolaganja1.Dealociraj(), datumPolaganja2.Dealociraj(), datumPolaganja3.Dealociraj(), datumPolaganja4.Dealociraj();
- kategorijaA.Dealociraj(), kategorijaB.Dealociraj(), kategorijaC.Dealociraj();
- jasmin.Dealociraj();
- system("pause");
- }
- ******************************************** juli
- //filter: https://pastebin.com/hwfzMeTY
- /*
- 1. BROJ I VRSTA PARAMETARA MORAJU BITI IDENTICNI KAO U PRIMJERIMA, U SUPROTNOM SE RAD NECE BODOVATI
- 2. STAVITE KOMENTAR NA DIJELOVE CODE-A KOJE NE BUDETE IMPLEMENTIRALI
- 3. KREIRAJTE .DOC FAJL SA VASIM BROJEM INDEKSA ( NPR. IB130030.DOC BEZ IMENA I PREZIMENA), TE NA KRAJU ISPITA U NJEGA KOPIRAJTE RJESENJA VASIH ZADATAKA. NE PREDAVATI .CPP FAJLOVE
- 4. TOKOM IZRADE ISPITA NIJE DOZVOLJENO KORISTENJE HELP-A
- 5. TOKOM IZRADE ISPITA MOGU BITI POKRENUTA SAMO TRI PROGRAMA: PDF READER (ISPITNI ZADACI), MS VISUAL STUDIO, MS WORD (U KOJI CETE KOPIRATI VASA RJESENJA)
- 6. BEZ OBZIRA NA TO DA LI SU ISPITNI ZADACI URADJENI, SVI STUDENTI KOJI SU PRISTUPILI ISPITU MORAJU PREDATI SVOJ RAD
- */
- #include<iostream>
- using namespace std;
- //narednu liniju code-a ignorisite, osim u slucaju da vam bude predstavljala smetnje u radu
- #pragma warning(disable:4996)
- const char *crt = "\n-------------------------------------------\n";
- enum vrstaDokumenta { PDF, DOC, TXT, HTML };
- const char * vrstaDokumentaChar[] = { "PDF", "DOC", "TXT", "HTML" };
- enum Prioritet { VISOK, SREDNJI, NIZAK };
- const char * PrioritetChar[] = { "VISOK", "SREDNJI", "NIZAK" };
- char * AlocirajNizKaraktera(const char * sadrzaj) {
- int vel = strlen(sadrzaj) + 1;
- char * temp = new char[vel];
- strcpy_s(temp, vel, sadrzaj);
- return temp;
- }
- const int BROJ_ZNAKOVA_PO_STRANICI = 30;
- struct DatumVrijeme {
- int *_dan, *_mjesec, *_godina, *_sati, *_minuti;
- void Unos(int dan = 1, int mjesec = 1, int godina = 2000, int sati = 1, int minuti = 1) {
- _dan = new int(dan);
- _mjesec = new int(mjesec);
- _godina = new int(godina);
- _sati = new int(sati);
- _minuti = new int(minuti);
- }
- void Dealociraj() {
- delete _dan; _dan = nullptr;
- delete _mjesec; _mjesec = nullptr;
- delete _godina; _godina = nullptr;
- delete _sati; _sati = nullptr;
- delete _minuti; _minuti = nullptr;
- }
- void Ispis() {
- cout << *_dan << "." << *_mjesec << "." << *_godina << " " << *_sati << ":" << *_minuti << endl;
- }
- };
- struct Filter {
- char * _sadrzaj;
- Prioritet _prioritet;
- void Unos(const char * sadrzaj, Prioritet prioritet) {
- _sadrzaj = AlocirajNizKaraktera(sadrzaj);
- _prioritet = prioritet;
- }
- void Dealociraj() {
- delete[] _sadrzaj; _sadrzaj = nullptr;
- }
- void Ispis() { cout << _sadrzaj << " (" << PrioritetChar[_prioritet] << ")" << endl; }
- };
- struct Dokument {
- vrstaDokumenta _vrsta;
- char * _naziv;
- char * _sadrzaj;
- unique_ptr<DatumVrijeme> _kreiran;
- int _brojStranica;
- void Unos(vrstaDokumenta vrsta, const char * naziv, DatumVrijeme kreiran) {
- _naziv = AlocirajNizKaraktera(naziv);
- _vrsta = vrsta;
- _kreiran = kreiran;
- _brojStranica = 0;//broj stranica se odredjuje prilikom svakog dodavanja novog sadrzaja dokumentu
- _sadrzaj = nullptr;
- }
- void Dealociraj() {
- delete[] _naziv; _naziv = nullptr;
- delete[] _sadrzaj; _sadrzaj = nullptr;
- _kreiran->Dealociraj();
- }
- void Ispis() {
- cout << crt << _naziv << " " << vrstaDokumentaChar[_vrsta] << " kreiran ";
- _kreiran->Ispis();
- cout << crt << _sadrzaj << crt << " br.stranica (" << _brojStranica << ")" << crt;
- }
- };
- struct Printer {
- char * _model;
- Dokument * _dokumenti;
- int _trenutnoDokumenata;
- Filter * _filteri;
- int _trenutnoFiltera;
- void Unos(const char * model) {
- _model = AlocirajNizKaraktera(model);
- _filteri = nullptr;
- _dokumenti = nullptr;
- _trenutnoDokumenata = 0;
- _trenutnoFiltera = 0;
- }
- void Dealociraj() {
- delete[] _model; _model = nullptr;
- for (size_t i = 0; i < _trenutnoDokumenata; i++)
- _dokumenti[i].Dealociraj();
- delete[]_dokumenti; _dokumenti = nullptr;
- for (size_t i = 0; i < _trenutnoFiltera; i++)
- _filteri[i].Dealociraj();
- delete[]_filteri; _filteri = nullptr;
- }
- void Ispis() {
- cout << _model << crt;
- for (size_t i = 0; i < _trenutnoDokumenata; i++)
- _dokumenti[i].Ispis();
- }
- };
- int main() {
- DatumVrijeme prije3Dana; prije3Dana.Unos(3, 2, 2018, 10, 15);
- DatumVrijeme danas1; danas1.Unos(6, 2, 2018, 10, 15);
- DatumVrijeme danas2; danas2.Unos(6, 2, 2018, 10, 16);
- DatumVrijeme za10Dana; za10Dana.Unos(16, 2, 2018, 10, 15);
- Dokument ispitPRII, ispitMAT, ispitUIT, ispitUITDrugiRok;
- ispitPRII.Unos(DOC, "ispitPRII.doc", prije3Dana);
- ispitMAT.Unos(DOC, "ispitMAT.doc", danas1);
- ispitUIT.Unos(DOC, "ispitUIT.doc", danas2);
- ispitUITDrugiRok.Unos(PDF, "ispitUITDrugiRok.pdf", za10Dana);
- /*BROJ STRANICA DOKUMENTA SE AUTOMATSKI ODREDJUJE PRILIKOM DODAVANJA SADRZAJA. ZA POTREBE ISPITA PRETPOSTAVLJAMO DA NA JEDNU
- STRANICU MOZE STATI BROJ_ZNAKOVA_PO_STRANICI ZNAKOVA UKLJUCUJUCI RAZMAKE I DRUGE VRSTE ZNAKOVA*/
- ispitPRII.DodajSadrzaj("Programiranje ili racunarsko programiranje (engl. programming) jeste vjestina pomocu koje ");
- ispitPRII.DodajSadrzaj("korisnik stvara i izvrsava algoritme koristeci odredjene programske jezike da bi ... ");
- cout << "Broj stranica -> " << ispitPRII._brojStranica << endl;
- ispitPRII.Ispis();//ISPISUJE SVE PODATKE O DOKUMENTU
- ispitMAT.DodajSadrzaj("Matematika se razvila iz potrebe da se obavljaju proracuni u trgovini, vrse mjerenja zemljista i predvidjaju ");
- ispitMAT.DodajSadrzaj("astronomski dogadjaji, i ove tri primjene se mogu dovesti u vezu sa grubom podjelom matematike ");
- Printer hp3200; hp3200.Unos("HP 3200");
- /*PRINTER NECE DOZVOLITI PRINTANJE DOKUMENATA U CIJEM SADRZAJU SE NALAZI NEKA OD ZABRANJENIH RIJECI DEFINISANIH FILTERIMA*/
- if (hp3200.DodajFilter("RE", NIZAK)) //VISOK :)
- cout << "Filter dodan!" << endl;
- if (hp3200.DodajFilter("RAT", VISOK))
- cout << "Filter dodan!" << endl;
- if (hp3200.DodajFilter("UBITI", VISOK))
- cout << "Filter dodan!" << endl;
- if (hp3200.DodajFilter("MRZITI", SREDNJI))
- cout << "Filter dodan!" << endl;
- if (!hp3200.DodajFilter("RE", SREDNJI))/* ONEMOGUCITI PONAVLJANJE FILTERA, BEZ OBZIRA STO SU RAZLICITOG PRIORITETA*/
- cout << "Filter nije dodan!" << endl;
- /*
- DA BI PRINTER ISPRINTAO NEKI DOKUMENT MORAJU BITI ZADOVOLJENA SLJEDECA PRAVILA:
- 1. NAZIV DOKUMENTA MOZE SADRZAVATI SAMO SLOVA, A EKSTENZIJA MOZE BITI IDENTICNA ONOJ DEFINISANOJ VRIJEDNOSCU ATRIBUTA vrstaDokumenta
- 2. SADRZAJ DOKUMENTA MOZE POSJEDOVATI RIJECI DEFINISANE FILTERIMA, ALI PREMA SLJEDECIM PRAVILIMA:
- - NITI JEDNU RIJEC OZNACENU FILTEROM PRIORITETA VISOK
- - NAJVISE 2 RIJECI OZNACENE FILTEROM PRIORITETA SREDNJI
- - NAJVISE 3 RIJECI OZNACENE FILTEROM PRIORITETA NIZAK
- UKOLIKO NEKI OD NAVEDENIH USLOVA NIJE ZADOVOLJEN FUNKCIJA PRINTAJ DOKUMENT TREBA SACUVATI U NIZ _dokumenti, ALI TAJ DOKUMENT NE TREBA PRINTATI I FUNKCIJA VRACA FALSE.
- UKOLIKO DOKUMENT ISPUNJAVA SVE USLOVE ZA PRINTANJE POTREBNO JE NA KONZOLU ISPISATI SADRZAJ DOKUMENTA KOJI SE PRINTA, A SA CRT LINIJOM ODVAJATI STRANICE DOKUMENTA
- */
- if (hp3200.Printaj(ispitPRII))
- cout << "Printam -> " << ispitPRII._naziv << endl;
- if (hp3200.Printaj(ispitMAT))
- cout << "Printam -> " << ispitMAT._naziv << endl;
- if (hp3200.Printaj(ispitUIT))
- cout << "Printam -> " << ispitUIT._naziv << endl;
- if (hp3200.Printaj(ispitUITDrugiRok))
- cout << "Printam -> " << ispitUITDrugiRok._naziv << endl;
- //PROSJECAN BROJ STRANICA = UKUPAN BROJ STRANICA / BROJ PRINTANIH DOKUMENATA
- //REKURZIVNA FUNKCIJA VRACA PROSJECAN BROJ ISPRINTANIH STRANICA (KOJE SU ZADOVOLJILE POSTAVLJENE FILTERE) U PERIODU OD (npr.prije3Dana) - DO (npr.danas2), UKLJUCUJUCI I TAJ PERIOD
- cout << "Prosjecan broj printanih stranica je -> " << hp3200.GetProsjecanBrojStranicaUPeriodu_Od_Do(/**/) << crt;
- //VRACA SADRZAJ FILTERA KOJI SE NAJCESCE KORISTIO U DOKUMENTIMA
- Filter * f = hp3200.GetNakoristenijiFilter();
- if (f != nullptr && f->_sadrzaj != nullptr)
- cout << "Najcesce koristeni sadrzaj filtera je -> " << f->_sadrzaj << crt;
- //PORED VRIJEDNOSTI SVIH OSTALIH ATRIBUTA, ISPISUJE SAMO ONE DOKUMENTE KOJI ZADOVOLJAVAJU SVA PRETHODNO DEFINISANA PRAVILA
- hp3200.Ispis();
- /*NAPISATI LAMBDA FUNKCIJU ZamijeniIPrintaj KOJA U SADRZAJU DOKUMENTA MIJENJA PRVI POSLATI PARAMETAR SA VRIJEDNOSCU DRUGOG PARAMETRA, TE VRACA BROJ ZAMIJENJENIH ZNAKOVA*/
- auto ZamijeniIPrintaj = /**/;
- //RAZMAK MIJENJA ZNAKOM CRTICA U SADRZAJU DOKUMENATA KOJI SU PRINTANI danas1
- int zamijenjeno = ZamijeniIPrintaj(' ', '-', danas1);
- cout << "Zamijenjeno -> " << zamijenjeno << " znakova" << endl;
- hp3200.Ispis();
- prije3Dana.Dealociraj(); danas1.Dealociraj(); danas2.Dealociraj(); za10Dana.Dealociraj();
- ispitMAT.Dealociraj(); ispitPRII.Dealociraj(); ispitUIT.Dealociraj(); ispitUITDrugiRok.Dealociraj();
- hp3200.Dealociraj();
- return 0;
- }
- //modifikacije: https://pastebin.com/6QVyCCGw
- /*
- 1. BROJ I VRSTA PARAMETARA MORAJU BITI IDENTICNI KAO U PRIMJERIMA, U SUPROTNOM SE RAD NECE BODOVATI
- 2. STAVITE KOMENTAR NA DIJELOVE CODE-A KOJE NE BUDETE IMPLEMENTIRALI
- 3. KREIRAJTE .DOC FAJL SA VASIM BROJEM INDEKSA ( NPR. IB130030.DOC BEZ IMENA I PREZIMENA), TE NA KRAJU ISPITA U NJEGA KOPIRAJTE RJESENJA VASIH ZADATAKA. NE PREDAVATI .CPP FAJLOVE
- 4. TOKOM IZRADE ISPITA NIJE DOZVOLJENO KORISTENJE HELP-A
- 5. TOKOM IZRADE ISPITA MOGU BITI POKRENUTA SAMO TRI PROGRAMA: PDF READER (ISPITNI ZADACI), MS VISUAL STUDIO, MS WORD (U KOJI CETE KOPIRATI VASA RJESENJA)
- 6. BEZ OBZIRA NA TO DA LI SU ISPITNI ZADACI URADJENI, SVI STUDENTI KOJI SU PRISTUPILI ISPITU MORAJU PREDATI SVOJ RAD
- */
- #include<iostream>
- using namespace std;
- //narednu liniju code-a ignorisite, osim u slucaju da vam bude predstavljala smetnje u radu
- #pragma warning(disable:4996)
- const char *crt = "\n-------------------------------------------\n";
- enum vrstaDokumenta { PDF, DOC, TXT, HTML };
- const char * vrstaDokumentaChar[] = { "PDF", "DOC", "TXT", "HTML" };
- enum vrstaAktivnosti { KREIRANJE, DODAVANJE, ZAMJENA, PRINTANJE };
- const char * vrstaAktivnostiChar[] = { "KREIRANJE", "DODAVANJE", "ZAMJENA", "PRINTANJE" };
- const int BROJ_ZNAKOVA_PO_STRANICI = 30;
- struct DatumVrijeme {
- int *_dan, *_mjesec, *_godina, *_sati, *_minuti;
- void Unos(int dan = 1, int mjesec = 1, int godina = 2000, int sati = 1, int minuti = 1) {
- _dan = new int(dan);
- _mjesec = new int(mjesec);
- _godina = new int(godina);
- _sati = new int(sati);
- _minuti = new int(minuti);
- }
- void Dealociraj() {
- delete _dan; _dan = nullptr;
- delete _mjesec; _mjesec = nullptr;
- delete _godina; _godina = nullptr;
- delete _sati; _sati = nullptr;
- delete _minuti; _minuti = nullptr;
- }
- void Ispis() {
- cout << *_dan << "." << *_mjesec << "." << *_godina << " " << *_sati << ":" << *_minuti << endl;
- }
- };
- char * AlocirajNizKaraktera(const char * sadrzaj) {
- int vel = strlen(sadrzaj) + 1;
- char * temp = new char[vel];
- strcpy_s(temp, vel, sadrzaj);
- return temp;
- }
- struct Modifikacija {
- char * _korisnicnkoIme;
- vrstaAktivnosti _aktivnost;
- DatumVrijeme _vrijemeModifikacije;
- void Unos(const char * sadrzaj, vrstaAktivnosti aktivnost, DatumVrijeme vm) {
- _korisnicnkoIme = AlocirajNizKaraktera(sadrzaj);
- _aktivnost = aktivnost;
- _vrijemeModifikacije.Unos(*vm._dan, *vm._mjesec, *vm._godina, *vm._dan, *vm._minuti);
- }
- void Dealociraj() {
- delete[] _korisnicnkoIme; _korisnicnkoIme = nullptr;
- _vrijemeModifikacije.Dealociraj();
- }
- void Ispis() { cout << _korisnicnkoIme << " (" << vrstaAktivnostiChar[_aktivnost] << ")"; _vrijemeModifikacije.Ispis(); }
- };
- struct Dokument {
- unique_ptr<vrstaDokumenta> _vrsta;
- char * _naziv;
- char * _sadrzaj;
- Modifikacija * _modifikacije;
- int _brojModifikacija;
- //vrijeme kreiranja dokumenta je ujedno i vrijeme posljednje modifikacije
- void Unos(vrstaDokumenta vrsta, const char * naziv, DatumVrijeme kreiran) {
- _naziv = AlocirajNizKaraktera(naziv);
- _vrsta = make_unique<vrstaDokumenta>(vrsta);
- _brojModifikacija = 0;
- _modifikacije = new Modifikacija[_brojModifikacija + 1];
- _modifikacije->Unos("", KREIRANJE, kreiran);
- _brojModifikacija++;
- _sadrzaj = nullptr;
- }
- void Dealociraj() {
- delete[] _naziv; _naziv = nullptr;
- delete[] _sadrzaj; _sadrzaj = nullptr;
- for (size_t i = 0; i < _brojModifikacija; i++)
- _modifikacije[i].Dealociraj();
- delete[] _modifikacije;
- _modifikacije = nullptr;
- }
- void Ispis() {
- cout << crt << _naziv << " " << vrstaDokumentaChar[*_vrsta] << " kreiran ";
- cout << crt << _sadrzaj << crt;
- for (size_t i = 0; i < _brojModifikacija; i++)
- _modifikacije[i].Ispis();
- }
- };
- struct Printer {
- char * _model;
- Dokument * _dokumenti;
- int _trenutnoDokumenata;
- void Unos(const char * model) {
- _model = AlocirajNizKaraktera(model);
- _dokumenti = nullptr;
- _trenutnoDokumenata = 0;
- }
- void Dealociraj() {
- delete[] _model; _model = nullptr;
- for (size_t i = 0; i < _trenutnoDokumenata; i++)
- _dokumenti[i].Dealociraj();
- delete[]_dokumenti; _dokumenti = nullptr;
- }
- void Ispis() {
- cout << _model << crt;
- for (size_t i = 0; i < _trenutnoDokumenata; i++)
- _dokumenti[i].Ispis();
- }
- };
- int main() {
- DatumVrijeme prije3Dana; prije3Dana.Unos(3, 2, 2018, 10, 15);
- DatumVrijeme danas1; danas1.Unos(6, 2, 2018, 10, 15);//U KONTEKSTU MODIFIKACIJE, UNOS PODRAZUMIJEVA KREIRANJE
- DatumVrijeme danas2; danas2.Unos(6, 2, 2018, 10, 16);
- DatumVrijeme za10Dana; za10Dana.Unos(16, 2, 2018, 10, 15);
- Dokument ispitPRII, ispitMAT, ispitUIT, ispitUITDrugiRok;
- ispitPRII.Unos(DOC, "ispitPRII.doc", prije3Dana);
- ispitMAT.Unos(DOC, "ispitMAT.doc", danas1);
- ispitUIT.Unos(DOC, "ispitUIT.doc", danas2);
- ispitUITDrugiRok.Unos(PDF, "ispitUITDrugiRok.pdf", za10Dana);
- /*DODAJE SADRZAJ U FAJL, ZADRZAVAJUCI POSTOJECI. SVAKO DODAVANJE EVIDENTIRATI KAO MODIFIKACIJU. PARAMETRI:SADRZAJ, KORISNICKO IME, VRIJEME MODIFIKACIJE*/
- ispitPRII.DodajSadrzaj("Programiranje ili racunarsko programiranje (engl. programming) jeste vjestina pomocu koje ", "denis.music", danas1);
- ispitPRII.DodajSadrzaj("korisnik stvara i izvrsava algoritme koristeci odredjene programske jezike da bi ... ", "indira.hamulic", danas2);
- ispitPRII.Ispis();//ISPISUJE SVE PODATKE O DOKUMENTU
- ispitMAT.DodajSadrzaj("Matematika se razvila iz potrebe da se obavljaju proracuni u trgovini, vrse mjerenja zemljista i predvidjaju ", "jasmin.azemovic", danas1);
- ispitMAT.DodajSadrzaj("astronomski dogadjaji, i ove tri primjene se mogu dovesti u vezu sa grubom podjelom matematike ", "adel.handzic", danas2);
- Printer hp3200; hp3200.Unos("HP 3200");
- /*
- DA BI PRINTER ISPRINTAO NEKI DOKUMENT MORAJU BITI ZADOVOLJENA SLJEDECA PRAVILA:
- 1. NAZIV DOKUMENTA MOZE SADRZAVATI SAMO SLOVA, A EKSTENZIJA MORA BITI IDENTICNA ONOJ DEFINISANOJ VRIJEDNOSCU ATRIBUTA vrstaDokumenta
- 2. NAD DOKUMENTOM MORAJU BITI IZVRSENE SLJEDECE MODIFIKACIJE:
- - 1 KREIRANJE
- - 1 ILI VIŠE DODAVANJA
- - 1 ILI VIŠE ZAMJENA SADRZAJA
- SAMO DOKUMENTI KOJI ZADOVOLJE USLOVE PRINTANJA TREBAJU BITI SACUVANI U NIZ _dokumenti. NA KONZOLU ISPISATI SADRZAJ DOKUMENTA KOJI SE PRINTA, A SA CRT LINIJOM ODVAJATI STRANICE DOKUMENTA.
- BROJ STRANICA DOKUMENTA SE AUTOMATSKI ODREDJUJE PRILIKOM PRINTANJA, A ZAVISI OD VRIJEDNOSTI BROJ_ZNAKOVA_PO_STRANICI UKLJUCUJUCI RAZMAKE I DRUGE VRSTE ZNAKOVA.
- ONEMOGUCITI PRINTANJE DOKUMENTA OSOBAMA KOJE NISU NAPRAVILE NAJMANJE JEDNU MODIFIKACIJU NA TOM DOKUMENTU. NAKON PRINTANJA SADRZAJA DOKUMENTA, POTREBNO JE DOKUMENTU DODATI I MODIFIKACIJU "PRINTANJE".
- */
- if (hp3200.Printaj(ispitPRII, "denis.music", za10Dana))
- cout << "Printam -> " << ispitPRII._naziv << endl;
- if (hp3200.Printaj(ispitMAT, "denis.music", za10Dana))
- cout << "Printam -> " << ispitMAT._naziv << endl;
- if (hp3200.Printaj(ispitUIT, "iris.memic", za10Dana))
- cout << "Printam -> " << ispitUIT._naziv << endl;
- if (hp3200.Printaj(ispitUITDrugiRok, "goran.skondric", za10Dana))
- cout << "Printam -> " << ispitUITDrugiRok._naziv << endl;
- //REKURZIVNA FUNKCIJA VRACA PROSJECAN BROJ MODIFIKACIJA ODREDJENE VRSTE KOJE SU VRSENE NAD PRINTANIM DOKUMENTIMA
- cout << "Prosjecan broj modifikacija odrejdne vrste printanih dokumenata je -> " << hp3200.GetProsjecanBrojModifikacijaByVrsta(DODAVANJE, /**/) << crt;
- Modifikacija * pok = nullptr;
- int brojac = 0;
- //FUNKCIJA GetModifikacijeByDatum VRACA SVE MODIFIKACIJE KOJE SU NAPRAVLJENE NA DOKUMENTIMA U PERIODU OD - DO (PROSLIJEDJENOM KAO PARAMETAR)
- tie(pok, brojac) = hp3200.GetModifikacijeByDatum(danas1, za10Dana);
- if (brojac > 0 && pok != nullptr)
- for (size_t i = 0; i < brojac; i++)
- pok[i].Ispis();
- //ISPISUJE INFORMACIJE O SVIM DOKUMENTIMA KOJI SU ISPRINTANI
- hp3200.Ispis();
- /*NAPISATI LAMBDA FUNKCIJU ZamijeniIPrintaj KOJA U SADRZAJU SVIH PRINTANIH DOKUMENATA MIJENJA PRVI POSLATI PARAMETAR SA VRIJEDNOSCU DRUGOG PARAMETRA, TE VRACA BROJ ZAMIJENJENIH ZNAKOVA*/
- //RAZMAK MIJENJA ZNAKOM CRTICA U SADRZAJU DOKUMENATA KOJI SU PRINTANI danas1. ZAMJENU REGISTROVATI KAO MODIFIKACIJU
- int zamijenjeno = Zamijeni(' ', '-', "denis.music", danas1);
- cout << "Zamijenjeno -> " << zamijenjeno << " znakova" << endl;
- hp3200.Ispis();
- prije3Dana.Dealociraj(); danas1.Dealociraj(); danas2.Dealociraj(); za10Dana.Dealociraj();
- ispitMAT.Dealociraj(); ispitPRII.Dealociraj(); ispitUIT.Dealociraj(); ispitUITDrugiRok.Dealociraj();
- hp3200.Dealociraj();
- return 0;
- }
- //***********************************************************septembar I rok
- //zapisnik stavka: https://pastebin.com/8JGUcAJq
- Grupa A
- 1. ZADATAK
- Izvršiti definiciju funkcija na naèin koji odgovara opisu (komentarima) datom neposredno uz pozive ili nazive funkcija. Možete dati komentar na bilo koju liniju code-a koju smatrate da bi trebalo unaprijediti ili da æe eventualno uzrokovati grešku prilikom kompajliranja. Takoðer, možete dodati dodatne funkcije koje æe vam olakšati implementaciju programa.
- #include <iostream>
- using namespace std;
- /*
- 1. BROJ I VRSTA PARAMETARA MORAJU BITI IDENTICNI KAO U PRIMJERIMA. U SUPROTNOM SE RAD NEÆE BODOVATI
- 2. STAVITE KOMENTAR NA DIJELOVE CODE-A KOJE NE BUDETE IMPLEMENTIRALI
- 3. KREIRAJTE .DOC FAJL SA VAŠIM BROJEM INDEKSA ( NPR. IB160061.DOC BEZ IMENA I PREZIMENA), TE NA KRAJU ISPITA U NJEGA KOPIRAJTE RJEŠENJA VAŠIH ZADATAKA. NE PREDAVATI .TXT ILI .CPP FAJLOVE
- 4. TOKOM IZRADE ISPITA NIJE DOZVOLJENO KORIŠTENJE HELP-A
- 5. TOKOM IZRADE ISPITA MOGU BITI POKRENUTA SAMO TRI PROGRAMA: PDF READER (ISPITNI ZADACI), MS VISUAL STUDIO, MS WORD (U KOJI ÆETE KOPIRATI VAŠA RJEŠENJA)
- 6. BEZ OBZIRA NA TO DA LI SU ISPITNI ZADACI URAÐENI, SVI STUDENTI KOJI SU PRISTUPILI ISPITU MORAJU PREDATI SVOJ RAD
- */
- //narednu liniju code-a ignorisite, osim u slucaju da vam bude predstavljala smetnje u radu
- #pragma warning(disable:4996)
- /*
- u nastavku je prikazan primjer ispitnog zapisnika (izvještaj o održanom ispitu) sa detaljima/stavkama
- -------------------------------------------
- Datum ispita: 07.09.2018
- Predmet: Programiranje II
- -------------------------------------------
- IZVJESTAJ O ODRZANOM ISPITU
- -------------------------------------------
- Br indeksa Ime prezime Komisijsko*** Ocjena
- 16001 A. Joldic DA 5
- 15251 D. Music NE 7 Ponisteno
- 16014 E. Babovic DA 8
- -------------------------------------------
- UKUPNO POLOZILO: 2
- PROSJECNA OCJENA: 6.67
- -------------------------------------------
- *** komisijski ispit: ako student pristupa èetvrti put i dalje (raèunajuæi i poništene rezultate)
- */
- const char * crt = "\n-------------------------------------------\n";
- const int MAX = 100;
- char * AlocirajNizKaraktera(const char * sadrzaj) {
- if (sadrzaj == nullptr)
- return nullptr;
- int vel = strlen(sadrzaj) + 1;
- char * temp = new char[vel];
- strcpy_s(temp, vel, sadrzaj);
- return temp;
- }
- struct Datum {
- int _dan, _mjesec, _godina;
- void Unos(int d, int m, int g) {
- _dan = d;
- _mjesec = m;
- _godina = g;
- }
- void Ispis() {
- cout << _dan << "." << _mjesec << "." << _godina << " ";
- }
- };
- struct Student {
- char * _imePrezime;
- int _brojIndeksa;
- int _polozioECTS;
- void Unos(const char* ime, float indeks) {
- _imePrezime = AlocirajNizKaraktera(ime);
- _brojIndeksa = indeks;
- _polozioECTS = 0;
- }
- void Dealociraj() {
- delete[] _imePrezime; _imePrezime = nullptr;
- }
- void DodajECTS(float ects) { _polozioECTS += ects; }
- void UmanjiECTS(float ects) { _polozioECTS -= ects; }
- void Ispis() {
- cout << _imePrezime << ", Indeks: " << _brojIndeksa << ", ECTS: " << _polozioECTS << " " << endl;
- }
- };
- struct ZapisnikStavka {
- int _ocjena;
- //ZapisnikStavka æe pokazivati na objekat tipa student koji se nalazi u instanci tipa Fakultet, pa nije potrebno vršiti nove alokacije
- Student* _student;
- bool _ponisteno;
- bool _komisijskoPolaganje;
- void Unos(Student* student, int ocjena, bool komisijskoPolaganje) {
- _ocjena = ocjena;
- _student = student;
- _komisijskoPolaganje = komisijskoPolaganje;
- _ponisteno = false;
- }
- void Ispis() {
- cout << _student->_imePrezime << "\t" << _ocjena << "\t" << _student->_brojIndeksa << "\t";
- if (_ponisteno)
- cout << " Ponisteno";
- cout << endl;
- }
- };
- struct IspitniZapisnik {
- Datum _datum;
- ZapisnikStavka * _stavke;//svaki put se dodaje po jedna stavka
- int _brojStavki;
- int _ects;
- char * _predmet;
- void Unos(Datum & datum, char* predmet, int ects) {
- _datum = datum;
- _brojStavki = 0;
- _stavke = nullptr;
- _ects = ects;
- _predmet = AlocirajNizKaraktera(predmet);
- }
- void Dealociraj() {
- delete[] _predmet; _predmet = nullptr;
- delete[] _stavke; _stavke = nullptr;
- }
- /*Prosjecnu ocjenu izraèunati koristeæi lambda funkciju. u prosjek raèunati i poništene rezultate (stavke)*/
- float GetProsjecnaOcjena() { return 0; }
- };
- /*unutar objekta tipa Fakultet ce se cuvati podaci o svim studentima i ispitnim zapisnicima, a dodaju se pomocu globalnih funkcija*/
- struct Fakultet {
- //umjesto brojaca koristiti default.ne vrijednosti
- Student* _studenti[MAX] = { nullptr };
- IspitniZapisnik* _zapisnici[MAX] = { nullptr };
- void Dealociraj() {
- for (size_t i = 0; i < MAX; i++) {
- _studenti[i]->Dealociraj();
- _zapisnici[i]->Dealociraj();
- delete _studenti[i]; _studenti[i] = NULL;
- delete _zapisnici[i]; _zapisnici[i] = NULL;
- }
- }
- };
- int main() {
- Fakultet fakultet;
- /*dodaje podatke o novom studentu u fakultet */
- //fakultet, imePrezime, broj indeksa
- dodaj_student(fakultet, "A. Joldic", 16001);
- dodaj_student(fakultet, "D. Music", 15251);
- dodaj_student(fakultet, "E. Babovic ", 16014);
- dodaj_student(fakultet, "E. Junuz", 16015);
- dodaj_student(fakultet, "J. Azemovic", 16014);//ne dodaje studenta jer je broj indeksa zauzet
- /*kraira novi zapisnik*/
- //fakultet, datum, predmet, ects krediti
- kreiraj_zapisnik(fakultet, 6, 9, 2018, "Programiranje II", 7);
- /*dodaje stavku na posljednji kreiran zapisnik, a ects studenta (_polozioECTS) uveæa ako je student položio ispit. */
- if (dodaj_stavku_na_zapisnik(fakultet, 16001, 5))
- cout << "Stavka (rezultat) uspjesno dodata!" << endl;
- /*ako je student vec dodat u zapisnik, onda se vrsi samo modifikacija njegove ocjene*/
- if (!dodaj_stavku_na_zapisnik(fakultet, 16001, 6))
- cout << "Student vec dodat na zapisnik. Ocjena je ispravljena!" << endl;
- dodaj_stavku_na_zapisnik(fakultet, 15251, 5);
- dodaj_stavku_na_zapisnik(fakultet, 16015, 6);
- dodaj_stavku_na_zapisnik(fakultet, 16014, 8);
- kreiraj_zapisnik(fakultet, 7, 9, 2018, "Raèunarske mreze", 5);
- //naredne stavke se dodaju na novi zapisnik
- dodaj_stavku_na_zapisnik(fakultet, 16015, 5);
- dodaj_stavku_na_zapisnik(fakultet, 16014, 10);
- /*u posljednjem zapisniku stavku za studenta 16001 ponistiti, a studentu umanjiti ects bodove.
- funkcija vraca false u slucaju da se student ne nalazi na posljednjem zapisniku*/
- if (ponisti_stavku_rezultat(fakultet, 16001))
- cout << "Stavka (rezultat) uspjesno ponisten!" << endl;
- if (!ponisti_stavku_rezultat(fakultet, 19001))
- cout << "Student nije pronadjen!" << endl;
- /* funkcija printaj prikazuje posljednji ispitni zapisnik u formatu prikazanom na pocetku zadatka.
- zapisnik se nece prikazati ukoliko ne posjeduje niti jednu stavku ili su sve stavke poništene. prilikom kreiranja zapisnika
- iskoristiti funkciju GetProsjecnaOcjena i njenu lambda implementaciju*/
- if (fakultet.printaj())
- cout << "Ispitni zapisnik uspjesno prikazan!" << endl;
- fakultet.Dealociraj();
- system("pause>0");
- return 0;
- }
- //add odgovor: https://pastebin.com/iMmTWG5P
- Grupa B
- 1. ZADATAK
- Izvršiti definiciju funkcija na naèin koji odgovara opisu (komentarima) datom neposredno uz pozive ili nazive funkcija. Možete dati komentar na bilo koju liniju code-a koju smatrate da bi trebalo unaprijediti ili da æe eventualno uzrokovati grešku prilikom kompajliranja. Takoðer, možete dodati dodatne funkcije koje æe vam olakšati implementaciju programa.
- #include <iostream>
- using namespace std;
- /*
- 1. BROJ I VRSTA PARAMETARA MORAJU BITI IDENTICNI KAO U PRIMJERIMA. U SUPROTNOM SE RAD NEÆE BODOVATI
- 2. STAVITE KOMENTAR NA DIJELOVE CODE-A KOJE NE BUDETE IMPLEMENTIRALI
- 3. KREIRAJTE .DOC FAJL SA VAŠIM BROJEM INDEKSA ( NPR. IB160061.DOC BEZ IMENA I PREZIMENA), TE NA KRAJU ISPITA U NJEGA KOPIRAJTE RJEŠENJA VAŠIH ZADATAKA. NE PREDAVATI .TXT ILI .CPP FAJLOVE
- 4. TOKOM IZRADE ISPITA NIJE DOZVOLJENO KORIŠTENJE HELP-A
- 5. TOKOM IZRADE ISPITA MOGU BITI POKRENUTA SAMO TRI PROGRAMA: PDF READER (ISPITNI ZADACI), MS VISUAL STUDIO, MS WORD (U KOJI ÆETE KOPIRATI VAŠA RJEŠENJA)
- 6. BEZ OBZIRA NA TO DA LI SU ISPITNI ZADACI URAÐENI, SVI STUDENTI KOJI SU PRISTUPILI ISPITU MORAJU PREDATI SVOJ RAD
- */
- //narednu liniju code-a ignorisite, osim u slucaju da vam bude predstavljala smetnje u radu
- #pragma warning(disable:4996)
- const char * crt = "\n-------------------------------\n";
- const int MAX_ODGOVORA = 10;
- char * AlocirajNizKaraktera(const char * sadrzaj) {
- if (sadrzaj == nullptr)
- return nullptr;
- int vel = strlen(sadrzaj) + 1;
- char * temp = new char[vel];
- strcpy_s(temp, vel, sadrzaj);
- return temp;
- }
- struct Kandidat {
- char * _imePrezime;
- char _JMBG[14];
- void Unos(const char * ip, const char * jmbg) {
- _imePrezime = AlocirajNizKaraktera(ip);
- strcpy_s(_JMBG, jmbg);
- }
- void Dealociraj() {
- delete[] _imePrezime; _imePrezime = nullptr;
- }
- void Ispis() {
- cout << _imePrezime << " " << _JMBG << " ";
- }
- };
- struct Pitanje {
- char * _tekstPitanja;
- char * _odgovori[MAX_ODGOVORA];//maksimalno 10 odgovora
- /* svako pitanje moze imati jedan ili vise tacnih odgovora, a njihove lokacije se pohranjuju u niz _tacni*/
- int _tacni[MAX_ODGOVORA];
- /*ako pitanje ima vise tacnih odgovora, onda se broj osvojenih bodova (tokom izrade testa) odredjuje na osnovu broj tacnih odgovora (npr. ako pitanje nosi 5 boda i ima 2 tacna odgovora, a student oznaci 1 tacan odgovor onda ce osvojeni broj bodova na tom pitanju iznositi 2.5. drugim rijecima, vrijednost ovog atributa je bitna zbog odredjivanja uspjeha kandidata prilikom izrade ispita)*/
- int _bodova;
- void Unos(const char * tekstPitanja, int bodova) {
- _tekstPitanja = AlocirajNizKaraktera(tekstPitanja);
- /*umjesto dodavanja brojaca iskoristite defaultne vrijednosti clanova niza kako biste
- manipulisali njihovim vrijednostima (dodavanje, uklanjanje)*/
- for (size_t i = 0; i < MAX_ODGOVORA; i++) {
- _odgovori[i] = nullptr;
- _tacni[i] = -1;
- }
- _bodova = bodova;
- }
- void Dealociraj() {
- delete[] _tekstPitanja; _tekstPitanja = nullptr;
- for (size_t i = 0; i < MAX_ODGOVORA; i++) {
- if (_odgovori[i] == nullptr)
- break;
- delete[] _odgovori[i]; _odgovori[i] = nullptr;
- }
- }
- };
- struct PrijemniIspit {
- //kandidati prijavljeni za prijemni ispit
- Kandidat * _prijavljeniKandidati;
- /*nakon sto urade ispit tj. nakon sto odgovore na pitanja za svakog od kandidata se cuva ostvareni uspjeh u okviru niza _uspjehKandidata. broj elemenata u nizu _uspjehKandidata bi trebao biti identican broju elemenata u nizu _prijavljeniKandidati*/
- float * _uspjehKandidata;
- int _trenutnoKandidata;
- //prag prolaznosti na prijemnom ispitu npr. 60.5 procenata
- float _pragProlaznosti;
- float _kazneniBodovi;
- /*vrijednost kazenog boda (npr. 0.30) se mnozi sa svakim netacnim odgovorom na pitanje i oduzima od osvojenih bodova za to pitanje
- npr. ako pitanje nosi 5 bodova i ima 2 tacna odgovora, a student odabere 1 tacan i 2 netacna odgovora, broj osvojenih bodova ce biti 1.9
- (1 tacan = 2.5; 2 netacna * 0.30 kaznenih = 0.6; 2.5 - 0.6 = 1.9)*/
- void Unos(float pragProlaznosti, float kazneniBodovi) {
- _pragProlaznosti = pragProlaznosti;
- _kazneniBodovi = kazneniBodovi;
- _prijavljeniKandidati = nullptr;
- _uspjehKandidata = nullptr;
- _trenutnoKandidata = 0;
- }
- void Dealociraj() {
- for (size_t i = 0; i < _trenutnoKandidata; i++)
- _prijavljeniKandidati[i].Dealociraj();
- delete[] _prijavljeniKandidati; _prijavljeniKandidati = nullptr;
- delete[] _uspjehKandidata; _uspjehKandidata = nullptr;
- }
- };
- int main() {
- Kandidat jasmin, adel;
- jasmin.Unos("Jasmin Azemovic", "1111111111111");
- adel.Unos("Adel Handzic", "2222222222222");
- const int brojPitanja = 3;
- Pitanje * pitanja[brojPitanja];
- for (size_t i = 0; i < brojPitanja; i++)
- pitanja[i] = new Pitanje;
- //parametri: tekstPitanja, brojBodova
- pitanja[0]->Unos("U kojem gradu se nalazi FIT?", 4);
- /*dodaje novi odgovor u listu ponudjenih odgovora. onemoguciti ponavljanje odgovora, te voditi racuna da vise odgovora moze biti tacno*/
- //parametri: tekstOdgovora, daLiJeTacanTajOdgovor
- if (pitanja[0]->AddOdgovor("Mostar", true))
- cout << "Odgovor uspjesno dodan!" << crt;
- if (pitanja[0]->AddOdgovor("Sarajevo", false))
- cout << "Odgovor uspjesno dodan!" << crt;
- if (!pitanja[0]->AddOdgovor("Sarajevo", false))//Sarajevo je vec dodano
- cout << "Odgovor nije uspjesno dodan!" << crt;
- if (pitanja[0]->AddOdgovor("Tuzla", false))
- cout << "Odgovor uspjesno dodan!" << crt;
- if (pitanja[0]->AddOdgovor("Fojnica", false))
- cout << "Odgovor uspjesno dodan!" << crt;
- if (pitanja[0]->AddOdgovor("Zenica", false))
- cout << "Odgovor uspjesno dodan!" << crt;
- /*na osnovu primljene lokacije uklanja podatke o ponudjenom odgovoru. prilikom uklanjanja ocuvati redoslijed dodavanja odgovora. takodjer, potrebno je onemoguciti uklanjanje svih tacnih odgovora na nacin da se prije njegovog uklanjanja mora unijeti novi tacan odgovor */
- if (pitanja[0]->RemoveOdgovor(4))//uklanja odgovor Fojnica
- cout << "Odgovor uspjesno uklonjen!" << crt;
- /*
- -------------------------------
- 1. U kojem gradu se nalazi FIT?
- -------------------------------
- 1. Mostar
- 2. Sarajevo
- 3. Tuzla
- 4. Zenica
- -------------------------------
- */
- pitanja[0]->Ispis();//prethodno je prikazan ocekivani ispis pitanja
- pitanja[1]->Unos("Odaberite tacne odgovore.", 5);
- if (pitanja[1]->AddOdgovor("FIT se nalazi u Mostaru", true))
- cout << "Odgovor uspjesno dodan!" << crt;
- if (pitanja[1]->AddOdgovor("FIT je clanica UNMO-a", true))
- cout << "Odgovor uspjesno dodan!" << crt;
- if (pitanja[1]->AddOdgovor("U Mostaru je uvijek jako vruce", false))
- cout << "Odgovor uspjesno dodan!" << crt;
- pitanja[2]->Unos("Studij na FIT-u traje 4 godine?", 3);
- if (pitanja[2]->AddOdgovor("Ne", true))
- cout << "Odgovor uspjesno dodan!" << crt;
- if (pitanja[2]->AddOdgovor("Da", false))
- cout << "Odgovor uspjesno dodan!" << crt;
- /*....*/
- PrijemniIspit prijemni2018;
- //parametri: pragProlaznosti, kazneniBodovi
- prijemni2018.Unos(60, 0.30);
- /*dodaje novog kandidata u listu prijavljenih. onemoguciti dodavanje kandidata sa istim jmbg-om*/
- if (prijemni2018.DodajKandidata(jasmin))
- cout << "Kandidat uspjesno dodan" << crt;
- if (prijemni2018.DodajKandidata(adel))
- cout << "Kandidat uspjesno dodan" << crt;
- /*kandidatu sa JMBG 1111111111111 pokrece ispit na nacin da mu se prikazuju pitanja, od njega zahtijevaju odgovori, te izracunava ostvareni uspjeh (da li je polozio ili ne, te sa kojim procentom uspjesnosti). prilikom izracuvanja uspjesnosti voditi racuna o kaznenim bodovima. po okoncanju ispita, uspjeh kandidata se pohranjuje u niz _uspjehKandidata. za pokretanje ispita kandidat prethodno mora biti dodan u listu. po
- vlastitoj zelji implementirajte nacin oznacavanja veceg broja tacnih odgovoran na postavljeno pitanje (jedno pitanje moze imati vise tacnih odgovora)*/
- if (prijemni2018.PokreniIspit("1111111111111", pitanja, brojPitanja))
- cout << "Ispit uspjesno okoncan!" << crt;
- if (!prijemni2018.PokreniIspit("1111111111111", pitanja, brojPitanja))//kandidat jasmin je vec radio ispit
- cout << "Kandidat je vec polagao prijemni ispit!" << crt;
- if (prijemni2018.PokreniIspit("2222222222222", pitanja, brojPitanja))
- cout << "Ispit uspjesno okoncan!" << crt;
- Kandidat * najbolji = nullptr;
- float uspjeh = 0;
- /*getNajbolji student je lambda funkcija koja treba vratiti podatke o studentu koji je ostvario najbolji uspjeh na prijemnom ispitu*/
- tie(najbolji, uspjeh) = getNajboljiStudent();
- if (najbolji != nullptr)
- cout << "Najbolji uspjeh od " << uspjeh << " % ostvario je kandidat " << najbolji->_imePrezime << "." << endl;
- jasmin.Dealociraj();
- adel.Dealociraj();
- for (size_t i = 0; i < brojPitanja; i++) {
- pitanja[i]->Dealociraj();
- pitanja[i] = nullptr;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement