Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <conio.h>
- using std::cout;
- using std::cin;
- using std::endl;
- int _dectobin(), _dectohex(), _bintodec(), _hextodec();
- void main()
- {
- setlocale(LC_ALL, "Russian");
- char key = 0;
- while (key != 27)
- {
- cout << "1. Decimal to binary\n" << "2. Decimal to hexadecimal\n" << "3. Binary to decimal\n" << "4. Hexadecimal to decimal" << endl << endl;
- switch (key)
- {
- case 49:
- _dectobin();
- break;
- case 50:
- _dectohex();
- break;
- case 51:
- _bintodec();
- break;
- case 52:
- _hextodec();
- break;
- default:
- system("cls");
- cout << "1. Decimal to binary\n" << "2. Decimal to hexadecimal\n" << "3. Binary to decimal\n" << "4. Hexadecimal to decimal" << endl << endl;
- }
- key = getch();
- system("cls");
- }
- }
- int _dectobin()
- {
- const int size = 33;
- int binary[size], decimal = (cout << "Введите десятичное (decimal) число -> ", cin >> decimal, cout << endl, decimal);
- int i = size - 1;
- while (i != -1)
- {
- binary[i] = decimal % 2;
- decimal = (decimal - binary[i]) / 2;
- i--;
- }
- cout << "Binary: ";
- for (int i = 1; i < size; ((i % 8 == 0) ? cout << binary[i] << " " : (i % 4 == 0) ? cout << binary[i] << " " : cout << binary[i]), i++);
- cout << endl << endl;
- return 0;
- }
- int _dectohex()
- {
- const int size = 9;
- int decimal = (setlocale(LC_ALL, "Russian"), cout << "Введите десятичное (decimal) число -> ", cin >> decimal, cout << endl, decimal);
- char hexadecimal[size];
- int i = size - 1;
- while (i != -1)
- {
- hexadecimal[i] = decimal % 16;
- decimal = (decimal - hexadecimal[i]) / 16;
- i--;
- }
- cout << "Hexadecimal: ";
- for (int i = 1; i < size; ((hexadecimal[i] == 10) ? cout << 'A' : (hexadecimal[i] == 11) ? cout << 'B' : (hexadecimal[i] == 12) ? cout << 'C' : (hexadecimal[i] == 13) ? cout << 'D' : (hexadecimal[i] == 14) ?
- cout << 'E' : (hexadecimal[i] == 15) ? cout << 'F' : (i % 4 == 0) ? cout << (int)hexadecimal[i] << " " : cout << (int)hexadecimal[i]), i++);
- cout << endl << endl;
- return 0;
- }
- int _bintodec()
- {
- const int size = 32; // на самом деле тут можно обойтись значением 19, потому как в long long int можно ввести не более 19 разрядов
- long long int bin = (cout << "Введите двоичное (binary) число -> ", cin >> bin, cout << endl, bin); // ввод также можно организовать посредством массива (неудобно) или строк (не проходили)
- int power[size], mod = 0, dec = 0, pow = 1;
- for (int i = 0; i < size - 1; i++) // запись степеней 2 в массив power
- {
- power[i] = pow;
- pow *= 2;
- }
- int i = 0;
- while (bin != 0)
- {
- mod = bin % 10;
- bin /= 10; // сокращение двоичного числа на разряд
- dec = dec + (mod * power[i]); // умножение последнего разряда двоичного числа на 2 в степени от 1 и выше
- i++; // счетчик для степеней двойки
- }
- cout << "Decimal: " << dec << endl << endl;
- return 0;
- }
- int _hextodec()
- {
- const int size = 16;
- long long int power[size], pow = 1;
- long long int dec = 0;
- char hex[size] = {};
- cout << "Введите шестнадцатиричное (hexadecimal) число -> "; cin >> hex; cout << endl;
- for (int i = 0; i < size; i++)
- {
- power[i] = pow;
- pow *= 16;
- }
- int i = 0;
- for (int i = 0; i < size; ((hex[i] == 'A') ? hex[i] = (int)10 : (hex[i] == 'B') ? hex[i] = (int)11 : (hex[i] == 'C') ? hex[i] = (int)12 : (hex[i] == 'D') ? hex[i] = (int)13 :
- (hex[i] == 'E') ? hex[i] = (int)14 : (hex[i] == 'F') ? hex[i] = (int)15 : /* (hex[i] <= 0) ? hex[i] *= (int)0 : */ hex[i] = (char)hex[i] - 48), i++);
- for (int i = size - 1, j = 0; i >= 0; i--)
- {
- if (hex[i] >= 0) dec = dec + ((int)hex[i] * power[j++]);
- }
- cout << "Decimal: " << dec << endl << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement