Advertisement
sashaaladko

Untitled

Dec 9th, 2019
471
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.42 KB | None | 0 0
  1. #include <iostream>
  2. #include <conio.h>
  3. using namespace std;
  4. char *operation(char *&mass_1, char *&mass_2, char oper);
  5. void Invert(char *&mass);
  6. char *Plus(char *&mass_1, char *&mass_2);
  7. char *Minus(char *&mass_1, char *&mass_2);
  8.  
  9.  
  10. char *operation(char *&mass_1, char *&mass_2, char oper) {
  11. char simbol_1 = mass_1[0];
  12. char simbol_2 = mass_2[0];
  13.  
  14. Invert(mass_1);
  15. Invert(mass_2);
  16.  
  17. char *result;
  18. bool minus = 0;
  19.  
  20. if (simbol_1 == '-') {
  21. if (simbol_2 == '-') {
  22. if (oper == '-')
  23. {
  24. result = Minus(mass_2, mass_1);
  25. }
  26. else
  27. {
  28. result = Plus(mass_1, mass_2);
  29. minus = 1;
  30. }
  31. }
  32. else {
  33. if (oper == '-') {
  34. result = Plus(mass_2, mass_1);
  35. minus = 1;
  36. }
  37. else {
  38. result = Minus(mass_2, mass_1);
  39. }
  40. }
  41. }
  42. else {
  43. if (simbol_2 == '-') {
  44. if (oper == '-') {
  45. result = Plus(mass_2, mass_1);
  46. }
  47. else {
  48. result = Minus(mass_1, mass_2);
  49. }
  50. }
  51. else {
  52. if (oper == '-') {
  53. result = Minus(mass_1, mass_2);
  54. }
  55. else {
  56. result = Plus(mass_2, mass_1);
  57. }
  58. }
  59. }
  60.  
  61. if (minus) {
  62. int i = 1;
  63. for (; result[i]; i++) {
  64. }
  65. for (i--; i >= 0; i--) {
  66. result[i + 1] = result[i];
  67. }
  68.  
  69. result[0] = '-';
  70. }
  71.  
  72. return result;
  73. }
  74. char *Plus(char *&mass_1, char *&mass_2) {
  75. char *result = new char[10];
  76. short ind_1 = 1, ind_2 = 1;
  77. for (; mass_1[ind_1]; ind_1++) {
  78.  
  79. }
  80. for (; mass_2[ind_2]; ind_2++) {
  81.  
  82. }
  83.  
  84. if (ind_2 > ind_1) {
  85. for (int i = ind_1; i != ind_2; i++) {
  86. mass_1[i] = '0';
  87. }
  88. for (short delta = ind_2 - ind_1, i = ind_1 - 1; i >= 0; i--) {
  89. mass_1[i + delta] = mass_1[i];
  90. mass_1[i] = '0';
  91. }
  92. ind_1 = ind_2;
  93. }
  94. if (ind_1 > ind_2) {
  95. for (int i = ind_2; i != ind_1; i++) {
  96. mass_2[i] = '0';
  97. }
  98. for (short delta = ind_1 - ind_2, i = ind_2 - 1; i >= 0; i--) {
  99. mass_2[i + delta] = mass_2[i];
  100. mass_2[i] = '0';
  101. }
  102. }
  103.  
  104.  
  105.  
  106. int k = 0;
  107. for (int i = ind_1 - 1; i >= 0; i--) {
  108. result[i] = mass_1[i] + mass_2[i] - '0' + k;
  109. if (result[i] > 'A' - 6) {
  110. k = 1;
  111. result[i] = result[i] - 11;
  112. }
  113. else k = 0;
  114. }
  115.  
  116. if (k) {
  117. for (int i = ind_1 - 1; i >= 0; i--) {
  118. result[i + 1] = result[i];
  119. }
  120. result[0] = '1';
  121. }
  122.  
  123. return result;
  124. }
  125. char *Minus(char *&mass_1, char *&mass_2) {
  126. char *result = new char[10];
  127. short ind_1 = 1, ind_2 = 1;
  128. for (; mass_1[ind_1]; ind_1++) {
  129.  
  130. }
  131.  
  132. for (; mass_2[ind_2]; ind_2++) {
  133.  
  134. }
  135.  
  136. if (ind_2 > ind_1) {
  137. for (int i = ind_1; i != ind_2; i++) {
  138. mass_1[i] = '0';
  139. }
  140. for (short delta = ind_2 - ind_1, i = ind_1 - 1; i >= 0; i--) {
  141. mass_1[i + delta] = mass_1[i];
  142. mass_1[i] = '0';
  143. }
  144. ind_1 = ind_2;
  145. }
  146. if (ind_1 > ind_2) {
  147. for (int i = ind_2; i != ind_1; i++) {
  148. mass_2[i] = '0';
  149. }
  150. for (short delta = ind_1 - ind_2, i = ind_2 - 1; i >= 0; i--) {
  151. mass_2[i + delta] = mass_2[i];
  152. mass_2[i] = '0';
  153. }
  154. }
  155.  
  156. bool normal = 1;
  157. for (int i = 0; mass_1[i]; i++) {
  158. if (mass_1[i] != mass_2[i]) {
  159. if (mass_1[i] < mass_2[i]) {
  160. normal = 0;
  161. }
  162. break;
  163. }
  164. }
  165.  
  166.  
  167.  
  168. if (normal) {
  169. int k = 0;
  170. for (int i = ind_1 - 1; i >= 0; i--) {
  171. result[i] = mass_1[i] - mass_2[i] + '0' - k;
  172. if (result[i] < '0') {
  173. k = 1;
  174. result[i] = result[i] + 12;
  175. }
  176. else k = 0;
  177. }
  178. }
  179. else {
  180. int k = 0;
  181. for (int i = ind_1 - 1; i >= 0; i--) {
  182. result[i + 1] = mass_2[i] - mass_1[i] + '0' - k;
  183. if (result[i + 1] < '0') {
  184. k = 1;
  185. result[i + 1] = result[i + 1] + 12;
  186. }
  187. else k = 0;
  188. }
  189. result[0] = '-';
  190. }
  191.  
  192.  
  193.  
  194. return result;
  195. }
  196. void Invert(char *&mass) {
  197. if (mass[0] == '-') {
  198. short i;
  199. for (i = 1; mass[i]; i++) {
  200. mass[i - 1] = mass[i];
  201. }
  202. mass[i - 1] = '\0';
  203. }
  204. }
  205.  
  206. int main()
  207. {
  208. setlocale(LC_ALL, "Rus");
  209. char *mass_1 = new char[9];
  210. char *mass_2 = new char[9];
  211. char oper;
  212. cout << "Input the operation" << endl;
  213. cin >> mass_1; cin >> oper; cin >> mass_2;
  214. cout << mass_1 << " " << oper << " " << mass_2 << " = ";
  215.  
  216. for (short i = 0; mass_1[i]; i++) {
  217. if (mass_1[i] > '9' && mass_1[i] < 'C') {
  218. mass_1[i] -= 7;
  219. }
  220. }
  221. for (short i = 0; mass_2[i]; i++) {
  222. if (mass_2[i] > '9' && mass_2[i] < 'C') {
  223. mass_2[i] -= 7;
  224. }
  225. }
  226.  
  227. char *result = operation(mass_1, mass_2, oper);
  228.  
  229. for (short i = 0; result[i]; i++) {
  230. if (result[i] > '9' && result[i] < 'C' - 7) {
  231. result[i] += 7;
  232. }
  233. }
  234.  
  235.  
  236. cout << result;
  237.  
  238. system("pause");
  239.  
  240. delete[] result;
  241. delete[] mass_1;
  242. delete[] mass_2;
  243.  
  244. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement