Advertisement
Guest User

Untitled

a guest
Apr 21st, 2019
186
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 28.13 KB | None | 0 0
  1. Tutorijal 6
  2. 1
  3. /*
  4. TP 2018/2019: Tutorijal 6, Zadatak 1
  5.  
  6. Autotestovi by Kerim Hodzic. Prijave gresaka, pitanja
  7. i sugestije saljite na mail: khodzic2@etf.unsa.ba
  8.  
  9. Napomene: testovi su konacni tek pred tutorijal
  10. za krsenje zabrana dobiva se 0 bodova za zadatak
  11.  
  12. */
  13. #include <iostream>
  14. #include <stdexcept>
  15. #include <cmath>
  16. #include <limits>
  17. #include <new>
  18. #include <iomanip>
  19. using namespace std;
  20. template <typename Nekitip>
  21. Nekitip *GenerirajStepeneDvojke(int n)
  22. {
  23. if(n <= 0) throw domain_error("Broj elemenata mora biti pozitivan");
  24.  
  25.  
  26. Nekitip *niz(nullptr);
  27. try
  28. {
  29. //Nekitip broj_dva(2);
  30. Nekitip broj_dva(2);
  31. Nekitip min(numeric_limits<Nekitip>::min());
  32. Nekitip max(numeric_limits<Nekitip>::max());
  33. Nekitip provjera(powl(broj_dva,n));
  34. if(provjera > max || provjera == min)
  35. throw overflow_error("Prekoracen dozvoljeni opseg");
  36.  
  37. niz = new Nekitip[n];
  38.  
  39.  
  40. for(int i=0;i<n;i++)
  41. {
  42.  
  43. niz[i] = pow(broj_dva, i);
  44.  
  45. }
  46.  
  47. return niz;
  48. }
  49. catch(bad_alloc)
  50. {
  51. delete[] niz;
  52. throw runtime_error("Alokacija nije uspjela");
  53.  
  54. }
  55. catch(...)
  56. {
  57. delete[] niz;
  58. throw;
  59. }
  60.  
  61.  
  62. }
  63.  
  64. int main ()
  65. {
  66. try
  67. {
  68. int broj;
  69. cout << "Koliko zelite elemenata: ";
  70. cin >> broj;
  71.  
  72. auto pok(GenerirajStepeneDvojke<long double>(broj));
  73. for(int i=0;i < 30;i++)
  74. cout << fixed << setprecision(0) << pok[i] << " ";
  75. delete[] pok;
  76. }
  77. catch(domain_error izuzetak)
  78. {
  79. cout << "Izuzetak: " << izuzetak.what();
  80. }
  81. catch(runtime_error izuzetak)
  82. {
  83. cout << "Izuzetak: " << izuzetak.what();
  84.  
  85. }
  86. catch(overflow_error izuzetak)
  87. {
  88. cout << "Izuzetak: " << izuzetak.what();
  89. }
  90. catch(...)
  91. {
  92. cout << "Neocekivan!";
  93. }
  94. return 0;
  95. }
  96. ---------------------------------------------------------------------------
  97. 2
  98. /*
  99. TP 2018/2019: Tutorijal 6, Zadatak 2
  100.  
  101. Autotestovi by Kerim Hodzic. Prijave gresaka, pitanja
  102. i sugestije saljite na mail: khodzic2@etf.unsa.ba
  103.  
  104. Napomene: testovi su konacni tek pred tutorijal
  105. za krsenje zabrana dobiva se 0 bodova za zadatak
  106.  
  107. */
  108. #include <iostream>
  109. #include <new>
  110. #include <vector>
  111. #include <type_traits>
  112. #include <forward_list>
  113.  
  114. using namespace std;
  115. template <typename NekiBlok>
  116.  
  117. auto KreirajIzvrnutiNiz(NekiBlok p1, NekiBlok p2) -> typename remove_reference<decltype(*p1)>::type*
  118. {
  119. decltype(*p1 + *p1) *niz(nullptr);
  120. try
  121. {
  122. int broj(0);
  123. auto p(p1);
  124. while(p != p2)
  125. {
  126. p++;
  127. broj++;
  128. }
  129. niz = new typename remove_reference<decltype(*p1)>::type[broj];
  130.  
  131. while(p1 != p2)
  132. {
  133. broj--;
  134. niz[broj] = *p1;
  135.  
  136. p1++;
  137. }
  138.  
  139. return niz;
  140. }
  141. catch(bad_alloc izuzetak)
  142. {
  143. delete niz;
  144. delete[] niz;
  145. throw;
  146. }
  147.  
  148. }
  149. int main ()
  150. {
  151.  
  152.  
  153. try
  154. {
  155. int broj_elemenata;
  156. cout << "Koliko zelite elemenata: ";
  157. cin >> broj_elemenata;
  158. vector<double> v(broj_elemenata, 0);
  159.  
  160. cout << "Unesite elemente: ";
  161. for(int i=0;i<broj_elemenata;i++)
  162. cin >> v[i];
  163. auto *pok=KreirajIzvrnutiNiz(v.begin(), v.end());
  164. cout << "Kreirani niz: ";
  165. for(int i=0;i<broj_elemenata;i++)
  166. {
  167. cout << pok[i] << " ";
  168. }
  169.  
  170. delete[] pok;
  171. }
  172. catch(...)
  173. {
  174. cout << "Nedovoljno memorije!";
  175. }
  176. return 0;
  177. }
  178. -----------------------------------------------------------------------------------
  179. 3
  180. /*
  181. TP 2018/2019: Tutorijal 6, Zadatak 3
  182.  
  183. Autotestovi by Kerim Hodzic. Prijave gresaka, pitanja
  184. i sugestije saljite na mail: khodzic2@etf.unsa.ba
  185.  
  186. Napomene: testovi su konacni tek pred tutorijal
  187. za krsenje zabrana dobiva se 0 bodova za zadatak
  188.  
  189. */
  190. #include <iostream>
  191. #include <cmath>
  192.  
  193. using namespace std;
  194.  
  195. int **KreirajTrougao(int n)
  196. {
  197. if(n <= 0)
  198. throw domain_error("Broj redova mora biti pozitivan");
  199. int **mat(nullptr);
  200. try
  201. {
  202. mat = new int*[n]{};
  203. for(int i=0;i<n;i++)
  204. {
  205. mat[i] = new int[i*2 + 1];
  206. }
  207.  
  208.  
  209. for(int i=0;i<n;i++)
  210. {
  211. for(int j=0;j<i*2+1;j++)
  212. {
  213. if(i == j)
  214. mat[i][j] = 1;
  215.  
  216. if(j == i*2)
  217. mat[i][j] = i+1;
  218. if(i == j+(abs(i-j)) || j == i+abs(i-j))
  219. mat[i][j] = abs(i-j)+1;
  220.  
  221. }
  222.  
  223. }
  224.  
  225. return mat;
  226. }
  227. catch(bad_alloc)
  228. {
  229. for(int i=0;i<n;i++)
  230. {
  231. delete[] mat[i];
  232. }
  233.  
  234. delete[] mat;
  235. throw;
  236. }
  237. }
  238. int main ()
  239. {
  240. int red;
  241. try
  242. {
  243. cout << "Koliko zelite redova: ";
  244. cin >> red;
  245. auto **pok(KreirajTrougao(red));
  246.  
  247. for(int i=0;i<red;i++)
  248. {
  249. for(int j=0;j<i*2+1;j++)
  250. cout << pok[i][j] << " ";
  251.  
  252. cout << endl;
  253. }
  254. for(int i=0;i<red;i++)
  255. delete[] pok[i];
  256.  
  257. delete[] pok;
  258.  
  259. }
  260. catch(domain_error izuzetak)
  261. {
  262. cout << "Izuzetak: " << izuzetak.what();
  263. }
  264. catch(bad_alloc)
  265. {
  266. cout << "Izuzetak: Nedovoljno memorije!";
  267. }
  268.  
  269. return 0;
  270. }
  271. -----------------------------------------------------------------------------------------------------------
  272. 4
  273. /*
  274. TP 2018/2019: Tutorijal 6, Zadatak 4
  275.  
  276. Autotestovi by Kerim Hodzic. Prijave gresaka, pitanja
  277. i sugestije saljite na mail: khodzic2@etf.unsa.ba
  278.  
  279. Napomene: testovi su konacni tek pred tutorijal
  280. za krsenje zabrana dobiva se 0 bodova za zadatak
  281.  
  282. */
  283. #include <iostream>
  284. #include <cmath>
  285.  
  286. using namespace std;
  287.  
  288. bool StepenDvojke(int broj)
  289. {
  290. while(broj !=0)
  291. {
  292. if(broj % 2 != 0)
  293. return false;
  294. broj /= 2;
  295. }
  296. return true;
  297. }
  298.  
  299. int **KreirajTrougao(int n)
  300. {
  301. if(n <= 0)
  302. throw domain_error("Broj redova mora biti pozitivan");
  303. int **mat(nullptr);
  304. try
  305. {
  306. mat = new int*[n]{};
  307. mat[0] = new int [n*n];
  308. for(int i=1;i<n;i++)
  309. {
  310. mat[i] = mat[i-1] + 2;
  311. }
  312. // Ne znam, prepravljao sam, pa ne radi sada kako treba
  313.  
  314. for(int i=0;i<1;i++)
  315. {
  316. for(int j=0;j<n*n;j++)
  317. {
  318. if(
  319. mat[i][j] = 1;
  320.  
  321. if(j == i*2)
  322. mat[i][j] = i+1;
  323. if(i == j+(abs(i-j)) || j == i+abs(i-j))
  324. mat[i][j] = abs(i-j)+1;
  325.  
  326. }
  327.  
  328. }
  329.  
  330. return mat;
  331. }
  332. catch(bad_alloc)
  333. {
  334. delete[] mat[0];
  335.  
  336. delete[] mat;
  337. throw;
  338. }
  339. }
  340. int main ()
  341. {
  342. int red;
  343. try
  344. {
  345. cout << "Koliko zelite redova: ";
  346. cin >> red;
  347. auto **pok(KreirajTrougao(red));
  348.  
  349. for(int i=0;i<red;i++)
  350. {
  351. for(int j=0;j<i*2+1;j++)
  352. cout << pok[i][j] << " ";
  353.  
  354. cout << endl;
  355. }
  356.  
  357. delete[] pok[0];
  358.  
  359. delete[] pok;
  360.  
  361. }
  362. catch(domain_error izuzetak)
  363. {
  364. cout << "Izuzetak: " << izuzetak.what();
  365. }
  366. catch(bad_alloc)
  367. {
  368. cout << "Izuzetak: Nedovoljno memorije!";
  369. }
  370.  
  371. return 0;
  372. }
  373. ---------------------------------------------------------------------------------------------
  374. 5
  375. /*
  376. TP 2018/2019: Tutorijal 6, Zadatak 5
  377.  
  378. Autotestovi by Kerim Hodzic. Prijave gresaka, pitanja
  379. i sugestije saljite na mail: khodzic2@etf.unsa.ba
  380.  
  381. Napomene: testovi su konacni tek pred tutorijal
  382. za krsenje zabrana dobiva se 0 bodova za zadatak
  383.  
  384. */
  385. #include <iostream>
  386. #include <vector>
  387. #include <deque>
  388. #include <new>
  389.  
  390. using namespace std;
  391.  
  392. template <typename Kontenjer>
  393. auto KreirajDinamickuKopiju2D(Kontenjer c) -> decltype(c[0][0] + c[0][0])**
  394. {
  395. decltype(c[0][0] + c[0][0]) **mat(nullptr);
  396. try
  397. {
  398. mat = new decltype(c[0][0] + c[0][0])*[c.size()]{};
  399. for(int i = 0; i < c.size();i++)
  400. mat[i] = new decltype(c[0][0] + c[0][0])[c[i].size()];
  401.  
  402. for(int i=0;i<c.size();i++)
  403. for(int j=0;j<c[i].size();j++)
  404. mat[i][j] = c[i][j];
  405. }
  406. catch(...)
  407. {
  408. for(int i=0;i<c.size();i++)
  409. delete[] mat[i];
  410.  
  411. delete[] mat;
  412.  
  413. throw;
  414. }
  415. return mat;
  416. }
  417. int main ()
  418. {
  419. try
  420. {
  421. int br_elemenata;
  422. cout << "Unesite broj redova kvadratne matrice: ";
  423. cin >> br_elemenata;
  424. vector<deque<int>> v(br_elemenata, deque<int>(3));
  425. cout << "Unesite elemente matrice: ";
  426. for(int i=0;i<v.size();i++)
  427. for(int j=0;j<v[i].size();j++)
  428. cin >> v[i][j];
  429.  
  430. auto pok(KreirajDinamickuKopiju2D(v));
  431. for(int i=0;i<v.size();i++)
  432. {
  433. for(int j=0;j<v[i].size();j++)
  434. cout << pok[i][j] << " ";
  435.  
  436. cout << endl;
  437. }
  438.  
  439. for(int i=0;i<v.size();i++)
  440. delete[] pok[i];
  441.  
  442. delete[] pok;
  443.  
  444.  
  445. }
  446. catch(...)
  447. {
  448. cout << "Nedovoljno memorije";
  449. }
  450. return 0;
  451. }
  452. ------------------------------------------------------------------------------------------------------------
  453. 6
  454. /*
  455. TP 2018/2019: Tutorijal 6, Zadatak 6
  456.  
  457. Autotestovi by Kerim Hodzic. Prijave gresaka, pitanja
  458. i sugestije saljite na mail: khodzic2@etf.unsa.ba
  459.  
  460. Napomene: testovi su konacni tek pred tutorijal
  461. za krsenje zabrana dobiva se 0 bodova za zadatak
  462.  
  463. */
  464. #include <iostream>
  465. #include <vector>
  466. #include <deque>
  467. #include <new>
  468.  
  469. using namespace std;
  470.  
  471. template <typename Kontenjer>
  472. auto KreirajDinamickuKopiju2D(Kontenjer c) -> decltype(c[0][0] + c[0][0])**
  473. {
  474. decltype(c[0][0] + c[0][0]) **mat(nullptr);
  475. try
  476. {
  477. mat = new decltype(c[0][0] + c[0][0])*[c.size()]{};
  478.  
  479. int broj_elemenata(0);
  480. for(int i = 0; i < c.size();i++)
  481. broj_elemenata += c[i].size();
  482. mat[0] = new decltype(c[0][0] + c[0][0])[broj_elemenata];
  483.  
  484. for(int i=1;i<c.size();i++)
  485. mat[i] = mat[i-1] + c[i-1].size();
  486.  
  487.  
  488. for(int i=0;i<c.size();i++)
  489. for(int j=0;j<c[i].size();j++)
  490. mat[i][j] = c[i][j];
  491. }
  492. catch(...)
  493. {
  494.  
  495. delete[] mat[0];
  496.  
  497. delete[] mat;
  498.  
  499. throw;
  500. }
  501. return mat;
  502. }
  503. int main ()
  504. {
  505. try
  506. {
  507. int br_elemenata;
  508. cout << "Unesite broj redova kvadratne matrice: ";
  509. cin >> br_elemenata;
  510. vector<deque<int>> v(br_elemenata, deque<int>(3));
  511. cout << "Unesite elemente matrice: ";
  512. for(int i=0;i<v.size();i++)
  513. for(int j=0;j<v[i].size();j++)
  514. cin >> v[i][j];
  515.  
  516. auto pok(KreirajDinamickuKopiju2D(v));
  517. for(int i=0;i<v.size();i++)
  518. {
  519. for(int j=0;j<v[i].size();j++)
  520. cout << pok[i][j] << " ";
  521.  
  522. cout << endl;
  523. }
  524.  
  525.  
  526. delete[] pok[0];
  527.  
  528. delete[] pok;
  529.  
  530. }
  531. catch(...)
  532. {
  533. cout << "Nedovoljno memorije";
  534. }
  535. return 0;
  536. }
  537. ------------------------------------------------------------------------------
  538. Tutorijal 5
  539. 1
  540. /*
  541. TP 2018/2019: Tutorijal 5, Zadatak 1
  542.  
  543. Autotestove pisala Nina Slamnik. Prijave gresaka, sugestije i pitanja
  544. mozete slati na mail nslamnik1@etf.unsa.ba.
  545.  
  546. NAPOMENA: Tutorijal 5 sadrzi veliki broj ZABRANA, tipa zabrana
  547. da se koristi indeksiranje niz[i] ili simulacija indeksiranja
  548. npr. *(niz + i); dalje, da su zabranjene for petlje i slicno.
  549.  
  550. To ce tutori rucno pregledati u toku tutorijala te ako
  551. student bude PREKRSIO BAREM JEDNU ZABRANU, smatrace se da
  552. za taj zadatak NIJE PROSAO NITI JEDAN AUTOTEST!
  553. */
  554. #include <iostream>
  555.  
  556. using namespace std;
  557.  
  558. void unesi(char niz[], int velicina) {
  559.  
  560. char znak(getchar());
  561. if(znak == '\n') znak = getchar();
  562.  
  563. int i(0);
  564. while(i < velicina - 1 && znak != '\n') {
  565.  
  566. niz[i] = znak;
  567. i++;
  568. znak = getchar();
  569.  
  570. }
  571. niz[i] = '\0';
  572.  
  573. }
  574. int main ()
  575. {
  576. char niz[1000];
  577.  
  578. cout << "Unesite recenicu: ";
  579. unesi(niz, 1000);
  580.  
  581. char *pocetak(niz);
  582. int brojac(0), br(0);
  583. while(*pocetak != '\0')
  584. {
  585. if(*pocetak != ' ')
  586. {
  587. while(*pocetak != ' ' && *pocetak != '\0')
  588. {
  589. pocetak++;
  590. br++;
  591. }
  592.  
  593. brojac++;
  594. }
  595.  
  596. if(brojac == 2)
  597. {
  598. if(br != 1)
  599. {
  600. while(br != 0)
  601. {
  602. pocetak--;
  603. br--;
  604. }
  605. break;
  606. }
  607.  
  608. else
  609. {
  610. brojac = 1;
  611. br = 0;
  612. }
  613. }
  614. br = 0;
  615. if(*pocetak == '\0')
  616. pocetak--;
  617.  
  618. pocetak++;
  619. }
  620.  
  621. cout << "Recenica bez prve rijeci glasi: ";
  622. while(*pocetak != '\0')
  623. {
  624. cout << *pocetak;
  625. pocetak++;
  626. }
  627. cout << endl;
  628. return 0;
  629. }
  630. --------------------------------------------------------------------
  631. 2
  632. /*
  633. TP 2018/2019: Tutorijal 5, Zadatak 2
  634.  
  635. Autotestove pisala Nina Slamnik. Prijave gresaka, sugestije i pitanja
  636. mozete slati na mail nslamnik1@etf.unsa.ba.
  637.  
  638. NAPOMENA: Tutorijal 5 sadrzi veliki broj ZABRANA, tipa zabrana
  639. da se koristi indeksiranje niz[i] ili simulacija indeksiranja
  640. npr. *(niz + i); dalje, da su zabranjene for petlje i slicno.
  641.  
  642. To ce tutori rucno pregledati u toku tutorijala te ako
  643. student bude PREKRSIO BAREM JEDNU ZABRANU, smatrace se da
  644. za taj zadatak NIJE PROSAO NITI JEDAN AUTOTEST!
  645. */
  646. #include <iostream>
  647. #include <vector>
  648. #include <deque>
  649. #include <string>
  650.  
  651. template <typename svaki_tip1, typename svaki_tip2>
  652. svaki_tip2 RazmijeniBlokove(svaki_tip1 pocetak_prvog, svaki_tip1 kraj_prvog, svaki_tip2 pocetak_drugog)
  653. {
  654. while(pocetak_prvog != kraj_prvog)
  655. {
  656. // auto da_vidim_drugi(*pocetak_drugog);
  657. auto temp(*pocetak_prvog);
  658. *pocetak_prvog = *pocetak_drugog;
  659. *pocetak_drugog = temp;
  660.  
  661. pocetak_prvog++;
  662. pocetak_drugog++;
  663. }
  664. return pocetak_drugog;
  665. }
  666.  
  667. int main ()
  668. {
  669. int a[]{1, 2, 3, 4, 5}, b[]{6, 7, 8, 9, 10};
  670. RazmijeniBlokove(std::begin(a), std::end(a), std::begin(b));
  671. std::cout << "Prvi niz: ";
  672. for(int x : a) std::cout << x << " ";
  673. std::cout << "\nDrugi niz: ";
  674. for(int x : b) std::cout << x << " ";
  675. return 0;
  676. }
  677. -----------------------------------------------------------------------------------
  678. 3
  679. /*
  680. TP 2018/2019: Tutorijal 5, Zadatak 3
  681.  
  682. Autotestove pisala Nina Slamnik. Prijave gresaka, sugestije i pitanja
  683. mozete slati na mail nslamnik1@etf.unsa.ba.
  684.  
  685. NAPOMENA: Tutorijal 5 sadrzi veliki broj ZABRANA, tipa zabrana
  686. da se koristi indeksiranje niz[i] ili simulacija indeksiranja
  687. npr. *(niz + i); dalje, da su zabranjene for petlje i slicno.
  688.  
  689. To ce tutori rucno pregledati u toku tutorijala te ako
  690. student bude PREKRSIO BAREM JEDNU ZABRANU, smatrace se da
  691. za taj zadatak NIJE PROSAO NITI JEDAN AUTOTEST!
  692. */
  693. #include <iostream>
  694. #include <vector>
  695. #include <algorithm>
  696. #include <string>
  697. #include <deque>
  698. #include <cmath>
  699.  
  700.  
  701. using namespace std;
  702.  
  703. void Unos(int &n)
  704. {
  705. //int m;
  706. cin>>n;
  707. //n=m;
  708. }
  709. int main ()
  710. {
  711. int broj_elemenata;
  712. //char za_vektor[1000];
  713. //int niz[1000];
  714. cout << "Unesite broj elemenata (max. 1000): ";
  715. cin >> broj_elemenata;
  716. cin.ignore(10000, '\n');
  717. //string za_vektor;
  718. int niz[1000];
  719. cout << "Unesite elemente: ";
  720. //getline(cin, za_vektor, '\n');
  721. for_each(niz, niz+broj_elemenata, Unos);
  722. int max(*max_element(begin(niz), niz + broj_elemenata));
  723. cout << "Najveci element niza je " << max;
  724. cout << endl << "Najmanji element niza se pojavljuje " << count(begin(niz), niz+broj_elemenata, *min_element(begin(niz), niz+broj_elemenata)) << " puta u nizu";
  725. cout << endl << "U nizu ima " << count_if(begin(niz), niz+broj_elemenata, [](int broj) {
  726. //double broj1(broj);
  727. if(sqrt(broj)*(int)sqrt(broj) == broj)
  728. return true;
  729. return false;
  730.  
  731. }) << " brojeva koji su potpuni kvadrati";
  732. cout << endl << "Prvi element sa najmanjim brojem cifara je " << *min_element(begin(niz), niz+broj_elemenata, [](int broj1, int broj2) {
  733.  
  734. int suma1(log10(abs(broj1)) + 1);
  735. int suma2(log10(abs(broj2)) + 1);
  736. if(suma1 < suma2) return true;
  737. return false;
  738. });
  739. int trocifreni[1000], broj_trocifrenih(count_if(niz, niz+broj_elemenata, [](int broj)
  740. {
  741. if(broj / 10 == 0)
  742. return false;
  743. if(broj / 100 == 0)
  744. return false;
  745. if(broj / 1000 == 0)
  746. return true;
  747.  
  748. return false;
  749. }));
  750.  
  751. remove_copy_if(niz, niz+broj_elemenata, trocifreni, [](int broj)
  752. {
  753. if(broj / 10 == 0)
  754. return false;
  755. if(broj / 100 == 0)
  756. return false;
  757.  
  758. if(broj / 1000 == 0)
  759. return true;
  760.  
  761. return false;
  762. });
  763. cout << endl <<"Elementi koji nisu trocifreni su: ";
  764. for_each(trocifreni, trocifreni+broj_elemenata-broj_trocifrenih, [](int broj)
  765. {
  766. cout << broj << " ";
  767. });
  768.  
  769. //for(int i=0;i<broj_elemenata;i++)
  770. //cout << niz[i] << " ";
  771.  
  772. return 0;
  773. }
  774. ----------------------------------------------------------------------------------
  775. 4
  776. /*
  777. TP 2018/2019: Tutorijal 5, Zadatak 3
  778.  
  779. Autotestove pisala Nina Slamnik. Prijave gresaka, sugestije i pitanja
  780. mozete slati na mail nslamnik1@etf.unsa.ba.
  781.  
  782. NAPOMENA: Tutorijal 5 sadrzi veliki broj ZABRANA, tipa zabrana
  783. da se koristi indeksiranje dek[i] ili simulacija indeksiranja
  784. npr. *(dek + i); dalje, da su zabranjene for petlje i slicno.
  785.  
  786. To ce tutori rucno pregledati u toku tutorijala te ako
  787. student bude PREKRSIO BAREM JEDNU ZABRANU, smatrace se da
  788. za taj zadatak NIJE PROSAO NITI JEDAN AUTOTEST!
  789. */
  790. #include <iostream>
  791. #include <vector>
  792. #include <algorithm>
  793. #include <string>
  794. #include <deque>
  795. #include <cmath>
  796.  
  797.  
  798. using namespace std;
  799.  
  800. void Unos(int &n)
  801. {
  802. //int m;
  803. cin>>n;
  804. //n=m;
  805. }
  806. int main ()
  807. {
  808. int broj_elemenata;
  809. //char za_vektor[1000];
  810. //int dek[1000];
  811. cout << "Unesite broj elemenata: ";
  812. cin >> broj_elemenata;
  813. cin.ignore(10000, '\n');
  814. //string za_vektor;
  815. deque<int> dek(broj_elemenata);
  816. cout << "Unesite elemente: ";
  817. //getline(cin, za_vektor, '\n');
  818. for_each(dek.begin(), dek.end(), [](int &broj) { cin >> broj; });
  819. int max(*max_element(begin(dek), dek.end()));
  820. cout << "Najveci element deka je " << max;
  821. cout << endl << "Najmanji element deka se pojavljuje " << count(begin(dek), dek.end(), *min_element(begin(dek), dek.end())) << " puta u deku";
  822. cout << endl << "U deku ima " << count_if(begin(dek), dek.end(), [](int broj) {
  823. //double broj1(broj);
  824. if(sqrt(broj)*(int)sqrt(broj) == broj)
  825. return true;
  826. return false;
  827.  
  828. }) << " brojeva koji su potpuni kvadrati";
  829. cout << endl << "Prvi element sa najmanjim brojem cifara je " << *min_element(begin(dek), dek.end(), [](int broj1, int broj2) {
  830.  
  831. int suma1(log10(abs(broj1)) + 1);
  832. int suma2(log10(abs(broj2)) + 1);
  833. if(suma1 < suma2) return true;
  834. return false;
  835. });
  836.  
  837. int broj_trocifrenih(count_if(dek.begin(), dek.end(), [](int broj)
  838. {
  839. if(broj / 10 == 0)
  840. return false;
  841. if(broj / 100 == 0)
  842. return false;
  843. if(broj / 1000 == 0)
  844. return true;
  845.  
  846. return false;
  847. }));
  848.  
  849. deque<int> trocifreni(broj_elemenata);
  850.  
  851.  
  852. remove_copy_if(dek.begin(), dek.end(), trocifreni.begin(), [](int broj)
  853. {
  854. if(broj / 10 == 0)
  855. return false;
  856. if(broj / 100 == 0)
  857. return false;
  858.  
  859. if(broj / 1000 == 0)
  860. return true;
  861.  
  862. return false;
  863. });
  864. cout << endl <<"Elementi koji nisu trocifreni su: ";
  865. for_each(trocifreni.begin(), trocifreni.begin() + broj_elemenata - broj_trocifrenih, [](int broj)
  866. {
  867. cout << broj << " ";
  868. });
  869.  
  870. //for(int i=0;i<broj_elemenata;i++)
  871. //cout << dek[i] << " ";
  872.  
  873. return 0;
  874. }
  875. ------------------------------------------------------------------------------
  876. 5
  877. /*
  878. TP 2018/2019: Tutorijal 5, Zadatak 5
  879.  
  880. Autotestove pisala Nina Slamnik. Prijave gresaka, sugestije i pitanja
  881. mozete slati na mail nslamnik1@etf.unsa.ba.
  882.  
  883. NAPOMENA: Tutorijal 5 sadrzi veliki broj ZABRANA, tipa zabrana
  884. da se koristi indeksiranje niz[i] ili simulacija indeksiranja
  885. npr. *(niz + i); dalje, da su zabranjene for petlje i slicno.
  886.  
  887. To ce tutori rucno pregledati u toku tutorijala te ako
  888. student bude PREKRSIO BAREM JEDNU ZABRANU, smatrace se da
  889. za taj zadatak NIJE PROSAO NITI JEDAN AUTOTEST!
  890. */
  891. #include <iostream>
  892. #include <cmath>
  893. #include <iomanip>
  894.  
  895. using namespace std;
  896. template <typename Tip1, typename Tip2>
  897. double TrapeznoPravilo(double f(double), Tip1 a, Tip2 b, int interval)
  898. {
  899.  
  900. double suma(f(a)/2 + f(b)/2.);
  901. for(int i=1; i<interval;i++)
  902. suma += f(a + (b-a)*i/(double)interval);
  903. return (b-a)*suma/interval;
  904. }
  905. int main ()
  906. {
  907. int interval;
  908.  
  909. cout << "Unesite broj podintervala: ";
  910. cin >> interval;
  911. cout << "Za taj broj podintervala priblizne vrijednosti integrala iznose:" << endl;
  912. cout <<"- Za funkciju sin x na intervalu (0,pi): " << setprecision(5) << fixed << TrapeznoPravilo(sin, 0, 4*atan(1), interval);
  913. cout << endl << setprecision(2) <<"- Za funkciju x^3 na intervalu (0,10): " << fixed << TrapeznoPravilo([](double x) { return x*x*x;}, 0, 10, interval);
  914. cout << endl << setprecision(5)<<"- Za funkciju 1/x na intervalu (1,2): " << fixed << TrapeznoPravilo([](double x) { return 1./x;}, 1, 2, interval);
  915.  
  916. return 0;
  917. }
  918. ------------------------------------------------------------------------------------------------------------------------
  919. 6
  920. /*
  921. TP 2018/2019: Tutorijal 5, Zadatak 6
  922.  
  923. Autotestove pisala Nina Slamnik. Prijave gresaka, sugestije i pitanja
  924. mozete slati na mail nslamnik1@etf.unsa.ba.
  925.  
  926. NAPOMENA: Tutorijal 5 sadrzi veliki broj ZABRANA, tipa zabrana
  927. da se koristi indeksiranje niz[i] ili simulacija indeksiranja
  928. npr. *(niz + i); dalje, da su zabranjene for petlje i slicno.
  929.  
  930. To ce tutori rucno pregledati u toku tutorijala te ako
  931. student bude PREKRSIO BAREM JEDNU ZABRANU, smatrace se da
  932. za taj zadatak NIJE PROSAO NITI JEDAN AUTOTEST!
  933. */
  934. #include <iostream>
  935. #include <vector>
  936. #include <algorithm>
  937.  
  938. using namespace std;
  939.  
  940. int Suma(int suma);
  941.  
  942. int Suma(int suma)
  943. { if(suma == 0)
  944. return 0;
  945.  
  946. return abs(suma)%10 + Suma(abs(suma)/10);
  947.  
  948. }
  949.  
  950.  
  951.  
  952. int main ()
  953. {
  954. int broj_elemenata;
  955.  
  956. cout << "Unesite broj elemenata: ";
  957. cin >> broj_elemenata;
  958. vector<int> v(broj_elemenata);
  959. cout << "Unesite elemente: ";
  960. for_each(v.begin(), v.end(), [](int &broj) { cin >> broj; });
  961. sort(v.begin(), v.end(), [](int x, int y) {
  962. int suma1(Suma(x)), suma2(Suma(y));
  963. if(suma1 == suma2)
  964. return x < y;
  965. else if(suma1 < suma2)
  966. return true;
  967. return false;
  968. });
  969. cout << "Niz sortiran po sumi cifara glasi: ";
  970. for_each(v.begin(), v.end(), [](int broj) { cout << broj << " ";});
  971.  
  972. int trazim;
  973. cout << endl << "Unesite broj koji trazite: ";
  974. cin >> trazim;
  975.  
  976. if(find(v.begin(), v.end(), trazim) == v.end())
  977. cout << "Trazeni broj ne nalazi se u nizu!";
  978. else
  979. cout << "Trazeni broj nalazi se na poziciji " << find(v.begin(), v.end(), trazim) - v.begin();
  980. return 0;
  981. }
  982. ----------------------------------------------------------------------------------------------------
  983. Tutorijal 4
  984. 1
  985. //TP 2018/2019: Tutorijal 4, Zadatak 1
  986. #include <iostream>
  987. #include <cmath>
  988.  
  989. using namespace std;
  990.  
  991. int Cifre(long long int n, int &min, int &max)
  992. {
  993. int br(0);
  994. // Ne treba mnoziti sa -1 ako je negativan, ima test koji provjerava za long long int min, a on je za jedan veci od max, pa se opet vrati u negativnu vrijednost
  995. if(n == 0)
  996. {
  997. br = 1;
  998. min = 0;
  999. }
  1000.  
  1001. //Ovo ispod rijesi problem sa inicijalizacijom, ne znam zasto hahaha
  1002. max = fabs(n%10);
  1003. min = fabs(n%10);
  1004. while(n != 0)
  1005. {
  1006. if(max < fabs(n%10))
  1007. max = fabs(n%10);
  1008.  
  1009. if(min > fabs(n%10))
  1010. min = fabs(n%10);
  1011.  
  1012. n /= 10;
  1013. br++;
  1014. }
  1015.  
  1016. return br;
  1017. }
  1018.  
  1019. int main ()
  1020. {
  1021.  
  1022. long long int broj;
  1023. cout << "Unesite broj: ";
  1024. cin >> broj;
  1025. int min(9), max(0);
  1026. int e(Cifre(broj, min, max));
  1027. cout << "Broj " << broj << " ima " << e << " cifara, najveca je " << max << " a najmanja " << min << ".";
  1028. return 0;
  1029. }
  1030. ---------------------------------------------------------------------------------
  1031. //TP 2018/2019: Tutorijal 4, Zadatak 2
  1032. #include <iostream>
  1033. #include <string>
  1034.  
  1035. using namespace std;
  1036.  
  1037. void IzvrniString (string &s)
  1038. {
  1039. int i(0), j(s.size()-1); // Minus 1 zato sto ukupno ima s.size() slova, ali posto ide od 0, to znaci da je zadnje slovo na s.size()-1
  1040. while(i < j)// Ovdje ne moze != zato sto u slucaju da imamo paran broj rijeci, oni ce se mimoici
  1041. {
  1042. char temp(s.at(i));// Kontas kako se ovo mijenja
  1043. s.at(i) = s.at(j);
  1044. s.at(j) = temp;
  1045. i++;
  1046. j--;
  1047. }
  1048. }
  1049.  
  1050. int main ()
  1051. {
  1052. string s;
  1053. cout << "Unesi string: ";
  1054. getline(cin, s);
  1055.  
  1056. IzvrniString(s);
  1057. cout << "Izvrnuti string je: " << s;
  1058. return 0;
  1059. }
  1060. --------------------------------------------------------------------------
  1061. //TP 2018/2019: Tutorijal 4, Zadatak 3
  1062. #include <iostream>
  1063. #include <vector>
  1064. #include <string>
  1065.  
  1066. using namespace std;
  1067. // Vrijedi isto
  1068. string Provjera_max(string s1, string s2)
  1069. {
  1070. char znak1, znak2;
  1071. for(int i=0;i<s1.size() && i<s2.size();i++)
  1072. {
  1073. znak1 = toupper(s1.at(i));
  1074. znak2 = toupper(s2.at(i));
  1075. if((int)znak1 != (int)znak2)
  1076. {
  1077. if((int)znak1 < (int)znak2)
  1078. return s2;
  1079.  
  1080. else
  1081. break;
  1082. }
  1083. }
  1084. return s1;
  1085. }
  1086.  
  1087. string Provjera_min(string s1, string s2)
  1088. {
  1089. char znak1, znak2;
  1090. for(int i=0;i<s1.size() && i<s2.size();i++)
  1091. {
  1092. // Ova dva chara sam stavio samo da mogu provjeriti sta radi program kroz debugger
  1093. znak1 = toupper(s1.at(i));
  1094. znak2 = toupper(s2.at(i));
  1095. if((int)znak1 != (int)znak2) // Ako su isti u oba stringa, program ne radi nista, dok ako su razliciti znaci da je jedan znak ili veci ili manji
  1096. {
  1097. if((int)znak1 > (int)znak2) // Ako je manji u drugom stringu, to znaci da on ima veci abecedni poredak
  1098. return s2; // Zato ovdje vracamo string 2
  1099.  
  1100. else
  1101. break; // Ako smo usli u ovaj if ikako to znaci nema potrebe da se for petlja nastavlja
  1102. }
  1103. }
  1104. return s1; // U slucaju da su isti stringovi proslijedjeni
  1105. }
  1106.  
  1107. void IzdvojiKrajnjeRijeci(vector<string> v, string &prvi, string &zadnji)
  1108. {
  1109. prvi = v[0];
  1110. zadnji = v[0];
  1111. for(int i=1;i<v.size();i++)
  1112. {
  1113. prvi = Provjera_min(prvi, v.at(i)); // Salje u funkciju koja vraca onaj string koji ima veci abecedni poredak
  1114. zadnji = Provjera_max(zadnji, v.at(i)); // Salje u funkciju koja vraca onaj string koji ima manji abecedni poredak
  1115. }
  1116. }
  1117. // Predajem se...
  1118. void ZadrziDuplikate(vector<string> &v)
  1119. {
  1120. vector<string> provjera(v);
  1121. vector<string> vraca(1);
  1122. int nije(1);
  1123. for(int i=0;i<v.size();i++)
  1124. {
  1125. for(int j=i+1;j<v.size()-1;j++)
  1126. {
  1127. if(v[i] == provjera[j])
  1128. {
  1129. nije = 1;
  1130. for(int k=0;k<vraca.size();k++)
  1131. if(vraca.at(k) == v.at(i))
  1132. {
  1133. nije = 0;
  1134. break;
  1135. }
  1136. if(nije)
  1137. vraca.push_back(v.at(i));
  1138. }
  1139. }
  1140.  
  1141. }
  1142. v = vraca;
  1143.  
  1144.  
  1145. }
  1146.  
  1147. int main ()
  1148. {
  1149. int elementi;
  1150. cout << "Koliko zelite unijeti rijeci: ";
  1151. cin >> elementi;
  1152.  
  1153. cin.ignore(10000, '\n'); // Retardirani \n me zeza vec 2 sata, treba cin.ignore jer poslije unosenja broja pritisnemo enter
  1154.  
  1155. vector<string> v(elementi);
  1156. cout << "Unesite rijeci: ";
  1157. for(int i=0;i<elementi;i++)
  1158. {
  1159. if(i < elementi-1)
  1160. getline(cin, v.at(i), ' '); // Poslije svako unosa osim posljednjeg ce biti space
  1161. else
  1162. getline(cin,v.at(i)); // Ovo kada unesemo posljednji enter
  1163.  
  1164. }
  1165.  
  1166. string prvi, zadnji;
  1167. IzdvojiKrajnjeRijeci(v, prvi, zadnji);
  1168. ZadrziDuplikate(v);
  1169. cout << "Prva rijec po abecednom poretku je: " << prvi << endl;
  1170. cout << "Posljednja rijec po abecednom poretku je: " << zadnji << endl;
  1171. cout << "Rijeci koje se ponavljaju su: ";
  1172. for(int i=0;i<v.size();i++)
  1173. cout << v.at(i) << " ";
  1174. return 0;
  1175. }
  1176. ---------------------------------------------------------------------------------
  1177. //TP 2018/2019: Tutorijal 4, Zadatak 4
  1178. #include <iostream>
  1179. #include <string>
  1180.  
  1181. using namespace std;
  1182.  
  1183. template <typename TipBroja>
  1184. void UnosBroja(string unos, string greska, TipBroja &broj)
  1185. {
  1186. int provjera(0);
  1187. do
  1188. {
  1189. cout << unos;
  1190.  
  1191. if(!(cin >> broj) || cin.peek() != '\n') //ako nije broj ni novi red
  1192. {
  1193. cout << endl << greska;
  1194. cin.clear();
  1195. cin.ignore(10000, '\n');
  1196. }
  1197. else
  1198. provjera = 1;
  1199. cout << endl;
  1200. }while(!provjera);
  1201. }
  1202.  
  1203.  
  1204. int main ()
  1205. {
  1206. double baza, suma(1);
  1207. int eksponent;
  1208.  
  1209. UnosBroja("Unesite bazu: ", "Neispravan unos, pokusajte ponovo...", baza);
  1210. cout << endl;
  1211. UnosBroja("Unesite cjelobrojni eksponent: ", "Neispravan unos, pokusajte ponovo...", eksponent);
  1212. cout << endl;
  1213. if(eksponent < 0)
  1214. {
  1215. for(int i=0;i<eksponent*-1;i++)
  1216. suma *= 1./baza;
  1217. }
  1218. else
  1219. {
  1220. for(int i=0;i<eksponent;i++)
  1221. suma *= baza;
  1222. }
  1223.  
  1224. cout << baza << " na " << eksponent << " iznosi " << suma;
  1225. return 0;
  1226. }
  1227. ----------------------------------------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement