Advertisement
limun11

juli 2018-grupa a

Aug 23rd, 2018
172
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 18.06 KB | None | 0 0
  1. /*
  2. 1. BROJ I VRSTA PARAMETARA MORAJU BITI IDENTICNI KAO U PRIMJERIMA, U SUPROTNOM SE RAD NECE BODOVATI
  3. 2. STAVITE KOMENTAR NA DIJELOVE CODE-A KOJE NE BUDETE IMPLEMENTIRALI
  4. 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
  5. 4. TOKOM IZRADE ISPITA NIJE DOZVOLJENO KORISTENJE HELP-A
  6. 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)
  7. 6. BEZ OBZIRA NA TO DA LI SU ISPITNI ZADACI URADJENI, SVI STUDENTI KOJI SU PRISTUPILI ISPITU MORAJU PREDATI SVOJ RAD
  8. */
  9. #include<iostream>
  10. using namespace std;
  11.  
  12. //narednu liniju code-a ignorisite, osim u slucaju da vam bude predstavljala smetnje u radu
  13. #pragma warning(disable:4996)
  14.  
  15. const char *crt = "\n-------------------------------------------\n";
  16.  
  17. enum vrstaDokumenta { PDF, DOC, TXT, HTML };
  18. const char * vrstaDokumentaChar[] = { "PDF", "DOC", "TXT", "HTML" };
  19.  
  20. enum Prioritet { VISOK, SREDNJI, NIZAK };
  21. const char * PrioritetChar[] = { "VISOK", "SREDNJI", "NIZAK" };
  22.  
  23. char * AlocirajNizKaraktera(const char * sadrzaj)
  24. {
  25.     int vel = strlen(sadrzaj) + 1;
  26.     char * temp = new char[vel];
  27.     strcpy_s(temp, vel, sadrzaj);
  28.     return temp;
  29. }
  30.  
  31. const int BROJ_ZNAKOVA_PO_STRANICI = 30;
  32.  
  33. struct DatumVrijeme
  34. {
  35.     int *_dan, *_mjesec, *_godina, *_sati, *_minuti;
  36.  
  37.     void Unos(int dan = 1, int mjesec = 1, int godina = 2000, int sati = 1, int minuti = 1)
  38.     {
  39.         _dan = new int(dan);
  40.         _mjesec = new int(mjesec);
  41.         _godina = new int(godina);
  42.         _sati = new int(sati);
  43.         _minuti = new int(minuti);
  44.     }
  45.     void Dealociraj()
  46.     {
  47.         delete _dan; _dan = nullptr;
  48.         delete _mjesec; _mjesec = nullptr;
  49.         delete _godina; _godina = nullptr;
  50.         delete _sati; _sati = nullptr;
  51.         delete _minuti; _minuti = nullptr;
  52.     }
  53.     void Ispis()
  54.     {
  55.         cout << *_dan << "." << *_mjesec << "." << *_godina << " " << *_sati << ":" << *_minuti << endl;
  56.     }
  57. };
  58. bool starijiDatum(DatumVrijeme d1, DatumVrijeme d2)
  59. {
  60.     if (d1._godina > d2._godina)
  61.         return false;
  62.     else if (d2._godina > d1._godina)
  63.         return true;
  64.  
  65.     if (d1._mjesec > d2._mjesec)
  66.         return false;
  67.     else if (d2._mjesec > d1._mjesec)
  68.         return true;
  69.  
  70.     if (d1._dan > d2._dan)
  71.         return false;
  72.     else if (d2._dan > d1._dan)
  73.         return true;
  74.  
  75.     if (d1._sati > d2._sati)
  76.         return false;
  77.     else if (d2._sati > d1._sati)
  78.         return true;
  79.  
  80.     if (d1._minuti > d2._minuti)
  81.         return false;
  82.     else if (d2._minuti > d1._minuti)
  83.         return true;
  84.  
  85.     return false;
  86. }
  87. bool istiDatum(DatumVrijeme d1, DatumVrijeme d2)
  88. {
  89.     return (*d1._dan == *d2._dan && *d1._mjesec == *d2._mjesec&& *d1._godina == *d2._godina && *d1._minuti == *d2._minuti && *d1._sati == *d2._sati);
  90. }
  91. DatumVrijeme uvecajDatum(DatumVrijeme datum)//po referenci jer u rek mijenjamo datum
  92. {
  93.     int nizDana[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
  94.     if (*datum._mjesec < 12 && *datum._mjesec>0)
  95.         if (nizDana[*datum._mjesec - 1] > *datum._dan)
  96.             (*datum._dan)++;
  97.         else
  98.         {
  99.             if (*datum._mjesec == 12)
  100.             {
  101.                 *datum._godina++;
  102.                 *datum._mjesec = 1;
  103.                 *datum._dan = 1;
  104.             }
  105.             else
  106.             {
  107.                 *datum._mjesec++;
  108.                 *datum._dan = 1;
  109.             }
  110.         }
  111.     return datum;
  112. }
  113.  
  114. bool veciDatum(DatumVrijeme d1, DatumVrijeme d2)
  115. {
  116.     if (*d1._godina < *d2._godina)
  117.         return true;
  118.     else if (*d2._godina < *d1._godina)
  119.         return false;
  120.  
  121.     if (*d1._mjesec < *d2._mjesec)
  122.         return true;
  123.     else if (*d2._mjesec < *d1._mjesec)
  124.         return false;
  125.  
  126.     if (*d1._dan < *d2._dan)
  127.         return true;
  128.     else if (*d2._dan < *d1._dan)
  129.         return false;
  130.  
  131.     if (*d1._sati < *d2._sati)
  132.         return true;
  133.     else if (*d2._sati < *d1._sati)
  134.         return false;
  135.  
  136.     if (*d1._minuti < *d2._minuti)
  137.         return true;
  138.     else if (*d2._minuti < *d1._minuti)
  139.         return false;
  140.  
  141.     return true;
  142. }
  143. struct Filter
  144. {
  145.     char * _sadrzaj;
  146.     Prioritet _prioritet;
  147.  
  148.     void Unos(const char * sadrzaj, Prioritet prioritet)
  149.     {
  150.         _sadrzaj = AlocirajNizKaraktera(sadrzaj);
  151.         _prioritet = prioritet;
  152.     }
  153.     void Dealociraj()
  154.     {
  155.         delete[] _sadrzaj; _sadrzaj = nullptr;
  156.     }
  157.     void Ispis() { cout << _sadrzaj << " (" << PrioritetChar[_prioritet] << ")" << endl; }
  158. };
  159.  
  160. struct Dokument
  161. {
  162.     vrstaDokumenta _vrsta;
  163.     char * _naziv;
  164.     char * _sadrzaj;
  165.     unique_ptr<DatumVrijeme> _kreiran;
  166.     int _brojStranica;
  167.  
  168.     void Unos(vrstaDokumenta vrsta, const char * naziv, DatumVrijeme kreiran)
  169.     {
  170.         _naziv = AlocirajNizKaraktera(naziv);
  171.         _vrsta = vrsta;
  172.         _kreiran = make_unique <DatumVrijeme>(kreiran);
  173.         _kreiran->Unos(*_kreiran->_dan, *_kreiran->_mjesec, *_kreiran->_godina, *_kreiran->_sati, *_kreiran->_minuti);
  174.         _brojStranica = 0;//broj stranica se odredjuje prilikom svakog dodavanja novog sadrzaja dokumentu
  175.         _sadrzaj = nullptr;
  176.     }
  177.     void Dealociraj()
  178.     {
  179.         delete[] _naziv; _naziv = nullptr;
  180.         delete[] _sadrzaj; _sadrzaj = nullptr;
  181.         _kreiran->Dealociraj();
  182.         _kreiran.reset();
  183.     }
  184.  
  185.     //ISPISUJE SVE PODATKE O DOKUMENTU
  186.     void Ispis()
  187.     {
  188.         cout << crt << "Naziv dokumenta: " << _naziv << " " << "Vrsta dokumenta: " << vrstaDokumentaChar[_vrsta] << " kreiran ";
  189.         _kreiran->Ispis();
  190.         if (_sadrzaj != nullptr)
  191.         {
  192.             cout << crt << "Sadrzaj dokumenta: " << _sadrzaj << crt << " br.stranica (" << _brojStranica << ")" << crt;
  193.         }
  194.     }
  195.  
  196.     /*BROJ STRANICA DOKUMENTA SE AUTOMATSKI ODREDJUJE PRILIKOM DODAVANJA SADRZAJA. ZA POTREBE ISPITA PRETPOSTAVLJAMO DA NA JEDNU
  197.     STRANICU MOZE STATI BROJ_ZNAKOVA_PO_STRANICI ZNAKOVA UKLJUCUJUCI RAZMAKE I DRUGE VRSTE ZNAKOVA*/
  198.     void DodajSadrzaj(const char * sadrzaj)
  199.     {
  200.         if (_sadrzaj == nullptr)
  201.         {
  202.             int size = strlen(sadrzaj) + 1;
  203.             _sadrzaj = new char[size];
  204.             strcpy_s(_sadrzaj, size, sadrzaj);
  205.         }
  206.         else
  207.         {
  208.             int size1 = strlen(sadrzaj) + strlen(_sadrzaj) + 1;
  209.             char * temp = new char[size1];
  210.             int size2 = strlen(_sadrzaj) + 1;
  211.             strcpy_s(temp, size2, _sadrzaj);
  212.             delete[] _sadrzaj; _sadrzaj = nullptr;
  213.             strcat_s(temp, size1, sadrzaj);
  214.             _sadrzaj = temp;
  215.         }
  216.         _brojStranica = strlen(_sadrzaj) / BROJ_ZNAKOVA_PO_STRANICI;
  217.         cout << "Broj stranica: " << _brojStranica << endl;
  218.         cout << "Sadrzaj: " << _sadrzaj << endl;
  219.     }
  220. };
  221. struct Printer
  222. {
  223.     char * _model;
  224.     Dokument * _dokumenti;
  225.     int _trenutnoDokumenata;
  226.     Filter * _filteri;
  227.     int _trenutnoFiltera;
  228.  
  229.     bool dodajDokument(Dokument & dokument)
  230.     {
  231.         Dokument *temp = new Dokument[_trenutnoDokumenata + 1];
  232.         for (int i = 0; i < _trenutnoDokumenata; i++)
  233.         {
  234.             temp[i].Unos(_dokumenti[i]._vrsta, _dokumenti[i]._naziv, *_dokumenti[i]._kreiran);
  235.             if (_dokumenti[i]._sadrzaj != nullptr)
  236.                 temp[i].DodajSadrzaj(_dokumenti[i]._sadrzaj);
  237.             temp[i]._brojStranica = _dokumenti[i]._brojStranica;
  238.         }
  239.         temp[_trenutnoDokumenata].Unos(dokument._vrsta, dokument._naziv, *dokument._kreiran);
  240.         if (dokument._sadrzaj != nullptr)
  241.             temp[_trenutnoDokumenata].DodajSadrzaj(dokument._sadrzaj);
  242.         temp[_trenutnoDokumenata]._brojStranica = dokument._brojStranica;
  243.         for (int i = 0; i < _trenutnoDokumenata; i++)
  244.         {
  245.             _dokumenti[i].Dealociraj();
  246.         }
  247.         delete[] _dokumenti;
  248.         _dokumenti = temp;
  249.         _trenutnoDokumenata++;
  250.         return true;
  251.     }
  252.     void Unos(const char * model)
  253.     {
  254.         _model = AlocirajNizKaraktera(model);
  255.         _filteri = nullptr;
  256.         _dokumenti = nullptr;
  257.         _trenutnoDokumenata = 0;
  258.         _trenutnoFiltera = 0;
  259.     }
  260.     void Dealociraj() {
  261.         delete[] _model; _model = nullptr;
  262.         for (size_t i = 0; i < _trenutnoDokumenata; i++)
  263.             _dokumenti[i].Dealociraj();
  264.         delete[]_dokumenti; _dokumenti = nullptr;
  265.         for (size_t i = 0; i < _trenutnoFiltera; i++)
  266.             _filteri[i].Dealociraj();
  267.         delete[]_filteri; _filteri = nullptr;
  268.     }
  269.     void Ispis() {
  270.         cout << _model << crt;
  271.         for (size_t i = 0; i < _trenutnoDokumenata; i++)
  272.             _dokumenti[i].Ispis();
  273.     }
  274.  
  275.     /*PRINTER NECE DOZVOLITI PRINTANJE DOKUMENATA U CIJEM SADRZAJU SE NALAZI NEKA OD ZABRANJENIH RIJECI DEFINISANIH FILTERIMA*/
  276.     //VISOK
  277.     /* ONEMOGUCITI PONAVLJANJE FILTERA, BEZ OBZIRA STO SU RAZLICITOG PRIORITETA*/
  278.     bool DodajFilter(const char * filter, Prioritet prioritet)
  279.     {
  280.         for (int i = 0; i < _trenutnoFiltera; i++)
  281.         {
  282.             if (strcmp(_filteri[i]._sadrzaj, filter) == 0)
  283.             {
  284.                 cout << "Filter vec dodan! -> ";
  285.                 return false;
  286.             }
  287.         }
  288.         Filter * temp = new Filter[_trenutnoFiltera + 1];
  289.         for (int i = 0; i < _trenutnoFiltera; i++)
  290.         {
  291.             temp[i].Unos(_filteri[i]._sadrzaj, _filteri[i]._prioritet);
  292.         }
  293.         temp[_trenutnoFiltera].Unos(filter, prioritet);
  294.         for (int i = 0; i < _trenutnoFiltera; i++)
  295.         {
  296.             _filteri[i].Dealociraj();
  297.         }
  298.         delete[] _filteri;
  299.         _filteri = temp;
  300.         _trenutnoFiltera++;
  301.         cout << "Dodan: " << _trenutnoFiltera << "-> ";
  302.         return true;
  303.     }
  304.  
  305.     /*
  306.     DA BI PRINTER ISPRINTAO NEKI DOKUMENT MORAJU BITI ZADOVOLJENA SLJEDECA PRAVILA:
  307.     1. NAZIV DOKUMENTA MOZE SADRZAVATI SAMO SLOVA, A EKSTENZIJA MOZE BITI IDENTICNA ONOJ DEFINISANOJ VRIJEDNOSCU ATRIBUTA vrstaDokumenta
  308.     2. SADRZAJ DOKUMENTA MOZE POSJEDOVATI RIJECI DEFINISANE FILTERIMA, ALI PREMA SLJEDECIM PRAVILIMA:
  309.     - NITI JEDNU RIJEC OZNACENU FILTEROM PRIORITETA VISOK
  310.     - NAJVISE 2 RIJECI OZNACENE FILTEROM PRIORITETA SREDNJI
  311.     - NAJVISE 3 RIJECI OZNACENE FILTEROM PRIORITETA NIZAK
  312.     UKOLIKO NEKI OD NAVEDENIH USLOVA NIJE ZADOVOLJEN FUNKCIJA PRINTAJ DOKUMENT TREBA SACUVATI U NIZ _dokumenti,
  313.     ALI TAJ DOKUMENT NE TREBA PRINTATI I FUNKCIJA VRACA FALSE.
  314.     UKOLIKO DOKUMENT ISPUNJAVA SVE USLOVE ZA PRINTANJE POTREBNO JE NA KONZOLU ISPISATI SADRZAJ DOKUMENTA KOJI SE PRINTA, A SA CRT LINIJOM
  315.     ODVAJATI STRANICE DOKUMENTA
  316.     */
  317.     bool Printaj(Dokument & dokument)
  318.     {
  319.         int size = strlen(dokument._naziv) + 1;
  320.         for (int j = 0; j < size; j++)
  321.         {//kada dodje do tacke prekida dalje strazenje slova u nazivu
  322.             if (dokument._naziv[j] == '.')
  323.                 break;
  324.             //posto imamo ! znaci da nam se u uslovu ne radi o slovu i zato vracamo false
  325.             if (!((dokument._naziv[j] >= 'a' && dokument._naziv[j] <= 'z') || (dokument._naziv[j] >= 'A' &&dokument._naziv[j] <= 'Z')))
  326.             {
  327.                 dodajDokument(dokument);
  328.                 return false;
  329.             }
  330.         }
  331.  
  332.         if (!(dokument._vrsta == PDF || dokument._vrsta == DOC || dokument._vrsta == HTML || dokument._vrsta == TXT))
  333.         {
  334.             dodajDokument(dokument);
  335.             return false;
  336.         }
  337.  
  338.         int brojacSrednji = 0, brojacVisok = 0, brojacNizak = 0;
  339.         for (int j = 0; j < _trenutnoFiltera; j++)
  340.         {
  341.             if (dokument._sadrzaj != nullptr && _filteri[j]._sadrzaj != nullptr)
  342.             {
  343.                 if (strstr(dokument._sadrzaj, _filteri[j]._sadrzaj) != nullptr)
  344.                 {
  345.                     if (_filteri[j]._prioritet == VISOK)//0
  346.                         brojacVisok++;
  347.                     if (_filteri[j]._prioritet == SREDNJI)//2
  348.                         brojacSrednji++;
  349.                     if (_filteri[j]._prioritet == NIZAK)//3
  350.                         brojacNizak++;
  351.                 }
  352.             }
  353.         }
  354.         if (brojacVisok > 0)
  355.         {
  356.             dodajDokument(dokument);
  357.             return false;
  358.         }
  359.         if (brojacSrednji > 2)
  360.         {
  361.             dodajDokument(dokument);
  362.             return false;
  363.         }
  364.         if (brojacNizak > 3)
  365.         {
  366.             dodajDokument(dokument);
  367.             return false;
  368.         }
  369.  
  370.         if (dokument._sadrzaj != nullptr)
  371.         {
  372.             int size1 = strlen(dokument._sadrzaj) + 1;
  373.             for (int i = 0; i < size1; i++)
  374.             {
  375.                 cout << dokument._sadrzaj[i];
  376.                 if (i%BROJ_ZNAKOVA_PO_STRANICI == 0 && i != 0)
  377.                     cout << crt;
  378.             }
  379.         }
  380.         dodajDokument(dokument);
  381.         return true;
  382.     }
  383.  
  384.     //PROSJECAN BROJ STRANICA = UKUPAN BROJ STRANICA / BROJ PRINTANIH DOKUMENATA
  385.     //REKURZIVNA FUNKCIJA VRACA PROSJECAN BROJ ISPRINTANIH STRANICA (KOJE SU ZADOVOLJILE POSTAVLJENE FILTERE) U PERIODU OD (npr.prije3Dana) -
  386.     //DO (npr.danas2), UKLJUCUJUCI I TAJ PERIOD
  387.     float GetProsjecanBrojStranicaUPeriodu_Od_Do(/**/DatumVrijeme  OD, DatumVrijeme  DO, int & suma, int & brojac, int & i)
  388.     {
  389.         float prosjek;
  390.         if (_trenutnoFiltera == i)
  391.         {
  392.             if (brojac == 0)
  393.                 return 0;
  394.             else
  395.             {
  396.                 prosjek = float(suma) / brojac;
  397.                 return prosjek;
  398.             }
  399.         }
  400.         else
  401.         {
  402.             if (veciDatum(OD, *_dokumenti[i]._kreiran) && veciDatum(*_dokumenti[i]._kreiran, DO))
  403.             {
  404.                 cout << "ispis rekurzije... " << endl;
  405.                 int brojacSrednji = 0, brojacVisok = 0, brojacNizak = 0;
  406.                 for (int j = 0; j < _trenutnoFiltera; j++)
  407.                 {
  408.                     if (_dokumenti[i]._sadrzaj != nullptr && _filteri[j]._sadrzaj != nullptr)
  409.                     {
  410.                         if (strstr(_dokumenti[i]._sadrzaj, _filteri[j]._sadrzaj) != nullptr)
  411.                         {
  412.                             if (_filteri[j]._prioritet == VISOK)//0
  413.                                 brojacVisok++;
  414.                             if (_filteri[j]._prioritet == SREDNJI)//2
  415.                                 brojacSrednji++;
  416.                             if (_filteri[j]._prioritet == NIZAK)//3
  417.                                 brojacNizak++;
  418.                         }
  419.                     }
  420.                 }
  421.                 if ((brojacVisok <= 0) && (brojacSrednji <= 2) && (brojacNizak <= 3))
  422.                 {
  423.                     cout<< _dokumenti[i]._brojStranica;
  424.                     brojac++;
  425.                     suma += _dokumenti[i]._brojStranica;
  426.                 }
  427.             }
  428.         }
  429.         i++;
  430.         return GetProsjecanBrojStranicaUPeriodu_Od_Do(OD, DO, suma, brojac, i);
  431.     }
  432.  
  433.     //VRACA SADRZAJ FILTERA KOJI SE NAJCESCE KORISTIO U DOKUMENTIMA
  434.     Filter * GetNakoristenijiFilter()
  435.     {
  436.         Filter * f = nullptr;
  437.         return f;
  438.     }
  439. };
  440.  
  441.  
  442. int main() {
  443.     DatumVrijeme prije3Dana; prije3Dana.Unos(3, 2, 2018, 10, 15);
  444.     DatumVrijeme danas1; danas1.Unos(6, 2, 2018, 10, 15);
  445.     DatumVrijeme danas2; danas2.Unos(6, 2, 2018, 10, 16);
  446.     DatumVrijeme za10Dana; za10Dana.Unos(16, 2, 2018, 10, 15);
  447.  
  448.  
  449.     /*cout<<starijiDatum(prije3Dana, danas1);
  450.     cout << istiDatum(prije3Dana, danas1);
  451.     uvecajDatum(prije3Dana);
  452.     prije3Dana.Ispis();*/
  453.  
  454.     Dokument ispitPRII, ispitMAT, ispitUIT, ispitUITDrugiRok;
  455.     ispitPRII.Unos(DOC, "ispitPRII.doc", prije3Dana);
  456.     ispitMAT.Unos(DOC, "ispitMAT.doc", danas1);
  457.     ispitUIT.Unos(DOC, "ispitUIT.doc", danas2);
  458.     ispitUITDrugiRok.Unos(PDF, "ispitUITDrugiRok.pdf", za10Dana);
  459.  
  460.     /*BROJ STRANICA DOKUMENTA SE AUTOMATSKI ODREDJUJE PRILIKOM DODAVANJA SADRZAJA. ZA POTREBE ISPITA PRETPOSTAVLJAMO DA NA JEDNU
  461.     STRANICU MOZE STATI BROJ_ZNAKOVA_PO_STRANICI ZNAKOVA UKLJUCUJUCI RAZMAKE I DRUGE VRSTE ZNAKOVA*/
  462.     ispitPRII.DodajSadrzaj("Programiranje ili racunarsko programiranje (engl. programming) jeste vjestina pomocu koje ");
  463.     ispitPRII.DodajSadrzaj("korisnik stvara i izvrsava algoritme koristeci odredjene programske jezike da bi ... ");
  464.     cout << "Broj stranica -> " << ispitPRII._brojStranica << endl;
  465.  
  466.     ispitPRII.Ispis();//ISPISUJE SVE PODATKE O DOKUMENTU
  467.  
  468.     ispitMAT.DodajSadrzaj("Matematika se razvila iz potrebe da se obavljaju proracuni u trgovini, vrse mjerenja zemljista i predvidjaju ");
  469.     ispitMAT.DodajSadrzaj("astronomski dogadjaji, i ove tri primjene se mogu dovesti u vezu sa grubom podjelom matematike ");
  470.  
  471.     Printer hp3200; hp3200.Unos("HP 3200");
  472.     /*PRINTER NECE DOZVOLITI PRINTANJE DOKUMENATA U CIJEM SADRZAJU SE NALAZI NEKA OD ZABRANJENIH RIJECI DEFINISANIH FILTERIMA*/
  473.     if (hp3200.DodajFilter("RE", NIZAK)) //VISOK :)
  474.         cout << "Filter dodan!" << endl;
  475.     if (hp3200.DodajFilter("RAT", VISOK))
  476.         cout << "Filter dodan!" << endl;
  477.     if (hp3200.DodajFilter("UBITI", VISOK))
  478.         cout << "Filter dodan!" << endl;
  479.     if (hp3200.DodajFilter("MRZITI", SREDNJI))
  480.         cout << "Filter dodan!" << endl;
  481.     if (!hp3200.DodajFilter("RE", SREDNJI))/* ONEMOGUCITI PONAVLJANJE FILTERA, BEZ OBZIRA STO SU RAZLICITOG PRIORITETA*/
  482.         cout << "Filter nije dodan!" << endl;
  483.  
  484.     /*
  485.     DA BI PRINTER ISPRINTAO NEKI DOKUMENT MORAJU BITI ZADOVOLJENA SLJEDECA PRAVILA:
  486.     1. NAZIV DOKUMENTA MOZE SADRZAVATI SAMO SLOVA, A EKSTENZIJA MOZE BITI IDENTICNA ONOJ DEFINISANOJ VRIJEDNOSCU ATRIBUTA vrstaDokumenta
  487.     2. SADRZAJ DOKUMENTA MOZE POSJEDOVATI RIJECI DEFINISANE FILTERIMA, ALI PREMA SLJEDECIM PRAVILIMA:
  488.     - NITI JEDNU RIJEC OZNACENU FILTEROM PRIORITETA VISOK
  489.     - NAJVISE 2 RIJECI OZNACENE FILTEROM PRIORITETA SREDNJI
  490.     - NAJVISE 3 RIJECI OZNACENE FILTEROM PRIORITETA NIZAK
  491.     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.
  492.     UKOLIKO DOKUMENT ISPUNJAVA SVE USLOVE ZA PRINTANJE POTREBNO JE NA KONZOLU ISPISATI SADRZAJ DOKUMENTA KOJI SE PRINTA, A SA CRT LINIJOM ODVAJATI STRANICE DOKUMENTA
  493.     */
  494.     if (hp3200.Printaj(ispitPRII))
  495.         cout << "Printam -> " << ispitPRII._naziv << endl;
  496.     if (hp3200.Printaj(ispitMAT))
  497.         cout << "Printam -> " << ispitMAT._naziv << endl;
  498.     if (hp3200.Printaj(ispitUIT))
  499.         cout << "Printam -> " << ispitUIT._naziv << endl;
  500.     if (hp3200.Printaj(ispitUITDrugiRok))
  501.         cout << "Printam -> " << ispitUITDrugiRok._naziv << endl;
  502.  
  503.     //PROSJECAN BROJ STRANICA = UKUPAN BROJ STRANICA / BROJ PRINTANIH DOKUMENATA
  504.     //REKURZIVNA FUNKCIJA VRACA PROSJECAN BROJ ISPRINTANIH STRANICA (KOJE SU ZADOVOLJILE POSTAVLJENE FILTERE) U PERIODU OD (npr.prije3Dana) -
  505.     //DO (npr.danas2), UKLJUCUJUCI I TAJ PERIOD
  506.     int brojac = 0, suma = 0, i = 0;
  507.     cout << "Prosjecan broj printanih stranica je -> " << hp3200.GetProsjecanBrojStranicaUPeriodu_Od_Do(/**/danas1, danas2, suma, brojac, i) << crt;
  508.     //VRACA SADRZAJ FILTERA KOJI SE NAJCESCE KORISTIO U DOKUMENTIMA
  509.  
  510.     Filter * f = hp3200.GetNakoristenijiFilter();
  511.     if (f != nullptr && f->_sadrzaj != nullptr)
  512.         cout << "Najcesce koristeni sadrzaj filtera je -> " << f->_sadrzaj << crt;
  513.     //PORED VRIJEDNOSTI SVIH OSTALIH ATRIBUTA, ISPISUJE SAMO ONE DOKUMENTE KOJI ZADOVOLJAVAJU SVA PRETHODNO DEFINISANA PRAVILA
  514.     hp3200.Ispis();
  515.  
  516.     /*NAPISATI LAMBDA FUNKCIJU ZamijeniIPrintaj KOJA U SADRZAJU DOKUMENTA MIJENJA PRVI POSLATI PARAMETAR SA VRIJEDNOSCU DRUGOG PARAMETRA,
  517.     TE VRACA BROJ ZAMIJENJENIH ZNAKOVA*/
  518.     auto ZamijeniIPrintaj = [&](const char znak, const char znak1, DatumVrijeme datum)
  519.     {
  520.         int brojac = 0;
  521.         for (int i = 0; i < hp3200._trenutnoDokumenata; i++)
  522.         {
  523.             int size = 0;
  524.             if (hp3200._dokumenti[i]._sadrzaj != nullptr)
  525.                 size = strlen(hp3200._dokumenti[i]._sadrzaj) + 1;
  526.             if (istiDatum(*hp3200._dokumenti[i]._kreiran, datum))
  527.             {
  528.                 for (int j = 0; j < size; j++)
  529.                 {
  530.                     if (hp3200._dokumenti[i]._sadrzaj[j] == znak)
  531.                     {
  532.                         hp3200._dokumenti[i]._sadrzaj[j] = znak1;//dodjela
  533.                         brojac++;
  534.                     }
  535.                 }
  536.             }
  537.         }
  538.         return brojac;
  539.     } /**/;
  540.     //RAZMAK MIJENJA ZNAKOM CRTICA U SADRZAJU DOKUMENATA KOJI SU PRINTANI danas1
  541.     cout << "zamjena ";
  542.     hp3200.Ispis();
  543.     DatumVrijeme noviDatum; noviDatum.Unos(6, 2, 2018, 10, 15);
  544.     int zamijenjeno = ZamijeniIPrintaj(' ', '-', danas1);
  545.     cout << "Zamijenjeno -> " << zamijenjeno << " znakova" << endl;
  546.     hp3200.Ispis();
  547.  
  548.     prije3Dana.Dealociraj(); danas1.Dealociraj(); danas2.Dealociraj(); za10Dana.Dealociraj();
  549.     ispitMAT.Dealociraj(); ispitPRII.Dealociraj(); ispitUIT.Dealociraj(); ispitUITDrugiRok.Dealociraj();
  550.     noviDatum.Dealociraj();
  551.     hp3200.Dealociraj();
  552.  
  553.     system("PAUSE");
  554.     return 0;
  555. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement