MeehoweCK

Untitled

Oct 23rd, 2020
828
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // main.cpp
  2. #include <iostream>
  3. #include <cstdlib>
  4. #include <ctime>
  5. #include "tablica.hpp"
  6.  
  7. using namespace std;
  8.  
  9. int main()
  10. {
  11.     Tablica<double> tablica(5);     // tworzy tablicę pięcioelementową
  12.     tablica.wypisz();
  13.     tablica.zmien_rozmiar(10);
  14.     tablica.wypisz();
  15.     tablica.zmien_rozmiar(7);
  16.  
  17.     srand(static_cast<unsigned>(time(nullptr)));
  18.  
  19.     const unsigned rozmiar = tablica.get_rozmiar();
  20.     for(unsigned i = 0; i < rozmiar; ++i)
  21.     {
  22.         tablica[i] = 1.0 * rand() / RAND_MAX;
  23.     }
  24.     cout << tablica << endl;
  25.  
  26.     tablica.zmien_rozmiar(15);
  27.  
  28.     cout << tablica << endl;
  29.  
  30.     return 0;
  31. }
  32.  
  33. // tablica.hpp
  34. #include <iostream>
  35.  
  36. using namespace std;
  37.  
  38. template <class T>
  39. class Tablica
  40. {
  41.     //friend ostream& operator<<(ostream&, const Tablica<T>&);
  42. private:
  43.     T* dane;
  44.     unsigned rozmiar;
  45. public:
  46.     Tablica();          // tworzy pusty obiekt (pustą tablicę)
  47.     ~Tablica();
  48.     explicit Tablica(unsigned);  // tworzy tablicę o podanym rozmiarze
  49.     void dodaj_element(T);
  50.     void wypisz() const;
  51.     T get_wartosc(unsigned) const;
  52.     void set_wartosc(unsigned, T);
  53.     unsigned get_rozmiar() const;
  54.     void clear();
  55.     void zmien_rozmiar(unsigned);
  56.     T& operator[](unsigned el) { return dane[el]; }
  57. };
  58.  
  59. template <class T>
  60. Tablica<T>::Tablica() : dane(nullptr), rozmiar(0) {}
  61.  
  62. /*
  63. Tablica::Tablica()
  64. {
  65.     dane = nullptr;
  66.     rozmiar = 0;
  67. }
  68. */
  69.  
  70. template <class T>
  71. Tablica<T>::Tablica(unsigned size) : dane(new T[size]), rozmiar(size)
  72. {
  73.     for(unsigned i = 0; i < size; ++i)
  74.         dane[i] = 0;
  75. }
  76.  
  77. template <class T>
  78. void Tablica<T>::dodaj_element(T num)
  79. {
  80.     //1.
  81.     T* temp = new T[rozmiar];
  82.  
  83.     //2.
  84.     for(unsigned i = 0; i < rozmiar; ++i)
  85.         temp[i] = dane[i];
  86.  
  87.     //3.
  88.     delete[] dane;
  89.  
  90.     //4.
  91.     dane = new T[rozmiar + 1];
  92.  
  93.     //5.
  94.     for(unsigned i = 0; i < rozmiar; ++i)
  95.     {
  96.         dane[i] = temp[i];
  97.     }
  98.  
  99.     //6.
  100.     delete[] temp;
  101.  
  102.     //7.
  103.     dane[rozmiar] = num;
  104.  
  105.     rozmiar++;
  106. }
  107.  
  108. template <class T>
  109. void Tablica<T>::wypisz() const
  110. {
  111.     for(unsigned i = 0; i < rozmiar; i++)
  112.     {
  113.         cout << dane[i] << " ";
  114.     }
  115.     cout << endl;
  116. }
  117.  
  118. template <class T>
  119. Tablica<T>::~Tablica()
  120. {
  121.     delete[] dane;
  122.     cout << "Zniszczono tablice";
  123. }
  124.  
  125. template <class T>
  126. T Tablica<T>::get_wartosc(unsigned nr) const
  127. {
  128.     return dane[nr];
  129. }
  130.  
  131. template <class T>
  132. void Tablica<T>::set_wartosc(unsigned index, T num)
  133. {
  134.     dane[index] = num;
  135. }
  136.  
  137. template <class T>
  138. unsigned Tablica<T>::get_rozmiar() const
  139. {
  140.     return rozmiar;
  141. }
  142.  
  143. template <class T>
  144. void Tablica<T>::clear()
  145. {
  146.     delete[] dane;
  147.     rozmiar = 0;
  148. }
  149.  
  150. template <class T>
  151. void Tablica<T>::zmien_rozmiar(unsigned newSize)
  152. {
  153.     if(newSize == rozmiar)
  154.         return;
  155.  
  156.     if(newSize > rozmiar)
  157.     {
  158.  
  159.         T* temp = new T[rozmiar];
  160.  
  161.         for(unsigned i = 0; i < rozmiar; ++i)
  162.         {
  163.             temp[i] = dane[i];
  164.         }
  165.  
  166.         delete[] dane;
  167.  
  168.         dane = new T[newSize];
  169.  
  170.         for(unsigned i = 0; i < rozmiar; ++i)
  171.         {
  172.             dane[i] = temp[i];
  173.         }
  174.  
  175.         delete[] temp;
  176.  
  177.         for(unsigned i = rozmiar; i < newSize; ++i)
  178.         {
  179.             dane[i] = 0;
  180.         }
  181.  
  182.         rozmiar = newSize;
  183.     }
  184.  
  185.     else
  186.     {
  187.         T* temp = new T[newSize];
  188.  
  189.         for(unsigned i = 0; i < newSize; ++i)
  190.         {
  191.             temp[i] = dane[i];
  192.         }
  193.  
  194.         delete[] dane;
  195.  
  196.         dane = new T[newSize];
  197.  
  198.         for(unsigned i = 0; i < newSize; ++i)
  199.         {
  200.             dane[i] = temp[i];
  201.         }
  202.  
  203.         delete[] temp;
  204.  
  205.         rozmiar = newSize;
  206.     }
  207. }
  208.  
  209. template <class T>
  210. ostream& operator<<(ostream& strumien, const Tablica<T>& obiekt)
  211. {
  212.     for(unsigned i = 0; i < obiekt.get_rozmiar(); ++i)
  213.         strumien << obiekt.get_wartosc(i) << '\t';
  214.     return strumien;
  215. }
RAW Paste Data