Advertisement
Sanlover

Untitled

Oct 27th, 2020
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.52 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4.  
  5. int getShortSize(const short& number)
  6. {
  7. int size = 0;
  8. int num = number;
  9. while (abs(num) > 0)
  10. {
  11. size++;
  12. num /= 10;
  13. }
  14. return size;
  15. }
  16.  
  17. class Pair
  18. {
  19. long int* left;
  20. short int* right;
  21.  
  22. unsigned int nZeros;
  23. public:
  24. Pair(long int A = 0, short int B = 0) : left(new long int(A)), right(new short int(B)), nZeros(0) {}
  25. Pair(const Pair& other)
  26. {
  27. nZeros = other.nZeros;
  28. left = new long int;
  29. *left = *other.left;
  30. right = new short int;
  31. *right = *other.right;
  32. }
  33. ~Pair() { delete left, right; }
  34.  
  35. Pair& operator=(const Pair& other)
  36. {
  37. nZeros = other.nZeros;
  38. *left = *other.left;
  39. *right = *other.right;
  40. return *this;
  41. }
  42. Pair operator+(const Pair& other)
  43. {
  44. Pair tmp;
  45. short int tRightF, tRightS;
  46.  
  47. tmp.left = new long int;
  48. tmp.right = new short int;
  49.  
  50. if (getShortSize(*right) < getShortSize(*other.right))
  51. {
  52. tRightF = *right * pow(10, abs((getShortSize(*right) - getShortSize(*other.right))));
  53. tRightS = *other.right;
  54. }
  55. else if (getShortSize(*right) > getShortSize(*other.right))
  56. {
  57. tRightF = *right;
  58. tRightS = *other.right * pow(10, (getShortSize(*right) - getShortSize(*other.right)));
  59. }
  60.  
  61. *tmp.left = *left + *other.left;
  62.  
  63. *tmp.right = tRightF + tRightS;
  64.  
  65. if (getShortSize(*tmp.right) > getShortSize(tRightF))
  66. {
  67. int power = getShortSize(tRightS);
  68. *tmp.left += *tmp.right / pow(10, power);
  69. *tmp.right = *tmp.right % int(pow(10, power));
  70. }
  71.  
  72. tRightF = *tmp.right;
  73. while (tRightF != 0 && tRightF < pow(10, getShortSize(tRightS) - 1))
  74. {
  75. tmp.nZeros++;
  76. tRightF *= 10;
  77. }
  78.  
  79. while (tRightF != 0 && *tmp.right % 10 == 0)
  80. *tmp.right /= 10;
  81.  
  82. return tmp;
  83. }
  84.  
  85. Pair operator-(const Pair& other)
  86. {
  87. Pair tmp;
  88. short int tRightF, tRightS;
  89. tmp.left = new long int;
  90. tmp.right = new short int;
  91.  
  92. if (getShortSize(*right) < getShortSize(*other.right))
  93. {
  94. tRightF = *right * pow(10, abs((getShortSize(*right) - getShortSize(*other.right))));
  95. tRightS = *other.right;
  96. }
  97. else if (getShortSize(*right) > getShortSize(*other.right))
  98. {
  99. tRightF = *right;
  100. tRightS = *other.right * pow(10, (getShortSize(*right) - getShortSize(*other.right)));
  101. }
  102.  
  103. if (other > * this)
  104. {
  105. *tmp.left = *other.left + *left;
  106. swap(tRightS, tRightF);
  107. if (tRightF >= tRightS)
  108. {
  109. *tmp.right = tRightF - tRightS;
  110. }
  111. else
  112. {
  113. *tmp.right = tRightF + 1000 - tRightS;
  114. *tmp.left -= 1;
  115. }
  116.  
  117. tRightF = *tmp.right;
  118. while (tRightF != 0 && tRightF < pow(10, getShortSize(tRightS) - 1))
  119. {
  120. tmp.nZeros++;
  121. tRightF *= 10;
  122. }
  123.  
  124. while (tRightF != 0 && *tmp.right % 10 == 0)
  125. *tmp.right /= 10;
  126.  
  127. *tmp.left *= -1;
  128. }
  129. else
  130. {
  131. *tmp.left = *left + *other.left;
  132. if (tRightF >= tRightS)
  133. {
  134. *tmp.right = tRightF - tRightS;
  135. }
  136. else
  137. {
  138. *tmp.right = tRightF + 1000 - tRightS;
  139. *tmp.left -= 1;
  140. }
  141.  
  142. tRightF = *tmp.right;
  143. while (tRightF != 0 && tRightF < pow(10, getShortSize(tRightS) - 1))
  144. {
  145. tmp.nZeros++;
  146. tRightF *= 10;
  147. }
  148.  
  149. while (tRightF != 0 && *tmp.right % 10 == 0)
  150. *tmp.right /= 10;
  151. }
  152. return tmp;
  153. }
  154.  
  155. Pair& operator *=(const int& multiplier)
  156. {
  157. *left *= multiplier;
  158. *right *= multiplier;
  159. return *this;
  160. }
  161.  
  162. string toString()
  163. {
  164. string zeros;
  165. for (int i = 0; i < nZeros; i++)
  166. zeros += to_string(0);
  167. return string(to_string(*left) + '.' + zeros + to_string(*right));
  168. }
  169.  
  170. friend ostream& operator<< (ostream&, const Pair&);
  171. friend istream& operator>> (istream&, Pair&);
  172. friend bool operator>= (const Pair& my, const Pair& other);
  173. friend bool operator<= (const Pair& my, const Pair& other);
  174. friend bool operator== (const Pair& my, const Pair& other);
  175. friend bool operator!= (const Pair& my, const Pair& other);
  176. friend bool operator> (const Pair& my, const Pair& other);
  177. friend bool operator< (const Pair& my, const Pair& other);
  178. };
  179. ostream& operator<< (ostream& out, const Pair& c)
  180. {
  181. out << "Число : " << to_string(*c.left) + "." + to_string(*c.right);
  182. return out;
  183. }
  184. istream& operator >> (istream& in, Pair& c)
  185. {
  186. cout << "Целая часть";
  187. in >> *c.left;
  188. cout << "Дробная часть";
  189. in >> *c.right;
  190. return in;
  191. }
  192.  
  193. bool operator>= (const Pair& my, const Pair& other)
  194. {
  195. if (*my.left >= *other.left)
  196. return true;
  197. else if (*my.left == *other.left)
  198. {
  199. short int fRight = *my.right;
  200. short int sRight = *other.right;
  201.  
  202. int power = int(pow(10, abs(getShortSize(*my.right) - getShortSize(*other.right))));
  203. if (getShortSize(fRight) <= getShortSize(sRight))
  204. {
  205. if (*my.right * power < *other.right)
  206. return false;
  207. else if (*my.right * power == *other.right)
  208. {
  209. if (my.nZeros >= other.nZeros)
  210. return false;
  211. else
  212. return true;
  213. }
  214. else
  215. return true;
  216. }
  217. else
  218. {
  219. if (*my.right < *other.right * power)
  220. return false;
  221. else if (*my.right == *other.right * power)
  222. {
  223. if (my.nZeros >= other.nZeros)
  224. return false;
  225. else
  226. return true;
  227. }
  228. else
  229. return true;
  230. }
  231. }
  232. else
  233. return false;
  234. }
  235. bool operator<= (const Pair& my, const Pair& other)
  236. {
  237. if (*my.left <= *other.left)
  238. return true;
  239. else if (*my.left == *other.left)
  240. {
  241. short int fRight = *my.right;
  242. short int sRight = *other.right;
  243.  
  244. int power = int(pow(10, abs(getShortSize(*my.right) - getShortSize(*other.right))));
  245. if (getShortSize(fRight) <= getShortSize(sRight))
  246. {
  247. if (*my.right * power < *other.right)
  248. return false;
  249. else if (*my.right * power == *other.right)
  250. {
  251. if (my.nZeros < other.nZeros)
  252. return false;
  253. else
  254. return true;
  255. }
  256. else
  257. return true;
  258. }
  259. else
  260. {
  261. if (*my.right < *other.right * power)
  262. return false;
  263. else if (*my.right == *other.right * power)
  264. {
  265. if (my.nZeros < other.nZeros)
  266. return false;
  267. else
  268. return true;
  269. }
  270. else
  271. return true;
  272. }
  273. }
  274. else
  275. return false;
  276. }
  277. bool operator== (const Pair& my, const Pair& other)
  278. {
  279. if (*my.left != *other.left)
  280. return false;
  281. else
  282. if (*my.right != *other.right)
  283. return false;
  284. else
  285. if (my.nZeros != other.nZeros)
  286. return false;
  287. return true;
  288. }
  289. bool operator!= (const Pair& my, const Pair& other)
  290. {
  291. if (*my.left == *other.left)
  292. return false;
  293. else
  294. if (*my.right == *other.right)
  295. return false;
  296. else
  297. if (my.nZeros == other.nZeros)
  298. return false;
  299. return true;
  300. }
  301. bool operator> (const Pair& my, const Pair& other)
  302. {
  303. if (*my.left > * other.left)
  304. return true;
  305. else if (*my.left == *other.left)
  306. {
  307. short int fRight = *my.right;
  308. short int sRight = *other.right;
  309.  
  310. int power = int(pow(10, abs(getShortSize(*my.right) - getShortSize(*other.right))));
  311. if (getShortSize(fRight) <= getShortSize(sRight))
  312. {
  313. if (*my.right * power < *other.right)
  314. return false;
  315. else if (*my.right * power == *other.right)
  316. {
  317. if (my.nZeros > other.nZeros)
  318. return false;
  319. else
  320. return true;
  321. }
  322. else
  323. return true;
  324. }
  325. else
  326. {
  327. if (*my.right < *other.right * power)
  328. return false;
  329. else if (*my.right == *other.right * power)
  330. {
  331. if (my.nZeros > other.nZeros)
  332. return false;
  333. else
  334. return true;
  335. }
  336. else
  337. return true;
  338. }
  339. }
  340. else
  341. return false;
  342. }
  343. bool operator< (const Pair& my, const Pair& other)
  344. {
  345. if (*my.left < *other.left)
  346. return true;
  347. else if (*my.left == *other.left)
  348. {
  349. short int fRight = *my.right;
  350. short int sRight = *other.right;
  351.  
  352. int power = int(pow(10, abs(getShortSize(*my.right) - getShortSize(*other.right))));
  353. if (getShortSize(fRight) <= getShortSize(sRight))
  354. {
  355. if (*my.right * power > * other.right)
  356. return false;
  357. else if (*my.right * power == *other.right)
  358. {
  359. if (my.nZeros < other.nZeros)
  360. return false;
  361. else
  362. return true;
  363. }
  364. else
  365. return true;
  366. }
  367. else
  368. {
  369. if (*my.right > * other.right * power)
  370. return false;
  371. else if (*my.right == *other.right * power)
  372. {
  373. if (my.nZeros < other.nZeros)
  374. return false;
  375. else
  376. return true;
  377. }
  378. else
  379. return true;
  380. }
  381. }
  382. else
  383. return false;
  384. }
  385.  
  386. int main()
  387. {
  388. setlocale(LC_ALL, "rus");
  389. int k;
  390. Pair d(77, 11);
  391. Pair p(54, 9);
  392.  
  393. Pair e, f;
  394. cout << p << endl;
  395. cout << d;
  396. cout << endl;
  397. cout << "Сложение" << endl;
  398. e = p + d;
  399. cout << e.toString();
  400. cout << endl;
  401. cout << "Вычитание =" << endl;
  402. e = p - d;
  403. cout << e.toString();
  404. cout << endl;
  405.  
  406. return 0;
  407. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement