Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //—писок подключаемых директив препроцессора.
- #include <iostream>
- #include <fstream>
- #include <locale>
- #include <string>
- using namespace std;
- //–абота со строкой
- //ѕроверка на знак числа(положительное число или отрицательное).
- //ѕровер€ет нет ли посторонних символов в числе.
- bool proverka_na_duraka(string, bool &);
- //–абота с массивами
- //ѕрототип функции выделени€ пам€ти под массив 1.
- int *mem(int &);
- //ѕрототип функции выделени€ целой части от делени€ на 2.
- void delenie_2(int *, int);
- //ѕрототип функции проверки на 0 всех элементов массива 1
- bool prover(int *, int);
- //ѕрототип функции заполнени€ массива элементами из строки(дл€ положительного числа).
- void massiv_Plus(int *, string);
- //ѕрототип функции заполнени€ массива элементами из строки(дл€ отрицательного числа).
- void massiv_Minus(int *, string, int &);
- //ѕрототип функции перевода числа в двоичную систему счислени€.
- void perevod_chisla(int *, int*, int ,int &);
- //ѕрототип функции вывода массива на экран.
- void vivod(int *, int);
- //‘ункци€ проверки на знак числа(положительное число или отрицательное).
- //“акже провер€ет нет ли посторонних символов в числе.(проверка на дурака)
- bool proverka_na_duraka(string str, bool &sign)
- {
- int kol_minus = 1;
- bool proverka = true;
- int i = 0;
- while(proverka && i < str.size())
- {
- if(str[i] == '-' && kol_minus == 1)
- {
- sign = false;
- kol_minus++;
- }
- else
- proverka = (str[i] >= '0' && str[i] <= '9');
- i++;
- }
- return proverka;
- }
- //‘ункци€ выделени€ пам€ти под массив 1.
- int *mem(int &n)
- {
- int *pa = new int[n];
- return pa;
- }
- //‘ункци€ выделени€ целой части от делени€ на 2.
- void delenie_2(int *a, int n)
- {
- int ym = 0, cifra;
- for(int i = 0; i<n; i++)
- {
- cifra = a[i] + ym*10;
- a[i] = cifra/2;
- ym=cifra%2;
- }
- }
- //‘ункци€ проверки на 0 всех элементов массива 1.
- bool prover(int *a, int n)
- {
- bool k = 0;
- int i= 0;
- while (i<n && !k)
- {
- k = (a[i] != 0);
- i ++;
- }
- return k;
- }
- //‘ункци€ заполнени€ массива элементами из строки(дл€ положительного числа).
- void massiv_Plus(int *a, string str)
- {
- for (int i = 0; i < str.size(); i++)
- a[i] = str[i] - '0';
- }
- //‘ункци€ заполнени€ массива элементами из строки(дл€ отрицательного числа).
- void massiv_Minus(int *a, string str, int &n)
- {
- for (int i = 0; i < n; i++)
- {
- if(str[i] == '-')
- {
- a[i] = (-1)*(str[1] - '0');
- n--;
- }
- else
- a[i] = str[i+1] - '0';
- }
- }
- //‘ункци€ перевода числа в двоичную систему счислени€.
- //(ћассив "a" - это массив 1 с частным при делении на 2. ћассив "b" - это массив с остатками от делени€.)
- void perevod_chisla(int *a, int *b, int n, int &j)
- {
- int l;
- do
- {
- b[j++] = a[n-1] % 2;
- delenie_2(a,n);
- }
- while(prover(a,n) != 0);
- // ћен€ем местами цифры в числе, так как заполнение массива идет с начала.
- for(int i = 0; i< j/2; i++)
- {
- l = b[i];
- b[i] = b[j -1 -i];
- b[j-1-i] = l;
- }
- }
- //‘ункци€ вывода массива на экран.
- void vivod(int *a, int n)
- {
- for(int i = 0; i < n; i++)
- cout<<a[i];
- cout<<endl;
- }
- //ќсновна€ часть программы, функци€ main.
- void main()
- {
- //Ћокализаци€ консоли.
- setlocale(LC_ALL, "rus");
- int *A, *B, sis_schi,n,o,j,l;
- bool sign; // переменна€ провер€ет положительное число или отрицательное
- string chislo;
- bool proverka1 = true;
- sign = true;
- cout<<"ѕрограмма переводит число из дес€тичной системы счислени€ в двоичную."<<endl;
- //ѕриглашение на ввод.
- cout<<"¬ведите число: ";
- //¬ыполн€етс€, пока строка не будет €вл€тьс€ натуральным числом, т.е. не будет содержать лишних символов.
- while (proverka1)
- {
- //—читывание в виде строки.
- cin>>chislo;
- if(proverka_na_duraka(chislo, sign))
- {
- proverka1 = false;
- //—оздание массива.
- n = chislo.length();
- A = mem(n); o = n*4; B = mem(o);
- j = 0;
- if (sign==true)
- {
- //«аполнение массива элементами из строки.
- massiv_Plus(A,chislo);
- //¬ывод на экран.
- cout<<"„исло в дес€тичной системе счислени€: ";
- vivod(A,n);
- cout<<"ѕереведенное число: ";
- perevod_chisla(A, B,n,j);
- vivod(B,j);
- }
- else //ƒл€ отрицательных чисел
- {
- //«аполнение массива
- massiv_Minus(A,chislo,n);
- //¬ывод на экран.
- cout<<"„исло в дес€тичной системе счислени€: ";
- vivod(A,n);
- cout<<"ѕереведенное число: ";
- A[0] = abs(A[0]);
- perevod_chisla(A,B,n,j);
- B[0] = B[0]*(-1);
- vivod(B,j);
- }
- }
- else
- {
- //ѕовторное приглашение на ввод.
- cout<<"¬ведите число заново: ";
- }
- }
- system("pause");
- return ;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement