Advertisement
Krudener

Untitled

Oct 1st, 2019
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 24.30 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4.  
  5. #define ERROR_CODE -1
  6. #define ZERO_WARNING -2
  7. #define RIGHT 0
  8. #define INPUT_OK 1
  9. #define ALLOWED_INPUT_SIZE 38
  10. #define SIGN_QUANTITY_LIMIT 2
  11. #define DEGREE_LIMIT 1
  12. #define DOT_LIMIT 1
  13. #define POSITIVE_NUMBER 1
  14. #define NEGATIVE_NUMBER -1
  15. #define TRUE 1
  16. #define FALSE 0
  17. #define DIGITS_SIZE 32
  18.  
  19. struct BigDecimal/*Структура для хранения чисел*/
  20. {
  21.  
  22.     int size;/*Размер числа*/
  23.     int digits[DIGITS_SIZE];/*Цифры числа*/
  24.     int E;/*Порядок числа*/
  25.     int sign;/*Знак числа*/
  26.  
  27. };
  28.  
  29. /*1)Смоделировать операцию деления действительного числа
  30. на действительное число в форме (+,-)m.n Е (+,-)K, где
  31. суммарная длина мантиссы (m+n) - до 30 значащих цифр, а
  32. величина порядка K - до 5 цифр. Результат выдать в форме
  33.  (+,-)0.m1 Е (+,-)K1, где m1 - до 30 значащих цифр, а K1 - до 5
  34. цифр.
  35.  *
  36.  *Программа разработана студентом ИУ7-33Б Ахметовым Каримом 2019г */
  37. void welcome_text()
  38. {
  39.     printf("This program performs the operation of dividing real numbers \n"
  40.            "Data entry begins strictly with the sign of the number(+ or -) \n"
  41.            "If there is degree in number, then the sign of degree (+ or"
  42.            " -) is also indicated strictly after E \n"
  43.            "If you enter E, there should be no spaces between numbers and E \n"
  44.            "The number entered must not exceed 30 characters \n"
  45.            "The size of the input degree must not exceed 5 characters \n"
  46.            "Real numbers must be entered through a dot \n"
  47.            "                    1             15             30\n"
  48.            "                    |-------------|--------------|\n");
  49. }
  50.  
  51. int E_limit_check(int E)
  52. {
  53.     if (abs(E) > 99999)
  54.     {
  55.         printf("Degree of E is over 5 characters!");
  56.         return ERROR_CODE;
  57.     }
  58.     return RIGHT;
  59. }
  60.  
  61. void swap(int *xp, int *yp)/*Функция, меняющая местами числа*/
  62. {
  63.     int temp = *xp;
  64.     *xp = *yp;
  65.     *yp = temp;
  66. }
  67.  
  68. void printArrayResult(int *res, int *size, int *E)
  69. {
  70.     printf("0.");
  71.  
  72.     int i = *size - 1;
  73.     while ((res[i] == 0) && (i > 0))
  74.     {
  75.         --(*size);
  76.         /*++(*E);*/
  77.         i--;
  78.     }
  79.     for (int j = 0; j < *size; j++)
  80.     {
  81.         printf("%d", res[j]);
  82.     }
  83. }
  84.  
  85. int printBigDecimal(struct BigDecimal val)
  86. {
  87.     if (val.sign < 0)
  88.     {
  89.         printf("-");
  90.     }
  91.     else
  92.     {
  93.         printf("+");
  94.     }
  95.     val.E = val.E + val.size;
  96.     if (E_limit_check(val.E) == ERROR_CODE)
  97.     {
  98.         return ERROR_CODE;
  99.     }
  100.     printArrayResult(val.digits, &val.size, &val.E);
  101.  
  102.     if (val.E != 0)
  103.     {
  104.         printf("e");
  105.     }
  106.     if (val.E > 0)
  107.     {
  108.         printf("+");
  109.     }
  110.     if (val.E != 0)
  111.     {
  112.         printf("%d", val.E);
  113.     }
  114.     return RIGHT;
  115. }
  116.  
  117. int compare(int *a, int *b, int size)
  118. {
  119.     /*Движение по разрядам до тех пор пока не будет однозначно определено
  120.      * какое число больше */
  121.     for (int i = 0; i < size; i++)
  122.     {
  123.         if (a[i] > b[i])
  124.         {
  125.             return 1;
  126.         }
  127.         else if (b[i] > a[i])
  128.         {
  129.             return -1;
  130.         }
  131.     }
  132.  
  133.     return RIGHT;
  134. }
  135.  
  136. void minus(int *array1, int *array2, int size, int *returnArray)
  137. {
  138.  
  139.     /*Алгоритм вычитания из делимого делителя*/
  140.     for (int i = size - 1; i >= 0; i--)
  141.     {
  142.  
  143.         if (array1[i] < array2[i])
  144.         {
  145.             array1[i] += 10;
  146.             array1[i - 1] -= 1;
  147.         }
  148.  
  149.         int res = array1[i] - array2[i];
  150.         returnArray[i] = res;
  151.     }
  152. }
  153.  
  154. void incrementResult(int *resultArray, int index)
  155. {
  156.     /*Увеличение значение разряда на 1*/
  157.     resultArray[index]++;
  158.     /*Если значение разряда превысело 9, то идет смещение разряда*/
  159.     if (resultArray[index] >= 10)
  160.     {
  161.         /*Идет вызов рекурсии, пока не найдем куда прибавить единицу*/
  162.         incrementResult(resultArray, index - 1);
  163.         /*Если произошло смещение разряда,то вычитаем 10*/
  164.         resultArray[index] -= 10;
  165.     }
  166. }
  167.  
  168. void shiftRight(int *array, int size, int shift)
  169. {
  170.     /*shift - это насколько происходит сдвиг массива*/
  171.     /*Сдвиг массива идет засчет присваивания i элементу
  172.      * значение (i-shift) элемента с конца, после сдвига самый
  173.      * левый элемент становится равен 0*/
  174.     for (int i = size - 1; i >= 0; i--)
  175.     {
  176.         int offset = i - shift;
  177.         if (offset < size && offset >= 0)
  178.         {
  179.             array[i] = array[offset];
  180.         }
  181.         else
  182.         {
  183.             array[i] = 0;
  184.         }
  185.     }
  186. }
  187.  
  188. void shiftLeft(int *array, int size, int shift)
  189. {
  190.     /*shift - это насколько происходит сдвиг массива*/
  191.     /*Сдвиг массива идет засчет присваивания i элементу
  192.      * значение (i+shift) элемента с начала, после сдвига самый
  193.      * правый элемент становится равен 0*/
  194.     for (int i = 0; i < size; i++)
  195.     {
  196.         int offset = i + shift;
  197.         if (offset < size && offset >= 0)
  198.         {
  199.             array[i] = array[offset];
  200.         }
  201.         else
  202.         {
  203.             array[i] = 0;
  204.         }
  205.     }
  206. }
  207.  
  208. int divide(int *array1, int *array2, int size, int *returnArray)
  209. {
  210.     int shiftsAmount = 0;/*Cколько раз произошел сдвиг числа*/
  211.     int compareResult = 0;/*Результат сравнения двух чисел*/
  212.     /*Цикл идет до момента равенства чисел*/
  213.     do
  214.     {
  215.         /*Сравнение делимого и делителя*/
  216.         compareResult = compare(array1, array2, size);
  217.         /*Если делитель оказался больше*/
  218.         if (compareResult < 0)
  219.         {
  220.             /*Смещение делителя вправо */
  221.             shiftRight(array2, size, 1);
  222.             /*Смещение результата влево*/
  223.             shiftLeft(returnArray, size, 1);
  224.             shiftsAmount++;
  225.             continue;
  226.         }
  227.         /*Если все 30 разрядов мантиссы высчитаны*/
  228.         if (returnArray[0] != 0)
  229.         {
  230.             return shiftsAmount * -1;
  231.         }
  232.         /*Далее следует алгоритм деления чисел как сколько
  233.          * раз второе число входит в первое, следовательно
  234.          * мы вычитаем пока возможно второе число из первого
  235.          * и за каждое такое вычитание увеличиваем результат
  236.          * деления на единицу*/
  237.         incrementResult(returnArray, size - 1);
  238.         minus(array1, array2, size, array1);
  239.  
  240.     }
  241.     while (compareResult != 0);
  242.  
  243.     return shiftsAmount * -1;
  244. }
  245.  
  246. struct BigDecimal normalize(struct BigDecimal decimal)
  247. {
  248.  
  249.     struct BigDecimal res = {.sign = decimal.sign, .size = DIGITS_SIZE};
  250.  
  251.     int e = decimal.E;
  252.     /*Превращение числа в 30 разрядное путем изменения порядка
  253.      * и добавления нулей*/
  254.     for (int i = 0; i < res.size; i++)
  255.     {
  256.         if (i < decimal.size)
  257.         {
  258.             res.digits[i] = decimal.digits[i];
  259.         }
  260.         else /*В else конструкцию попадаем при нехватке цифр до 30 разрядности числа*/
  261.         {
  262.             /*Добавляем в конец нули и изменяем порядок*/
  263.             /*Т.е. идет смещение числа влево*/
  264.             res.digits[i] = 0;
  265.             e--;
  266.         }
  267.     }
  268.     /*Запоминаем новый порядок числа*/
  269.     res.E = e;
  270.  
  271.     return res;
  272. }
  273.  
  274. struct BigDecimal denormalize(struct BigDecimal decimal)
  275. {
  276.  
  277.     int leftZero = 0;/*Кол-во нулей слева*/
  278.     int rightZero = 0;/*Кол-во нулей справа*/
  279.     /*Цикл подсчета нулева слева*/
  280.     for (int i = 0; i < decimal.size; i++)
  281.     {
  282.         if (decimal.digits[i] == 0)
  283.         {
  284.             leftZero++;
  285.         }
  286.         else
  287.         {
  288.             break;
  289.         }
  290.     }
  291.     /*Цикл подсчета нулева справа*/
  292.     for (int i = decimal.size - 1; i >= 0; i--)
  293.     {
  294.         if (decimal.digits[i] == 0)
  295.         {
  296.             rightZero++;
  297.         }
  298.         else
  299.         {
  300.             break;
  301.         }
  302.     }
  303.     /*Кооректировка числа в соответсвие с нулями справа и слева*/
  304.     struct BigDecimal res = {
  305.             .size = decimal.size - (leftZero + rightZero),
  306.             .sign = decimal.sign,
  307.             .E = decimal.E + rightZero
  308.     };
  309.     /*Перенос значащих цифр в соответствие с кол-вом нулей*/
  310.     for (int j = leftZero; j < decimal.size - rightZero; ++j)
  311.     {
  312.         res.digits[j - leftZero] = decimal.digits[j];
  313.     }
  314.  
  315.     int finalSize = 30;
  316.  
  317.     /*Т.к. для округления 30ой цифры нам нужна 31 ая цифра, то изначальный
  318.      * массив цифр был больше 30, поэтому далее мы приводим массив цифр к 30
  319.      * с округлением, если понадобится 30ой цифры*/
  320.     if (res.size > finalSize)
  321.     {
  322.         if (res.digits[finalSize] >= 5)
  323.         {
  324.             incrementResult(res.digits, finalSize - 1);
  325.         }
  326.         /*Узнаем знак экспоненты для дальнейшего действия*/
  327.         int eSign = res.E / abs(res.E);
  328.         /*Изменение экспоненты в соответтсвие со знаком*/
  329.         if (eSign > 0)
  330.         {
  331.             res.E--;
  332.         }
  333.         else
  334.         {
  335.             res.E++;
  336.         }
  337.  
  338.         res.size = finalSize;
  339.     }
  340.  
  341.     return res;
  342. }
  343.  
  344.  
  345. struct BigDecimal floatingDivide(struct BigDecimal val1, struct BigDecimal val2)
  346. {
  347.     struct BigDecimal result = {
  348.             .sign = val1.sign * val2.sign,/*Знак результата*/
  349.             /*Размер чуть больше 30 для округления по 31-ой цифре*/
  350.             .size = DIGITS_SIZE,
  351.             /*Зануление всех цифр числа для избежания мусора в ячейках*/
  352.             .digits = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  353.                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  354.                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
  355.     };
  356.  
  357.     /*Нормализация первого и второго числа*/
  358.     struct BigDecimal normVal1 = normalize(val1);
  359.     struct BigDecimal normVal2 = normalize(val2);
  360.  
  361.     int e = 0;
  362.     e = divide(normVal1.digits, normVal2.digits, DIGITS_SIZE, result.digits);
  363.     /*Вычисление финального порядка с учетом порядков чисел и кол-ва смещений*/
  364.     result.E = normVal1.E - normVal2.E + e;
  365.  
  366.     struct BigDecimal denormResult = denormalize(result);
  367.  
  368.     return denormResult;
  369. }
  370.  
  371. /*Функция, убирающая нули сразу после точки*/
  372. void remove_zero(int *digits, int *size, int *E)
  373. {
  374.     int i = 0;
  375.     int size_remember = *size;
  376.     /*Если встретился 0 в начале массива цифр, то смещаем его в конец*/
  377.     /*С последующем уменьшением размера массива цифр*/
  378.     while (digits[i] == 0)
  379.     {
  380.         for (int j = 0; j < (size_remember - 1); j++)
  381.         {
  382.             swap(&digits[j], &digits[j + 1]);
  383.         }
  384.         --*size;
  385.     }
  386. }
  387.  
  388. int number_split(char *string, int *digits, int *size, int *E, int *sign)
  389. {
  390.     /*Переменная для исключения добавления лишнего нуля в массив цифр*/
  391.     int useless_zero = FALSE;
  392.     if (string[1] == '0' && (string[0] == '-' || string[0] == '+') && (string[2] == '.'))
  393.     {
  394.         useless_zero = TRUE;
  395.     }
  396.     /*Переменная для отрезания незначащих нулей в конце*/
  397.     /*для исключения их добавления в массив цифр*/
  398.     int size_to_delete = 0;
  399.     int index = 0;
  400.     /*Проверка знака перед числом*/
  401.     if (string[0] == '-')
  402.     {
  403.         *sign = NEGATIVE_NUMBER;
  404.     }
  405.     else
  406.     {
  407.         *sign = POSITIVE_NUMBER;
  408.     }
  409.     int E_flag = FALSE;/*Переменная для проверки наличия Е в числе*/
  410.     int sign_E = POSITIVE_NUMBER;/*Знак порядка*/
  411.     /*Переменная запоминающая старый порядок перед нормализацией*/
  412.     int old_E = 0;
  413.     int point_flag = FALSE;/*Переменная для проверки наличия точки в числе*/
  414.     /*Проверка наличия целой части*/
  415.     while (index < strlen(string))
  416.     {
  417.         /*Встретилась ли точка при записи числа*/
  418.         if (string[index] == '.')
  419.         {
  420.             point_flag = TRUE;
  421.         }
  422.         /*Встретилась ли E при записи числа*/
  423.         if (string[index] == 'E')
  424.         {
  425.             if (string[index + 1] == '-')
  426.             {
  427.                 sign_E = NEGATIVE_NUMBER;
  428.             }
  429.             E_flag = TRUE;
  430.             int index_zero_check = index;
  431.             /*Удаление незначащих нулей с конца*/
  432.             while (string[index_zero_check - 1] == '0')
  433.             {
  434.                 index_zero_check--;
  435.                 ++(*E);
  436.                 size_to_delete++;
  437.             }
  438.         }
  439.         /*Проверка на наличие целой части числа*/
  440.         if ((string[index] != '+') && (string[index] != '-') && (string[index] != '.') &&
  441.             (string[index] != 'E') && (E_flag == FALSE))
  442.         {
  443.             /*Встретилась ли точка?Т.к. целой части нет, то порядок далее убывает*/
  444.             if (point_flag == TRUE)
  445.             {
  446.                 --(*E);
  447.             }
  448.             /*Перевод чисел из char в int*/
  449.             digits[*size] = string[index] - '0';
  450.             ++(*size);
  451.         }
  452.         /*Запись изначального порядка числа*/
  453.         if (E_flag == TRUE)
  454.         {
  455.             if ((string[index] != 'E') && (string[index] != '+') && (string[index] != '-'))
  456.             {
  457.                 /*Запись старого порядка числа*/
  458.                 old_E = old_E + (string[index] - '0');
  459.                 if (strlen(string) > index + 1)
  460.                 {
  461.                     old_E = old_E * 10;
  462.                 }
  463.             }
  464.         }
  465.         index++;
  466.     }
  467.     /*Корректировка размера массива цифр в соотв с наличием незначащих нулей*/
  468.     *size = *size - size_to_delete;
  469.     /*Смещение цифр в зависимости от наличия незначащего нуля в начале*/
  470.     if (useless_zero == TRUE)
  471.     {
  472.         for (int j = 0; j < (*size - 1); j++)
  473.         {
  474.             swap(&digits[j], &digits[j + 1]);
  475.         }
  476.         --(*size);
  477.     }
  478.     /*Преобразование порядка с учетом знака Е*/
  479.     old_E *= sign_E;
  480.     if (E_limit_check(*E) == ERROR_CODE)
  481.     {
  482.         return ERROR_CODE;
  483.     }
  484.     /*Получение финального порядка числа*/
  485.     *E = *E + old_E;
  486.     remove_zero(digits, size, E);
  487.  
  488.     return RIGHT;
  489. }
  490.  
  491. char input_format_check(char *string)
  492. {
  493.     /*Массив допустимых символов*/
  494.     char allowed_array[14] = "0123456789E+-.";
  495.     int size = 0;
  496.     int E_quantity_check = 0; /*Подсчет кол-ва встречаемого символа E*/
  497.     int sign_quantity_check = 0;/*Подсчет кол-ва встречаемого символа знака*/
  498.     int dot_quantity_check = 0;/*Подсчет кол-ва встречаемого символа точки*/
  499.  
  500.     /*Если число не начинается со знака,то ошибка*/
  501.     if ((string[size] != '-') && (string[size] != '+'))
  502.     {
  503.         return ERROR_CODE;
  504.     }
  505.  
  506.     /*Движение по строке до ее конца*/
  507.     while (size != strlen(string))
  508.     {
  509.         /*Переменная для проверки корректности введенного сивола*/
  510.         int check_correct_input = 0;
  511.         for (int i = 0; i < 14; i++)
  512.         {
  513.             /*Входит ли введенный символ в список допустиых*/
  514.             if (string[size] == allowed_array[i])
  515.             {
  516.                 check_correct_input = 1;
  517.             }
  518.         }
  519.         if (string[size] == 'E')
  520.         {
  521.             /*Проверка обязательного знака после E*/
  522.             if ((string[size + 1] != '-') && (string[size + 1] != '+'))
  523.             {
  524.                 /*Проверка введен ли порядок после E*/
  525.                 if ((string[size + 2] != '0') && (string[size + 2] != '1')
  526.                     && (string[size + 2] != '2') && (string[size + 2] != '3')
  527.                     && (string[size + 2] != '4') && (string[size + 2] != '5')
  528.                     && (string[size + 2] != '6') && (string[size + 2] != '7')
  529.                     && (string[size + 2] != '8') && (string[size + 2] != '9'))
  530.                 {
  531.                     return ERROR_CODE;
  532.                 }
  533.             }
  534.             E_quantity_check++;
  535.         }
  536.         if (string[size] == '-' || string[size] == '+')
  537.         {
  538.             /*Проверка знака на первой позиции*/
  539.             if ((size != 0))
  540.             {
  541.                 /*Проверка знака после E*/
  542.                 if (string[size - 1] != 'E')
  543.                 {
  544.                     return ERROR_CODE;
  545.                 }
  546.             }
  547.             if (string[size + 1] == 'E')
  548.             {
  549.                 return ERROR_CODE;
  550.             }
  551.             sign_quantity_check++;
  552.         }
  553.         if (string[size] == '.')
  554.         {
  555.             /*Исключение чисел с запятой в порядке*/
  556.             if (E_quantity_check == DEGREE_LIMIT)
  557.             {
  558.                 return ERROR_CODE;
  559.             }
  560.             dot_quantity_check++;
  561.         }
  562.         /*Проверка допустимого количества элементов*/
  563.         if ((check_correct_input != 1) || (sign_quantity_check > SIGN_QUANTITY_LIMIT) \
  564.  || (E_quantity_check > DEGREE_LIMIT) || (dot_quantity_check > DOT_LIMIT))
  565.         {
  566.             return ERROR_CODE;
  567.         }
  568.         /*Переход к следующему символу строки*/
  569.         size++;
  570.     }
  571.     return RIGHT;
  572. }
  573.  
  574. int input_function(char *input)
  575. {
  576.     if (scanf("%100s", input) != INPUT_OK)
  577.     {
  578.         return ERROR_CODE;
  579.     }
  580.  
  581.     /*Проверка длинны введенного чилса*/
  582.     if (strlen(input) > ALLOWED_INPUT_SIZE)
  583.     {
  584.         printf("Input size exceeded");
  585.         return ERROR_CODE;
  586.     }
  587.  
  588.     /*Проверка корректности введенного формата числа*/
  589.     if (input_format_check(input) != RIGHT)
  590.     {
  591.         printf("Invalid input format");
  592.         return ERROR_CODE;
  593.     }
  594.     return RIGHT;
  595. }
  596.  
  597. int zero_check(char *string)
  598. {
  599.     if ((string[1] == '0') && (string[2] != '.'))
  600.     {
  601.         return ZERO_WARNING;
  602.     }
  603.     return RIGHT;
  604. }
  605.  
  606. int main()
  607. {
  608.     /*Правила ввода текста в консоли*/
  609.     welcome_text();
  610.  
  611.     char input[ALLOWED_INPUT_SIZE];/*Строка ввода первого числа*/
  612.     char input2[ALLOWED_INPUT_SIZE];/*Строка второго  числа*/
  613.  
  614.     /* Переменные для нормализации вида числа*/
  615.     int digits[ALLOWED_INPUT_SIZE]; /* Массив цифр первого числа */
  616.     int sign = 1;/*Знак первого числа*/
  617.     int size = 0;/*Размер массива цифр первого числа*/
  618.     int E = 0; /*Порядок первого числа*/
  619.  
  620.     int digits2[ALLOWED_INPUT_SIZE];/* Массив цифр второго числа */
  621.     int sign2 = 1;/*Знак второго числа*/
  622.     int size2 = 0;/*Размер массива цифр второго числа*/
  623.     int E2 = 0;/*Порядок второго числа*/
  624.  
  625.     printf("Input first number:");
  626.  
  627.     /*Проверка правильного формата первого числа*/
  628.     if (input_function(input) == ERROR_CODE)
  629.     {
  630.         return ERROR_CODE;
  631.     }
  632.  
  633.     /* Если первое число равно 0, то результат деления равен 0 */
  634.     if (zero_check(input) == ZERO_WARNING)
  635.     {
  636.         printf("0");
  637.         return RIGHT;
  638.     }
  639.  
  640.     /*Нормализация первого числа*/
  641.     if (number_split(input, digits, &size, &E, &sign) == ERROR_CODE)
  642.     {
  643.         return ERROR_CODE;
  644.     }
  645.  
  646.     struct BigDecimal number1;/*Cтруктура первого числа*/
  647.     struct BigDecimal number2;/*Структура второго числа*/
  648.  
  649.     number1.sign = sign;/*Добавление в структуру знака числа*/
  650.     number1.E = E;/*Добавление в структуру порядка числа*/
  651.     number1.size = size;/*Добавление в структуру размера числа*/
  652.     /*Добавление в структуру массива цифр числа*/
  653.     if (size > 30)
  654.     {
  655.         printf("Mantissa is out of size");
  656.         return ERROR_CODE;
  657.     }
  658.     for (int i = 0; i < size; i++)
  659.     {
  660.         number1.digits[i] = digits[i];
  661.     }
  662.     printf("\n");
  663.     printf("                     1             15             30\n"
  664.            "                     |-------------|--------------|\n");
  665.     printf("Input second number:");
  666.  
  667.     /*Проверка правильного формата второго числа*/
  668.     if (input_function(input2) == ERROR_CODE)
  669.     {
  670.         return ERROR_CODE;
  671.     }
  672.  
  673.     /*Если второе число равно 0, то деление невозможно*/
  674.     if (zero_check(input2) == ZERO_WARNING)
  675.     {
  676.         printf("Can't divide by zero!");
  677.         return ERROR_CODE;
  678.     }
  679.  
  680.     /*Нормализация второго числа*/
  681.     if (number_split(input2, digits2, &size2, &E2, &sign2) == ERROR_CODE)
  682.     {
  683.         return ERROR_CODE;
  684.     }
  685.  
  686.     number2.sign = sign2;/*Добавление в структуру знака числа*/
  687.     number2.E = E2;/*Добавление в структуру порядка числа*/
  688.     number2.size = size2;/*Добавление в структуру размера числа*/
  689.     /*Добавление в структуру массива цифр числа*/
  690.     for (int i = 0; i < size2; i++)
  691.     {
  692.         number2.digits[i] = digits2[i];
  693.     }
  694.     if (size2 > 30)
  695.     {
  696.         printf("Invalid input format");
  697.         return ERROR_CODE;
  698.     }
  699.  
  700.     /*Создание структуры для результата*/
  701.     struct BigDecimal result = floatingDivide(number1, number2);
  702.  
  703.     /*Проверка на превышение допустимого размера порядка числа*/
  704.     if (E_limit_check(result.E) == ERROR_CODE)
  705.     {
  706.         return ERROR_CODE;
  707.     }
  708.  
  709.     /*Вывод результата*/
  710.     if (printBigDecimal(result) == ERROR_CODE)
  711.     {
  712.         return ERROR_CODE;
  713.     }
  714.     return RIGHT;
  715. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement