Top.Mail.Ru
Ответы

Оцените пж код c++ консоль v2 я ещё не все функции сделал

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
#include <iostream>
#include <string>
#include <sstream>
#include <stack>
#include <cctype>
#include <stdexcept>

int getPriority(char op) {
    if (op == '+' || op == '-') return 1;
    if (op == '*' || op == '/') return 2;
    return 0;
}

void script(const std::string& args) {
    if (args == "add") {
        std::cout << "Выполняется действие: add\n";
    }
    else if (args == "remove") {
        std::cout << "Выполняется действие: remove\n";
    }
    else if (args == "open") {
        std::cout << "Выполняется действие: open\n";
    }
    else if (args == "stop") {
        std::cout << "Выполняется действие: stop\n";
    }
    else if (args == "") {
        std::cout << "Команда dir\n";
    }
}
void echo(const std::string& args) {
    std::cout << args;
}
void echos(const std::string& args) {
    std::cout << args << "\n";
}
void s_echo_s(const std::string& args) {
    std::cout << "\n" << args << "\n";
}
void s(int args) {
    while (args != 0) {
        std::cout << "\n";
        args--;
    }
}
double applyOp(double a, double b, char op) {
    switch (op) {
    case '+': return a + b;
    case '-': return a - b;
    case '*': return a * b;
    case '/':
        if (b == 0) throw std::runtime_error("Деление на ноль");
        return a / b;
    }
    return 0;
}

double evaluate(const std::string& tokens) {
    std::stack<double> values;
    std::stack<char> ops;

    for (size_t i = 0; i < tokens.length(); i++) {
        if (isspace(tokens[i]))
            continue;

        if (isdigit(tokens[i]) || tokens[i] == '.') {
            std::stringstream ss;
            while (i < tokens.length() && (isdigit(tokens[i]) || tokens[i] == '.')) {
                ss << tokens[i++];
            }
            i--;
            double val;
            ss >> val;
            values.push(val);
        }
        else if (tokens[i] == '(') {
            ops.push(tokens[i]);
        }
        else if (tokens[i] == ')') {
            while (!ops.empty() && ops.top() != '(') {
                double val2 = values.top(); values.pop();
                double val1 = values.top(); values.pop();
                char op = ops.top(); ops.pop();

                values.push(applyOp(val1, val2, op));
            }
            if (!ops.empty())
                ops.pop();
        }
        else {
            while (!ops.empty() && getPriority(ops.top()) >= getPriority(tokens[i])) {
                double val2 = values.top(); values.pop();
                double val1 = values.top(); values.pop();
                char op = ops.top(); ops.pop();

                values.push(applyOp(val1, val2, op));
            }
            ops.push(tokens[i]);
        }
    }

    while (!ops.empty()) {
        double val2 = values.top(); values.pop();
        double val1 = values.top(); values.pop();
        char op = ops.top(); ops.pop();

        values.push(applyOp(val1, val2, op));
    }

    return values.top();
}

int main() {
    setlocale(LC_ALL, "Russian");

    std::string line;
    std::string start;
    while (true) {
        std::cout << start;
        std::getline(std::cin, line);

        if (line == "help") {
            std::cout << "calc() - калькулятор\n";
            std::cout << "echo() - вывод на экран\n";
            std::cout << "echo_s() - вывод на экран с новой строки\n";
            std::cout << "s_echo_s() - вывод на экран\n";
            std::cout << "s() - новая строка\n";
            std::cout << "cd() - путь к папке\n";
            std::cout << "defcd() - ставит начальный путь к папке\n";
            std::cout << "open() - открыть файл\n";
            std::cout << "create() - создать файл\n";
            std::cout << "delete() - удалить файл\n";
            std::cout << "edit() - изменить файл\n";
            std::cout << "script() - открыть папку где хранятся скрипты || создает базовый скрипт || выполняет скрипт\n";
            std::cout << "pc() - узнать информацию о пк\n";
            std::cout << "canvas() - нарисовать объект на экране (удобно в скриптах) || удалить объект || скрыть объект\n";
            std::cout << "clr() - очистить консоль\n";
        }
        else if (line.size() >= 6 && line.substr(0, 5) == "calc(" && line.back() == ')') {
            std::string expr = line.substr(5, line.size() - 6);
            try {
                double result = evaluate(expr);
                std::cout << "Результат: " << result << "\n";
            }
            catch (const std::exception& e) {
                std::cout << "Ошибка вычисления: " << e.what() << "\n";
            }
        }
        else if (line.size() >= 6 && line.substr(0, 5) == "echo(" && line.back() == ')') {
            std::string arg = line.substr(5, line.size() - 6);
            if (arg != "") {
                echos(arg);
            }
            else {
                std::cout << "error";
            }
        }
        else if (line.size() >= 8 && line.substr(0, 7) == "echo_s(" && line.back() == ')') {
            std::string arg = line.substr(7, line.size() - 8);
            if (arg != "") {
                echos(arg);
            }
            else {
                std::cout << "error";
            }
        }
        else if (line.size() >= 10 && line.substr(0, 9) == "s_echo_s(" && line.back() == ')') {
            std::string arg = line.substr(9, line.size() - 10);
            if (arg != "") {
                s_echo_s(arg);
            }
            else {
                std::cout << "error";
            }
        }
        else if (line.size() >= 3 && line.substr(0, 2) == "s(" && line.back() == ')') {
            std::string arg = line.substr(2, line.size() - 3);
            if (arg != "") {
                int i = std::stoi(arg);
                s(i);
            }
            else {
                std::cout << "error";
            }
        }
        else if (line.size() >= 8 && line.substr(0, 7) == "script(" && line.back() == ')') {
            std::string arg = line.substr(7, line.size() - 8);
            script(arg);
        }
        else {
            std::cout << "Команда \"" << line << "\" не найдена\n";
        }
    }
}
По дате
По рейтингу
Аватар пользователя
Просветленный

чезабрето