Advertisement
eniodordan

[OOP] LV4 - Zadaci + Analiza

Nov 21st, 2018
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.08 KB | None | 0 0
  1. // Zadaci
  2. // 1. zadatak
  3. template <typename Type>
  4. void swap(Type *xp, Type *yp)
  5. {
  6.     Type temp = *xp;
  7.     *xp = *yp;
  8.     *yp = temp;
  9. }
  10.  
  11. template <typename Type>
  12. void sort(Type arr[], int n) {
  13.     int i, j;
  14.     for (i = 0; i < n - 1; i++) {
  15.         for (j = 0; j < n - i - 1; j++) {
  16.             if (arr[j] > arr[j + 1]) {
  17.                 swap(&arr[j], &arr[j + 1]);
  18.             }  
  19.         }
  20.     }
  21. }
  22.  
  23. template <typename Type>
  24. void print(Type arr[], int n) {
  25.     int i;
  26.     for (i = 0; i < n; i++) {
  27.         cout << arr[i] << "\t";
  28.     }
  29.     cout << endl;
  30. }
  31.  
  32. int main() {
  33.     int i;
  34.     std::srand((unsigned int)std::time(0));
  35.  
  36.     int *a = new int[10];
  37.     for (i = 0; i < 10; i++) {
  38.         a[i] = (int)rand() * 10 / (int)RAND_MAX;
  39.     }
  40.     sort(a, 10);
  41.     print(a, 10);
  42.  
  43.     double *b = new double[10];
  44.     for (i = 0; i < 10; i++) {
  45.         b[i] = (double)rand() * 10 / (double)RAND_MAX;
  46.     }
  47.     sort(b, 10);
  48.     print(b, 10);
  49.  
  50.     char *c = new char[10];
  51.     for (i = 0; i < 10; i++) {
  52.         c[i] = (char)rand() * 10 / (char)RAND_MAX;
  53.     }
  54.     sort(c, 10);
  55.     print(c, 10);
  56.  
  57.     delete[] a;
  58.     delete[] b;
  59.     delete[] c;
  60.  
  61.     return 0;
  62. }
  63.  
  64. // 2. zadatak
  65. template <typename Type>
  66. class Stack {
  67. private:
  68.     Type* mData;
  69.     int mSize;
  70.     int mTop;
  71. public:
  72.     Stack(int size) : mSize(size) {
  73.         mTop = -1;
  74.         mData = new Type[mSize];
  75.     }
  76.  
  77.     Stack(const Stack& ref) {
  78.         mTop = ref.mTop;
  79.         mSize = ref.mSize;
  80.         mData = new Type[mSize];
  81.         for (int i = 0; i < mSize; i++) {
  82.             mData[i] = ref.mData[i];
  83.         }
  84.     }
  85.  
  86.     ~Stack() {
  87.         delete[] mData;
  88.     }
  89.  
  90.     Type& operator[](int idx) {
  91.         return mData[idx];
  92.     }
  93.  
  94.     Stack& operator=(const Stack& ref) {
  95.         if (this != &ref) {
  96.             mSize = ref.mSize;
  97.             mData = new Type[mSize];
  98.             for (int i = 0; i < mSize; i++) {
  99.                 mData[i] = ref.mData[i];
  100.             }
  101.         }
  102.         return *this;
  103.     }
  104.  
  105.     bool push(const Type& x) {
  106.         if (mTop >= (mSize - 1)) {
  107.             cout << "Stack Overflow";
  108.             return false;
  109.         }
  110.         else {
  111.             mData[++mTop] = x;
  112.             cout << x << " pushed into stack\n";
  113.             return true;
  114.         }
  115.     }
  116.  
  117.     Type pop() {
  118.         if (mTop < 0) {
  119.             cout << "Stack Underflow";
  120.             return 0;
  121.         }
  122.         else {
  123.             Type x = mData[mTop--];
  124.             return x;
  125.         }
  126.     }
  127.  
  128.     void top() {
  129.         cout << mData[mTop] << endl;
  130.     }
  131. };
  132.  
  133.  
  134. int main() {
  135.     Stack<int> first(10);
  136.     Stack<double> second(7);
  137.     Stack<int> third = first;
  138.     std::srand((unsigned int)time(0));
  139.     for (int i = 0; i < 10; i++) {
  140.         int random = (int)rand() * 10 / (int)RAND_MAX;
  141.         first.push(random);
  142.     }
  143.     cout << first.pop() << endl;
  144.     first.top();
  145.  
  146.     for (int i = 0; i < 7; i++) {
  147.         double random = (double)rand() * 10 / (double)RAND_MAX;
  148.         second.push(random);
  149.     }
  150.     cout << second.pop() << endl;
  151.     second.top();
  152.  
  153.     for (int i = 0; i < 10; i++) {
  154.         int random = (int)rand() * 10 / (int)RAND_MAX;
  155.         third.push(random);
  156.     }
  157.     cout << third.pop() << endl;
  158.     third.top();
  159.  
  160.     return 0;
  161. }
  162.  
  163. // Analiza
  164. // 1. Napiši predloške funkcija Max() i Min() koje kao parametre primaju
  165. // jednodimenzionalna polja i broj elemenata u polju.Funkcije pronalaze i kao
  166. // rezultat vraćaju najveći odnosno najmanji element polja.Funkciju testirati na
  167. // tri dinamički alocirana polja različitog tipa.
  168.  
  169. template <typename Type>
  170. Type Max(Type arr[], int n) {
  171.     int i;
  172.     Type max = arr[0];
  173.     for (i = 0; i < n; i++) {
  174.         if (arr[i] > max) {
  175.             max = arr[i];
  176.         }
  177.     }
  178.  
  179.     return max;
  180. }
  181.  
  182. template <typename Type>
  183. Type Min(Type arr[], int n) {
  184.     int i;
  185.     Type min = arr[0];
  186.     for (i = 0; i < n; i++) {
  187.         if (arr[i] < min) {
  188.             min = arr[i];
  189.         }
  190.     }
  191.  
  192.     return min;
  193. }
  194.  
  195. int main() {
  196.     int i;
  197.  
  198.     int *a = new int[10];
  199.     for (i = 0; i < 10; i++) {
  200.         a[i] = (int)rand() * 10 / (int)RAND_MAX;
  201.     }
  202.     cout << "Max: " << Max(a, 10) << "\tMin: " << Min(a, 10) << endl;
  203.  
  204.     double *b = new double[10];
  205.     for (i = 0; i < 10; i++) {
  206.         b[i] = (double)rand() * 10 / (double)RAND_MAX;
  207.     }
  208.     cout << "Max: " << Max(b, 10) << "\tMin: " << Min(b, 10) << endl;
  209.  
  210.     char *c = new char[10];
  211.     for (i = 0; i < 10; i++) {
  212.         c[i] = (char)rand() * 10 / (char)RAND_MAX;
  213.     }
  214.     cout << "Max: " << Max(c, 10) << "\tMin: " << Min(c, 10) << endl;
  215.  
  216.     return 0;
  217. }
  218.  
  219. // 2. Napiši predložak klase UređeniPar() koja predstavlja uređeni par dvaju
  220. // objekata.Podatkovni članovi su dva dinamički alocirana objekta, a klasa mora
  221. // imati konstruktore(default, parametarski i kopije), destruktor, operator = i
  222. // operatore usporedbe.U glavnoj funkciji testirati funkcionalnost klase za tri
  223. // različita tipa podatka.
  224.  
  225. template <typename Type>
  226. class OrderedPair {
  227. private:
  228.     Type *mFirst;
  229.     Type *mSecond;
  230. public:
  231.     OrderedPair() : mFirst(new Type()), mSecond(new Type()) {}
  232.  
  233.     OrderedPair(Type First, Type Second) : mFirst(new Type(First)), mSecond(new Type(Second)) {}
  234.  
  235.     OrderedPair(const OrderedPair& Ref) {
  236.         mFirst = new Type();
  237.         mSecond = new Type();
  238.         *mFirst = *Ref.mFirst;
  239.         *mSecond = *Ref.mSecond;
  240.     }
  241.  
  242.     ~OrderedPair() {
  243.         delete mFirst;
  244.         delete mSecond;
  245.     }
  246.  
  247.     OrderedPair& operator= (const OrderedPair& Ref) {
  248.         if (&Ref == this) return *this;
  249.  
  250.         *mFirst = *Ref.mFirst;
  251.         *mSecond = *Ref.mSecond;
  252.         return *this;
  253.     }
  254.  
  255.     friend bool operator== (const OrderedPair& lhs, const OrderedPair& rhs)
  256.     {
  257.         return *lhs.mFirst == *rhs.mFirst && *lhs.mSecond == *rhs.mSecond;
  258.     }
  259.  
  260.     friend bool operator!= (const OrderedPair& lhs, const OrderedPair& rhs)
  261.     {
  262.         return !operator==(lhs, rhs);
  263.     }
  264. };
  265.  
  266.  
  267. int main()
  268. {
  269.     OrderedPair<double> A(5.123, 6.187);
  270.     OrderedPair<double> B(A);
  271.  
  272.     cout << (A == B) << endl;
  273.  
  274.     OrderedPair<int> C(1, 6);
  275.     OrderedPair<int> D(-6, 8);
  276.     OrderedPair<int> E;
  277.     E = D;
  278.  
  279.     cout << (D != E) << endl;
  280.  
  281.     OrderedPair<char> F;
  282.     OrderedPair<char> G('z', 'v');
  283.     F = G;
  284.  
  285.     cout << (F == G) << endl;
  286.  
  287.     return 0;
  288. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement