GoralWMoro

Untitled

Feb 12th, 2020
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.10 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.  
  138. //BinaryVector nowa_liczba(nowy_size);
  139.  
  140. BinaryVector *nowa_liczba = new BinaryVector(nowy_size);
  141. for(int i = 0; i < nowy_size; i++){
  142. if(this->size_array < drugi.size_array) {
  143. nowa_liczba->tablica[i] = this->getAt(i) ^ drugi.getAt(i + roznica);
  144. }else {
  145. nowa_liczba->tablica[i] = this->getAt(i+roznica) ^ drugi.getAt(i);
  146. }
  147. }
  148.  
  149.  
  150. return *nowa_liczba;
  151. }
  152.  
  153. BinaryVector & operator<<(int liczba){
  154. BinaryVector* nowa_liczba = new BinaryVector(this->size_array);
  155. nowa_liczba->tablica = this->tablica;
  156. for(int i = 0; i < liczba; i++){
  157. nowa_liczba->tablica.push_back(false);
  158. nowa_liczba->tablica.erase(nowa_liczba->tablica.begin(), nowa_liczba->tablica.begin()+1);
  159. }
  160. return *nowa_liczba;
  161. }
  162.  
  163. BinaryVector & operator>>(int liczba){
  164. BinaryVector* nowa_liczba = new BinaryVector(this->size_array);
  165. nowa_liczba->tablica = this->tablica;
  166. vector<bool>::iterator it;
  167. it = nowa_liczba->tablica.begin();
  168. for(int i = 0; i < liczba; i++){
  169. nowa_liczba->tablica.insert(it, false);
  170. nowa_liczba->tablica.pop_back();
  171. }
  172. return *nowa_liczba;
  173. }
  174.  
  175.  
  176. };
  177.  
  178. ostream & operator<<( std::ostream & out, const BinaryVector & t)
  179. {
  180. for( int i = 0; i < t.size_array ; i++)
  181. out << t.tablica[i];
  182. return out;
  183. }
  184.  
  185. int main() {
  186.  
  187. return 0;
  188. }
Advertisement
Add Comment
Please, Sign In to add comment