Advertisement
Guest User

Untitled

a guest
Jun 17th, 2019
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.89 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. template<class T>
  6. class tablica
  7. {
  8.     T* tab;
  9.     unsigned rozmiar;
  10. public:
  11.     tablica(unsigned wielkosc) : tab(nullptr), rozmiar(wielkosc)
  12.     {
  13.         tab = new T[rozmiar];
  14.  
  15.         for(unsigned i = 0; i < rozmiar; ++i)
  16.             tab[i] = 0;
  17.     }
  18.  
  19.     tablica(unsigned wielkosc, T wartosc) : tab(nullptr), rozmiar(wielkosc)
  20.     {
  21.         tab = new T[rozmiar];
  22.  
  23.         for(unsigned i = 0; i < rozmiar; ++i)
  24.             tab[i] = wartosc;
  25.     }
  26.  
  27.     ~tablica()
  28.     {
  29.         cout << "usuwam tablice" << endl;
  30.         delete[] tab;
  31.     }
  32.  
  33.     int znajdz_pozycje(T wartosc)
  34.     {
  35.         for(unsigned i=0; i<rozmiar; i++)
  36.         {
  37.             if(tab[i]==wartosc)
  38.             {
  39.                 return i;
  40.             }
  41.         }
  42.         return -1;
  43.     }
  44.  
  45.     void dodaj_wartosc(T wartosc)
  46.     {
  47.         T zastepcza[rozmiar+1];
  48.  
  49.         for(unsigned i=0; i<rozmiar; i++)
  50.         {
  51.             zastepcza[i]=tab[i];
  52.         }
  53.         zastepcza[rozmiar]=wartosc;
  54.         delete [] tab;
  55.         ++rozmiar;
  56.         tab = new int[rozmiar];
  57.         for(unsigned i=0; i<rozmiar; i++)
  58.         {
  59.             tab[i]=zastepcza[i];
  60.         }
  61.     }
  62.  
  63.     void sortuj(bool rosnaco)
  64.     {
  65.         for(unsigned i=0; i<rozmiar; i++)
  66.         {
  67.             for(unsigned j=0; i+j+1<rozmiar; j++)
  68.             {
  69.                 if(rosnaco && tab[j]>tab[j+1])
  70.                     swap(tab[j],tab[j+1]);
  71.                 if(!rosnaco && tab[j]<tab[j+1])
  72.                     swap(tab[j],tab[j+1]);
  73.             }
  74.         }
  75.     }
  76.  
  77.     void usun_pozycje(unsigned pozycja)
  78.     {
  79.         T zastepcza[rozmiar-1];
  80.         for(unsigned i=0; i<pozycja; i++)
  81.         {
  82.             zastepcza[i]=tab[i];
  83.         }
  84.         for(unsigned i=pozycja+1; i<rozmiar; i++)
  85.         {
  86.             zastepcza[i-1]=tab[i];
  87.         }
  88.         delete [] tab;
  89.         --rozmiar;
  90.         tab=new T[rozmiar];
  91.         for(unsigned i=0; i<rozmiar; i++)
  92.         {
  93.             tab[i]=zastepcza[i];
  94.         }
  95.     }
  96.  
  97.     void usun_wartosc(T wartosc)
  98.     {
  99.         while(ile_powtorzen(wartosc) > 0)
  100.         {
  101.             usun_pozycje(znajdz_pozycje(wartosc));
  102.         }
  103.     }
  104.  
  105.     void wypisz()
  106.     {
  107.         for(unsigned i=0; i<rozmiar; i++)
  108.         {
  109.             cout<<tab[i];
  110.             cout<<" ";
  111.         }
  112.         cout<<endl;
  113.     }
  114.  
  115.     void zmien_rozmiar(unsigned ile)
  116.     {
  117.         if(ile==rozmiar)
  118.             return;
  119.         T zastepcza[ile];
  120.         if(ile<rozmiar)
  121.         {
  122.             for(unsigned i=0; i<ile; i++)
  123.             {
  124.                 zastepcza[i]=tab[i];
  125.             }
  126.             delete [] tab;
  127.             tab= new T[ile];
  128.             for(unsigned i=0; i<ile; i++)
  129.             {
  130.                 tab[i]=zastepcza[i];
  131.             }
  132.         }
  133.         else
  134.         {
  135.             for(unsigned i=0; i<rozmiar; i++)
  136.             {
  137.                 zastepcza[i]=tab[i];
  138.             }
  139.             delete [] tab;
  140.             tab= new T[ile];
  141.             for(unsigned i=0; i<rozmiar; i++)
  142.             {
  143.                 tab[i]=zastepcza[i];
  144.             }
  145.             for(unsigned i=rozmiar; i<ile; i++)
  146.             {
  147.                 tab[i]=0;
  148.             }
  149.         }
  150.  
  151.         rozmiar = ile;
  152.  
  153.     }
  154.  
  155.     void zmien_wartosc(unsigned pozycja, T wartosc)
  156.     {
  157.         if(pozycja < rozmiar)
  158.             tab[pozycja] = wartosc;
  159.     }
  160.  
  161.     unsigned get_rozmiar()
  162.     {
  163.         return rozmiar;
  164.     }
  165.  
  166.     unsigned ile_powtorzen(T wartosc)
  167.     {
  168.         unsigned ile=0;
  169.         for(unsigned i=0; i<rozmiar; i++)
  170.         {
  171.             if(tab[i]==wartosc)
  172.                 ile++;
  173.         }
  174.         return ile;
  175.     }
  176.  
  177.     T odczytaj_wartosc(unsigned pozycja)
  178.     {
  179.         if(pozycja<rozmiar)
  180.             return tab[pozycja];
  181.         return 0;
  182.     }
  183.  
  184.     T& operator[](size_t nr)
  185.     {
  186.         return tab[nr];
  187.     }
  188. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement