Advertisement
amermo

TP - septembarski 2014.

Apr 16th, 2015
291
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.43 KB | None | 0 0
  1. Zadatak 2:
  2.  
  3. #include <iostream>
  4. #include <vector>
  5. #include <stdexcept>
  6.  
  7. //Funkcija koja provjerava da li je zadovoljen uvjet da svaki element vektora B može biti indeks elementa vektora A
  8. bool TestirajVektor(std::vector<double> A, std::vector<int> B)
  9. {
  10.     for (unsigned int i(0); i < B.size(); i++)
  11.         if (B[i] > int(A.size()) - 1)
  12.             return false;
  13.     return true;
  14.     //Ako je neki element vektora B veći od broja elemenata vektora A - 1 vrati false
  15.     //Zašto A.size()-1? Zbog toga što indeksiranje ide 0, 1, 2, 3... dakle zadnji element ima indeks A.size()-1
  16. }
  17.  
  18. std::vector<double> ElementiSIndeksom(std::vector<double> A, std::vector<int> B)
  19. {
  20.     if (!TestirajVektor(A, B)) throw std::range_error("Greska!"); //Bacamo izuzetak
  21.     std::vector<double> NoviVektor; //Trebamo vratiti novi
  22.     for (unsigned int i(0); i < B.size(); i++)
  23.         NoviVektor.push_back(A[B[i]]); //U novi vektor ubacujemo elemente iz vektora A sa indeksom B[i]
  24.     return NoviVektor;
  25. }
  26.  
  27. int main()
  28. {
  29.     system("pause"); //Samo skloniti ovo u CodeBlocksu
  30.     return 0;
  31. }
  32.  
  33. Zadatak 3:
  34.  
  35. #include <iostream>
  36. #include <vector>
  37. #include <stdexcept>
  38.  
  39. typedef std::vector<std::vector<double>> Matrica;
  40.  
  41. bool ImaLiFormuMatrice(const Matrica &a)
  42. {
  43.     for (unsigned int i(0); i < a.size(); i++)
  44.         if (a[i].size() != a[0].size())
  45.             return false;
  46.     return true;
  47.     //Pošto sve poredimo sa prvim redom, ako bar jedan red nema isti broj elemenata kao prvi red vrati false
  48. }
  49.  
  50. bool DaLiJeGornjaTrougaona(const Matrica &a)
  51. {
  52.     if (!ImaLiFormuMatrice(a)) throw std::domain_error("Parametar nema formu matrice");
  53.     for (unsigned int i(0); i < a.size(); i++)
  54.         for (unsigned int j(0); j < i; j++)
  55.             if (a[i][j] != 0)
  56.                 return false;
  57.     return true;
  58.     //Krećemo se ispod dijagonale (ne uključujući) i gledamo da li je bar jedan element različit od 0, ako jeste matrica nije trougaona
  59.     //Ako se izvrši čitava vanjska for petlja bez da ijednom vrati false, matrica je trougaona
  60. }
  61.  
  62. int main()
  63. {
  64.     system("pause"); //Skloniti u CodeBlocksu
  65.     return 0;
  66. }
  67.  
  68. Zadatak 4:
  69.  
  70. #include <iostream>
  71. #include <string>
  72. #include <cctype>
  73.  
  74. void TransformirajString(std::string &s)
  75. {
  76.     for (unsigned int i(0); i < s.length(); i++)
  77.     {
  78.         while (s.at(i) == ' ' && i < int(s.length()) - 1) //Ako se prije riječi nalaze neki razmaci treba ih preskočiti
  79.             i++;
  80.         s[i] = toupper(s.at(i)); //Sigurno smo sada naišli na početak riječi, pretvori znak u veliko slovo
  81.         while (s.at(i) != ' ' && i < int(s.length()) - 1)  //Sada preskači sva ostala slova
  82.             i++;
  83.     }
  84.     //Stavili smo da while ide do s.length()-1 zbog toga što zadnji znak ako zadovolji uslov da li razmaka ili slova, otićemo van opsega što nije dozvoljeno
  85. }
  86.  
  87. int main()
  88. {
  89.     std::string s{ "  Dobio   sam 25   maraka   " };
  90.     TransformirajString(s);
  91.     std::cout << s << std::endl;
  92.     system("pause"); //Skloniti u CodeBlocksu
  93.     return 0;
  94. }
  95.  
  96. Zadatak 5:
  97.  
  98. //Nisam siguran da li sam dobro skontao postavku
  99. #include <iostream>
  100. #include <list>
  101.  
  102. std::list<double> VratiListu(double F(double), double xmin, double xmax, double dx)
  103. {
  104.     std::list<double> Lista;
  105.     for (int i(0); i <= xmax; i++)
  106.         Lista.push_back(F(xmin + i*dx));
  107.     return Lista;
  108. }
  109.  
  110. int main()
  111. {
  112.     std::list<double> Lista(VratiListu([](double x) {return 3 * x*x - 5; }, 0, 10, 0.1));
  113.     for (auto &x : Lista)
  114.         std::cout << x << " ";
  115.     std::cout << std::endl;
  116.     system("pause"); //Skloniti u CodeBlocksu
  117.     return 0;
  118. }
  119.  
  120. Zadatak 6:
  121.  
  122. #include <iostream>
  123. #include <type_traits>
  124. #include <list>
  125.  
  126. template <typename IterTip1, typename IterTip2>
  127. auto SkalarniProdukt(IterTip1 Pocetak1, IterTip1 Kraj, IterTip2 Pocetak2) -> typename std::remove_reference<decltype(*Pocetak1 + *Pocetak2)>::type
  128. {
  129.     decltype(*Pocetak1 + *Pocetak2) Produkt(0);
  130.     for (; Pocetak1 != Kraj; Pocetak1++, Pocetak2++)
  131.         Produkt += *Pocetak1 * *Pocetak2;
  132.     return Produkt;
  133. }
  134.  
  135. int main()
  136. {
  137.     std::list<int> lista1{ 1, 2, 3, 4, 5 }, lista2{ 1, 2, 3, 4, 5 };
  138.     std::cout << SkalarniProdukt(lista1.begin(), lista1.end(), lista2.begin()) << std::endl;
  139.     system("pause");
  140.     return 0;
  141. }
  142.  
  143. Zadatak 7:
  144.  
  145. #include <iostream>
  146. #include <algorithm>
  147.  
  148. int main()
  149. {
  150.     //Jedino što ovdje moramo uraditi je zarobiti n, jer njega funkcija ne "vidi", jer je u njenom "okruženju"
  151.     int n;
  152.     std::cout << "Unesite n: ";
  153.     std::cin >> n;
  154.     int niz[10] {1, 15, 305, 32, 28, 490, 329, 999, 339, 10};
  155.     std::cout << std::count_if(std::begin(niz), std::end(niz), [n](int x) {int suma(0); while (x > 0) { suma += x % 10; x /= 10; } return suma > n; }) << std::endl;
  156.     system("pause"); //Skloniti u CodeBlocksu
  157.     return 0;
  158. }
  159.  
  160. Zadatak 8:
  161.  
  162. #include <iostream>
  163.  
  164. template <typename Tip>
  165. void Alociraj(Tip **&a, Tip m, Tip n, Tip v, bool mod)
  166. {
  167.     if (mod)
  168.     {
  169.         try
  170.         {
  171.             a = new Tip*[m];
  172.             a[0] = new Tip[m*n];
  173.             for (int i(1); i < m; i++)
  174.                 a[i] = a[i - 1] + n;
  175.             for (int i(0); i < m; i++)
  176.                 for (int j(0); j < n; j++)
  177.                     a[i][j] = v;
  178.         }
  179.         catch (std::bad_alloc)
  180.         {
  181.             if (a != nullptr)
  182.             {
  183.                 delete[] a;
  184.                 a = nullptr;
  185.             }
  186.             throw;
  187.         }
  188.     }
  189.     else
  190.     {
  191.         try
  192.         {
  193.             a = new Tip*[m];
  194.             for (int i(0); i < m; i++)
  195.                 a[i] = nullptr;
  196.             for (int i(0); i < m; i++)
  197.                 a[i] = new Tip[n];
  198.             for (int i(0); i < m; i++)
  199.                 for (int j(0); j < n; j++)
  200.                     a[i][j] = v;
  201.         }
  202.         catch (std::bad_alloc)
  203.         {
  204.             if (a != nullptr)
  205.             {
  206.                 for (int i(0); i < m; i++)
  207.                     delete[] a[i];
  208.                 delete[] a;
  209.                 a = nullptr;
  210.             }
  211.             throw;
  212.         }
  213.     }
  214. }
  215.  
  216.  
  217. int main()
  218. {
  219.     system("pause"); //Skloniti u CodeBlocks
  220.     return 0;
  221. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement