adnanj

Privremeno

Feb 19th, 2018
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 17.38 KB | None | 0 0
  1. #include <iostream>
  2. #include <regex>
  3. #include <algorithm>
  4. #include <thread>
  5. #include <mutex>
  6. #include <iterator>
  7. #include <string>
  8. using namespace std;
  9. char *crt = "\n---------------------------------------\n";
  10. mutex cuvarResursa;
  11. class DatumVrijeme {
  12.     int *_dan, *_mjesec, *_godina, *_sati, *_minuti;
  13. public:
  14.     DatumVrijeme(int dan = 1, int mjesec = 1, int godina = 2000, int sati = 0, int minuti = 0) {
  15.         _dan = new int(dan);
  16.         _mjesec = new int(mjesec);
  17.         _godina = new int(godina);
  18.         _sati = new int(sati);
  19.         _minuti = new int(minuti);
  20.     }
  21.     ~DatumVrijeme() {
  22.         delete _dan; _dan = nullptr;
  23.         delete _mjesec; _mjesec = nullptr;
  24.         delete _godina; _godina = nullptr;
  25.         delete _sati; _sati = nullptr;
  26.         delete _minuti; _minuti = nullptr;
  27.     }
  28.     DatumVrijeme(const DatumVrijeme &obj) {
  29.         _dan = new int(*obj._dan);
  30.         _mjesec = new int(*obj._mjesec);
  31.         _godina = new int(*obj._godina);
  32.         _sati = new int(*obj._sati);
  33.         _minuti = new int(*obj._minuti);
  34.     }
  35.     DatumVrijeme & operator = (const DatumVrijeme &obj) {
  36.         if (this != &obj) {
  37.             delete _dan, _mjesec, _godina, _sati, _minuti;
  38.             _dan = new int(*obj._dan);
  39.             _mjesec = new int(*obj._mjesec);
  40.             _godina = new int(*obj._godina);
  41.             _sati = new int(*obj._sati);
  42.             _minuti = new int(*obj._minuti);
  43.         } return *this;
  44.     }
  45.     friend ostream& operator<< (ostream &COUT, const DatumVrijeme &obj);
  46.     friend bool operator == (const DatumVrijeme &d1, const DatumVrijeme &d2);
  47. };
  48. bool operator == (const DatumVrijeme &d1, const DatumVrijeme &d2) {
  49.     return *d1._dan == *d2._dan && *d1._mjesec == *d2._mjesec && *d1._godina == *d2._godina && *d1._sati == *d2._sati;
  50. }
  51. ostream& operator<< (ostream &COUT, const DatumVrijeme &obj) {
  52.     COUT << *obj._dan << "." << *obj._mjesec << "." << *obj._godina << " " << *obj._sati << ":" << *obj._minuti;
  53.     return COUT;
  54. }
  55. template<class T1, class T2 = int>
  56. class FITKolekcija {
  57.     T1 * _elementi1;
  58.     T2 * _elementi2;
  59.     int _trenutno;
  60. public:
  61.     FITKolekcija() {
  62.         _elementi1 = nullptr;
  63.         _elementi2 = nullptr;
  64.         _trenutno = 0;
  65.     }
  66.     ~FITKolekcija() {
  67.         delete[] _elementi1; _elementi1 = nullptr;
  68.         delete[] _elementi2; _elementi2 = nullptr;
  69.     }
  70.     FITKolekcija(const FITKolekcija &obj) {
  71.         _elementi1 = new T1[obj._trenutno];
  72.         _elementi2 = new T2[obj._trenutno];
  73.         for (int i = 0; i < obj._trenutno; i++) {
  74.             _elementi1[i] = obj._elementi1[i];
  75.             _elementi2[i] = obj._elementi2[i];
  76.         }
  77.         _trenutno = obj._trenutno;
  78.     }
  79.     void Dodaj(T1 e1, T2 e2) {
  80.         T1 *temp1 = new T1[_trenutno+1];
  81.         T2 *temp2 = new T2[_trenutno+1];
  82.         for (int i = 0; i < _trenutno; i++) {
  83.             temp1[i] = _elementi1[i];
  84.             temp2[i] = _elementi2[i];
  85.         }
  86.         temp1[_trenutno] = e1;
  87.         temp2[_trenutno++] = e2;
  88.         delete[]_elementi1; delete[]_elementi2;
  89.         _elementi1 = temp1; _elementi2 = temp2;
  90.     }
  91.     void Sortiraj() {
  92.         for (int i = _trenutno; i > 0; i--) {
  93.             for (int j = 1; j < i; j++) {
  94.                 if (_elementi1[j] < _elementi1[j-1]) {
  95.                     swap(_elementi1[j], _elementi1[j-1]);
  96.                     swap(_elementi2[j], _elementi2[j-1]);
  97.                 }
  98.             }
  99.         }
  100.     }
  101.     void DodajNaLokaciju(T1 e1, T2 e2, int lokacija) {
  102.         if (lokacija < 0 || lokacija >= _trenutno) return;
  103.         _trenutno++;
  104.         T1 *temp1 = new T1[_trenutno];
  105.         T2 *temp2 = new T2[_trenutno];
  106.         for (int i = 0; i < _trenutno; i++) {
  107.             if (i > lokacija) {
  108.                 temp1[i] = _elementi1[i-1];
  109.                 temp2[i] = _elementi2[i-1];
  110.             } else {
  111.                 temp1[i] = _elementi1[i];
  112.                 temp2[i] = _elementi2[i];
  113.             }
  114.         }
  115.         temp1[lokacija] = e1;
  116.         temp2[lokacija] = e2;
  117.         delete[]_elementi1; delete[]_elementi2;
  118.         _elementi1 = temp1; _elementi2 = temp2;
  119.     }
  120.     void RemoveElement(int lokacija) {
  121.         if (lokacija < 0 || lokacija >= _trenutno) return;
  122.         T1 *temp1 = new T1[_trenutno-1];
  123.         T2 *temp2 = new T2[_trenutno-1];
  124.         for (int i = 0; i < _trenutno-1; i++) {
  125.             if (i < lokacija) {
  126.                 temp1[i] = _elementi1[i];
  127.                 temp2[i] = _elementi2[i];
  128.             } else {
  129.                 temp1[i] = _elementi1[i+1];
  130.                 temp2[i] = _elementi2[i+1];
  131.             }
  132.         }
  133.         _trenutno--;
  134.         delete[]_elementi1; delete[]_elementi2;
  135.         _elementi1 = temp1; _elementi2 = temp2;
  136.     }
  137.     FITKolekcija * GetJedinstveni() {
  138.         FITKolekcija * _lista = new FITKolekcija<T1, T2>(); bool nijeJedinstven;
  139.         for (int i = 0; i < _trenutno; i++) {
  140.             nijeJedinstven = false;
  141.             for (int j = 0; j < _trenutno; j++) {
  142.                 if (i != j) {
  143.                     if (_elementi1[i] == _elementi1[j] && _elementi2[i] == _elementi2[j])
  144.                         nijeJedinstven = true;
  145.                 }
  146.             }
  147.             if (!nijeJedinstven) {
  148.                 for (int e = 0; e < _lista->_trenutno; e++) {
  149.                     if (_lista->_elementi1[e] == _elementi1[i] && _lista->_elementi2[e] == _elementi2[i])
  150.                         nijeJedinstven = true;
  151.                 }
  152.                 if (!nijeJedinstven) _lista->Dodaj(_elementi1[i], _elementi2[i]);
  153.             }
  154.         } return _lista;
  155.     }
  156.     FITKolekcija * GetDuplikate() {
  157.         FITKolekcija * _lista = new FITKolekcija<T1, T2>(); bool Duplikat;
  158.         for (int i = 0; i < _trenutno; i++) {
  159.             Duplikat = false;
  160.             for (int j = 0; j < _trenutno; j++) {
  161.                 if (i != j) {
  162.                     if (_elementi1[i] == _elementi1[j] && _elementi2[i] == _elementi2[j])
  163.                         Duplikat = true;
  164.                 }
  165.             }
  166.             if (Duplikat) {
  167.                 for (int e = 0; e < _lista->_trenutno; e++) {
  168.                     if (_lista->_elementi1[e] == _elementi1[i] && _lista->_elementi2[e] == _elementi2[i])
  169.                         Duplikat = false;
  170.                 }
  171.                 if (Duplikat) _lista->Dodaj(_elementi1[i], _elementi2[i]);
  172.             }
  173.         }
  174.         return _lista;
  175.     }
  176.     FITKolekcija & operator = (const FITKolekcija &obj) {
  177.         if (this != &obj) {
  178.             delete[]_elementi1;
  179.             delete[]_elementi2;
  180.             _elementi1 = new T1[obj._trenutno];
  181.             _elementi2 = new T2[obj._trenutno];
  182.             for (int i = 0; i < obj._trenutno; i++) {
  183.                 _elementi1[i] = obj._elementi1[i];
  184.                 _elementi2[i] = obj._elementi2[i];
  185.             }
  186.             _trenutno = obj._trenutno;
  187.         } return *this;
  188.     }
  189.     T1 & GetT1(int lokacija) const { if (lokacija >= 0 && lokacija < _trenutno) return _elementi1[lokacija]; }
  190.     T2 & GetT2(int lokacija) const { if (lokacija >= 0 && lokacija < _trenutno) return _elementi2[lokacija]; }
  191.     int GetTrenutno() { return _trenutno; }
  192.     friend ostream& operator<< <> (ostream &COUT, const FITKolekcija<T1, T2> &obj);
  193. };
  194. template<class T1, class T2>
  195. ostream& operator<< <> (ostream &COUT, const FITKolekcija<T1, T2> &obj) {
  196.     for (size_t i = 0; i < obj._trenutno; i++)
  197.         COUT << obj._elementi1[i] << " - " << obj._elementi2[i] << endl;
  198.     return COUT;
  199. }
  200. enum vrstaDokumenta { PDF, DOC, TXT, HTML };
  201. char *_ispisDokumenta[]{ "pdf", "doc", "txt", "html" };
  202. class Dokument {
  203.     vrstaDokumenta _vrsta;
  204.     string _naziv;
  205.     string _sadrzaj;
  206.     int _brojStranica;
  207. public:
  208.     Dokument() { _brojStranica = 0; }
  209.     Dokument(vrstaDokumenta vrsta, string naziv) {
  210.         _naziv = naziv; _vrsta = vrsta; _brojStranica = 0;
  211.     }
  212.     Dokument(const Dokument &obj) {
  213.         _vrsta = obj._vrsta;
  214.         _naziv = obj._naziv;
  215.         _sadrzaj = obj._sadrzaj;
  216.         _brojStranica = obj._brojStranica;
  217.     }
  218.     ~Dokument() {}
  219.     string GetNaziv() { return _naziv; };
  220.     string GetSadrzaj() { return _sadrzaj; };
  221.     vrstaDokumenta GetVrsta() { return _vrsta; };
  222.     void UvecajBrojStranica() { _brojStranica++; }
  223.     int GetBrojStranica() { return _brojStranica; }
  224.     void DodajSadrzaj(string sadrzaj) {
  225.         _sadrzaj += sadrzaj;
  226.         _brojStranica = (_sadrzaj.size() / 30) + 1;
  227.     }
  228.     friend ostream & operator<< (ostream&COUT, const Dokument & obj);
  229. };
  230. ostream & operator<< (ostream&COUT, const Dokument & obj) {
  231.     COUT << obj._naziv << "." << _ispisDokumenta[obj._vrsta] << " (" << obj._brojStranica << ")\n" << obj._sadrzaj << endl;
  232.     return COUT;
  233. }
  234. class Uredjaj {
  235. protected:
  236.     char *_proizvodjac;
  237.     char *_model;
  238. public:
  239.     Uredjaj(char * proizvodjac, char * model) {
  240.         int vel = strlen(proizvodjac) + 1;
  241.         _proizvodjac = new char[vel];
  242.         strcpy_s(_proizvodjac, vel, proizvodjac);
  243.         vel = strlen(model) + 1;
  244.         _model = new char[vel];
  245.         strcpy_s(_model, vel, model);
  246.     }
  247.     virtual ~Uredjaj() = 0 {
  248.         delete[] _proizvodjac; _proizvodjac = nullptr;
  249.         delete[] _model; _model = nullptr;
  250.     }
  251.     Uredjaj(const Uredjaj &obj) {
  252.         int vel = strlen(obj._proizvodjac) + 1;
  253.         _proizvodjac = new char[vel];
  254.         strcpy_s(_proizvodjac, vel, obj._proizvodjac);
  255.         vel = strlen(obj._model) + 1;
  256.         _model = new char[vel];
  257.         strcpy_s(_model, vel, obj._model);
  258.     }
  259.     Uredjaj & operator= (const Uredjaj &obj) {
  260.         if (this != &obj) {
  261.             delete[]_proizvodjac;
  262.             delete[]_model;
  263.             int vel = strlen(obj._proizvodjac) + 1;
  264.             _proizvodjac = new char[vel];
  265.             strcpy_s(_proizvodjac, vel, obj._proizvodjac);
  266.             vel = strlen(obj._model) + 1;
  267.             _model = new char[vel];
  268.             strcpy_s(_model, vel, obj._model);
  269.         } return *this;
  270.     }
  271. };
  272. void Print(string nazivDokumenta, string sadrzajDokumenta, DatumVrijeme &dV) {
  273.     lock_guard<mutex> locker(cuvarResursa); //~safe(lock - unlock)
  274.     //cuvarResursa.lock();
  275.     cout << nazivDokumenta << endl << sadrzajDokumenta << endl << dV << endl;
  276.     this_thread::sleep_for(chrono::seconds(1));
  277.     //cuvarResursa.unlock();
  278. }
  279. class Printer: public Uredjaj {
  280.     FITKolekcija<DatumVrijeme, Dokument> _printaniDokumenti;
  281.     vector<string> _zabranjeneRijeci;
  282. public:
  283.     Printer(char *proizvodjac, char * model): Uredjaj(proizvodjac, model) {}
  284.     virtual ~Printer() {}
  285.     Printer(const Printer &obj): Uredjaj(obj) {
  286.         _printaniDokumenti = obj._printaniDokumenti;
  287.         _zabranjeneRijeci = obj._zabranjeneRijeci;
  288.     }
  289.     Printer & operator= (const Printer &obj) {
  290.         Uredjaj::operator=(obj);
  291.         _printaniDokumenti = obj._printaniDokumenti;
  292.         _zabranjeneRijeci = obj._zabranjeneRijeci;
  293.         return *this;
  294.     }
  295.     int GetProsjecanBrojStranicaPoDatumu(DatumVrijeme &datum) {
  296.         int brStrainica = 0;
  297.         for (int i = 0; i < _printaniDokumenti.GetTrenutno(); i++) {
  298.             if (datum == _printaniDokumenti.GetT1(i))
  299.                 brStrainica += _printaniDokumenti.GetT2(i).GetBrojStranica();
  300.         } return brStrainica;
  301.     }
  302.     FITKolekcija<DatumVrijeme, Dokument> & GetPrintaniDokumenti() { return _printaniDokumenti; };
  303.     vector<string> & GetZabranjeneRijeci() { return _zabranjeneRijeci; };
  304.     void UkloniDokumente() {
  305.         for (int i = 0; i < _printaniDokumenti.GetTrenutno(); i++) {
  306.             if (!_provjeraIspravnosti(_printaniDokumenti.GetT2(i).GetNaziv(), _printaniDokumenti.GetT2(i).GetSadrzaj())) {
  307.                 _printaniDokumenti.RemoveElement(i);
  308.             }
  309.         }
  310.     }
  311.     void DodajZabranjenuRijec(string zabranjenaRijec) {
  312.         vector<string>::iterator it = _zabranjeneRijeci.begin();
  313.         for (it; it != _zabranjeneRijeci.end(); it++) {
  314.             if (zabranjenaRijec == *it)
  315.                 return;
  316.         }
  317.         _zabranjeneRijeci.push_back(zabranjenaRijec);
  318.     }
  319.     string GetTopZabranjenuRijec() {
  320.         int trenutno = 0, najvise = 0, indeks = 0;
  321.         for (int j = 0; j < _zabranjeneRijeci.size(); j++) {
  322.             trenutno = 0;
  323.             regex reg("(" + _zabranjeneRijeci[j] + ")");
  324.             for (int i = 0; i < _printaniDokumenti.GetTrenutno(); i++) {
  325.                 string tekst = _printaniDokumenti.GetT2(i).GetSadrzaj();
  326.                 sregex_iterator its(tekst.begin(), tekst.end(), reg);
  327.                 sregex_iterator ite;
  328.                 while (its!=ite) {
  329.                     its++;
  330.                     trenutno++;
  331.                 }
  332.             }
  333.             if (trenutno > najvise) { najvise = trenutno; indeks = j; }
  334.         } return _zabranjeneRijeci[indeks];
  335.     }
  336.     bool _provjeraIspravnosti(string naziv, string sadrzaj) {
  337.         string praviloNaziv = "^([a-zA-Z]{5,15})\\.((" + (string)_ispisDokumenta[PDF] + ")|(" + (string)_ispisDokumenta[DOC] + ")|(" + (string)_ispisDokumenta[TXT] + ")|(" + (string)_ispisDokumenta[HTML] + "))";
  338.         string praviloSadrzaj = "(?:(";
  339.         for (int i = 0; i < _zabranjeneRijeci.size(); i++) {
  340.             if (i == _zabranjeneRijeci.size() - 1)
  341.                 praviloSadrzaj += _zabranjeneRijeci[i] + "))";
  342.             else
  343.                 praviloSadrzaj += _zabranjeneRijeci[i] + "|";
  344.         }
  345.         return regex_match(naziv, regex(praviloNaziv)) && !regex_search(sadrzaj, regex(praviloSadrzaj));
  346.     }
  347.     //DA BI PRINTER ISPRINTAO NEKI DOKUMENT MORAJU BITI ZADOVOLJENA SLJEDEĆA PRAVILA:
  348.     //1. NAZIV DOKUMENTA MORA BITI U SLJEDEĆEM FORMATU npr: ispitPRIII.doc
  349.     //NAZIV DOKUMENTA MOŽE SADRŽAVATI SAMO SLOVA (NAJMANJE 5, NAJVIŠE 15), A EKSTENZIJA MOŽE
  350.     //BITI SAMO NEKA OD DOZVOLJENIH VRSTOMDOKUMENTA
  351.     //2. SADRŽAJ DOKUMENTA U SEBI NE SMIJE POSJEDOVATI NITI JEDNU ZABRANJENU RIJEČ
  352.     //UKOLIKO NEKI OD NAVEDENIH USLOVA NIJE ZADOVOLJEN FUNKCIJA TREBA DA BACI EXCEPTION SA
  353.     //ODGOVARAJUĆOM PORUKOM, ALI ĆE DOKUMENT BITI POHRANJEN U KOLEKCIJU _printaniDokumenti.
  354.     //UKOLIKO DOKUMENT ISPUNJAVA SVE USLOVE ZA PRINTANJE POTREBNO JE NA KONZOLU ISPISATI
  355.     //SADRŽAJ DOKUMENTA KOJI SE PRINTA
  356.     //IMPLEMENTIRATI PRINTANJE U ZASEBNIM NITIMA UZ KORIŠTENJE sleep_for FUNKCIJE
  357.     //VODITI RAČUNA O DIJELJENJU ZAJEDNIČKIH RESURSA
  358.     void Printaj(DatumVrijeme datum, Dokument &dokument) {
  359.         _printaniDokumenti.Dodaj(datum, dokument);
  360.         if (_provjeraIspravnosti(dokument.GetNaziv(), dokument.GetSadrzaj())) {
  361.             thread printThread(&Print, dokument.GetNaziv(), dokument.GetSadrzaj(), ref(datum));
  362.             printThread.join();
  363.         } else throw exception("\nGreksa! U dokumentu je pronadjena zabranjena rijec.\n");
  364.     } //za do sada koristene vrste izuzetaka nije poznat nacin da se izuzetak proslijedi iz jednog thread-a u drugi thread (jer svaki thread ima svoj stek) //crash
  365.     friend ostream & operator << (ostream &C, const Printer &obj);
  366. };
  367. ostream & operator << (ostream &C, const Printer &obj) {
  368.     C << crt << obj._proizvodjac << " - " << obj._model << crt;
  369.     C << obj._printaniDokumenti;
  370.     C << "Lista zabranjenih rijeci: ";
  371.     for (int i = 0; i < obj._zabranjeneRijeci.size(); i++)
  372.         C << obj._zabranjeneRijeci[i] << " ";
  373.     return C;
  374. }
  375. void main() {
  376.     //****************************************************************************
  377.     //1. SVE KLASE TREBAJU POSJEDOVATI ADEKVATAN DESTRUKTOR
  378.     //2. NAMJERNO IZOSTAVLJANJE KOMPLETNIH I/ILI POJEDINIH DIJELOVA DESTRUKTORA KOJI UZROKUJU RUNTIME ERROR ĆE BITI OZNACENO KAO "RE"
  379.     //3. SPAŠAVAJTE PROJEKAT KAKO BI SE SPRIJEČILO GUBLJENJE URAĐENOG ZADATKA
  380.     //4. PROGRAMSKI CODE SE TAKOĐER NALAZI U FAJLU CODE.TXT
  381.     //5. NAZIVI FUNKCIJA, TE BROJ I TIP PARAMETARA MORAJU BITI IDENTIČNI ONIMA KOJI SU KORIŠTENI U TESTNOM CODE-U, OSIM U SLUČAJU DA POSTOJI ADEKVATAN RAZLOG ZA NJIHOVU MODIFIKACIJU. OSTALE, POMOĆNE FUNKCIJE MOŽETE IMENOVATI I DODAVATI PO ŽELJI.
  382.     //6. IZUZETAK BACITE U FUNKCIJAMA U KOJIMA JE TO NAZNAČENO.
  383.     //****************************************************************************
  384. #pragma region TestiranjeDatumVrijeme
  385.     DatumVrijeme danas(1, 2, 2017, 10, 15);
  386.     DatumVrijeme sutra(danas);
  387.     DatumVrijeme prekosutra;
  388.     prekosutra = danas;
  389.     cout << danas << endl << sutra << endl << prekosutra << crt;
  390. #pragma endregion
  391. #pragma region FITKolekcija
  392.     int v6 = 6, v13 = 13, v32 = 32, v63 = 63, v98 = 98, v109 = 109, v196 = 196;
  393.  
  394.     FITKolekcija<int, int> brojevi;
  395.     brojevi.Dodaj(v196, v6);
  396.     brojevi.Dodaj(v13, v32);
  397.     brojevi.Dodaj(v98, v196);
  398.     brojevi.Dodaj(v63, v13);
  399.     brojevi.Dodaj(v98, v196);
  400.     brojevi.Dodaj(v196, v6);
  401.  
  402.     cout << brojevi << crt+1;
  403.     //SORTIRANJE ČLANOVA KOLEKCIJE SE VRŠI U RASTUĆEM REDOSLIJEDU NA OSNOVU VRIJEDNOSTI ELEMENTA TIPA T1
  404.     brojevi.Sortiraj();
  405.     cout << brojevi << crt+1;
  406.     //BROJ 2 SE ODNOSI NA LOKACIJU/INDEKS UNUTAR LISTE NA KOJI JE POTREBNO DODATI NOVE ELEMENTE
  407.     brojevi.DodajNaLokaciju(v109, v6, 2);
  408.     cout << brojevi << crt+1;
  409.     brojevi.Sortiraj();
  410.     cout << brojevi << crt+1;
  411.     //METODA GetJedinstveni VRAĆA LISTU JEDINSTVENIH ELEMENATA TJ. ELEMENATA KOJI NE SADRŽE DUPLIKATE (POJAM DUPLIKAT SE ODNOSI NA ISTE VRIJEDNOSTI ELEMENATA T1 I T2). ELEMENTI KOJI SE DUPLIRAJU SE U OVOJ LISTI TREBAJU POJAVITI SAMO JEDNOM.
  412.     FITKolekcija<int, int> * jedinstveni = brojevi.GetJedinstveni();
  413.     cout << *jedinstveni << crt+1;
  414.     //*jedinstveni = brojevi;
  415.     //cout << *jedinstveni << crt;
  416.     FITKolekcija<int, int> * duplikati = brojevi.GetDuplikate();
  417.     cout << *duplikati << crt+1;
  418.  
  419.     Dokument ispitPRIII(DOC, "ispitPRIII.doc");
  420.     //BROJ STRANICA DOKUMENTA SE AUTOMATSKI ODREĐUJE PRILIKOM DODAVANJA SADRŽAJA. ZA POTREBE ISPITA PRETPOSTAVLJAMO DA NA JEDNU STRANICU MOŽE STATI 30 ZNAKOVA UKLJUČUJUĆI I RAZMAKE
  421.     ispitPRIII.DodajSadrzaj("NAMJERNO IZOSTAVLJANJE KOMPLETNIH I/ILI POJEDINIH DIJELOVA DESTRUKTORA KOJI UZROKUJU RUNTIME ERROR ĆE BITI OZNACENO KAO RE");
  422.     cout << "Broj stranica -> " << ispitPRIII.GetBrojStranica() << endl;
  423.     cout << ispitPRIII << endl;
  424.     Dokument ispitBaze(DOC, "ispitBaze.doc");
  425.     ispitBaze.DodajSadrzaj("PROGRAMSKI CODE SE TAKOĐER NALAZI U FAJLU CODE.TXT");
  426.     cout << ispitBaze << endl;//ISPISUJE SVE DOSTUPNE PODATKE O DOKUMENTU
  427.  
  428.     Printer hp3200("HP", "3200");
  429.     //PRINTER NEĆE DOZVOLITI PRINTANJE DOKUMENATA U ČIJEM SADRŽAJU SE NALAZI NEKA OD ZABRANJENIH RIJEČI
  430.     hp3200.DodajZabranjenuRijec("RE");// :)
  431.     hp3200.DodajZabranjenuRijec("RAT");
  432.     hp3200.DodajZabranjenuRijec("UBITI");
  433.     hp3200.DodajZabranjenuRijec("RE");// ONEMOGUĆITI PONAVLJANJE ZABRANJENIH RIJEČI, KORISTITI ITERATORE
  434.     hp3200.DodajZabranjenuRijec("MRZITI");
  435.     try {
  436.  
  437.         //IMPLEMENTIRATI PRINTANJE U ZASEBNIM NITIMA UZ KORIŠTENJE sleep_for FUNKCIJE
  438.         //VODITI RAČUNA O DIJELJENJU ZAJEDNIČKIH RESURSA
  439.         hp3200.Printaj(danas, ispitBaze);
  440.         hp3200.Printaj(danas, ispitPRIII);
  441.  
  442.     } catch (exception& err) {
  443.         cout << err.what() << endl;
  444.     }
  445.  
  446.     //KOD POREĐENJA DATUMA PRINTANJA NIJE POTREBNO POREDITI MINUTE, SAMO DATUM I SATE
  447.     cout << "Prosjecan broj printanih stranica za " << danas << " je -> " << hp3200.GetProsjecanBrojStranicaPoDatumu(danas) << crt;
  448.     cout << "Najcesce koristena zabranjena rijec je -> " << hp3200.GetTopZabranjenuRijec() << crt;
  449.     cout << hp3200 << crt;
  450.     Printer hp4000(hp3200);
  451.     cout << "Prosjecan broj printanih stranica za " << danas << " je -> " << hp4000.GetProsjecanBrojStranicaPoDatumu(danas) << crt;
  452.     cout << "Najcesce koristena zabranjena rijec je -> " << hp4000.GetTopZabranjenuRijec() << crt;
  453.     hp4000.UkloniDokumente();//UKLANJA SVE DOKUMENTE KOJI NISU ZADOVOLJILI USLOVE ZA PRINTANJE
  454.     cout << hp4000 << crt;
  455.  
  456. #pragma endregion
  457.     getchar();
  458. }
Add Comment
Please, Sign In to add comment