GoralWMoro

Untitled

Feb 12th, 2020
161
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.85 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <cmath>
  4. #include <sstream>
  5.  
  6. using namespace std;
  7. class BinaryVector{
  8. private:
  9.     int size_array;
  10.     vector<bool> tablica;
  11.  
  12. public:
  13.     BinaryVector(int size){
  14.         this->size_array = size;
  15.         for(int i = 0; i < size; i++){
  16.             tablica.push_back(false);
  17.         }
  18.     }
  19.  
  20.     BinaryVector(int size, int value){
  21.         this->size_array = size;
  22.  
  23.         for (int i=size-1;i>=0; i--){
  24.             (value&(1<<i)?tablica.push_back(true):tablica.push_back(false));
  25.         }
  26.  
  27.     }
  28.  
  29.     int getSize(){
  30.         return size_array;
  31.     }
  32.  
  33.     void setTrue(int position){
  34.         tablica[position] = true;
  35.     }
  36.  
  37.     bool getAt(int position){
  38.         return tablica[position];
  39.     }
  40.  
  41.  
  42.  
  43.     void printHex(){
  44.         stringstream ss;
  45.         ss<< std::hex << toInt(); // int decimal_value
  46.         std::string res ( ss.str() );
  47.  
  48.         std::cout << res;
  49.     }
  50.  
  51.     int toInt(){
  52.         int number = 0;
  53.  
  54.         for(int x = 0; x < size_array; x++)
  55.             if(tablica[x] == true)number += (pow( 2, (size_array - x - 1)));
  56.  
  57.         return number;
  58.     }
  59.  
  60.     void resize(int size){
  61.         int roznica = this->size_array - size;
  62.         if(size < this->size_array){
  63.             tablica.erase(tablica.begin(), tablica.begin()+roznica);
  64.         }else{
  65.             vector<bool>::iterator it;
  66.             it = tablica.begin();
  67.             for(int i = 0; i < roznica; i++){
  68.                 tablica.insert(it, false);
  69.             }
  70.         }
  71.         this->size_array = size;
  72.     }
  73.  
  74.     /////PRZECIAZENIA
  75.     friend ostream & operator<< (ostream &wyjscie, BinaryVector &s);
  76.  
  77.     BinaryVector* operator&(BinaryVector &drugi){
  78.         int nowy_size;
  79.         if(this->size_array < drugi.size_array){
  80.             nowy_size = this->size_array;
  81.         }else{
  82.             nowy_size = drugi.size_array;
  83.         }
  84.         BinaryVector* nowa_liczba = new BinaryVector(nowy_size);
  85.  
  86.         for(int i = nowy_size; i >= 0; --i){
  87.             if(this->getAt(i) == drugi.getAt(i) && (this->getAt(i) == true)) {
  88.                 nowa_liczba->setTrue(i);
  89.             }
  90.         }
  91.  
  92.         return nowa_liczba;
  93.     }
  94.  
  95.     BinaryVector* operator|(BinaryVector &drugi){
  96.         int nowy_size;
  97.         if(this->size_array < drugi.size_array){
  98.             nowy_size = this->size_array;
  99.         }else{
  100.             nowy_size = drugi.size_array;
  101.         }
  102.         BinaryVector* nowa_liczba = new BinaryVector(nowy_size);
  103.  
  104.         for(int i = nowy_size; i >= 0; i--){
  105.             if((this->getAt(i) == drugi.getAt(i)) && (this->getAt(i) == true || drugi.getAt(i) == true)){
  106.                 nowa_liczba->setTrue(i);
  107.             }
  108.         }
  109.  
  110.         return nowa_liczba;
  111.     }
  112.  
  113.     BinaryVector* operator^(BinaryVector &drugi){
  114.         int nowy_size;
  115.         if(this->size_array < drugi.size_array){
  116.             nowy_size = this->size_array;
  117.         }else{
  118.             nowy_size = drugi.size_array;
  119.         }
  120.         BinaryVector* nowa_liczba = new BinaryVector(nowy_size);
  121.  
  122.         for(int i = nowy_size; i >= 0; i--){
  123.             if(this->getAt(i) != drugi.getAt(i)){
  124.                 nowa_liczba->setTrue(i);
  125.             }
  126.         }
  127.  
  128.         return nowa_liczba;
  129.     }
  130.  
  131.     BinaryVector* operator<<(int liczba){
  132.         BinaryVector* nowa_liczba = new BinaryVector(this->size_array);
  133.         nowa_liczba->tablica = this->tablica;
  134.         for(int i = 0; i < liczba; i++){
  135.             nowa_liczba->tablica.push_back(false);
  136.             nowa_liczba->tablica.erase(nowa_liczba->tablica.begin(), nowa_liczba->tablica.begin()+1);
  137.         }
  138.         return nowa_liczba;
  139.     }
  140.  
  141.     BinaryVector* operator>>(int liczba){
  142.         BinaryVector* nowa_liczba = new BinaryVector(this->size_array);
  143.         nowa_liczba->tablica = this->tablica;
  144.         vector<bool>::iterator it;
  145.         it = nowa_liczba->tablica.begin();
  146.         for(int i = 0; i < liczba; i++){
  147.             nowa_liczba->tablica.insert(it, false);
  148.             nowa_liczba->tablica.pop_back();
  149.         }
  150.         return nowa_liczba;
  151.     }
  152.  
  153.  
  154. };
  155.  
  156. ostream & operator<<( std::ostream & out, BinaryVector & t)
  157. {
  158.     for( int i = 0; i < t.size_array ; i++)
  159.         out << t.tablica[i];
  160.     return out;
  161. }
  162.  
  163. int main() {
  164.     BinaryVector a(5);
  165.     a.setTrue(1);
  166.     a.setTrue(0);
  167.     BinaryVector b(6);
  168.     b.setTrue(2);
  169.     b.setTrue(3);
  170.     b.setTrue(1);
  171.     cout<<a<<endl;  //11000
  172.     cout<<b<<endl; //011100
  173.     cout<<(a&b)<<endl; //11000
  174.     cout<<(a|b)<<endl; //11100
  175.     cout<<(a^b)<<endl; //00100
  176.     cout<<(a<<2)<<endl; //1100000
  177.     cout<<(a>>2)<<endl; //110
  178.     cout<<(a.toInt())<<endl; //24
  179.     BinaryVector c(6,23);
  180.     cout<<c<<endl; //010111
  181.     b.printHex(); //1C
  182.     cout<<endl;
  183.     c.printHex(); // 17
  184.     cout<<endl<<(c.toInt())<<endl; //23
  185.     c.resize(2);
  186.     cout<<c.toInt(); //3
  187.  
  188.  
  189.     return 0;
  190. }
Advertisement
Add Comment
Please, Sign In to add comment