SIKER_98

Untitled

Feb 12th, 2020
179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.18 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <fstream>
  4. #include <cstdlib>
  5. #include <vector>
  6. #include <algorithm>
  7. #include <list>
  8. #include <math.h>
  9.  
  10. using namespace std;
  11.  
  12. class BinaryVector {
  13. public:
  14. vector<bool> tablica;
  15. int rozmiar;
  16.  
  17.  
  18. BinaryVector(int rozmiar) {
  19. this->rozmiar = rozmiar;
  20. for (int i = 0; i < rozmiar; i++) { // zerowanie tablicy
  21. tablica.push_back(0);
  22. }
  23. }
  24.  
  25. BinaryVector(int rozmiar, int value) {
  26. this->rozmiar = rozmiar;
  27. bool pomocnik;
  28. for (int i = rozmiar - 1; i >= 0; i--) { // zamiana na binarna
  29. if (value % 2 == 0)pomocnik = false;
  30. else pomocnik = true;
  31. tablica[i] = pomocnik;
  32. value /= 2;
  33. }
  34. }
  35.  
  36. int getSize() {
  37. return this->rozmiar;
  38. }
  39.  
  40. void setTrue(int index) {
  41. tablica[index] = true;
  42. }
  43.  
  44. bool getAt(int index) {
  45. return tablica[index];
  46. }
  47.  
  48. int toInt() {
  49. int wynik = 0;
  50. for (int i = 0; i < rozmiar; i++) {
  51. if (i == rozmiar - 1) {
  52. if (tablica[i] == 1) wynik += 1;
  53. } else wynik += pow(2 * tablica[i], rozmiar - 1 - i);
  54. }
  55. return wynik;
  56. }
  57.  
  58. void zamiana(int liczba, int system) {
  59. if (liczba > 0) {
  60. zamiana(liczba / system, system); //dzieki rekurencjji liczby sa wyswietlane w poprawnej kolejnosci
  61. if (liczba % system > 9)
  62. //dla systemów o podstawie większej niż 9 cyfry są literami
  63. switch (liczba % system) {
  64. case 10:
  65. cout << "A";
  66. break;
  67. case 11:
  68. cout << "B";
  69. break;
  70. case 12:
  71. cout << "C";
  72. break;
  73. case 13:
  74. cout << "D";
  75. break;
  76. case 14:
  77. cout << "E";
  78. break;
  79. case 15:
  80. cout << "F";
  81. break;
  82. }
  83. else
  84. cout << liczba % system;
  85. }
  86. }
  87.  
  88. void printHex() {
  89. int liczba = toInt();
  90. zamiana(liczba, 16);
  91. cout << endl;
  92. }
  93.  
  94. void resize(int rozmiar) {
  95. if (rozmiar != this->rozmiar) {
  96.  
  97. vector<bool>::iterator it = tablica.begin();
  98. if (rozmiar > this->rozmiar) for (int i = 0; i < rozmiar - this->rozmiar; i++)tablica.insert(it, 0);
  99. else for (int i = 0; i < -rozmiar + this->rozmiar; i++) tablica.erase(it);
  100.  
  101. this->rozmiar = rozmiar;
  102. }
  103. }
  104.  
  105. /*
  106. BinaryVector operator&(const BinaryVector &drugi) {
  107. int j = drugi.rozmiar;
  108. for (int i = rozmiar - 1; i >= 0; i--) {
  109. if (j >= 0) {
  110. tablica[i] = tablica[i] * drugi.tablica[i];
  111. j--;
  112. } else tablica[0] = 0;
  113. }
  114. return *this;
  115. }
  116.  
  117. BinaryVector operator|(const BinaryVector &drugi) {
  118. int j = drugi.rozmiar;
  119. for (int i = rozmiar - 1; i >= 0; i--) {
  120. if (j >= 0) {
  121. tablica[i] = tablica[i] + drugi.tablica[i];
  122. j--;
  123. }
  124. }
  125. return *this;
  126. }
  127.  
  128. BinaryVector operator^(const BinaryVector &drugi) {
  129. int j = drugi.rozmiar;
  130. for (int i = rozmiar - 1; i >= 0; i--) {
  131. if (j >= 0) {
  132. tablica[i] = tablica[i] * drugi.tablica[i];
  133. j--;
  134. } else tablica[0] = 0;
  135. }
  136. return *this;
  137. }
  138. */
  139.  
  140. };
  141.  
  142. ostream &operator<<(ostream &out, BinaryVector &u) {
  143. string ciag;
  144. for (int i = 0; i < u.rozmiar; i++) {
  145. if (u.tablica[i] == 0)ciag += '0';
  146. else ciag += '1';
  147. }
  148. return out << ciag;
  149. }
  150.  
  151.  
  152. /*
  153. Przeciążenia operatorów bitowych - & - AND, | - OR, ^ - XOR - po obu stronach operatora jest obiekt klasy BinaryVector.
  154. Przeciążenie operatora << po lewej stronie strumień wyjścia, po prawej obiekt klasy BinaryVector.
  155. Przeciążenia operatorów bitowych - << - przesunięcie bitowe w lewo, << - przesunięcie bitowe w prawo - po lewej stronie operatora obiekt klasy BinaryVector po prawej liczba typu int określająca przesunięcie.
  156. */
  157.  
  158.  
  159. int main() {
  160.  
  161. BinaryVector a(5);
  162. a.setTrue(1);
  163. a.setTrue(0);
  164. BinaryVector b(6);
  165. b.setTrue(2);
  166. b.setTrue(3);
  167. b.setTrue(1);
  168. cout << a << endl; //11000
  169. cout << b << endl; //011100
  170.  
  171. a.resize(2);
  172. b.resize(10);
  173.  
  174. cout << a << endl; //11000
  175. cout << b << endl; //011100
  176.  
  177. // cout << (a & b) << endl; //11000
  178. // cout << (a | b) << endl; //11100
  179. /*
  180. cout<<(a^b)<<endl; //00100
  181. cout<<(a<<2)<<endl; //1100000
  182. cout<<(a>>2)<<endl; //110
  183. */
  184. cout << (a.toInt()) << endl; //24
  185. BinaryVector c(6, 23);
  186. cout << c << endl; //010111
  187. b.printHex(); //1C
  188. cout << endl;
  189. c.printHex(); // 17
  190. cout << endl << (c.toInt()) << endl; //23
  191. c.resize(2);
  192. cout << c.toInt(); //3
  193.  
  194. return 0;
  195. }
Advertisement
Add Comment
Please, Sign In to add comment