Калькулятор на c# Stack Overflow на русском
Интерфейс и распределения кнопок умею вставить, но не успеваю создать функцию, которая изменяет оператор в переменной result в зависимости от избранной кнопки операции. Разбить строку на выражения можно по разному, включая регулярные выражения, но чтобы учесть в дальнейшем приоритеты операций, вам стоит поискать информацию на счет обратной польской нотации (она же – обратная польская запись). Но всё-таки мне хотелось бы узнать, можно ли написать функцию для калькулятора, опираясь на код, мной написанный до сих пор. Я написал код, который работает только для первого случая. Eval по последовательности токенов вычисляет значение.
Калькулятор
Для вычисления используется алгоритм расширяющийся треугольник в трейдинге сортировочной станции.shunting-yard algorithm – более подробное изложение, на английском. Ну и я бы вместо лесенки if’ов использовал switch. Можно вводить выражение с пробелами, можно без, они игнорируются. Оставил без изменения целочисленное деление, хотя в постановке задачи об этом не было сказано и я бы поставил простое деление. Символ градуса находится под кнопкой тригонометрии (sin, cos, tan, cot) верху клавиатуры.
Как возвести число в степень?
Решение через switch – в принципе, самое простое (исключая вариант eval()) и распространенное.
- Чтобы упростить код и избежать повторений, можно упростить проверку оператора в цикле while и избежать лишних условий внутри цикла.
- В них не нужно заботиться о формате принимаемого и выводимого значений, плюс нету такой проблемы, как попадание в буфер ввода не того символа.
- Можно вводить выражение с пробелами, можно без, они игнорируются.
- Нажимая «Отправить ответ», вы соглашаетесь с условиями пользования и подтверждаете, что прочитали политику конфиденциальности.
- Однако все эти вопросы решаются использованием cout и cin.
- Поскольку вы учите С++, вместо printf и scanf лучше использовать cout и cin.
Как вводить выражения с процентами?
Также можно убрать лишние input() и использовать только один input() для оператора и чисел. Реализуйте простой калькулятор, который позволяет выполнять операции сложения, вычитания, умножения и деления двух целых чисел. Нажимая «Отправить ответ», вы соглашаетесь с условиями пользования и подтверждаете, что прочитали политику конфиденциальности. Я, правда, слабо понимаю какое применение у таких калькуляторов на практике, т.к. Во-первых нет проверки вводимых символов (нужно ограничить ввод), нет проверки на ошибки (например, деление на ноль), нет десятичного разделителя. В отдельной функции для каждой операции, смысла нет – потому что при смене операции в интерфейсе, в алгоритме меняется всего одно действие…
Как вводить системы уравнений?
Поскольку вы учите С++, вместо printf и scanf лучше использовать cout и cin. В них не нужно заботиться о формате принимаемого и выводимого значений, плюс нету такой проблемы, как попадание в буфер ввода не того символа. В вашем случае вместо %d для считывания значений типа float нужно использовать %f, а для считывания символа %c. Во время работы вашего кода после поправки форматирования у меня, например, вместо считывания символа операции считывался знак новой строки, и ввод переходил сразу на второе число. Для избежания этого следовало бы очистить буфер ввода командой fflush(stdin).
- В отдельной функции для каждой операции, смысла нет – потому что при смене операции в интерфейсе, в алгоритме меняется всего одно действие…
- Я написал код, который работает только для первого случая.
- В них не нужно заботиться о формате принимаемого и выводимого значений, плюс нету такой проблемы, как попадание в буфер ввода не того символа.
Разберите как работает этот код, выполните пошагово. Вся суть и логика данного алгоритма там, где массивы уже получены, то есть начиная с цикла foreach. Чтобы упростить код и избежать повторений, можно упростить проверку оператора в цикле while и избежать лишних условий внутри цикла.
И если мы разделим логику на 4 функции, то не сможем избежать дублирования кода остальных, общих действий (нарушим принцип DRY). С помощью стрелок в верхнем ряду вы можете перемещать курсор по тексту проблемы. Используйте кнопку ↵, если вы хотите перейти на новую строку (например, при вводе систем уравнений). Например, при нажатии на кнопку оператора, соответствующе устанавливаем переменную текущего оператора. Затем, при нажатии на кнопку равняется считаем результат в зависимости от текущего оператора.
Где находятся дополнительные функции?
Однако все эти вопросы решаются использованием cout и cin. Я бы начал с того, чтобы внес первый инпут внутрь условия цикла и убрал бы сравнение, так как сам результат присвоения и будет либо 0 (False) либо не ноль и тогда цикл отработает. Это избавит нас от двух лишних инпутов и от проверки завершения программы по вводу ноля. Заменил бы If/elif на match/case для красоты и заменил бы проверку деления на ноль на однострочник. Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Deixe uma resposta