Advertisement
sehovic

PR I // II. PARCIJALA - NAPREDNI ZADACI

Feb 25th, 2018
455
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 35.53 KB | None | 0 0
  1. /*................................................................ZADATAK1.............................................................
  2. Poštujući sve faze procesa programiranje, napisati program će odrediti i ispisati zadnje tri cifre broja x^n. Unos brojeva x i n vršiti u glavnoj funkciji uz uslov 10<x<100 i 2<n<10,
  3. a funkciju za određivanje zadnje tri cifre napraviti zasebno.
  4.  
  5. Primjer izlaza:
  6. Unesite brojeve x i n: 64 i 5
  7. Zadnje tri cifre broja su: 824
  8. */
  9.  
  10. #include <iostream>
  11. #include <cstdlib>
  12. #include <iomanip>
  13. #include <cmath>
  14.  
  15. using namespace std;
  16.  
  17. void ZadnjeTri(int, int);
  18.  
  19. int main()
  20. {
  21.  
  22.         int x, n;
  23.        
  24.         do {
  25.             cout << "Unesite broj x : ";
  26.             cin >> x;
  27.             } while (x < 10 || x>100);
  28.  
  29.        
  30.         do {
  31.             cout << "Unesite n : ";
  32.             cin >> n;
  33.             } while (n < 2 || n > 10);
  34.  
  35.         ZadnjeTri(x, n);
  36.  
  37. system("pause>0");
  38. return 0;
  39. }
  40.  
  41. void ZadnjeTri(int x, int n)
  42. {
  43.         int broj, cifra = 0;
  44.  
  45.         broj = pow(x, n);
  46.         for (int i = 0; i < 3; i++)
  47.         {
  48.             cifra += broj % 10 * pow(10, i);
  49.             broj /= 10;
  50.         }
  51.         cout << "Zadnje 3 cifre : " << cifra;
  52. }
  53. /*.................................................................ZADATAK2............................................................
  54. Napisati program koji će učitati prirodni broj n <= 10, a zatim n prirodnih trocifrenih brojeva koje treba pospremiti u odgovarajući niz.Taj niz brojeva treba sortirati uzlazno po
  55. srednjoj cifri. Nakon sortiranja treba ispisati dobiveni niz. Za sortiranje koristiti zasebnu funkciju kojoj se proslijeđuje nesortiran niz.
  56. */
  57.  
  58. #include <iostream>
  59. #include <cstdlib>
  60. #include <iomanip>
  61. #include <cmath>
  62.  
  63. using namespace std;
  64.  
  65. void unos(int[], int);
  66. void sort(int[], int);
  67. void ispis(int[], int);
  68.  
  69. int main() {
  70.     int niz[10], n;
  71.  
  72.     cout << "Unesite prirodni broj n : ";
  73.     do
  74.         cin >> n;
  75.     while (n < 1 || n >10);
  76.  
  77.     unos(niz, n);
  78.     sort(niz, n);
  79.     ispis(niz, n);
  80.  
  81.     system("pause>0");
  82.     return 0;
  83. }
  84.  
  85. void unos(int niz[], int v) {
  86.     cout << "Unesite clanove niza : ";
  87.     for (int i = 0; i < v; i++){
  88.         cin >> niz[i];
  89.         if (niz[i] < 100 || niz[i] > 999)
  90.             i--;
  91.     }
  92. }
  93.  
  94. void sort(int niz[], int v) {
  95.     int broj, cifra1, cifra2, temp;
  96.     bool provjera;
  97.     do{
  98.         provjera = false;
  99.     for (int i = 1; i < v; i++) {
  100.         broj = niz[i-1];
  101.         cifra1 = (broj / 10) % 10;
  102.         broj = niz[i];
  103.         cifra2 = (broj / 10) % 10;
  104.         if (cifra1 > cifra2){
  105.             temp = niz[i];
  106.             niz[i] = niz[i - 1];
  107.             niz[i - 1] = temp;
  108.             provjera = true;
  109.         }
  110.     }
  111.     } while (provjera);
  112. }
  113.  
  114. void ispis(int niz[], int v) {
  115.     cout << "Niz nakon sortiranja : " << endl;
  116.     for (int i = 0; i < v; i++)
  117.         cout << niz[i] << " ";
  118. }
  119.  
  120. /*.................................................................ZADATAK3............................................................
  121. Napisati program koji će omogućiti:
  122. • Unos 2D niza od 10x10 elemanata vodeći računa da su svi elementi dvocifreni (ukoliko unos nekog elementa ne zadovoljava uslov, ponavljati unos tog elementa dok se ne
  123. zadovolji uslov) – Koristiti funkciju unos
  124. • Izvršiti transpoziciju niza tako što će se zamjeniti redovi i kolone – Koristiti funkciju transpose, a zatim na osnovu izmijenjenog 2D niza:
  125. • Izračunati aritmetičku sredinu svih prostih brojeva ispod sporedne dijagonale – Koristiti dvije funkcije: aritmeticka i prost_broj (pozivati će se iz funkcije aritmeticka)
  126. • Napisati funkciju simpatican koja će provjeriti da li su brojevi iznad sporedne dijagonale simpatični*.
  127. Obavezno koristiti navedene funkcije, a parametre i eventualne povratne vrijednosti definisati prema potrebi. U main() funkciji napisati testni program koji će omogućiti
  128. izvršenje svih funkcija navedenim redoslijedom.
  129. */
  130.  
  131.  
  132. #include <iostream>
  133. #include <cstdlib>
  134. #include <iomanip>
  135. #include <cmath>
  136.  
  137. using namespace std;
  138.  
  139. const int v = 2;
  140.  
  141. void unos(int[][v]);
  142. void transpose(int[][v]);
  143. void ispis(int[][v]);
  144. bool prost(int);
  145. void art(int[][v]);
  146. void simpaticni(int[][v]);
  147. bool simpProvjera(int);
  148. int Zbir(int);
  149.  
  150. int main() {
  151.    
  152.     int niz[v][v];
  153.  
  154.     unos(niz);
  155.     ispis(niz);
  156.     transpose(niz);
  157.     ispis(niz);
  158.     art(niz);
  159.     simpaticni(niz);
  160.    
  161.     system("pause>0");
  162.     return 0;
  163. }
  164.  
  165. void unos(int niz[][v]) {
  166.     cout << "Unesite clanove niza : ";
  167.     for (int i = 0; i < v; i++) {
  168.         for (int j = 0; j < v; j++) {
  169.             cin >> niz[i][j];
  170.             if (niz[i][j] < 10 || niz[i][j] > 99)
  171.                 j--;
  172.         }
  173.     }
  174. }
  175.  
  176. void transpose(int niz[][v]) {
  177.     int niz2[v][v];
  178.     for (int i = 0; i < v; i++) {
  179.         for (int j = 0; j < v; j++) {
  180.             niz2[j][i] = niz[i][j];
  181.         }
  182.     }
  183.     for (int i = 0; i < v; i++) {
  184.         for (int j = 0; j < v; j++) {
  185.             niz[i][j] = niz2[i][j];
  186.         }
  187.     }
  188.    
  189. }
  190.  
  191. void ispis(int niz[][v]){
  192.     cout << "Matrica : " << endl;
  193.     for (int i = 0; i < v; i++) {
  194.         for (int j = 0; j < v; j++) {
  195.             cout << niz[i][j] << " ";
  196.         }
  197.         cout << endl;
  198.     }
  199. }
  200.  
  201. void art(int niz[][v]) {
  202.     float art = 0;
  203.     int brojac = 0;
  204.     for (int i = 0; i < v; i++) {
  205.         for (int j = 0; j < v; j++) {
  206.             if (i + j >= v) {
  207.                 if (prost(niz[i][j])){
  208.                     art += niz[i][j];
  209.                     brojac++;
  210.                 }
  211.                
  212.             }
  213.         }
  214.     }
  215.     cout << "Artimeticka sredina prostih brojeva ispod sporedne dijagonale je : " << art / brojac << endl;
  216. }
  217.  
  218. bool prost(int x) {
  219.     for (int i = 2; i <= x / 2; i++) {
  220.         if (x%i == 0) {
  221.             return false;
  222.         }
  223.     }
  224.     return true;
  225. }
  226.  
  227. void simpaticni(int niz[][v]) {
  228.     int simp[10], brojac = 0;
  229.     for (int i = 0; i < v; i++) {
  230.         for (int j = 0; j < v; j++) {
  231.             if (i + j < v - 1) {
  232.                 if (simpProvjera(niz[i][j]))
  233.         {
  234.                     simp[brojac++] = niz[i][j];
  235.                 }
  236.             }
  237.         }
  238.     }
  239.     cout << "Simpaticni brojevi iznad sporedne dijagonale su : ";
  240.     for (int i = 0; i < brojac; i++)
  241.         cout << simp[i];
  242. }
  243.  
  244. bool simpProvjera(int x) {
  245.     if (Zbir(x*x) == Zbir(x*Zbir(x)))
  246.         return true;
  247.     else
  248.         return false;
  249. }
  250.  
  251. int Zbir(int x) {
  252.     int suma = 0, cifra;
  253.     while (x > 0)
  254.     {
  255.         cifra = x % 10;
  256.         suma += cifra;
  257.         x /= 10;
  258.     }
  259.     return suma;
  260. }
  261.  
  262. /*..............................................................ZADATAK4...............................................................
  263. Napisati program koji od korisnika zahtijeva unos niza od najviše 20 realnih brojeva u rasponu od -100 do 100. U slučaju da korisnik unese bilo koji broj izvan datog raspona korisnik
  264. ponavlja unos tog elementa niza. Također, unos je moguće prekinuti prije nego što se dostigne kapacitet niza unosom broja 0 koji ne treba da bude element niza i služi samo za prekid.
  265. Nakon toga, program računa aritmetičku sredinu unesenih brojeva, te iz niza izbacuje sve one elemente čija je udaljenost od aritmetičke sredine veća od 10,
  266. na način da se sačuva redoslijed dodavanja elemenata. Implementaciju uraditi upotrebom sljedećih funkcija:
  267. • void unos (double[], int, int&); gdje je treći parametar stvarna veličina niza nakon unosa;
  268. • double aritmeticka_sredina(double[], int);
  269. • void ukloni(double[], int, double, int&); gdje je drugi parametar aritmetička sredina, a posljednji veličina niza nakon uklanjanja elemenata.
  270. U glavnom programu testirati dostupne funkcije, te obaviti ispis elemenata niza nakon uklanjanja vodeći se datim primjerom izlaza.
  271. */
  272.  
  273.  
  274. #include <iostream>
  275. #include <cstdlib>
  276. #include <iomanip>
  277. #include <cmath>
  278.  
  279. using namespace std;
  280.  
  281. const int v = 20;
  282.  
  283. void unos(double[], int, int&);
  284. double aritmeticka_sredina(double[], int);
  285. void ukloni(double[], int, double, int&);
  286. void ispis(double[], int);
  287.  
  288. int main()
  289. {
  290.  
  291.     double niz[v], ar;
  292.     int sv = 0;
  293.  
  294.     unos(niz, v, sv);
  295.     ar = aritmeticka_sredina(niz, sv);
  296.     cout << "Artimeticka sredina je : " << ar << endl;
  297.     ispis(niz, sv);
  298.     ukloni(niz, 20, ar, sv);
  299.     cout << "Velicina novog niza je : " << sv << endl;
  300.     ispis(niz, sv);
  301.  
  302.     system("pause>0");
  303.     return 0;
  304. }
  305.  
  306. void unos(double niz[], int v, int &sv)
  307. {
  308.  
  309.     cout << "Unesite clanove niza : " << endl;
  310.  
  311.     for (int i = 0; i < v; i++) {
  312.         do
  313.             cin >> niz[i];
  314.         while (niz[i] < -100 || niz[i]>100);
  315.  
  316.         if (niz[i] == 0)
  317.             return;
  318.  
  319.         sv++;
  320.     }
  321. }
  322.  
  323.  
  324. void ispis(double niz[], int v)
  325. {
  326.     for (int i = 0; i < v; i++)
  327.         cout << niz[i] << "  ";
  328.     cout << endl;
  329. }
  330.  
  331.  
  332. double aritmeticka_sredina(double niz[], int sv)
  333. {
  334.     double as = 0;
  335.     for (int i = 0; i < sv; i++)
  336.         as += niz[i];
  337.  
  338.     return as / sv;
  339. }
  340.  
  341.  
  342. void ukloni(double niz[], int s, double ar, int &sv)
  343. {
  344.     int brojac = 0, removed = 0;
  345.     for (int i = 0; i < sv; i++)
  346.     {
  347.         if (ar - niz[i] < 10 && niz[i] - ar < 10)
  348.             niz[brojac++] = niz[i];
  349.         else
  350.             removed++;
  351.     }
  352.  
  353.     sv = sv - removed;
  354. }
  355.  
  356.  
  357. /*.....................................................ZADATAK 5 N I J E   Z A V R Š E N...............................................
  358. Neka je data matrica kompetencija studenata dimenzija 10x5, gdje svaki red matrice predstavlja studenta, a svaka kolona matrice kompetenciju koju je potrebno evaluirati.
  359. Matrica sadrži podatke o studentima sa dva studijska programa, prvih 5 redova za jedan i drugih 5 redova za drugi program. Kompetencije se definišu putem sljedeće skale:
  360. A (ekspert), B (stručnjak), C (zadovoljava), D (djelimično zadovoljava) i E (ne zadovoljava). Napisati program koji će implementirati i testirati sljedeće funkcije:
  361. • evaluiraj – funkcija omogućava unos evaluacije za određenog (odabranog u glavnom programu) studenta (unosi se samo jedan red matrice), na način da su dozvoljene samo
  362. vrijednosti usvojene prethodnom skalom (A, B, C, D i E). U slučaju unosa bilo kojeg karaktera izvan ovog opsega, potrebno je ponoviti unos. Prilikom unosa ispisati poruku za svaku
  363. kompetenciju na sljedeći način: „Unesite evaluaciju za kompetenciju C1“, i tako redom za svaku kolonu.
  364. • najuspjesnija_kompetencija – funkcija pronalazi kompetenciju (u oba studijska programa) koja je najuspješnija, odnosno na kojoj su studenti ostvarili najbolji rezultat,
  365. te vraća i prosječnu ocjenu za tu kompetenciju.
  366. Napomena: Pridružiti svakoj oznaci numeričku vrijednost, radi jednostavnosti kalkulacije i poređenja uspjeha pojedinih kompetencija. Koristiti prosljeđivanje najmanje jednog parametra
  367. po referenci, te ispis rezultata ne vršiti u funkciji.
  368. • najuspjesniji_student – funkcija pronalazi najuspješnijeg studenta u odabranom studijskom programu (studijski program se bira u glavnom programu putem vrijednost 1
  369. (prvih 5 redova) ili 2 (drugih 5 redova), te vraća i prosječnu ocjenu tog studenta. Vrijede iste napomene kao i za prethodnu funkciju.
  370. U glavnom programu testirati implementirane funkcije na način da se uz uspjeh kompetencije ili studenta definiše opisna evaluacija (ekspert, stručnjak,...). Dodatno ispisati podatke o
  371. najuspješnijem studentu, posmatrajući oba studijska programa. Ispis najsupješnije kompetencije ili studenta izvršiti sa oznakama C ili S, uz redni broj kolone ili reda gdje se nalaze u
  372. matrici. Npr. Najuspješniji student je S2 sa prosječnom ocjenom „stručnjak“.
  373.  
  374. */
  375.  
  376. #include <iostream>
  377. #include <cstdlib>
  378. #include <iomanip>
  379. #include <cmath>
  380.  
  381. using namespace std;
  382.  
  383. const int r = 10, k = 5;
  384.  
  385. void evaluiraj(char[], int);
  386. void ispis(char[][k]);
  387. double najkomp(int[][k], int&);
  388. void konverzija(char[][k], int[][k]);
  389. void ispisk(int[][k], int);
  390.  
  391. int main() {
  392.  
  393.     char niz[r][k] = {};
  394.     int niz2[r][k] = {};
  395.     int izbor, iz2, najK;
  396.     do {
  397.         cout << "Kojeg studenta zelite evaluirati ? " << endl;
  398.         do {
  399.             cin >> izbor;
  400.         } while ((izbor > 10 || izbor < 1) || niz[izbor - 1][0] != 0);
  401.         evaluiraj(niz[izbor - 1], k);
  402.         cout << "Da li zelite jos evaluacija ? (0 za ne)" << endl;
  403.         cin >> iz2;
  404.     } while (iz2 != 0);
  405.     konverzija(niz, niz2);
  406.     ispis(niz);
  407.     najkomp(niz2, najK);
  408.     ispisk(niz2, najK);
  409.     cout << "Najbolji prosjek ima kompetencija : " << najK + 1;
  410.  
  411.  
  412.     system("pause>0");
  413.     return 0;
  414. }
  415.  
  416. void ispisk(int niz[][k], int najK) {
  417.  
  418.     cout << "Prosjek naj kompetencije je : " << najkomp(niz, najK) << endl;
  419.  
  420. }
  421.  
  422.  
  423. double najkomp(int niz[][k], int &najK) {
  424.     int naj = 0, temp = 0, brojac = 0;
  425.     for (int i = 0; i < k; i++)
  426.     {
  427.         brojac = 0;
  428.         for (int j = 0; j < r; j++)
  429.         {
  430.             temp += niz[j][i];
  431.             if (niz[j][i] != 0)
  432.                 brojac++;
  433.         }
  434.         if (naj < temp) {
  435.             naj = temp;
  436.             najK = i;
  437.         }
  438.         temp = 0;
  439.  
  440.     }
  441.     return (naj / brojac);
  442.  
  443. }
  444.  
  445. void evaluiraj(char niz[], int k) {
  446.  
  447.     for (int i = 0; i < k; i++) {
  448.         cout << "Unesite evaluaciju za " << i + 1 << " : " << endl;
  449.         do {
  450.             cin >> niz[i];
  451.         } while (!(niz[i] == 'A' || niz[i] == 'B' || niz[i] == 'C' || niz[i] == 'D' || niz[i] == 'E'));
  452.     }
  453. }
  454.  
  455.  
  456. void ispis(char niz[][k]) {
  457.     for (int i = 0; i < r; i++) {
  458.         for (int j = 0; j < k; j++) {
  459.             cout << niz[i][j] << "  ";
  460.         }
  461.         cout << endl;
  462.         if (i == 4)
  463.             cout << endl;
  464.     }
  465. }
  466.  
  467. void konverzija(char niz[][k], int niz2[][k]) {
  468.     for (int i = 0; i < r; i++) {
  469.         for (int j = 0; j < k; j++)
  470.             switch (niz[i][j]) {
  471.                 {
  472.             case 'A':
  473.                 niz2[i][j] = 5;
  474.                 break;
  475.             case 'B':
  476.                 niz2[i][j] = 4;
  477.                 break;
  478.             case 'C':
  479.                 niz2[i][j] = 3;
  480.                 break;
  481.             case 'D':
  482.                 niz2[i][j] = 2;
  483.                 break;
  484.             case 'E':
  485.                 niz2[i][j] = 1;
  486.                 break;
  487.                 }
  488.             }
  489.     }
  490.  
  491. }
  492.  
  493.  
  494. /*..............................................................ZADATAK6...............................................................
  495. Napisati program koji će korisniku omogućiti unos pozitivnih neparnih cijelih brojeva za koje će se ispitivati da li im je prva cifra parna (npr. 4993 ili 4999). Ukoliko je zadovoljen
  496. uslov broj se smješta u niz od 10 elemenata. Unos se ponavlja dok se ne popuni niz od 10 elemenata koji zadovoljavaju uslov unosa. Unos se prekida ukoliko korisnik unese vrijednost 0
  497. te se i izvršenje program završava uz poruku „Forsirani prekid“. Zatim se za sve elemente niza ispituje da li je broj prost i da li ima samo jednu parnu cifru. Ako broj nije prost i
  498. ako ima više od jedne parne cifre, broj se izbacuje iz niza tako što se njegova vrijednost mijenja sa 0. Na kraju niz sortirati od najvećeg ka najmanjem broju te ga ispisati.
  499. Koristiti odvojene funkcije za provjeru da li je broj prost, za sortiranje i ispis niza.
  500. */
  501.  
  502. #include <iostream>
  503. #include <cstdlib>
  504. #include <iomanip>
  505. #include <cmath>
  506.  
  507. using namespace std;
  508.  
  509. const int v = 10;
  510.  
  511. void unos(int[], int);
  512. bool prost(int);
  513. bool jednaParna(int);
  514. bool prvaParna(int);
  515. void ispis(int[], int);
  516. void promjena(int[], int);
  517. void sort(int[], int);
  518.  
  519. int main() {
  520.     int niz[v] = {};
  521.  
  522.     unos(niz, v);
  523.     ispis(niz, v);
  524.     promjena(niz, v);
  525.     ispis(niz, v);
  526.     sort(niz, v);
  527.     ispis(niz, v);
  528.  
  529.     system("pause>0");
  530.     return 0;
  531. }
  532.  
  533. void unos(int niz[], int v) {
  534.     cout << "Unesite clanove niza : ";
  535.     for (int i = 0; i < v; i++) {
  536.         cin >> niz[i];
  537.         if (niz[i] == 0)
  538.         {
  539.             cout << "Forsirani prekid " << endl;
  540.             return;
  541.         }
  542.         if (niz[i] % 2 == 0 || prvaParna(niz[i]) || niz[i] < 0)
  543.             i--;
  544.     }
  545. }
  546.  
  547. bool prvaParna(int x) {
  548.     int brojCifri = 0, kopija = x, prva;
  549.     do {
  550.         brojCifri++;
  551.         kopija /= 10;
  552.     } while (kopija > 0);
  553.     prva = x / pow(10, brojCifri - 1);
  554.     if (prva % 2 == 0)
  555.         return false;
  556.     else
  557.         return true;
  558. }
  559.  
  560. bool prost(int x) {
  561.     for (int i = 2; i <= x / 2; i++) {
  562.         if (x%i == 0) {
  563.             return false;
  564.         }
  565.     }
  566.     return true;
  567. }
  568.  
  569. bool jednaParna(int x) {
  570.     int cifra;
  571.     do {
  572.         cifra = x % 10;
  573.         if (x % 2 == 0)
  574.             return false;
  575.         x /= 10;
  576.     } while (x > 10);
  577.  
  578.     return true;
  579. }
  580.  
  581. void ispis(int niz[], int v) {
  582.     for (int i = 0; i < v; i++)
  583.         cout << niz[i] << " ";
  584.     cout << endl;
  585. }
  586.  
  587. void promjena(int niz[], int v) {
  588.     for (int i = 0; i < v; i++) {
  589.         if (!(jednaParna(niz[i]) && prost(niz[i])))
  590.             niz[i] = 0;
  591.  
  592.     }
  593. }
  594.  
  595. void sort(int niz[], int v) {
  596.     bool promjena;
  597.     do {
  598.         promjena = false;
  599.         for (int i = 1; i < v; i++) {
  600.             if (niz[i - 1] < niz[i]) {
  601.                 swap(niz[i - 1], niz[i]);
  602.                 promjena = true;
  603.             }
  604.  
  605.         }
  606.     } while (promjena);
  607. }
  608.  
  609. /*.................................................................ZADATAK7............................................................
  610. Deklarisati kvadratnu matricu cijelih brojeva proizvoljnih dimenzija, te implementirati sljedeće funkcije:
  611. • Funkciju za unos i formiranje elemenata matrice prema sljedećem obrascu: elemente neparnih redova matrice (1., 3., 5. itd.) čine minimalno trocifreni brojevi koje unosi korisnik
  612. programa (u slučaju unosa bilo kojeg broja koji ne zadovoljava postavljeni uslov, ponoviti unos); elementi parnih redova matrice se formiraju na osnovu elemenata iz prethodnog reda u
  613. istoj koloni matrice i to na način da je svaki novokreirani element matrice zapravo element s obrnutim redoslijedom cifri elementa iznad njega.
  614. • Za određivanje broja s obrnutim redoslijedom cifri kreirati zasebnu funkciju obratno, te je pozvati u funkciji unos.
  615. • Takvu matricu proslijediti zasebnoj funkciji max koja će formirati novi jednodimenzionalni niz čije članove čine najveći članovi matrice po redovima te ispisati ove članove.
  616. • Formirati posebnu funkciju iznad_dijagonala koja će ispisati broj elemenata matrice koji se nalaze iznad glavne i sporedne dijagonale. Ove elemente unutar funkcije spremati u
  617. niz čija veličina zavisi od dimenzije matrice. Veličina niza treba biti fiksna i mora odgovarati točnom broju elemenata.
  618. */
  619.  
  620. #include <iostream>
  621. #include <cstdlib>
  622. #include <iomanip>
  623. #include <cmath>
  624.  
  625. using namespace std;
  626.  
  627. const int v = 4;
  628.  
  629. void unos(int[][v]);
  630. void ispis(int[][v]);
  631. void obratno(int[][v]);
  632. void max(int[][v]);
  633. void iznad_dijagonala(int[][v]);
  634.  
  635. int main() {
  636.  
  637.     int niz[v][v];
  638.  
  639.     cout << "Unesite minimalno trocifrene brojeve : " << endl;
  640.     unos(niz);
  641.     ispis(niz);
  642.     max(niz);
  643.     iznad_dijagonala(niz);
  644.  
  645.  
  646.     system("pause>null");
  647.     return 0;
  648. }
  649.  
  650.  
  651. void unos(int niz[][v]) {
  652.     int unos;
  653.  
  654.     for (int i = 0; i < v; i += 2) {
  655.         for (int j = 0; j < v; j++) {
  656.             do
  657.                 cin >> unos;
  658.             while (unos < 100);
  659.             niz[i][j] = unos;
  660.         }
  661.         cout << endl;
  662.     }
  663.     obratno(niz);
  664. }
  665.  
  666. void ispis(int niz[][v]) {
  667.     for (int i = 0; i < v; i++) {
  668.         for (int j = 0; j < v; j++) {
  669.             cout << niz[i][j] << " ";
  670.         }
  671.         cout << endl;
  672.     }
  673. }
  674.  
  675. void obratno(int niz[][v]) {
  676.     int cifra, novi = 0, temp, brojac = 0;
  677.     for (int i = 1; i < v; i += 2) {
  678.         for (int j = 0; j < v; j++) {
  679.             temp = niz[i - 1][j];
  680.             do {
  681.                 temp /= 10;
  682.                 brojac++;
  683.             } while (temp > 0);
  684.             temp = niz[i - 1][j];
  685.             do {
  686.                 cifra = temp % 10;
  687.                 temp /= 10;
  688.                 novi = novi + cifra * pow(10, --brojac);
  689.             } while (brojac > 0);
  690.             niz[i][j] = novi;
  691.             novi = 0;
  692.             brojac = 0;
  693.         }
  694.     }
  695. }
  696.  
  697.  
  698. void max(int niz[][v])
  699. {
  700.     int novi[v], naj = INT_MIN;
  701.     for (int i = 0; i < v; i++)
  702.     {
  703.         for (int j = 0; j < v; j++)
  704.          {
  705.             if (niz[i][j] > naj)
  706.                 naj = niz[i][j];
  707.               }
  708.         novi[i] = naj;
  709.         naj = INT_MIN;
  710.         }
  711.     cout << "Najveci clanovi redova : " << endl;
  712.     for (int i = 0; i < v; i++) {
  713.         cout << novi[i] << endl;
  714.     }
  715. }
  716.  
  717. void iznad_dijagonala(int niz[][v])
  718. {
  719.     int n[v], a = 0;
  720.     for (int i = 0; i < v; i++) {
  721.         for (int j = 0; j < v; j++) {
  722.             if (j > i && i + j < v - 1) {
  723.                 n[a] = niz[i][j];
  724.                 a++;
  725.             }
  726.         }
  727.     }
  728.  
  729.     cout << "Elementi iznad obe dijagonale su : " << endl;
  730.     for (int i = 0; i < a; i++) {
  731.         cout << n[i] << "  ";
  732.     }
  733. }
  734.  
  735.  
  736.  
  737. /*...............................................................ZADATAK8..............................................................
  738. Napisati funkciju koja niz od 10 cijelih brojeva sortira u opadajućem ili rastućem poretku. Unos elemenata niza se obavlja u glavnom programu, kao i odabir opcije koja određuje
  739. da li rezultirajući niz treba biti opadajući ili rastući. Obavezno testirati implementiranu funkciju vodeći se datim primjerom ispisa.
  740. (Pojasnjenje: Nema posebnog pojasnjenja jer se radi o najjednostavijem sortiranju uzlazno ili silazno u odnosu na korisnicki izbor.)
  741. */
  742.  
  743. #include <iostream>
  744. #include <cstdlib>
  745. #include <iomanip>
  746. #include <cmath>
  747.  
  748. using namespace std;
  749.  
  750. int const v = 10;
  751.  
  752. void sort(int[], int, int);
  753. void ispis(int[], int);
  754.  
  755. int main() {
  756.     int niz[v], izbor;
  757.     cout << "Unesite elemente niza : " << endl;
  758.     for (int i = 0; i < v; i++)
  759.         cin >> niz[i];
  760.     cout << "Kako zelite sortirati niz (unesite 1 ili 2)\n1. U opadajucem poretku\n2. U rastucem poretku" << endl;
  761.     do{
  762.         cin >> izbor;
  763.     } while (izbor != 1 && izbor != 2);
  764.  
  765.     sort(niz, v, izbor);
  766.     ispis(niz, v);
  767.  
  768.     system("pause>0");
  769.     return 0;
  770. }
  771.  
  772. void sort(int niz[], int v , int izbor) {
  773.     bool promjena;
  774.     do {
  775.         promjena = false;
  776.         for (int i = 1; i < v; i++) {
  777.             if ((izbor == 1 && niz[i - 1] < niz[i]) || (izbor == 2 && niz[i - 1] > niz[i])) {
  778.                 swap(niz[i - 1], niz[i]);
  779.                 promjena = true;
  780.             }
  781.         }
  782.     } while (promjena);
  783. }
  784.  
  785. void ispis(int niz[], int v) {
  786.     for (int i = 0; i < v; i++)
  787.         cout << niz[i] << " ";
  788. }
  789.  
  790.  
  791. /*...........................................................ZADATAK9..................................................................
  792. Uz pomoć matrice realnih brojeva dimenzija 5x7 izraditi program za evidenciju i kalkulaciju uspješnosti vremenskih prognoza (prosječnih dnevnih temperatura) određenog grada.
  793. Redovi matrice predstavljaju meteorologe čije se prognoze unose, dok se kolone odnose na vremenski period od 7 dana. Uz matricu je neophodno krerati globalni jednodimenzionalni niz od
  794. 7 elemenata koji će čuvati stvarna mjerenja temperatura za isti vremenski period, a na osnovu kojeg će se procijeniti uspješnost prognoza pojedinih meteorologa.
  795. Vrijednosti elemenata ovog niza prilikom deklaracije postaviti na: 25.5, 26.8, 21, 32, 35.6, 36, 33.5.
  796. Implementaciju programa uraditi pomoću sljedećih funkcija:
  797. • UnesiPrognoze – funkcija za unos prognoza određenog meteorologa za kompletan period od 7 dana. Vrijednosti prosječnih temperatura moraju biti unutar intervala [-20, 50] °C.
  798. (Pojasnjenje: unose se podaci za samo jedan izabrani red. Tako ce se korisniku omoguciti da unese prognoze za jednog po jednog meteorologa.)
  799. • IzracunajUspjesnost – funkciju koja vraća procentualnu vrijednost uspješnosti prognoza za željenog meteorologa. Prognoza, odnosno prosječna temperatura na određeni dan,
  800. smatra se uspješnom ako od stvarnog mjerenja ne odstupa više od 5 °C. (Pojasnjenje: poredi se podaci iz jednog reda odnosno za jednog meteorologa sa podacima iz posebnog niza koji sadrži
  801. stvarne vrijednosti mjerenja, te ako je razlika manja od +/-5 taj podatak se smatra uspjesnom prognozom. Na kraju treba podjeliti broj uspjesnih prognoza sa 7 koliko ima dana u sedmici i
  802. vratiti procenat uspjesnosti.)
  803. • PronadjiNajuspjesnijegMeteorologa – funkciju koja pronalazi meteorologa sa najtačnijim vremenskim prognozama, odnosno najvećim procentom uspjeha. (Pojasnjenje: Red koji ima
  804. najveci procenat koji se dobije iz prethodno opisane funkcije IzracunajUspjesnost je u stvari red sa najuspjesnijim meteorologom.)  
  805. • PronadjiDanSaNajnizimPrognozama – funkciju koja pronalazi dan koji je imao u prosjeku najnize prognoze. (Pojasnjenje: Naci kolonu sa najnizom aritmetickom sredinom svih svojih
  806. vrijednosti. Nije potrebno porediti sa nizom sa stvarnim temperaturama.)
  807. */
  808.  
  809. #include <iostream>
  810. #include <cstdlib>
  811. #include <iomanip>
  812. #include <cmath>
  813.  
  814. using namespace std;
  815.  
  816.  
  817. const double temp[7] = { 25.5, 26.8, 21, 32, 35.6, 36, 33.5 };
  818. const int r = 5, k = 7;
  819.  
  820. void unos(double[]);
  821. void ispis(double[][k]);
  822. double uspjesnost(double[]);
  823. int najm(double[][k]);
  824. int najdan(double[][k]);
  825.  
  826. int main() {
  827.  
  828.     double niz[r][k] = {};
  829.     int izbor, iz2, iz3;
  830.     do {
  831.         cout << "Za kojeg meteorologa zelite unijeti prognozu ?" << endl;
  832.         do {
  833.             cin >> izbor;
  834.         } while (izbor < 1 || izbor>5);
  835.  
  836.         unos(niz[izbor - 1]);
  837.         cout << "Da li zelite unijeti za jos nekog meteorologa ?" << endl;
  838.         cin >> iz2;
  839.         system("CLS");
  840.     } while (iz2 != 0);
  841.  
  842.     cout << "Za kojeg meteorologa zelite provjeriti uspjesnost ? " << endl;
  843.     do{
  844.     cin >> iz3;
  845.     } while (iz3 < 1 || iz3>5);
  846.     cout << "Uspjesnost za odabranog meteorologa je " << uspjesnost(niz[iz3 - 1]) << "%." << endl;
  847.  
  848.     cout << "Najuspjesniji meteorolog je : " << najm(niz) << endl;
  849.     cout << "Dan sa najnizim temperaturama je : " << najdan(niz) << ". dan" << endl;
  850.     ispis(niz);
  851.  
  852.     system("pause>0");
  853.     return 0;
  854. }
  855.  
  856. void unos(double niz[]) {
  857.     for (int i = 0; i < k; i++)
  858.     {
  859.         cin >> niz[i];
  860.         if (niz[i] > 50 || niz[i] < -20)
  861.             i--;
  862.     }
  863. }
  864.  
  865. void ispis(double niz[][k]) {
  866.     for (int i = 0; i < r; i++)
  867.     {
  868.         for (int j = 0; j < k; j++) {
  869.             cout << setw(7) << niz[i][j];
  870.         }
  871.         cout << endl;
  872.     }
  873. }
  874.  
  875. double uspjesnost(double niz[]) {
  876.     double uspjesnost = 0;
  877.     for (int i = 0; i < k; i++) {
  878.         if (niz[i] > temp[i] - 5 && niz[i] < temp[i] + 5)
  879.             uspjesnost += 100;
  880.     }
  881.     return uspjesnost = uspjesnost/7;
  882. }
  883.  
  884. int najm(double niz[][k]) {
  885.     double naj = uspjesnost(niz[0]);
  886.     int najindex = 1;
  887.     for (int i = 1; i < r; i++) {
  888.         if (uspjesnost(niz[i]) > naj) {
  889.             naj = uspjesnost(niz[i]);
  890.             najindex = i + 1;
  891.         }
  892.     }
  893.     return najindex;
  894. }
  895.  
  896. int najdan(double niz[][k]) {
  897.     int naj =0;
  898.     double art = 0, najart = INT_MAX;
  899.     for (int i = 0; i < k; i++) {
  900.         for (int j = 0; j < r; j++) {
  901.             art += niz[j][i];
  902.         }
  903.         art = art / r;
  904.         if (art < najart) {
  905.             najart = art;
  906.             naj = i + 1;
  907.         }
  908.         art = 0;
  909.     }
  910.     return naj;
  911. }
  912.  
  913.  
  914.  
  915.  
  916.  
  917. /*.............................................................ZADATAK10...............................................................
  918. Napisati funkciju koja kao parametare prima dva niza char recenica[200] i char rijec[10] odnosno rečenicu (niz od najviše 200 karaktera) i riječ (niz od najviše 10 karaktera) te
  919. u nizu recenica[200] pretrazuje i pronalazi sekvencu karaktera unesenih u niz rijec[10]. Radi jednostavnosti rjesenja podrazumjeva se da i recenica i rijec koja se pretrazuje
  920. zavrsavaju tackom. Poslije pronalaska trazene rijeci, pomenutu rijec treba zamijeniti karakterima „FIT“ (Pomoc: Treba voditi racuna koliko karaktera ima rijec koja je pronadjena i
  921. zamjenjena).
  922.  
  923. Npr. ako je data rečenica u nizu recenica[200]:
  924.     "Ja studiram na fakultetu jer zelim biti expert."
  925. i rijec[10]:
  926. „fakultet“,
  927. funkcija je treba pronaci rijec „fakultet“ u recenici i pretvoriti je u „FIT“:
  928.     " Ja studiram na FITu jer zelim biti expert." (ima ukupno manje slova a zadrzan je samo po jedan space izmedju rijeci)
  929.  Obavezno u main funkciji omoguciti unos recenice, zatim trazene rijeci i ispisati novu recenicu poslije zamjene.
  930. */
  931.  
  932. #include <iostream>
  933. #include <cstdlib>
  934. #include <iomanip>
  935. #include <cmath>
  936.  
  937. using namespace std;
  938.  
  939. void ispis(char niz[], int v);
  940. void zamjena(char[], char[], int, int);
  941.  
  942. int main() {
  943.     char recenica[200] = "Ja sam. student faksa.", rijec[10];
  944.     int brojac = 0, brojac2 = 0;
  945.    
  946.     cout << "Unesite recenicu : " << endl;
  947.     do {
  948.     cin >> recenica[brojac++];
  949.  
  950.     } while (recenica[brojac-1] != '.');
  951.    
  952.     cout << "Unesite rijec koju zelite zamjeniti : " << endl;
  953.     do {
  954.         cin >> rijec[brojac2++];
  955.     } while (rijec[brojac2 - 1] != '.');
  956.     zamjena(recenica, rijec, 200, brojac2);
  957.  
  958.     system("pause>0");
  959.     return 0;
  960. }
  961.  
  962. void ispis(char niz[], int v) {
  963.     for (int i = 0; i < v; i++)
  964.         cout << niz[i];
  965. }
  966.  
  967. void zamjena(char recenica[], char rijec[], int v1, int v2) {
  968.     int brojac = 0, brojac2, br = 0;
  969.     char r2[200];
  970.     for (int i = 0; i < v1; i++) {
  971.         brojac2 = i;
  972.         if (recenica[i] == rijec[brojac])
  973.             for (int j = 0; j < v2; j++) {
  974.                 if (recenica[brojac2++] != rijec[brojac++]) {
  975.                     brojac = 0;
  976.                     break;
  977.                 }
  978.             }
  979.         if (brojac == v2) {
  980.             r2[br++] = 'F';
  981.             r2[br++] = 'I';
  982.             r2[br++] = 'T';
  983.             i = i + v2;
  984.             brojac = 0;
  985.         }
  986.  
  987.         r2[br++] = recenica[i];
  988.     }
  989.  
  990.     ispis(r2, br);
  991. }      
  992.  
  993.  
  994. /*...........................................................ZADATAK11.................................................................
  995. Neka je dat 2D niz tipa int dimenzija 5x5. Kreirati, a potom u glavnom programu testirati, sljedeće funkcije:
  996. a)  Funkciju koja vrši generisanje Fibonaccijevih brojeva u 2D nizu dok se niz ne popuni
  997. b)  Funkcija koja ispisuje najveće zajedničke djelitelje brojeva na suprotnim indeksima matrice koristeći Euklidov algoritam, kad se indeksi izjednače petlja se treba prekinuti:
  998. Euklidov algoritam(a,b):
  999. Dok(b>0)
  1000.     p=a;
  1001.     a=b;
  1002.     b = p mod b;
  1003. NZD=a;
  1004. Gdje je 'p' pomoćna varijabla. Suprotni indeksi matrice su matrica[0,0] i matrica[5,5], zatim matrica[0,1] i matrica [5,4] itd .
  1005. Primjer:
  1006. Najveći zajednički djelitelj za brojeve 610 i 34 je 2. Najveći zajednički djelitelj za brojeve 8 i 2584 je 8 itd.
  1007. */
  1008.  
  1009. #include <iostream>
  1010. #include <cstdlib>
  1011. #include <iomanip>
  1012. #include <cmath>
  1013.  
  1014. using namespace std;
  1015.  
  1016. const int v = 5;
  1017.  
  1018. void Unos(int[][v]);
  1019. void Ispis(int[][v]);
  1020. void Euklid(int[][v]);
  1021.  
  1022. int main() {
  1023.  
  1024.     int niz[v][v];
  1025.     Unos(niz);
  1026.     Ispis(niz);
  1027.     Euklid(niz);
  1028.  
  1029.     system("pause>0");
  1030.     return 0;
  1031. }
  1032.  
  1033. void Unos(int niz[][v]) {
  1034.     int prvi = 0, drugi = 1, sljedeci = 0;
  1035.     for (int i = 0; i < v; i++) {
  1036.         for (int j = 0; j < v; j++) {
  1037.             prvi = drugi;
  1038.             drugi = sljedeci;
  1039.             sljedeci = prvi + drugi;
  1040.             niz[j][i] = drugi;
  1041.         }
  1042.     }
  1043. }
  1044.  
  1045. void Ispis(int niz[][v]) {
  1046.     for (int i = 0; i < v; i++) {
  1047.         for (int j = 0; j < v; j++) {
  1048.             cout << niz[i][j] << " ";
  1049.         }
  1050.         cout << endl;
  1051.     }
  1052.     cout << endl;
  1053. }
  1054.  
  1055. void Euklid(int niz[][v]) {
  1056.     int a, b, p, nzd;
  1057.  
  1058.     for (int i = 0; i < v; i++) {
  1059.         for (int j = 0; j < v; j++) {
  1060.  
  1061.             if (i == v / 2 + 1 && j == v / 2 - 1) {
  1062.                 break;
  1063.             }
  1064.  
  1065.             a = niz[i][j];
  1066.             b = niz[v - i - 1][v - j - 1];
  1067.  
  1068.             while (b > 0) {
  1069.                 p = a;
  1070.                 a = b;
  1071.                 b = p % a;
  1072.             }
  1073.             nzd = a;
  1074.             cout << "Najveci zajednicki djelitelj za " << niz[i][j] << " i " << niz[v - i - 1][v - j - 1] << " je " << nzd << endl;
  1075.  
  1076.         }
  1077.     }
  1078. }
  1079.  
  1080.  
  1081. /*.............................................................ZADATAK12...............................................................
  1082. Neka je dat 2D niz tipa int dimenzija 10x10. Kreirati, a potom u glavnom programu testirati, sljedeće funkcije:
  1083. a)  Funkciju koja za vrsi generisanje podataka u 2D nizu na nacin da se u elementu sa indexom [0][0] upise vrijednost 1 a svaki slijedeci element da ima vrijednost prethodnog
  1084. elementa pomnozenog sa 2 kao na slici. Generisanje se prekida ako se desi overflow na varijabli int.
  1085. b)  Funkciju koja popunjenu matricu iz pod-zadatka a) transponuje tako sto joj zamjeni redove i kolone.
  1086. c)  Funkciju koja kao parametar prima pomenuti niz i index kolone te silazno sortira kompletan 2D niz po izabranoj koloni na nacin da se kompletni redovi zamjene prema vrijednosti
  1087. u izabranoj koloni (princip sortiranja po koloni kao u MS Excel tabeli)
  1088. */
  1089.  
  1090. #include <iostream>
  1091. #include <cstdlib>
  1092. #include <iomanip>
  1093. #include <cmath>
  1094.  
  1095. using namespace std;
  1096.  
  1097. const int v = 10;
  1098. void ini(int[][v]);
  1099. void trans(int[][v]);
  1100. void sort(int[][v],int);
  1101. void ispis(int[][v]);
  1102.  
  1103. int main() {
  1104.     int niz[10][10] = {}, izbor;
  1105.  
  1106.     ini(niz);
  1107.     trans(niz);
  1108.     ispis(niz);
  1109.  
  1110.     cout << "Koju kolonu zelite sortirati ?";
  1111.     do
  1112.         cin >> izbor;
  1113.     while (izbor < 1 || izbor > 10);
  1114.  
  1115.     sort(niz, izbor-1);
  1116.     ispis(niz);
  1117.  
  1118.     system("pause>0");
  1119.     return 0;
  1120. }
  1121.  
  1122. void ini(int niz[][v]) {
  1123.     int vr = 1;
  1124.     for (int i = 0; i < v; i++) {
  1125.         for (int j = 0; j < v; j++) {
  1126.             niz[i][j] = vr;
  1127.        
  1128.             vr *= 2;
  1129.             if (vr < 0)
  1130.                 break;
  1131.         }
  1132.     }
  1133. }
  1134.  
  1135. void trans(int niz[][v]) {
  1136.     for (int i = 0; i < v; i++) {
  1137.         for (int j = 0; j < v; j++) {
  1138.             niz[j][i] = niz[i][j];
  1139.         }
  1140.     }
  1141. }
  1142.  
  1143. void ispis(int niz[][v]) {
  1144.     for (int i = 0; i < v; i++) {
  1145.         for (int j = 0; j < v; j++) {
  1146.             cout << setw(10) << niz[i][j];
  1147.         }
  1148.         cout << endl;
  1149.     }
  1150.     cout << endl;
  1151. }
  1152.  
  1153. void sort(int niz[][v], int izbor) {
  1154.     bool promjena = false;
  1155.  
  1156.     do {
  1157.         promjena = false;
  1158.         for (int j = 1; j < v; j++) {
  1159.             if (niz[j-1][izbor] < niz[j][izbor]) {
  1160.                 swap(niz[j-1][izbor], niz[j][izbor]);
  1161.                 promjena = true;
  1162.             }
  1163.         }
  1164.     } while (promjena);
  1165. }
  1166.  
  1167. /*................................................................ZADATAK13............................................................
  1168.  
  1169. Napisati program koji će učitati cijeli broj n (1?n?10), (ukoliko unesena vrijednost nije unutar intervala, učitavanje treba ponavljati sve dok se ne unese ispravna vrijednost) i
  1170. elemente matrice dimenzija n x n te ispisati je li matrica centralno simetrična s obzirom na središnji element. Ako jest, program treba ispisati 1, ako nije, ispisati 0, a ako je broj
  1171. redaka paran broj  (pa nema središnjeg elementa), ispisati -1. Koristiti zasebne funkcije za unos elemenata i provjeru simetričnosti.
  1172. */
  1173.  
  1174. #include <iostream>
  1175. #include <cstdlib>
  1176. #include <iomanip>
  1177. #include <cmath>
  1178.  
  1179. using namespace std;
  1180.  
  1181. void unos(int[][10], int);
  1182. void ispis(int[][10], int);
  1183. int provjera(int[][10], int);
  1184.  
  1185. int main() {
  1186.     int niz[10][10], n;
  1187.  
  1188.     cout << "Unesite n(1-10) : " << endl;
  1189.     do
  1190.         cin >> n;
  1191.     while (n < 1 || n > 10);
  1192.  
  1193.     unos(niz, n);
  1194.     ispis(niz, n);
  1195.     cout << provjera(niz, n);
  1196.  
  1197.     system("pause>0");
  1198.     return 0;
  1199. }
  1200.  
  1201. void unos(int niz[][10], int v) {
  1202.     cout << "Unesite niz : " << endl;
  1203.     for (int i = 0; i < v; i++) {
  1204.         for (int j = 0; j < v; j++)
  1205.             cin >> niz[i][j];
  1206.     }
  1207. }
  1208.  
  1209. void ispis(int niz[][10], int v) {
  1210.     for (int i = 0; i < v; i++) {
  1211.         for (int j = 0; j < v; j++)
  1212.             cout << niz[i][j] << " ";
  1213.         cout << endl;
  1214.     }  
  1215.     cout << endl;
  1216. }
  1217.  
  1218. int provjera(int niz[][10], int v){
  1219.     if (v % 2 == 0)
  1220.         return -1;
  1221.    
  1222.     for (int i = 0; i < v; i++) {
  1223.         for (int j = 0; j < v; j++) {
  1224.             if (niz[i][j] != niz[v - i - 1][v - j - 1])
  1225.                 return 0;
  1226.         }
  1227.     }
  1228.     return 1;
  1229. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement