Задать вопрос
@michadimin

Существует ли способ принять и автоматически подставить знак операции с числами в C++?

Знаете ведь есть эти простецкие калькуляторы с выбором действия через switch-case, которые обычно используются в качестве задач при изучении основ? Представим, что такой калькулятор поместили в функцию, которая принимает параметры: int num1, int num2, операция(например +).

Так вот мне стало интересно: возможно ли передать в функцию(хоть каким-то) способом непосредственно сам знак?
Чтобы потом можно было обойтись парой строчек кода, вместо switch-case.

Для понимания того, что я конкретно хочу:

Вот стандартного рода базовый калькулятор
int main(){
    int a = 0;
    int b = 0;
    char operation;
    std::cout << "Enter first number: ";
    std::cin >> a;
    std::cout << "Enter second number: ";
    std::cin >> b;
    std::cout << "Enter operation: ";
    std::cin >> operation;
 
    switch (operation){
    case '-':
        std::cout << "a - b = " << a - b <<'\n';
        break;
    case '+':
        std::cout << "a + b = " << a + b << '\n';
        break;
    case '*':
        std::cout << "a * b = " << a * b << '\n';
        break;
    case '/':
        std::cout << "a / b = " << a / b << '\n';
        break;
    default:
        std::cout << "Error\n";
    }
    return 0;
}


А мне бы хотел привести его к примерно такому:
int calculate(int a, int b, ??? operation) {
    cout << a operation b << endl;
}

int main() {
    std::cout << "Enter first number: ";
    std::cin >> a;
    std::cout << "Enter second number: ";
    std::cin >> b;
    std::cout << "Enter operation: ";
    std::cin >> operation;

    calculate(a, b, operation)

    return 0;
}

Надеюсь, что я смог донести свою мысль.
  • Вопрос задан
  • 355 просмотров
Подписаться 3 Простой 3 комментария
Помогут разобраться в теме Все курсы
  • Нетология
    Разработчик на C++
    12 месяцев
    Далее
  • Яндекс Практикум
    Разработчик C++
    9 месяцев
    Далее
  • Яндекс Практикум
    Разработчик C++ расширенный
    12 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 6
GavriKos
@GavriKos
Микропетпроджект - https://voidtrack.space/
В плюсах такого нет напрямую.
Но есть обходные пути. Самый простой - делаешь функции сложения, вычитания, деления, умножения и т.д. Дальше делаешь словарь (что там вместо него в плюсах? map вроде), ключ - ну пусть будет символ, значение - указатель на функцию.
И в своей функции ты по символу достаешь указатель на функцию и вызываешь ее с нужными аргументами.

Результат - свич-кейса нет.
Ответ написан
Комментировать
@McBernar
Но ведь в плюсах есть перегрузка операторов.
Вы можете перегрузить +- с вашим классом с матрицами. Чтобы получилось mat3 = mat1+ mat2
Ответ написан
Комментировать
mayton2019
@mayton2019
Bigdata Engineer
Тут надо смотреть какие цели этой лабораторной работы. Если цель - учиться С++ - то такое решение как автор написал - вполне себе прокатит. Изучаем switch-case.

Если цель - парсеры, то решением будет разработка парсера математических выражений (ПОЛИЗ до кучи).

Если цель - интеграция - то можно просто из С++ вызать любой трансируемый язык (тот-же Perl или Python) и просто в комнадной строке передать ему выражение и получить готовый ответ.

Если цель - ООП с полиморфизмом - то можно просто развить пункт №2 придав ему красивый вид. Типа Базовый класс - BinaryOp. От него наследники Mul/Sum/Div/Minus.

Короче все эти решения будут правильными. Они все решают задачу но по разному.

В разной тык-скыть прадигме.
Ответ написан
Комментировать
@12rbah
Существует, не в таком виде как у вас, но в довольно близком. Ключевые слова ast и calculator вот пример, если кратко то на вход подается строка, которая парсится и операции выполняются в порядке очередности.
возможно ли передать в функцию(хоть каким-то) способом непосредственно сам знак?
Сам знак передать нельзя.
Чтобы потом можно было обойтись парой строчек кода, вместо switch-case.
Ну можно создать функцию и в неё передавать два числа и строку/число которые будут выбирать действие в зависимости от знака
Ответ написан
saboteur_kiev
@saboteur_kiev Куратор тега C++
software engineer
в баш легко. там eval есть
в python может тоже есть какая-то либа математическая, которая умеет в.
Ответ написан
Griboks
@Griboks
Это называется интерпретацией, а плюсы - компилируемый язык. Либо используйте другой язык, либо компилируйте находу.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
ITK academy Казань
от 75 000 до 125 000 ₽
Инком Нижний Новгород
от 160 000 до 230 000 ₽
Инком Нижний Новгород
от 160 000 до 230 000 ₽