Дано скобочное выражение и нужно написать алгорит для вывода его результата.
Например: входная строка: (1+2)-(1+2)
выходная строка: 0
Для реализации данного алгоритма я использовал польскую запись.
Вот алгоритм которым я пользовался:
______________
Рассматриваем поочередно каждый символ:
1. Если этот символ - число (или переменная), то просто помещаем его в выходную строку.
2. Если символ - знак операции (+, -, *, / ), то проверяем приоритет данной операции. Операции умножения и деления имеют наивысший приоритет (допустим он равен 3). Операции сложения и вычитания имеют меньший приоритет (равен 2). Наименьший приоритет (равен 1) имеет открывающая скобка.
Получив один из этих символов, мы должны проверить стек:
а) Если стек все еще пуст, или находящиеся в нем символы (а находится в нем могут только знаки операций и открывающая скобка) имеют меньший приоритет, чем приоритет текущего символа, то помещаем текущий символ в стек.
б) Если символ, находящийся на вершине стека имеет приоритет, больший или равный приоритету текущего символа, то извлекаем символы из стека в выходную строку до тех пор, пока выполняется это условие; затем переходим к пункту а).
3. Если текущий символ - открывающая скобка, то помещаем ее в стек.
4. Если текущий символ - закрывающая скобка, то извлекаем символы из стека в выходную строку до тех пор, пока не встретим в стеке открывающую скобку (т.е. символ с приоритетом, равным 1), которую следует просто уничтожить. Закрывающая скобка также уничтожается.
Если вся входная строка разобрана, а в стеке еще остаются знаки операций, извлекаем их из стека в выходную строку.
Рассмотрим алгоритм на примере простейшего выражения:
Дано выражение:
a + ( b - c ) * d
Результат:
a b c - d * +
------------------------------------------------------
Я попробовал реализовать данный алгоритм, но у меня возникли проблемы (выражение никак не хочет переводиться в польскую запись). Уважаемы программисты помогите пожалуйста найти ошибки в моем коде.
Велосипедостроением не занимаемся... Перевод выражения в польскую запись есть здесь:
http://forum.pascal.net.ru/index.php?s=&showtopic=3786&view=findpost&p=26846
А как представлять числа с произвольной разрядностью??????
Для этих целей польская запись пойдет?