SHARE
TWEET

test

a guest Jan 21st, 2020 75 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <stdio.h>
  2. #include <string>
  3. #include <cmath>
  4. #include <algorithm>
  5. #include <stdlib.h>
  6. #include <iostream>
  7. #include <windows.h>
  8.  
  9. using namespace std;
  10.  
  11. const string digits = "0123456789ABCDEFGHIJKLMNOPQRASUVWXYZ";
  12.  
  13. void validation(int base) {
  14.     cout << "Error: исходное число ¤вл¤етс¤ некорректной записью дл¤ системы с основанием " << base << ".\n¬ ";
  15.     cout << base << "-ой системе допустимы только следующие символы: ";
  16.     for (int i = 0; i < base; i++) {
  17.         cout << digits[i] << " ";
  18.     }
  19. }
  20.  
  21. string DecToAny(int number, int to_final) {
  22.     string result;
  23.  
  24.     cout << endl << "ѕереводим целую часть " << number << " в " << to_final << "-ую систему последовательным делением на " << to_final << ":" << endl;
  25.  
  26.     do {
  27.         cout << number << " / " << to_final << " = " << number / to_final << ", остаток:" << digits[number % to_final] << endl;
  28.         result.push_back(digits[number % to_final]);
  29.         number /= to_final;
  30.     } while (number > 0);
  31.     reverse(result.begin(), result.end());
  32.  
  33.     return result;
  34. }
  35.  
  36. void translation() {
  37.     string number;
  38.  
  39.     cout << "Number: ";
  40.     getline(cin, number);
  41.  
  42.     for (int i = 0; i < number.size(); i++) {
  43.         if ((int)number[i] < 0) {
  44.             cout << "¬вод произведен на русской раскладке клавиатуры.\nƒопустимы только числа и буквы англиского алфавита:" << endl;
  45.             cout << digits;
  46.             return;
  47.         }
  48.     }
  49.  
  50.     if (number.find("-") != -1) {
  51.         cout << "Error: исходное число ¤вл¤етс¤ отрицательным";
  52.         return;
  53.     }
  54.  
  55.     int base;
  56.     cout << "in ";
  57.     cin >> base;
  58.  
  59.     for (int i = 0; i < number.size(); i++) {
  60.         if (base > 10) {
  61.             if (!(number[i] >= 'A' && number[i] <= base - 10 + 'A' || isdigit(number[i]) || number[i] == '.')) {
  62.                 validation(base);
  63.                 return;
  64.             }
  65.         }
  66.         else {
  67.             if (!(number[i] - '0' >= 0 && number[i] - '0' < base || number[i] == '.')) {
  68.                 validation(base);
  69.                 return;
  70.             }
  71.         }
  72.     }
  73.  
  74.     if ((base < 2 || base > 36)) {
  75.         cout << "Error: основание исходной системы должны быть в диапазоне от 2 до 36.";
  76.         return;
  77.     }
  78.  
  79.     int to_final;
  80.     cout << "to ";
  81.     cin >> to_final;
  82.  
  83.     if ((to_final < 2 || to_final > 36)) {
  84.         cout << "Error: основание конечной системы должны быть в диапазоне от 2 до 36.";
  85.         return;
  86.     }
  87.  
  88.     int digit;
  89.     if (base == 10) {
  90.         digit = atoi(number.c_str());
  91.         cout << endl << "Result: " << DecToAny(digit, to_final);
  92.         return;
  93.     }
  94. }
  95.  
  96. int main() {
  97.     //setlocale(LC_ALL, "Russian");
  98.     SetConsoleCP(1251);
  99.     SetConsoleOutputCP(1251);
  100.  
  101.     translation();
  102.     cout << endl;
  103.     system("pause");
  104. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Top