Advertisement
MeehoweCK

Untitled

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