tgoop.com/zadachait/301
Last Update:
Решение задачи "Арифметическое выражение"
Вычисление арифметического выражения – классическая задача, решать которую можно по-разному. Можно использовать алгоритм перевода выражения в постфиксную форму, а затем производить вычисление данного выражения. Но в данном случае придется использовать стек и обрабатывать его вручную. Более просто использовать рекурсивный алгоритм, где стек рекурсии заменит вышеописанный стек. Опишем суть функции Count(s), которая будет возвращать значение арифметического выражения s.
Первоначально следует удалить из s лишние пробелы и затем удалить лишние соответствующие друг другу скобки, расположенные в начале и конце строки. Далее следует справа налево в строке найти в некоторой k-й позиции операцию «+», не находящуюся внутри скобок и разбить выражение на два выражения, которые можно вычислить рекурсивно: count(s) = count(s[1..k-1]) + count(s[k+1..length(s)]). После чего (если «+» не найден) следует повторить данный процесс для операций «-», «*», «/» именно в данном порядке.
Если же в рассматриваемом таким образом выражении операции не найдены, то это либо число либо вызов тригонометрической функции. Сначала следует проверить на функцию: для этого строка должна начинаться либо на ‘cos(‘, либо на ‘sin(’ и заканчиваться на ‘)’. Если начало – это функция, а окончание – не закрывающая скобка, то следует вывести сообщение об ошибке, иначе вычислить выражение в скобках, вызвав count(s[4..length(s)]), и вернуть значение функции от возвращаемого рекурсией значения.
Когда выражение не содержит знаков и функций, то его стоит рассматривать как число, которое следует перевести в числовой вещественный эквивалент, проверив на корректность перевода.
BY ZADACHA by Turing / сборник задач для программистов любого уровня
Share with your friend now:
tgoop.com/zadachait/301