Advertisement
Guest User

Untitled

a guest
Feb 19th, 2020
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.72 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4. #include <algorithm>
  5. #include <cstdlib>
  6. #include <ctime>
  7.  
  8. #define pb push_back
  9. #define all(x) x.begin(), x.end()
  10. #define rall(x) x.rbegin(), x.rend()
  11.  
  12. using namespace std;
  13. vector <char> alpha = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
  14.  
  15. void solve (string a, string b, int base) {
  16.     cout << '\n';
  17.     while (a.size() < b.size())
  18.         a = "0" + a;
  19.     while (b.size() < a.size())
  20.         b = "0" + b;
  21.     a = "00" + a;
  22.     b = "00" + b;
  23.     int len = a.size();
  24.     cout << ' ' << a << '\n';
  25.     cout << '+';
  26.     for (int i = 0; i < len - 1; ++i) {
  27.         cout << " ";
  28.     }
  29.     cout << '\n' << ' ' <<  b << '\n';
  30.     for (int i = 0; i < len + 1; ++i)
  31.         cout << "-";
  32.     cout << "\n";
  33.     int ost = 0;
  34.     string res = a;
  35.     for (int i = len - 1; i >= 0; --i) {
  36.         int ta = a[i] - 48;
  37.         int tb = b[i] - 48;
  38.         if (ta + tb + ost < base) {
  39.             res[i] = alpha[ta + tb + ost];
  40.             ost = 0;
  41.         }
  42.         else {
  43.             res[i] = alpha[(ta + tb + ost) % base];
  44.             ost = (ta + tb + ost) / base;
  45.         }
  46.     }
  47.     cout << ' ' << res << "\n\n";
  48. }
  49.  
  50.  
  51. string get (int value, int base) {
  52.     string res = "";
  53.     while (value) {
  54.         res += alpha[value % base];
  55.         value /= base;
  56.     }
  57.     reverse(all(res));
  58.     return res;
  59. }
  60.  
  61. bool is_equal (string a, string b) {
  62.     while (a.size() < b.size())
  63.         a = "0" + a;
  64.     while (b.size() < a.size())
  65.         b = "0" + b;
  66.     return a == b;
  67. }
  68. void un_com () {
  69.     cout << "Неизвестная команда, попробуйте еще раз\n\n";
  70. }
  71. int cntr = 0, cntall = 0;
  72. void get_res() {
  73.     cout << "Правильно решено " << cntr << " из " << cntall << '\n';
  74. }
  75. int main() {
  76.     ios_base::sync_with_stdio(false);
  77.     srand(time(0));
  78.     setlocale(LC_ALL, "Russian");
  79.     cout << "Введите помощь для списка команд\n";
  80.  
  81.     string s;
  82.     cin >> s;
  83.     if (s == "помощь") {
  84.         cout << "старт --- для начала тренировки\nстоп --- для окончания тренировки\n\n";
  85.         cin >> s;
  86.     }
  87.  
  88.     while (1) {
  89.         if (s == "стоп") {
  90.             get_res();
  91.             return 0;
  92.         }
  93.         else if (s == "старт") {
  94.             while (1) {
  95.                 cntall++;
  96.                 int a = rand() % 30 + 1, b = rand() % 30 + 1;
  97.                 int base1 = rand() % 15 + 2, base2 = rand() % 15 + 2;
  98.                 string s1 = get(a, base1), s2 = get(b, base2);
  99.                 cout << "Первое число : " << s1 << '\n' << "Первое основание : " << base1 << '\n';
  100.                 cout << "Второе число : " << s2 << '\n' << "Второе основание : " << base2 << '\n';
  101.                 cout << "Введите ответ и основание системы счисления\n";
  102.                 string ans;
  103.                 int base;
  104.                 cin >> ans >> base;
  105.                 if (is_equal(ans, get(a + b, base))) {
  106.                     cout << "Правильно, введи 'продолжить', чтобы продолжить решать или 'стоп', чтобы остановить программу\n\n";
  107.                     cntr++;
  108.                     string s;
  109.                     while (1) {
  110.                         cin >> s;
  111.                         if (s == "продолжить")
  112.                             break;
  113.                         else if (s == "стоп") {
  114.                             get_res();
  115.                             return 0;
  116.                         }
  117.                         else {
  118.                             un_com();
  119.                         }
  120.                     }
  121.                 } else {
  122.                     cout << "Неправильный ответ, вы можете закончить тренировку, продолжить решать или посмотреть решение данного примера. Введите 'продолжить' или 'решение', или 'стоп'\n";
  123.                     while (1) {
  124.                         string t;
  125.                         cin >> t;
  126.                         if (t == "решение") {
  127.                             solve(get(a, base), get(b, base), base);
  128.                             cout << "Введите 'продолжить', чтобы продолжить решать, или 'стоп', чтобы остановить программу\n";
  129.                             string t1;
  130.                             while (1) {
  131.                                 cin >> t1;
  132.                                 if (t1 == "продолжить")
  133.                                     break;
  134.                                 else if (t1 == "стоп") {
  135.                                     get_res();
  136.                                     return 0;
  137.                                 }
  138.                                 else {
  139.                                     un_com();
  140.                                 }
  141.                             }
  142.                             break;
  143.                         }
  144.                         else if (t == "продолжить") {
  145.                             break;
  146.                         }
  147.                         else if (t == "стоп") {
  148.                             get_res();
  149.                             return 0;
  150.                         }
  151.                         else {
  152.                             un_com();
  153.                         }
  154.                     }
  155.                 }
  156.             }
  157.         }
  158.         else {
  159.             un_com();
  160.             cin >> s;
  161.         }
  162.     }
  163.     return 0;
  164. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement