Guest User

Untitled

a guest
Jan 17th, 2019
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 20.03 KB | None | 0 0
  1. #include <iostream>
  2. #include <ctime>
  3. /* S obzirom da sam kako u pripremi, tako i na tutorijalu iamla jako veliki broj grešaka i autotestova
  4. koji nisu uspjeli, morala sam izmjeniti mnogo dijelova koda, ali mislim da se janso vidi da je sve nadograđivano
  5. na početni tj. da nisu vršene nikakve radikalne izmjene u klasama Niz i Lista koje sam i jedine djelomično implementirala
  6. do kraja Tutoriajla 2 */
  7.  
  8. using namespace std;
  9.  
  10. template <typename NekiTip>
  11. class Iterator;
  12.  
  13. template <typename NekiTip>
  14. class Niz
  15. {
  16. int zauzeto, t, max;
  17. NekiTip* n;
  18. public:
  19. Niz() : zauzeto(0), t(-1)
  20. {
  21. max=1000;
  22. n=new NekiTip[max];
  23. }
  24. virtual ~Niz()
  25. {
  26. delete[] n;
  27. }
  28. Niz (const Niz &niz1)
  29. {
  30. zauzeto=niz1.zauzeto;
  31. t=niz1.t;
  32. max=niz1.max;
  33. n=new NekiTip[max];
  34. for(int i(0); i<zauzeto; i++) n[i]=niz1.n[i];
  35. }
  36. Niz &operator =(const Niz &niz1)
  37. {
  38. if(&niz1==this) return *this;
  39. delete[] n;
  40. zauzeto=niz1.zauzeto;
  41. t=niz1.t;
  42. max=niz1.max;
  43. n=new NekiTip[max];
  44. for(int i(0); i<zauzeto; i++) n[i]=niz1.n[i];
  45. return *this;
  46. }
  47. virtual int brojElemenata() const
  48. {
  49. return zauzeto;
  50. }
  51. virtual NekiTip trenutni() const
  52. {
  53. return n[t];
  54. }
  55. virtual bool prethodni()
  56. {
  57. if(zauzeto==0) throw "Prazan niz!";
  58. if (t==0) return false;
  59. t--;
  60. return true;
  61. }
  62. virtual bool sljedeci()
  63. {
  64. if (zauzeto==0) throw "Prazan niz!";
  65. if (t==zauzeto-1) return false;
  66. t++;
  67. return true;
  68. }
  69. virtual void pocetak()
  70. {
  71. if (zauzeto==0) throw "Prazan niz!";
  72. t=0;
  73. }
  74. virtual void kraj()
  75. {
  76. if (zauzeto==0) throw "Prazan niz!";
  77. t=zauzeto-1;
  78. }
  79. virtual void dodajIspred(const NekiTip &x)
  80. {
  81. if (zauzeto==max)
  82. {
  83. Niz privremeni(*this);
  84. delete[] n;
  85. max*=2;
  86. n=new NekiTip[max];
  87. for(int i(0); i<zauzeto; i++) n[i]=privremeni.n[i];
  88. }
  89. if (zauzeto==0) t=0;
  90. zauzeto++;
  91. for(int i(zauzeto-1); i>=t+1; i--) n[i]=n[i-1];
  92. n[t]=x;
  93. if (zauzeto!=1) t++;
  94. }
  95. virtual void dodajIza(const NekiTip &x)
  96. {
  97. if (zauzeto==max)
  98. {
  99. Niz privremeni(*this);
  100. delete[] n;
  101. max*=2;
  102. n=new NekiTip[max];
  103. for(int i(0); i<zauzeto; i++) n[i]=privremeni.n[i];
  104. }
  105. if(zauzeto==0) t=0;
  106. zauzeto++;
  107. for(int i(zauzeto-1); i>t+1; i--) n[i]=n[i-1];
  108. if (zauzeto==1) n[t]=x;
  109. else n[t+1]=x;
  110. }
  111. virtual void obrisi()
  112. {
  113. if(zauzeto==0) throw "Niz je prazan!";
  114. if(t==zauzeto-1)
  115. {
  116. zauzeto--;
  117. t--;
  118. }
  119. else
  120. {
  121. for(int i(t); i<zauzeto-1; i++) n[i]=n[i+1];
  122. zauzeto--;
  123. }
  124. }
  125. virtual NekiTip operator [](int x) const
  126. {
  127. if(x<0 || x>zauzeto) throw "Ulazite izvan opsega niza!";
  128. return n[x];
  129. }
  130. virtual NekiTip &operator [](int x)
  131. {
  132. if(x<0 || x>zauzeto) throw "Ulazite izvan opsega niza!";
  133. return n[x];
  134. }
  135. friend class Iterator<NekiTip>;
  136. };
  137.  
  138. template <typename NekiTip>
  139. class Lista : public Niz<NekiTip>
  140. {
  141. struct Cvor
  142. {
  143. NekiTip element;
  144. Cvor* veza;
  145. };
  146. Cvor *pocetni, *krajnji, *trenutno;
  147. int br_clanova;
  148. public:
  149. Lista()
  150. {
  151. br_clanova=0;
  152. }
  153. int brojElemenata() const
  154. {
  155. return br_clanova;
  156. }
  157. NekiTip trenutni() const
  158. {
  159. return (trenutno->element);
  160. }
  161. ~Lista()
  162. {
  163. while(br_clanova!=0) obrisi();
  164. }
  165. Lista (const Lista &lista1)
  166. {
  167. br_clanova=lista1.br_clanova;
  168. pocetni=0;
  169. krajnji=0;
  170. trenutno=0;
  171. for(Cvor* p(lista1.pocetni); p!=0; p=p->veza)
  172. {
  173. Cvor *novi(new Cvor);
  174. novi->element=p->element;
  175. novi->veza=0;
  176. if(pocetni!=0) krajnji->veza=novi;
  177. else
  178. {
  179. pocetni=novi;
  180. krajnji=novi;
  181. }
  182. krajnji=novi;
  183. if(p==lista1.trenutno) trenutno=novi;
  184. }
  185. }
  186. Lista &operator =(const Lista &lista1)
  187. {
  188. while(br_clanova!=0) obrisi();
  189. pocetni=0;
  190. krajnji=0;
  191. trenutno=0;
  192. for(Cvor* p(lista1.pocetni); p!=0; p=p->veza)
  193. {
  194. Cvor *novi(new Cvor);
  195. novi->element=p->element;
  196. novi->veza=0;
  197. if(pocetni!=0) krajnji->veza=novi;
  198. else
  199. {
  200. pocetni=novi;
  201. krajnji=novi;
  202. }
  203. krajnji=novi;
  204. if(p==lista1.trenutno) trenutno=novi;
  205. }
  206. br_clanova=lista1.br_clanova;
  207. return *this;
  208. }
  209. bool prethodni()
  210. {
  211. if (br_clanova==0) throw "Lista je prazna!";
  212. if (trenutno==pocetni) return false;
  213. Cvor *pomocni(pocetni);
  214. while (pomocni->veza!=trenutno) pomocni=pomocni->veza;
  215. trenutno=pomocni;
  216. return true;
  217. }
  218. bool sljedeci()
  219. {
  220. if (br_clanova==0) throw "Lista je prazna!";
  221. if (trenutno->veza==0) return false;
  222. trenutno=trenutno->veza;
  223. return true;
  224. }
  225. void pocetak()
  226. {
  227. if (br_clanova==0) throw "Lista je prazna!";
  228. trenutno=pocetni;
  229. }
  230. void kraj()
  231. {
  232. if (br_clanova==0) throw "Lista je prazna!";
  233. trenutno=krajnji;
  234. }
  235. void dodajIspred(const NekiTip &x)
  236. {
  237. if (br_clanova==0)
  238. {
  239. Cvor *novi(new Cvor);
  240. novi->element=x;
  241. novi->veza=0;
  242. pocetni=novi;
  243. krajnji=novi;
  244. trenutno=novi;
  245. br_clanova++;
  246. }
  247. else
  248. {
  249. Cvor *novi(new Cvor);
  250. novi->element=x;
  251. novi->veza=trenutno;
  252. if (pocetni==trenutno) pocetni=novi;
  253. else
  254. {
  255. Cvor *pomocni(pocetni);
  256. while(pomocni->veza!=trenutno) pomocni=pomocni->veza;
  257. pomocni->veza=novi;
  258. }
  259. br_clanova++;
  260. }
  261. }
  262. void dodajIza(const NekiTip &x)
  263. {
  264. if (br_clanova==0)
  265. {
  266. Cvor *novi(new Cvor);
  267. novi->element=x;
  268. novi->veza=0;
  269. pocetni=novi;
  270. krajnji=novi;
  271. trenutno=novi;
  272. br_clanova++;
  273. }
  274. else
  275. {
  276. Cvor *novi(new Cvor),*pomocni(trenutno->veza);
  277. novi->element=x;
  278. novi->veza=pomocni;
  279. trenutno->veza=novi;
  280. if(novi->veza==0)
  281. {
  282. krajnji=novi;
  283. }
  284. br_clanova++;
  285. }
  286. }
  287. void obrisi()
  288. {
  289. if(br_clanova==0) throw "Niz je prazan!";
  290. if(trenutno==pocetni)
  291. {
  292. if(trenutno==krajnji) krajnji=krajnji->veza;
  293. pocetni=pocetni->veza;
  294. delete trenutno;
  295. trenutno=pocetni;
  296. br_clanova--;
  297. }
  298. else
  299. {
  300. Cvor* pomocni(pocetni), *pomocni2(trenutno->veza);
  301. while(pomocni->veza!=trenutno) pomocni=pomocni->veza;
  302. pomocni->veza=pomocni2;
  303. if(pomocni2==0) krajnji=pomocni;
  304. delete trenutno;
  305. if(pomocni2==0)
  306. {
  307. krajnji=pomocni;
  308. trenutno=pomocni;
  309. }
  310. else trenutno=pomocni2;
  311. br_clanova--;
  312. }
  313. }
  314. NekiTip operator [](int x) const
  315. {
  316. if(x<0 || x>br_clanova) throw "Ulazite izvan opsega niza!";
  317. Cvor* pomocni(pocetni);
  318. for (int i(0); i<x; i++) pomocni=pomocni->veza;
  319. return pomocni->element;
  320. }
  321. NekiTip &operator [](int x)
  322. {
  323. if(x<0 || x>br_clanova) throw "Ulazite izvan opsega niza!";
  324. Cvor* pomocni(pocetni);
  325. for (int i(0); i<x; i++) pomocni=pomocni->veza;
  326. return pomocni->element;
  327. }
  328. friend class Iterator<NekiTip>;
  329. };
  330.  
  331. template <typename NekiTip>
  332. class DvostrukaLista : public Niz<NekiTip>
  333. {
  334. struct DCvor
  335. {
  336. NekiTip element;
  337. DCvor *veza_naprijed, *veza_nazad;
  338. };
  339. DCvor *pocetni, *krajnji, *trenutno;
  340. int br_elemenata;
  341. public:
  342. DvostrukaLista() : br_elemenata(0) {}
  343. int brojElemenata() const
  344. {
  345. return br_elemenata;
  346. }
  347. NekiTip trenutni() const
  348. {
  349. if(br_elemenata==0) throw "Dvostruka lista je prazna!";
  350. return (trenutno->element);
  351. }
  352. ~DvostrukaLista()
  353. {
  354. while(br_elemenata!=0) obrisi();
  355. }
  356. DvostrukaLista(const DvostrukaLista &l)
  357. {
  358. br_elemenata=l.br_elemenata;
  359. pocetni=trenutno=krajnji=0;
  360. for(DCvor *p(l.pocetni); p!=0; p=p->veza_naprijed)
  361. {
  362. DCvor *novi(new DCvor);
  363. novi->element=p->element;
  364. novi->veza_naprijed=0;
  365. novi->veza_nazad=0;
  366. if(pocetni!=0)
  367. {
  368. krajnji->veza_naprijed=novi;
  369. novi->veza_nazad=krajnji;
  370. }
  371. else
  372. {
  373. pocetni=novi;
  374. }
  375. krajnji=novi;
  376. if(p==l.trenutno) trenutno=novi;
  377. }
  378. }
  379. DvostrukaLista &operator=(const DvostrukaLista &l)
  380. {
  381. if(&l==this) return *this;
  382. while(br_elemenata!=0) obrisi();
  383. br_elemenata=l.br_elemenata;
  384. pocetni=trenutno=krajnji=0;
  385. for(DCvor *p(l.pocetni); p!=0; p=p->veza_naprijed)
  386. {
  387. DCvor *novi(new DCvor);
  388. novi->element=p->element;
  389. novi->veza_naprijed=0;
  390. novi->veza_nazad=0;
  391. if(pocetni!=0)
  392. {
  393. krajnji->veza_naprijed=novi;
  394. novi->veza_nazad=krajnji;
  395. }
  396. else
  397. {
  398. pocetni=novi;
  399. }
  400. krajnji=novi;
  401. if(p==l.trenutno) trenutno=novi;
  402. }
  403. return *this;
  404. }
  405. bool prethodni()
  406. {
  407. if(br_elemenata==0) throw "Dvostruka lista je prazna!";
  408. if(trenutno==pocetni) return false;
  409. trenutno=trenutno->veza_nazad;
  410. return true;
  411. }
  412. bool sljedeci()
  413. {
  414. if(br_elemenata==0) throw "Dvostruka lista je prazna!";
  415. if(trenutno==krajnji) return false;
  416. trenutno=trenutno->veza_naprijed;
  417. return true;
  418. }
  419. void pocetak()
  420. {
  421. if(br_elemenata==0) throw "Dvostruka lista je prazna!";
  422. trenutno=pocetni;
  423. }
  424. void kraj()
  425. {
  426. if(br_elemenata==0) throw "Dvostruka lista je prazna!";
  427. trenutno=krajnji;
  428. }
  429. void dodajIspred(const NekiTip &x)
  430. {
  431. if(br_elemenata==0)
  432. {
  433. DCvor *novi(new DCvor);
  434. novi->element=x;
  435. novi->veza_naprijed=0;
  436. novi->veza_nazad=0;
  437. pocetni=novi;
  438. krajnji=novi;
  439. trenutno=novi;
  440. br_elemenata++;
  441. }
  442. else
  443. {
  444. DCvor *novi(new DCvor);
  445. novi->element=x;
  446. novi->veza_naprijed=trenutno;
  447. novi->veza_nazad=(trenutno->veza_nazad);
  448. if(pocetni==trenutno) pocetni=novi;
  449. else trenutno->veza_nazad->veza_naprijed=novi;
  450. if(krajnji==trenutno) krajnji->veza_nazad=novi;
  451. trenutno->veza_nazad=novi;
  452. br_elemenata++;
  453. }
  454. }
  455. void dodajIza(const NekiTip &x)
  456. {
  457. if(br_elemenata==0)
  458. {
  459. DCvor *novi(new DCvor);
  460. novi->element=x;
  461. novi->veza_naprijed=0;
  462. novi->veza_nazad=0;
  463. pocetni=novi;
  464. krajnji=novi;
  465. trenutno=novi;
  466. br_elemenata++;
  467. }
  468. else
  469. {
  470. DCvor *novi(new DCvor);
  471. novi->element=x;
  472. novi->veza_nazad=trenutno;
  473. novi->veza_naprijed=trenutno->veza_naprijed;
  474. if(krajnji==trenutno) krajnji=novi;
  475. else trenutno->veza_naprijed->veza_nazad=novi;
  476. if(pocetni==trenutno) pocetni->veza_naprijed=novi;
  477. trenutno->veza_naprijed=novi;
  478. br_elemenata++;
  479. }
  480. }
  481. void obrisi()
  482. {
  483. if (br_elemenata==0) throw "Dvostruka lista je prazna!";
  484. if(br_elemenata==1)
  485. {
  486. delete trenutno;
  487. trenutno=pocetni=krajnji=0;
  488. br_elemenata--;
  489. }
  490. else if(trenutno!=krajnji)
  491. {
  492. DCvor *pomocni(trenutno);
  493. trenutno=trenutno->veza_naprijed;
  494. trenutno->veza_nazad=pomocni->veza_nazad;
  495. if(pomocni!=pocetni) pomocni->veza_nazad->veza_naprijed=trenutno;
  496. else pocetni=trenutno;
  497. if(pomocni->veza_naprijed==krajnji) krajnji->veza_nazad=pomocni->veza_nazad;
  498. delete pomocni;
  499. br_elemenata--;
  500. }
  501. else
  502. {
  503. DCvor *pomocni(trenutno);
  504. trenutno=trenutno->veza_nazad;
  505. trenutno->veza_naprijed=pomocni->veza_naprijed;
  506. krajnji=trenutno;
  507. delete pomocni;
  508. br_elemenata--;
  509. }
  510. }
  511. NekiTip operator [](int x) const
  512. {
  513. if(x<0 || x>br_elemenata) throw "Ulazite izvan opsega niza!";
  514. DCvor* pomocni(pocetni);
  515. for (int i(0); i<x; i++) pomocni=pomocni->veza_naprijed;
  516. return pomocni->element;
  517. }
  518. NekiTip &operator [](int x)
  519. {
  520. if(x<0 || x>br_elemenata) throw "Ulazite izvan opsega niza!";
  521. DCvor* pomocni(pocetni);
  522. for (int i(0); i<x; i++) pomocni=pomocni->veza_naprijed;
  523. return pomocni->element;
  524. }
  525. friend class Iterator<NekiTip>;
  526. };
  527.  
  528.  
  529.  
  530. template <typename NekiTip>
  531. class Iterator
  532. {
  533. const Niz<NekiTip> *niz;
  534. const Lista<NekiTip> *lista;
  535. const DvostrukaLista<NekiTip> *Dlista;
  536. int trenutniNiz;
  537. typename Lista<NekiTip>::Cvor *trenutniLista;
  538. typename DvostrukaLista<NekiTip>::DCvor *trenutniDlista;
  539. public:
  540. Iterator(const Niz<NekiTip> &x) : niz(&x), lista(0), Dlista(0), trenutniNiz(0), trenutniLista(0), trenutniDlista(0) {}
  541. Iterator(const Lista<NekiTip> &x) : niz(0), lista(&x), Dlista(0), trenutniNiz(0), trenutniLista(lista->pocetni), trenutniDlista(0) {}
  542. Iterator(const DvostrukaLista<NekiTip> &x) : niz(0), lista(0), Dlista(&x), trenutniNiz(0), trenutniLista(0), trenutniDlista(Dlista->pocetni) {}
  543. NekiTip trenutni()
  544. {
  545. if(niz!=0)
  546. {
  547. if (niz->brojElemenata()==0) throw "Niz je prazan!";
  548. else return niz->n[trenutniNiz];
  549. }
  550. else if(lista!=0)
  551. {
  552. if (lista->brojElemenata()==0) throw "Lista je prazna";
  553. else return trenutniLista->element;
  554. }
  555. else if(Dlista!=0)
  556. {
  557. if(Dlista->brojElemenata()==0) throw "Dvostruka lista je prazna!";
  558. else return trenutniDlista->element;
  559. }
  560. }
  561. bool prethodni()
  562. {
  563. if(niz!=0)
  564. {
  565. if(niz->brojElemenata()==0) throw "Prazan niz!";
  566. if(trenutniNiz==0) return false;
  567. else
  568. {
  569. trenutniNiz--;
  570. return true;
  571. }
  572. }
  573. else if(lista!=0)
  574. {
  575. if(lista->brojElemenata()==0) throw "Prazna lista!";
  576. if(trenutniLista==lista) return false;
  577. else
  578. {
  579. typename Lista<NekiTip>::Cvor *pomocni(lista.pocetni);
  580. while(pomocni->veza!=trenutniLista) pomocni=pomocni->veza;
  581. trenutniLista=pomocni;
  582. return true;
  583. }
  584. }
  585. else if(Dlista!=0)
  586. {
  587. if(Dlista->brojElemenata()==0) throw "Dvostruka lista je prazna!";
  588. if(trenutniDlista==Dlista) return false;
  589. else
  590. {
  591. trenutniDlista=trenutniDlista->veza_nazad;
  592. return true;
  593. }
  594. }
  595. }
  596. bool sljedeci()
  597. {
  598. if(niz!=0)
  599. {
  600. if(niz->brojElemenata()==0) throw "Prazan niz!";
  601. if(trenutniNiz==(niz->brojElemenata()-1)) return false;
  602. else
  603. {
  604. trenutniNiz++;
  605. return true;
  606. }
  607. }
  608. else if(lista!=0)
  609. {
  610. if(lista->brojElemenata()==0) throw "Prazna lista!";
  611. if(trenutniLista->veza==0) return false;
  612. else
  613. {
  614. trenutniLista=trenutniLista->veza;
  615. return true;
  616. }
  617. }
  618. else if (Dlista!=0)
  619. {
  620. if(Dlista->brojElemenata()==0) throw "Prazna dvostruka lista!";
  621. if(trenutniDlista->veza_naprijed==0) return false;
  622. else
  623. {
  624. trenutniDlista=trenutniDlista->veza_naprijed;
  625. return true;
  626. }
  627. }
  628. }
  629. void pocetak()
  630. {
  631. if(niz!=0)
  632. {
  633. if(niz->brojElemenata()==0) throw "Prazan niz!";
  634. trenutniNiz=0;
  635. }
  636. else if(lista!=0)
  637. {
  638. if(lista->brojElemenata()==0) throw "Prazna lista!";
  639. while(prethodni());
  640. }
  641. else if(Dlista!=0)
  642. {
  643. if(Dlista->brojElemenata()==0) throw "Prazna dvostruka lista!";
  644. while(prethodni());
  645. }
  646. }
  647. void kraj()
  648. {
  649. if(niz!=0)
  650. {
  651. if(niz->brojElemenata()==0) throw "Prazan niz!";
  652. trenutniNiz=(niz->brojElemenata()-1);
  653. }
  654. else if(lista!=0)
  655. {
  656. if(lista->brojElemenata()==0) throw "Prazna lista!";
  657. while(sljedeci());
  658. }
  659. else if(Dlista!=0)
  660. {
  661. if(Dlista->brojElemenata()==0) throw "Prazna dvostruka lista";
  662. while(sljedeci());
  663. }
  664. }
  665. };
  666.  
  667. template <typename NekiTip>
  668. NekiTip dajMaksimum(const Niz<NekiTip> &n)
  669. {
  670. Iterator<NekiTip> i(n);
  671. NekiTip max(i.trenutni());
  672. while(i.sljedeci())
  673. {
  674. if(i.trenutni()>max) max=i.trenutni();
  675. }
  676. return max;
  677. }
  678.  
  679. template <typename NekiTip>
  680. NekiTip dajMaksimum(const Lista<NekiTip> &n)
  681. {
  682. Iterator<NekiTip> i(n);
  683. NekiTip max(i.trenutni());
  684. while(i.sljedeci())
  685. {
  686. if(i.trenutni()>max) max=i.trenutni();
  687. }
  688. return max;
  689. }
  690.  
  691. template <typename NekiTip>
  692. NekiTip dajMaksimum(const DvostrukaLista<NekiTip> &n)
  693. {
  694. Iterator<NekiTip> i(n);
  695. NekiTip max(i.trenutni());
  696. while(i.sljedeci())
  697. {
  698. if(i.trenutni()>max) max=i.trenutni();
  699. }
  700. return max;
  701. }
  702.  
  703.  
  704. int main()
  705. {
  706. try
  707. {
  708. cout << "Ukoliko zelite koristiti niz unesite 1, za lisu unesite 2!";
  709. int opcija;
  710. cin >> opcija;
  711. clock_t vrijeme1 = clock();
  712. if(opcija==1)
  713. {
  714. Niz<int> *niz;
  715. niz=new Niz<int>;
  716. for (int i(1); i<=10; i++)
  717. niz->dodajIza(i);
  718. cout << dajMaksimum(*niz) << endl;
  719. delete niz;
  720.  
  721. }
  722. if(opcija==2)
  723. {
  724. Lista<int> *niz;
  725. niz=new Lista<int>;
  726. for (int i(1); i<=10; i++)
  727. niz->dodajIza(i);
  728. cout << dajMaksimum(*niz) << endl;
  729. delete niz;
  730.  
  731. }
  732. if(opcija==3)
  733. {
  734. DvostrukaLista<int> *niz;
  735. niz=new DvostrukaLista<int>;
  736. for (int i(1); i<=10; i++)
  737. niz->dodajIza(i);
  738. cout << dajMaksimum(*niz) << endl;
  739. delete niz;
  740. }
  741. clock_t vrijeme2 = clock();
  742. int ukvrijeme = (vrijeme2 - vrijeme1) / (CLOCKS_PER_SEC / 1000);
  743. cout << "Vrijeme izvrsenja: " << ukvrijeme << " ms." << endl;
  744.  
  745. }
  746. catch (const char poruka[])
  747. {
  748. cout<<poruka;
  749. }
  750. return 0;
  751. }
Add Comment
Please, Sign In to add comment