Advertisement
messimmous

Delenie

Jan 31st, 2015
198
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.25 KB | None | 0 0
  1.  
  2. void delenie(char a[], char b[], char c[], char d[]) // a/b=c
  3. {
  4.     int signa = 1;
  5.     int signb = 1;
  6.     if (a[N - 1] >= p / 2) // если первая цифра доп.кода больше половины основания системы исчисления, то число было отрицательным.
  7.     {
  8.         signa = -1;
  9.         minus(a); // доп код доп. кода числа есть число
  10.     }
  11.     if (b[N - 1] >= p / 2) // если первая цифра доп.кода больше половины основания системы исчисления, то число было отрицательным.
  12.     {
  13.         signb = -1;
  14.         minus(b); // доп код доп. кода числа есть число
  15.     }
  16.     for (int i = 0; i < N; i++)
  17.     {
  18.         c[i] = 0;
  19.         d[i] = 0;
  20.     }
  21.     char tmp[N + 1];
  22.     char up[N + 1];
  23.     char down[N + 1];
  24.     char ost[N + 1];
  25.     char proverka[N + 1];
  26.     char check[N + 1];
  27.     for (int i = 0; i < N; i++)
  28.     {
  29.         up[i] = a[i];
  30.         down[i] = 0;
  31.     }
  32.     int flag = 0;
  33.     int k = 0;
  34.     int c1;
  35.     int c2;
  36.     while (1 == 1)
  37.     {
  38.         c1 = N - 1;
  39.         //printf("\nUp = ");
  40.         //output(up);
  41.     //  printf("\nDown = ");
  42.         //output(down);
  43.         add(up, down, tmp);
  44.         popolam(tmp);
  45.         //printf("\nSredneye = ");
  46.     //  output(tmp);
  47.         //printf("\nProverka = ");
  48.             umnozhenie(tmp, b, proverka);
  49.     //  output(proverka);
  50.         k = cmp(proverka, a);
  51.     //  printf("\n k = %d ", k);
  52.         if (k == 1)
  53.         {
  54.             for (int i = 0; i < N; i++)
  55.                 up[i] = tmp[i];
  56.         }
  57.         if (k == -1)
  58.         {
  59.  
  60.             for (int i = 0; i < N; i++)
  61.                 down[i] = tmp[i];
  62.         }
  63.  
  64.  
  65.         if (k == 0)
  66.         {
  67.             if (signa*signb==-1)
  68.                 minus (tmp);
  69.             for (int i = 0; i < N; i++)
  70.             {
  71.                 c[i] = tmp[i];
  72.                 d[i] = 0;
  73.             }
  74.         //  printf("Break");
  75.             break;
  76.         }
  77.         sub(a, proverka, ost);
  78.         //printf("\nOstatok = ");
  79.         //output(ost);
  80.         for (; c1 >= 0; c1--)
  81.         if (ost[c1])
  82.             break;
  83.         int c2 = N - 1;
  84.         for (; c2 >= 0; c2--)
  85.         if (b[c2])
  86.             break;
  87.         while (ost[c1] == b[c2])
  88.         {
  89.             c1--;
  90.             c2--;
  91.         }
  92.         //printf("\nDlya ostatka: OST = %d     B= %d", ost[c1], b[c2]);
  93.         if (ost[c1]<b[c2] && c1 == c2 || c2>c1)
  94.         {
  95.             for (int i = 0; i < N; i++)
  96.             {
  97.                 c[i] = tmp[i];
  98.                 d[i] = ost[i];
  99.             }
  100.             if (signa*signb == -1)
  101.                 minus(c);
  102.             if (signa == -1)
  103.                 minus(d);
  104.             break;
  105.         }
  106.         //_getch();
  107.     }
  108. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement