Advertisement
Krudener

Untitled

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