Advertisement
kuchumov

Untitled

Dec 1st, 2016
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.17 KB | None | 0 0
  1. //—писок подключаемых директив препроцессора.
  2. #include <iostream>
  3. #include <fstream>
  4. #include <locale>
  5. #include <string>
  6. using namespace std;
  7. //–абота со строкой
  8.  
  9. //ѕроверка на знак числа(положительное число или отрицательное).
  10. //ѕровер€ет нет ли посторонних символов в числе.
  11. bool proverka_na_duraka(string, bool &);
  12.  
  13. //–абота с массивами
  14.  
  15. //ѕрототип функции выделени€ пам€ти под массив 1.
  16. int *mem(int &);
  17. //ѕрототип функции выделени€ целой части от делени€ на 2.
  18. void delenie_2(int *, int);
  19. //ѕрототип функции проверки на 0 всех элементов массива 1
  20. bool prover(int *, int);
  21. //ѕрототип функции заполнени€ массива элементами из строки(дл€ положительного числа).
  22. void massiv_Plus(int *, string);
  23. //ѕрототип функции заполнени€ массива элементами из строки(дл€ отрицательного числа).
  24. void massiv_Minus(int *, string, int &);
  25. //ѕрототип функции перевода числа в двоичную систему счислени€.
  26. void perevod_chisla(int *, int*, int ,int &);
  27. //ѕрототип функции вывода массива на экран.
  28. void vivod(int *, int);
  29.  
  30. //‘ункци€ проверки на знак числа(положительное число или отрицательное).
  31. //“акже провер€ет нет ли посторонних символов в числе.(проверка на дурака)
  32. bool proverka_na_duraka(string str, bool &sign)
  33. {
  34.     int kol_minus = 1;
  35.     bool proverka = true;
  36.     int i = 0;
  37.     while(proverka && i < str.size())
  38.     {
  39.         if(str[i] == '-' && kol_minus == 1)
  40.         {
  41.             sign = false;
  42.             kol_minus++;
  43.         }
  44.         else
  45.             proverka = (str[i] >= '0' && str[i] <= '9');
  46.         i++;
  47.     }
  48.     return proverka;
  49. }
  50.  
  51. //‘ункци€ выделени€ пам€ти под массив 1.
  52. int *mem(int &n)  
  53.  
  54. {
  55.     int *pa = new int[n];
  56.     return pa;
  57. }
  58.  
  59. //‘ункци€ выделени€ целой части от делени€ на 2.
  60. void delenie_2(int *a, int n)
  61. {
  62.     int ym = 0, cifra;
  63.     for(int i = 0; i<n; i++)
  64.     {
  65.         cifra = a[i] + ym*10;
  66.         a[i] = cifra/2;
  67.         ym=cifra%2;
  68.     }
  69. }
  70.  
  71. //‘ункци€ проверки на 0 всех элементов массива 1.
  72. bool prover(int *a, int n)  
  73. {
  74.     bool k = 0;
  75.     int i= 0;
  76.     while (i<n && !k)
  77.     {
  78.         k = (a[i] != 0);
  79.         i ++;
  80.     }
  81.     return k;
  82. }
  83.  
  84. //‘ункци€ заполнени€ массива элементами из строки(дл€ положительного числа).
  85. void massiv_Plus(int *a, string str)
  86. {
  87.     for (int i = 0; i < str.size(); i++)
  88.         a[i] = str[i] - '0';
  89. }
  90.  
  91. //‘ункци€ заполнени€ массива элементами из строки(дл€ отрицательного числа).
  92. void massiv_Minus(int *a, string str, int &n)
  93. {
  94.     for (int i = 0; i < n; i++)
  95.     {
  96.         if(str[i] == '-')
  97.         {
  98.             a[i] = (-1)*(str[1] - '0');
  99.             n--;
  100.         }
  101.         else
  102.             a[i] = str[i+1] - '0';
  103.     }
  104. }
  105.  
  106. //‘ункци€ перевода числа в двоичную систему счислени€.
  107. //(ћассив "a" - это массив 1 с частным при делении на 2. ћассив "b" - это массив с остатками от делени€.)
  108. void perevod_chisla(int *a, int *b, int n, int &j)
  109. {
  110.     int l;
  111.     do
  112.     {
  113.         b[j++] = a[n-1] % 2;
  114.         delenie_2(a,n);
  115.     }
  116.     while(prover(a,n) != 0);
  117.     // ћен€ем местами цифры в числе, так как заполнение массива идет с начала.
  118.     for(int i = 0; i< j/2; i++)
  119.     {
  120.         l = b[i];
  121.         b[i] = b[j -1 -i];
  122.         b[j-1-i] = l;
  123.     }
  124. }
  125.  
  126. //‘ункци€ вывода массива на экран.
  127. void vivod(int *a, int  n)
  128. {
  129.     for(int i = 0; i < n; i++)
  130.     cout<<a[i];
  131.     cout<<endl;
  132. }
  133.  
  134. //ќсновна€ часть программы, функци€ main.
  135. void main()
  136. {
  137.     //Ћокализаци€ консоли.
  138.     setlocale(LC_ALL, "rus");
  139.    
  140.     int *A, *B, sis_schi,n,o,j,l;
  141.     bool sign; // переменна€ провер€ет положительное число или отрицательное
  142.     string chislo;
  143.  
  144.     bool proverka1 = true;
  145.  
  146.     sign = true;
  147.     cout<<"ѕрограмма переводит число из дес€тичной системы счислени€ в двоичную."<<endl;
  148.     //ѕриглашение на ввод.
  149.     cout<<"¬ведите число: ";
  150.     //¬ыполн€етс€, пока строка не будет €вл€тьс€ натуральным числом, т.е. не будет содержать лишних символов.
  151.     while (proverka1)
  152.     {
  153.         //—читывание в виде строки.
  154.         cin>>chislo;
  155.         if(proverka_na_duraka(chislo, sign))
  156.         {  
  157.             proverka1 = false;
  158.             //—оздание массива.
  159.             n = chislo.length();
  160.             A = mem(n); o = n*4; B = mem(o);
  161.             j = 0;
  162.             if (sign==true)
  163.             {
  164.                 //«аполнение массива элементами из строки.
  165.                 massiv_Plus(A,chislo);
  166.            
  167.                 //¬ывод на экран.
  168.                 cout<<"„исло в дес€тичной системе счислени€: ";
  169.                 vivod(A,n);
  170.                 cout<<"ѕереведенное число: ";
  171.                 perevod_chisla(A, B,n,j);
  172.                 vivod(B,j);
  173.             }
  174.             else //ƒл€ отрицательных чисел
  175.             {
  176.                 //«аполнение массива
  177.                 massiv_Minus(A,chislo,n);
  178.                 //¬ывод на экран.
  179.                 cout<<"„исло в дес€тичной системе счислени€: ";
  180.                 vivod(A,n);
  181.                 cout<<"ѕереведенное число: ";
  182.                 A[0] = abs(A[0]);
  183.                 perevod_chisla(A,B,n,j);
  184.                 B[0] = B[0]*(-1);
  185.                 vivod(B,j);
  186.             }
  187.         }
  188.         else
  189.         {
  190.             //ѕовторное приглашение на ввод. 
  191.             cout<<"¬ведите число заново: ";
  192.         }
  193.     }
  194.  system("pause");
  195.  return ;
  196. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement