Advertisement
Guest User

Untitled

a guest
Dec 8th, 2019
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.96 KB | None | 0 0
  1. #include <iostream>
  2. #include <iomanip>
  3. #include <math.h>
  4. #include <conio.h>
  5. #include <windows.h>
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include <cstdlib>
  9. using namespace std;
  10. /* if (zn == '-') {
  11.  for (int i = 0; i < dl; i++) {
  12.  B[i] *= -1;
  13.  }
  14.  } */
  15.  
  16. char* dellnull(char* C) {
  17.  
  18.     bool cisl = false;
  19.     while (cisl == false) {
  20.         if (C[0] == '0' && C[1] == '\0') {
  21.             return C;
  22.         }
  23.         if (C[0] == '0') {
  24.  
  25.             for (int i = 0; i < strlen(C) + 1; i++) {
  26.                 if (C[i] == '0') {
  27.  
  28.                     C[i] = C[i + 1];
  29.                 }
  30.                 else {
  31.                     C[i] = C[i + 1];
  32.                 }
  33.  
  34.             }
  35.         }
  36.         else
  37.             cisl = true;
  38.     }
  39.     return C;
  40. }
  41.  
  42. int* sdvig(int *A, int dl) {
  43.     int* NEW = new int[dl + 1];
  44.     for (int i = dl; i >= 0; i--) {
  45.         if (i == 0) {
  46.             NEW[i] = 0;
  47.             break;
  48.         }
  49.         NEW[i] = A[i - 1];
  50.  
  51.     }
  52.     dl++;
  53.     return NEW;
  54. }
  55.  
  56. char* sdvig(char *A, int dl) {
  57.     char * NEW = new char[dl + 1];
  58.     for (int i = dl + 1; i >= 0; i--) {
  59.         if (i == 0) {
  60.             NEW[i] = 0;
  61.             break;
  62.         }
  63.         NEW[i] = A[i - 1];
  64.  
  65.     }
  66.     dl++;
  67.     return NEW;
  68. }
  69.  
  70. char* sdvlf(char *A, int dl) {
  71.     for (int i = 0; i < dl; i++) {
  72.         A[i] = A[i + 1];
  73.     }
  74.     return A;
  75. }
  76.  
  77. void ravn(char *a, char *b) {
  78.     int dl1 = strlen(a);
  79.     int dl2 = strlen(b);
  80.     if (dl1 != dl2) {
  81.         if (dl1 > dl2) {
  82.             while (dl1 != dl2) {
  83.                 dl2++;
  84.                 for (int i = dl2 - 1; i >= 0; i--) {
  85.                     b[dl2] = '\0';
  86.                     char tmp = b[i];
  87.                     b[i + 1] = tmp;
  88.                 }
  89.                 b[0] = '0';
  90.             }
  91.         }
  92.         else
  93.             while (dl1 != dl2) {
  94.                 dl1++;
  95.                 for (int i = dl1 - 1; i >= 0; i--) {
  96.                     a[dl1] = '\0';
  97.                     char tmp = a[i];
  98.                     a[i + 1] = tmp;
  99.                 }
  100.                 a[0] = '0';
  101.             }
  102.  
  103.     }
  104.     return;
  105. }
  106.  
  107. int* toint(char* a) {
  108.     int dl = strlen(a);
  109.     int *A = new int[dl];
  110.     for (int i = 0; i < dl; i++) {
  111.         switch (a[i]) {
  112.         case '0':
  113.         case '1':
  114.         case '2':
  115.         case '3':
  116.         case '4':
  117.         case '5':
  118.         case '6':
  119.         case '7':
  120.         case '8':
  121.         case '9':
  122.             A[i] = int(a[i]) - 48;
  123.             break;
  124.         case 'A':
  125.             A[i] = 10;
  126.             break;
  127.         case 'B':
  128.             A[i] = 11;
  129.             break;
  130.         case 'C':
  131.             A[i] = 12;
  132.             break;
  133.         case 'D':
  134.             A[i] = 13;
  135.             break;
  136.         case 'E':
  137.             A[i] = 14;
  138.             break;
  139.         case 'F':
  140.             A[i] = 15;
  141.             break;
  142.         case ' ':
  143.             A[i] = 0;
  144.             break;
  145.         default:
  146.             cout << "Ошибка ввода";
  147.             getch();
  148.             exit(0);
  149.             break;
  150.         }
  151.     }
  152.     return A;
  153. }
  154.  
  155. char* tochar(int *C, int dl) {
  156.     char *NEW = new char[dl];
  157.     for (int i = 0; i < dl; i++) {
  158.         switch (C[i]) {
  159.         case 0:
  160.         case 1:
  161.         case 2:
  162.         case 3:
  163.         case 4:
  164.         case 5:
  165.         case 6:
  166.         case 7:
  167.         case 8:
  168.         case 9:
  169.             NEW[i] = C[i] + 48;
  170.             break;
  171.         case 10:
  172.             NEW[i] = 'A';
  173.             break;
  174.         case 11:
  175.             NEW[i] = 'B';
  176.             break;
  177.         case 12:
  178.             NEW[i] = 'C';
  179.             break;
  180.         case 13:
  181.             NEW[i] = 'D';
  182.             break;
  183.         case 14:
  184.             NEW[i] = 'E';
  185.             break;
  186.         case 15:
  187.             NEW[i] = 'F';
  188.             break;
  189.         }
  190.     }
  191.     return NEW;
  192. }
  193.  
  194. char* sum(char* a, char* b) {
  195.     int* A = toint(a);
  196.     int* B = toint(b);
  197.     int dl = strlen(a);
  198.     int *C = new int[dl * 2];
  199.     for (int i = dl - 1; i >= 0; i--) {
  200.         C[i] = A[i] + B[i];
  201.         if (C[i] >= 16) {
  202.             if (i == 0) {
  203.                 A = sdvig(A, dl);
  204.                 B = sdvig(B, dl);
  205.                 C = sdvig(C, dl);
  206.                 i++;
  207.                 dl++;
  208.             }
  209.             C[i] -= 16;
  210.             A[i - 1] += 1;
  211.         }
  212.     }
  213.     char *NEW = tochar(C, dl);
  214.     return NEW;
  215. }
  216.  
  217. char* razn(char* a, char* b) {
  218.     int* A = toint(a);
  219.     int* B = toint(b);
  220.     int dl = strlen(a);
  221.     int *C = new int[dl * 2];
  222.     bool met = false;
  223. MET:
  224.     for (int i = dl - 1; i >= 0; i--) {
  225.         C[i] = A[i] - B[i];
  226.         if (C[i] < 0) {
  227.             if (i == 0) {
  228.                 for (int i = 0; i < dl; i++) {
  229.                     int tmp;
  230.                     tmp = B[i];
  231.                     B[i] = A[i];
  232.                     A[i] = tmp;
  233.                 }
  234.                 met = true;
  235.                 goto MET;
  236.             }
  237.             A[i] += 16;
  238.             C[i] = A[i] - B[i];
  239.             A[i - 1] -= 1;
  240.         }
  241.     }
  242.     char *NEW = tochar(C, dl);
  243.     if (met == true) {
  244.         NEW = dellnull(NEW);
  245.         NEW = sdvig(NEW, dl);
  246.         NEW[0] = '-';
  247.     }
  248.     return NEW;
  249.  
  250. }
  251.  
  252. int main() {
  253.     SetConsoleOutputCP(1251);
  254.     char c1[20] = "";
  255.     char c2[20] = "";
  256.     char znak;
  257.     do {
  258.         cout << "Введите первое число, знак операции и второе число:" << endl;
  259.         cout << "   ";
  260.         gets(c1);
  261.         cin >> znak;
  262.         cout << "   ";
  263.         gets(c2);
  264.         gets(c2);
  265.         // ravn(c1, c2);
  266.         // cout << "--------------" << endl;
  267.  
  268.         switch (znak) {
  269.         case '+':
  270.             if (c1[0] != '-' && c2[0] == '-') {
  271.                 sdvlf(c2, strlen(c2));
  272.                 ravn(c1, c2);
  273.                 cout << "--------------" << endl;
  274.                 cout << "     " << setw(strlen(dellnull(razn(c1, c2))))
  275.                     << dellnull(razn(c1, c2)) << endl;
  276.                 break;
  277.             }
  278.             if (c1[0] == '-' && c2[0] == '-') {
  279.                 sdvlf(c1, strlen(c1));
  280.                 sdvlf(c2, strlen(c2));
  281.                 ravn(c1, c2);
  282.                 char* NEW = new char[strlen(c1)];
  283.                 NEW = sum(c1, c2);
  284.                 NEW = sdvig(NEW, strlen(c1));
  285.                 NEW[0] = '-';
  286.                 cout << "--------------" << endl;
  287.                 cout << "   " << NEW << endl;
  288.                 break;
  289.             }
  290.             break;
  291.         case '-':
  292.             break;
  293.         default:
  294.             cout << "Знак введён неверно!" << endl;
  295.             break;
  296.         }
  297.         cout << "Нажмите f для повтора!" << endl;
  298.     }
  299.     while (getch() == 'f');
  300.     getch();
  301.     return 0;
  302. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement