GoralWMoro

Untitled

Feb 12th, 2020
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.12 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, const BinaryVector &s);
  76.  
  77.     BinaryVector operator&(BinaryVector &drugi){
  78.         int nowy_size;
  79.         int roznica;
  80.         if(this->size_array < drugi.size_array){
  81.             nowy_size = this->size_array;
  82.             roznica = drugi.size_array - this->size_array;
  83.         }else{
  84.             nowy_size = drugi.size_array;
  85.             roznica = this->size_array - drugi.size_array;
  86.         }
  87.  
  88.         BinaryVector nowa_liczba(nowy_size);
  89.  
  90.             for(int i = 0; i < nowy_size; i++){
  91.                 if(this->size_array < drugi.size_array) {
  92.                     nowa_liczba.tablica[i] = this->getAt(i) && drugi.getAt(i + roznica);
  93.                 }else {
  94.                     nowa_liczba.tablica[i] = this->getAt(i+roznica) && drugi.getAt(i);
  95.                 }
  96.             }
  97.  
  98.  
  99.         return nowa_liczba;
  100.     }
  101.  
  102.     BinaryVector operator|(BinaryVector &drugi){
  103.         int nowy_size;
  104.         int roznica;
  105.         if(this->size_array < drugi.size_array){
  106.             nowy_size = this->size_array;
  107.             roznica = drugi.size_array - this->size_array;
  108.         }else{
  109.             nowy_size = drugi.size_array;
  110.             roznica = this->size_array - drugi.size_array;
  111.         }
  112.  
  113.         BinaryVector nowa_liczba(nowy_size);
  114.  
  115.         for(int i = 0; i < nowy_size; i++){
  116.             if(this->size_array < drugi.size_array) {
  117.                 nowa_liczba.tablica[i] = this->getAt(i) || drugi.getAt(i + roznica);
  118.             }else {
  119.                 nowa_liczba.tablica[i] = this->getAt(i+roznica) || drugi.getAt(i);
  120.             }
  121.         }
  122.  
  123.  
  124.         return nowa_liczba;
  125.     }
  126.  
  127.     BinaryVector & operator^(BinaryVector &drugi){
  128.         int nowy_size;
  129.         int roznica;
  130.         if(this->size_array < drugi.size_array){
  131.             nowy_size = this->size_array;
  132.             roznica = drugi.size_array - this->size_array;
  133.         }else{
  134.             nowy_size = drugi.size_array;
  135.             roznica = this->size_array - drugi.size_array;
  136.         }
  137.         BinaryVector *nowa_liczba = new BinaryVector(nowy_size);
  138.         for(int i = 0; i < nowy_size; i++){
  139.             if(this->size_array < drugi.size_array) {
  140.                 nowa_liczba->tablica[i] = this->getAt(i) ^ drugi.getAt(i + roznica);
  141.             }else {
  142.                 nowa_liczba->tablica[i] = this->getAt(i+roznica) ^  drugi.getAt(i);
  143.             }
  144.         }
  145.  
  146.  
  147.         return *nowa_liczba;
  148.     }
  149.  
  150.     BinaryVector & operator<<(int liczba){
  151.         BinaryVector* nowa_liczba = new BinaryVector(this->size_array+liczba);
  152.         nowa_liczba->tablica = this->tablica;
  153.         for(int i = 0; i < liczba; i++){
  154.             nowa_liczba->tablica.push_back(false);
  155.             //nowa_liczba->tablica.erase(nowa_liczba->tablica.begin(), nowa_liczba->tablica.begin()+liczba);
  156.         }
  157.         return *nowa_liczba;
  158.     }
  159.  
  160.     BinaryVector & operator>>(int liczba){
  161.         BinaryVector* nowa_liczba = new BinaryVector(this->size_array);
  162.         nowa_liczba->tablica = this->tablica;
  163.         vector<bool>::iterator it;
  164.         it = nowa_liczba->tablica.begin();
  165.         for(int i = 0; i < liczba; i++){
  166.             //nowa_liczba->tablica.insert(it, false);
  167.             nowa_liczba->tablica.pop_back();
  168.         }
  169.         nowa_liczba->size_array = size_array - liczba;
  170.         return *nowa_liczba;
  171.     }
  172.  
  173.  
  174. };
  175.  
  176. ostream & operator<<( std::ostream & out, const BinaryVector & t)
  177. {
  178.     for( int i = 0; i < t.size_array ; i++)
  179.         out << t.tablica[i];
  180.     return out;
  181. }
  182.  
  183. int main() {
  184.    
  185.     return 0;
  186. }
Advertisement
Add Comment
Please, Sign In to add comment