Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <vector>
- #include <algorithm>
- #include <cstdlib>
- #include <ctime>
- #define pb push_back
- #define all(x) x.begin(), x.end()
- #define rall(x) x.rbegin(), x.rend()
- using namespace std;
- vector <char> alpha = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
- void solve (string a, string b, int base) {
- cout << '\n';
- while (a.size() < b.size())
- a = "0" + a;
- while (b.size() < a.size())
- b = "0" + b;
- a = "00" + a;
- b = "00" + b;
- int len = a.size();
- cout << ' ' << a << '\n';
- cout << '+';
- for (int i = 0; i < len - 1; ++i) {
- cout << " ";
- }
- cout << '\n' << ' ' << b << '\n';
- for (int i = 0; i < len + 1; ++i)
- cout << "-";
- cout << "\n";
- int ost = 0;
- string res = a;
- for (int i = len - 1; i >= 0; --i) {
- int ta = a[i] - 48;
- int tb = b[i] - 48;
- if (ta + tb + ost < base) {
- res[i] = alpha[ta + tb + ost];
- ost = 0;
- }
- else {
- res[i] = alpha[(ta + tb + ost) % base];
- ost = (ta + tb + ost) / base;
- }
- }
- cout << ' ' << res << "\n\n";
- }
- string get (int value, int base) {
- string res = "";
- while (value) {
- res += alpha[value % base];
- value /= base;
- }
- reverse(all(res));
- return res;
- }
- bool is_equal (string a, string b) {
- while (a.size() < b.size())
- a = "0" + a;
- while (b.size() < a.size())
- b = "0" + b;
- return a == b;
- }
- void un_com () {
- cout << "Неизвестная команда, попробуйте еще раз\n\n";
- }
- int cntr = 0, cntall = 0;
- void get_res() {
- cout << "Правильно решено " << cntr << " из " << cntall << '\n';
- }
- int main() {
- ios_base::sync_with_stdio(false);
- srand(time(0));
- setlocale(LC_ALL, "Russian");
- cout << "Введите помощь для списка команд\n";
- string s;
- cin >> s;
- if (s == "помощь") {
- cout << "старт --- для начала тренировки\nстоп --- для окончания тренировки\n\n";
- cin >> s;
- }
- while (1) {
- if (s == "стоп") {
- get_res();
- return 0;
- }
- else if (s == "старт") {
- while (1) {
- cntall++;
- int a = rand() % 30 + 1, b = rand() % 30 + 1;
- int base1 = rand() % 15 + 2, base2 = rand() % 15 + 2;
- string s1 = get(a, base1), s2 = get(b, base2);
- cout << "Первое число : " << s1 << '\n' << "Первое основание : " << base1 << '\n';
- cout << "Второе число : " << s2 << '\n' << "Второе основание : " << base2 << '\n';
- cout << "Введите ответ и основание системы счисления\n";
- string ans;
- int base;
- cin >> ans >> base;
- if (is_equal(ans, get(a + b, base))) {
- cout << "Правильно, введи 'продолжить', чтобы продолжить решать или 'стоп', чтобы остановить программу\n\n";
- cntr++;
- string s;
- while (1) {
- cin >> s;
- if (s == "продолжить")
- break;
- else if (s == "стоп") {
- get_res();
- return 0;
- }
- else {
- un_com();
- }
- }
- } else {
- cout << "Неправильный ответ, вы можете закончить тренировку, продолжить решать или посмотреть решение данного примера. Введите 'продолжить' или 'решение', или 'стоп'\n";
- while (1) {
- string t;
- cin >> t;
- if (t == "решение") {
- solve(get(a, base), get(b, base), base);
- cout << "Введите 'продолжить', чтобы продолжить решать, или 'стоп', чтобы остановить программу\n";
- string t1;
- while (1) {
- cin >> t1;
- if (t1 == "продолжить")
- break;
- else if (t1 == "стоп") {
- get_res();
- return 0;
- }
- else {
- un_com();
- }
- }
- break;
- }
- else if (t == "продолжить") {
- break;
- }
- else if (t == "стоп") {
- get_res();
- return 0;
- }
- else {
- un_com();
- }
- }
- }
- }
- }
- else {
- un_com();
- cin >> s;
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement