Advertisement
Guest User

Untitled

a guest
Feb 19th, 2020
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.59 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.     string s;
  80.  
  81.     cout << "старт --- для начала тренировки\nстоп --- для окончания тренировки\n\n";
  82.  
  83.     while (1) {
  84.         cin >> s;
  85.         if (s == "стоп") {
  86.             get_res();
  87.             return 0;
  88.         }
  89.         else if (s == "старт") {
  90.             while (1) {
  91.                 cntall++;
  92.                 int a = rand() % 30 + 1, b = rand() % 30 + 1;
  93.                 int base1 = rand() % 15 + 2, base2 = rand() % 15 + 2;
  94.                 string s1 = get(a, base1), s2 = get(b, base2);
  95.                 cout << "Первое число : " << s1 << '\n' << "Первое основание : " << base1 << '\n';
  96.                 cout << "Второе число : " << s2 << '\n' << "Второе основание : " << base2 << '\n';
  97.                 cout << "Введите ответ и основание системы счисления\n";
  98.                 string ans;
  99.                 int base;
  100.                 cin >> ans >> base;
  101.                 if (is_equal(ans, get(a + b, base))) {
  102.                     cout << "Правильно, введи 'продолжить', чтобы продолжить решать или 'стоп', чтобы остановить программу\n\n";
  103.                     cntr++;
  104.                     string s;
  105.                     while (1) {
  106.                         cin >> s;
  107.                         if (s == "продолжить")
  108.                             break;
  109.                         else if (s == "стоп") {
  110.                             get_res();
  111.                             return 0;
  112.                         }
  113.                         else {
  114.                             un_com();
  115.                         }
  116.                     }
  117.                 } else {
  118.                     cout << "Неправильный ответ, вы можете закончить тренировку, продолжить решать или посмотреть решение данного примера. Введите 'продолжить' или 'решение', или 'стоп'\n";
  119.                     while (1) {
  120.                         string t;
  121.                         cin >> t;
  122.                         if (t == "решение") {
  123.                             solve(get(a, base), get(b, base), base);
  124.                             cout << "Введите 'продолжить', чтобы продолжить решать, или 'стоп', чтобы остановить программу\n";
  125.                             string t1;
  126.                             while (1) {
  127.                                 cin >> t1;
  128.                                 if (t1 == "продолжить")
  129.                                     break;
  130.                                 else if (t1 == "стоп") {
  131.                                     get_res();
  132.                                     return 0;
  133.                                 }
  134.                                 else {
  135.                                     un_com();
  136.                                 }
  137.                             }
  138.                             break;
  139.                         }
  140.                         else if (t == "продолжить") {
  141.                             break;
  142.                         }
  143.                         else if (t == "стоп") {
  144.                             get_res();
  145.                             return 0;
  146.                         }
  147.                         else {
  148.                             un_com();
  149.                         }
  150.                     }
  151.                 }
  152.             }
  153.         }
  154.         else {
  155.             un_com();
  156.             cin >> s;
  157.         }
  158.     }
  159.     return 0;
  160. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement