Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //#include "stdafx.h"
- #include <iostream>
- #include <string.h>
- #include <stdlib.h>
- #include <conio.h>
- #include <string>
- using namespace std;
- long double degree(int deg, int number) {
- long double res = 1;
- for (int i = 0; i < abs(deg); i++) {
- res *= number;
- }
- if (deg < 0)
- res = 1 / res;
- return res;
- }
- void numberEnter(string& str, int numberSystem, char& sign) {
- char ch = 0;
- while (ch != 13) {
- ch = _getch();
- if (ch == '-') {
- sign *= -1;
- cout << ch;
- }
- else {
- if (numberSystem > 36) {
- if ((ch >= '0' && ch <= '9') || (ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch < numberSystem + '0' + 7 + 6)) {
- cout << ch;
- str += ch;
- }
- }
- else {
- if (numberSystem > 10) {
- if ((ch >= '0' && ch <= '9') || (ch >= 'A' && ch < numberSystem + '0' + 7)) {
- cout << ch;
- str += ch;
- }
- }
- else {
- if (ch >= '0' && ch < numberSystem + '0') {
- cout << ch;
- str += ch;
- }
- }
- }
- }
- }
- }
- void fractionalNumberEnter(string& str, int numberSystem, char& sign, int& dotPos) {
- char ch = 0;
- int k = 0;
- while (ch != 13) {
- ch = _getch();
- if (ch == '.' && dotPos == -1) {
- dotPos = k;
- cout << ch;
- str += ch;
- k++;
- }
- else {
- if (ch == '-') {
- sign *= -1;
- cout << ch;
- }
- else {
- k++;
- if (numberSystem > 36) {
- if ((ch >= '0' && ch <= '9') || (ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch < numberSystem + '0' + 7 + 6)) {
- cout << ch;
- str += ch;
- }
- }
- else {
- if (numberSystem > 10) {
- if ((ch >= '0' && ch <= '9') || (ch >= 'A' && ch < numberSystem + '0' + 7)) {
- cout << ch;
- str += ch;
- }
- }
- else {
- if (ch >= '0' && ch < numberSystem + '0') {
- cout << ch;
- str += ch;
- }
- }
- }
- }
- }
- }
- }
- void charEnter(string& charEnter) {
- char ch = 0;
- while (ch != 13/*return*/) {
- ch = _getch();
- if (ch >= '0' && ch <= '9') {
- cout << ch;
- charEnter += ch;
- }
- if ((charEnter[0] > '2' && charEnter.length() >= 2) || (charEnter.length() == 3))
- break;
- }
- }
- void printAlphabet(int numberSystem) {
- cout << "Admissible characters: ";
- for (int i = 0; i < numberSystem; i++) {
- if (i < 10)
- cout << "\t" << char(i + '0') << "-" << i << " ";
- if (i >= 10 && i < 36)
- cout << "\t" << char(i + '0' + 7) << "-" << i << " ";
- if (i >= 36)
- cout << "\t" << char(i + '0' + 7 + 6) << "-" << i << " ";
- }
- cout << endl;
- }
- int main()
- {
- //system("color F0");
- char dataType;
- do {
- short int numberSystem = 0;
- char ch = 0;
- string intEnter{}, numberSystemEnter{}, floatEnter{}, doubleEnter{}, charString{};
- cout << "Enter data type\n" << "[1] - int\n" << "[2] - float\n"
- << "[3] - double\n" << "[4] - char\n" << "[5] - bool\n" << "[ESC] - exit\n";
- dataType = _getch();
- if (dataType == '1' || dataType == '2' || dataType == '3') {
- system("cls");
- do {
- ch = 0;
- cout << "Enter number system (2-62): ";
- while (numberSystemEnter.length() < 2 && ch != 13/*return*/) {
- ch = _getch();
- if (ch >= '0' && ch <= '9') {
- if (!(ch == '0' && numberSystemEnter.length() == 0)) {
- cout << ch;
- numberSystemEnter += ch;
- }
- }
- if (numberSystemEnter.length() == 1 && numberSystemEnter[0] > '6') {
- break;
- }
- }
- for (int i = 0; i < numberSystemEnter.length(); i++) {
- numberSystem += (numberSystemEnter[i] - '0') * degree(numberSystemEnter.length() - i - 1, 10);
- }
- if (numberSystem > 62 || numberSystem < 2) {
- system("cls");
- cout << "ERROR: Wrong enter!" << endl;
- numberSystem = 0;
- numberSystemEnter = "";
- }
- } while (numberSystem < 2 || numberSystem > 62);
- }
- switch (dataType) {
- case '1' /*int*/:
- union {
- int number;
- char bytes[sizeof(int)];
- };
- number = 0;
- char sign;
- sign = 1;
- system("cls");
- cout << "INT " << numberSystem << " system\n";
- printAlphabet(numberSystem);
- cout << "Enter number: ";
- numberEnter(intEnter, numberSystem, sign);
- for (int i = 0; i < intEnter.length(); i++) {
- if (intEnter[i] >= 'a') {
- number += (intEnter[i] - '0' - 7 - 6) * degree(intEnter.length() - i - 1, numberSystem);
- }
- else {
- if (intEnter[i] >= 'A') {
- number += (intEnter[i] - '0' - 7) * degree(intEnter.length() - i - 1, numberSystem);
- }
- else {
- number += (intEnter[i] - '0') * degree(intEnter.length() - i - 1, numberSystem);
- }
- }
- }
- number *= sign;
- cout << "\ndecimal notation: " << number << endl;
- cout << "binary notation: ";
- for (int i = sizeof(int) - 1; i >= 0; i--) {
- for (int j = 0; j < sizeof(char) * 8; j++) {
- if (bytes[i] & 128)
- cout << "1";
- else
- cout << 0;
- bytes[i] <<= 1;
- }
- }
- cout << endl;
- system("pause");
- system("cls");
- break;
- case '2' /*float*/:
- union {
- float number2;
- char bytes2[sizeof(float)];
- };
- number2 = 0;
- char sign2;
- sign2 = 1;
- int dotPos;
- dotPos = -1;
- system("cls");
- cout << "FLOAT " << numberSystem << " system\n";
- printAlphabet(numberSystem);
- cout << "Enter number: ";
- fractionalNumberEnter(floatEnter, numberSystem, sign2, dotPos);
- if (dotPos != -1) {
- for (int i = 0; i < dotPos; i++) {
- if (floatEnter[i] - '0' < 10)
- number2 += (floatEnter[i] - '0') * degree(dotPos - i - 1, numberSystem);
- else {
- if (floatEnter[i] <= 'Z') {
- number2 += (floatEnter[i] - '0' - 7 /*number that deletes the difference between the character A and number 10*/) * degree(dotPos - i - 1, numberSystem);
- }
- else {
- number2 += (floatEnter[i] - '0' - 7 - 6 /*number that deletes the difference between the character a and 10*/) * degree(dotPos - i - 1, numberSystem);
- }
- }
- }
- for (int i = dotPos + 1; i < floatEnter.length(); i++) {
- if (floatEnter[i] - '0' < 10)
- number2 += (floatEnter[i] - '0') * degree(dotPos - i, numberSystem);
- else {
- if (floatEnter[i] <= 'Z') {
- number2 += (floatEnter[i] - '0' - 7 /*number that deletes the difference between the character A and number 10*/) * degree(dotPos - i, numberSystem);
- }
- else {
- number2 += (floatEnter[i] - '0' - 7 - 6 /*number that deletes the difference between the character a and number 10*/) * degree(dotPos - i, numberSystem);
- }
- }
- }
- }
- else {
- for (int i = 0; i < floatEnter.length(); i++) {
- if (floatEnter[i] - '0' < 10) {
- number2 += (floatEnter[i] - '0') * degree(floatEnter.length() - i - 1, numberSystem);
- }
- else {
- number2 += (floatEnter[i] - '0' - 7 /*number that deletes the difference between the character A and number 10*/) * degree(floatEnter.length() - i - 1, numberSystem);
- }
- }
- }
- number2 *= sign2;
- cout << "\ndecimal notation: " << fixed << number2 << endl;
- cout << "binary notation: ";
- for (int i = sizeof(float) - 1; i >= 0; i--) {
- for (int j = 0; j < sizeof(char) * 8; j++) {
- if (bytes2[i] & 128)
- cout << "1";
- else
- cout << 0;
- bytes2[i] <<= 1;
- }
- }
- cout << endl;
- system("pause");
- system("cls");
- break;
- case '3' /*double*/:
- union {
- double number3;
- char bytes3[sizeof(double)];
- };
- number3 = 0;
- char sign3;
- sign3 = 1;
- int dotPos2;
- dotPos2 = -1;
- system("cls");
- cout << "DOUBLE " << numberSystem << " system\n";
- printAlphabet(numberSystem);
- cout << "Enter number: ";
- fractionalNumberEnter(doubleEnter, numberSystem, sign3, dotPos2);
- if (dotPos2 != -1) {
- for (int i = 0; i < dotPos2; i++) {
- if (doubleEnter[i] - '0' < 10)
- number3 += (doubleEnter[i] - '0') * degree(dotPos2 - i - 1, numberSystem);
- else {
- if (floatEnter[i] <= 'Z') {
- number3 += (doubleEnter[i] - '0' - 7 /*number that deletes the difference between the character A and number 10*/) * degree(dotPos2 - i - 1, numberSystem);
- }
- else {
- number3 += (doubleEnter[i] - '0' - 7 - 6 /*number that deletes the difference between the character a and 10*/) * degree(dotPos2 - i - 1, numberSystem);
- }
- }
- }
- for (int i = dotPos2 + 1; i < doubleEnter.length(); i++) {
- if (doubleEnter[i] - '0' < 10)
- number3 += (doubleEnter[i] - '0') * degree(dotPos2 - i, numberSystem);
- else {
- if (floatEnter[i] <= 'Z') {
- number3 += (doubleEnter[i] - '0' - 7 /*number that deletes the difference between the character A and number 10*/) * degree(dotPos2 - i, numberSystem);
- }
- else {
- number3 += (doubleEnter[i] - '0' - 7 - 6 /*number that deletes the difference between the character a and number 10*/) * degree(dotPos2 - i, numberSystem);
- }
- }
- }
- }
- else {
- for (int i = 0; i < doubleEnter.length(); i++) {
- if (doubleEnter[i] - '0' < 10) {
- number3 += (doubleEnter[i] - '0') * degree(doubleEnter.length() - i - 1, numberSystem);
- }
- else {
- if (doubleEnter[i] <= 'Z') {
- number3 += (doubleEnter[i] - '0' - 7 /*number that deletes the difference between the character A and number 10*/) * degree(doubleEnter.length() - i - 1, numberSystem);
- }
- else {
- number3 += (doubleEnter[i] - '0' - 7 - 6 /*number that deletes the difference between the character A and number 10*/) * degree(doubleEnter.length() - i - 1, numberSystem);
- }
- }
- }
- }
- number3 *= sign3;
- cout << "\ndecimal notation: " << fixed << number3 << endl;
- cout << "binary notation: ";
- for (int i = sizeof(double) - 1; i >= 0; i--) {
- for (int j = 0; j < sizeof(char) * 8; j++) {
- if (bytes3[i] & 128)
- cout << "1";
- else
- cout << 0;
- bytes3[i] <<= 1;
- }
- }
- cout << endl;
- system("pause");
- system("cls");
- break;
- case '4' /*char*/:
- system("cls");
- char task, character;
- task = character = 0;
- do {
- cout << "[1] - character itself\n" << "[2] - code of character";
- task = _getch();
- if (task != '1' && task != '2') {
- system("cls");
- cout << "ERROR: Wrong enter!\n";
- }
- } while (task != '1' && task != '2');
- if (task == '1') {
- cout << "\nEnter a character: ";
- character = _getch();
- cout << character << endl;
- cout << "Code: " << int(character) << endl;
- }
- else {
- cout << "\nEnter code of character: ";
- charEnter(charString);
- for (int i = 0; i < charString.length(); i++) {
- character += (charString[i] - '0') * degree(charString.length() - i - 1, 10);
- }
- cout << "\nCharacter: " << character << endl;
- }
- cout << "binary notation: ";
- for (int i = 0; i < sizeof(char) * 8; i++) {
- if (character & 128)
- cout << "1";
- else
- cout << 0;
- character <<= 1;
- }
- cout << endl;
- system("pause");
- system("cls");
- break;
- case '5'/*bool*/:
- union {
- bool flag;
- char help;
- };
- system("cls");
- cout << "Enter smt: ";
- help = _getch();
- cout << help;
- if (help == '0')
- flag = 0;
- else
- flag = 1;
- cout << "\nYou entered: " << boolalpha << flag << endl;
- cout << "binary notation: ";
- for (int i = 0; i < sizeof(char) * 8; i++) {
- if (help & 128)
- cout << "1";
- else
- cout << 0;
- help <<= 1;
- }
- cout << endl;
- system("pause");
- system("cls");
- break;
- default:
- system("cls");
- cout << "ERROR: Wrong enter!\n";
- }
- } while (dataType != 27 /*esc*/);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement