MeehoweCK

Untitled

Oct 23rd, 2020
806
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 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] = rand() % 100;
  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. class Tablica
  39. {
  40.     friend ostream& operator<<(ostream&, const Tablica&);
  41. private:
  42.     int* dane;
  43.     unsigned rozmiar;
  44. public:
  45.     Tablica();          // tworzy pusty obiekt (pustą tablicę)
  46.     ~Tablica();
  47.     explicit Tablica(unsigned);  // tworzy tablicę o podanym rozmiarze
  48.     void dodaj_element(int);
  49.     void wypisz() const;
  50.     int get_wartosc(unsigned) const;
  51.     void set_wartosc(unsigned, int);
  52.     unsigned get_rozmiar() const;
  53.     void clear();
  54.     void zmien_rozmiar(unsigned);
  55.     int& operator[](unsigned el) { return dane[el]; }
  56. };
  57.  
  58. Tablica::Tablica() : dane(nullptr), rozmiar(0) {}
  59.  
  60. /*
  61. Tablica::Tablica()
  62. {
  63.     dane = nullptr;
  64.     rozmiar = 0;
  65. }
  66. */
  67.  
  68. Tablica::Tablica(unsigned size) : dane(new int[size]), rozmiar(size)
  69. {
  70.     for(unsigned i = 0; i < size; ++i)
  71.         dane[i] = 0;
  72. }
  73.  
  74. void Tablica::dodaj_element(int num)
  75. {
  76.     //1.
  77.     int* temp = new int[rozmiar];
  78.  
  79.     //2.
  80.     for(unsigned i = 0; i < rozmiar; ++i)
  81.         temp[i] = dane[i];
  82.  
  83.     //3.
  84.     delete[] dane;
  85.  
  86.     //4.
  87.     dane = new int[rozmiar + 1];
  88.  
  89.     //5.
  90.     for(unsigned i = 0; i < rozmiar; ++i)
  91.     {
  92.         dane[i] = temp[i];
  93.     }
  94.  
  95.     //6.
  96.     delete[] temp;
  97.  
  98.     //7.
  99.     dane[rozmiar] = num;
  100.  
  101.     rozmiar++;
  102. }
  103.  
  104. void Tablica::wypisz() const
  105. {
  106.     for(unsigned i = 0; i < rozmiar; i++)
  107.     {
  108.         cout << dane[i] << " ";
  109.     }
  110.     cout << endl;
  111. }
  112.  
  113. Tablica::~Tablica()
  114. {
  115.     delete[] dane;
  116.     cout << "Zniszczono tablice";
  117. }
  118.  
  119. int Tablica::get_wartosc(unsigned nr) const
  120. {
  121.     return dane[nr];
  122. }
  123.  
  124. void Tablica::set_wartosc(unsigned index, int num)
  125. {
  126.     dane[index] = num;
  127. }
  128.  
  129. unsigned Tablica::get_rozmiar() const
  130. {
  131.     return rozmiar;
  132. }
  133.  
  134. void Tablica::clear()
  135. {
  136.     delete[] dane;
  137.     rozmiar = 0;
  138. }
  139.  
  140. void Tablica::zmien_rozmiar(unsigned newSize)
  141. {
  142.     if(newSize == rozmiar)
  143.         return;
  144.  
  145.     if(newSize > rozmiar)
  146.     {
  147.  
  148.         int* temp = new int[rozmiar];
  149.  
  150.         for(unsigned i = 0; i < rozmiar; ++i)
  151.         {
  152.             temp[i] = dane[i];
  153.         }
  154.  
  155.         delete[] dane;
  156.  
  157.         dane = new int[newSize];
  158.  
  159.         for(unsigned i = 0; i < rozmiar; ++i)
  160.         {
  161.             dane[i] = temp[i];
  162.         }
  163.  
  164.         delete[] temp;
  165.  
  166.         for(unsigned i = rozmiar; i < newSize; ++i)
  167.         {
  168.             dane[i] = 0;
  169.         }
  170.  
  171.         rozmiar = newSize;
  172.     }
  173.  
  174.     else
  175.     {
  176.         int* temp = new int[newSize];
  177.  
  178.         for(unsigned i = 0; i < newSize; ++i)
  179.         {
  180.             temp[i] = dane[i];
  181.         }
  182.  
  183.         delete[] dane;
  184.  
  185.         dane = new int[newSize];
  186.  
  187.         for(unsigned i = 0; i < newSize; ++i)
  188.         {
  189.             dane[i] = temp[i];
  190.         }
  191.  
  192.         delete[] temp;
  193.  
  194.         rozmiar = newSize;
  195.     }
  196. }
  197.  
  198. ostream& operator<<(ostream& strumien, const Tablica& obiekt)
  199. {
  200.     for(unsigned i = 0; i < obiekt.rozmiar; ++i)
  201.         strumien << obiekt.dane[i] << '\t';
  202.     return strumien;
  203. }
RAW Paste Data