ВУЗ:
Составители:
Рубрика:
80
Пусть в выражении, для которого была построена постфиксная форма,
операнды являлись цифрами. Вычислим это выражение. Для этого можно
использовать следующий алгоритм, в котором важную роль играет стек.
Выражение в постфиксной форме просматривается слева направо. Если
встречается цифра, то она заносится в стек. Если встречается знак операции,
то из стека извлекаются два операнда, над ними выполняется операция и ее
результат записывается в стек. Когда выражение заканчивается, в стеке
остается одно число – значение выражения.
// функция вычисления значения выражения,
// записанного в постфиксной форме,
// с операндами-цифрами
static double CalculatePostfix(string str)
{
// массив символов доступных операций
char[] opers={'+','-','*','/'};
Stack<double> s = new Stack<double>();
for (int i = 0; i < str.Length; i++)
{
// если i-ый символ - операнд, помещаем его в стек
if (!opers.Contains(str[i]))
s.Push(double.Parse(""+str[i]));
else
{
// символ является операцией. Извлекаем 2 операнда
// и выполняем операцию
double op1 = s.Pop();
double op2 = s.Pop();
switch (str[i])
{
case '+': s.Push(op1 + op2); break;
case '-': s.Push(op2 - op1); break;
case '*': s.Push(op1 * op2); break;
case '/': s.Push(op2 / op1); break;
}
}
}
// результат выражения – последнее значение в стеке
return s.Pop();
}
Пусть в выражении, для которого была построена постфиксная форма, операнды являлись цифрами. Вычислим это выражение. Для этого можно использовать следующий алгоритм, в котором важную роль играет стек. Выражение в постфиксной форме просматривается слева направо. Если встречается цифра, то она заносится в стек. Если встречается знак операции, то из стека извлекаются два операнда, над ними выполняется операция и ее результат записывается в стек. Когда выражение заканчивается, в стеке остается одно число – значение выражения. // функция вычисления значения выражения, // записанного в постфиксной форме, // с операндами-цифрами static double CalculatePostfix(string str) { // массив символов доступных операций char[] opers={'+','-','*','/'}; Stacks = new Stack (); for (int i = 0; i < str.Length; i++) { // если i-ый символ - операнд, помещаем его в стек if (!opers.Contains(str[i])) s.Push(double.Parse(""+str[i])); else { // символ является операцией. Извлекаем 2 операнда // и выполняем операцию double op1 = s.Pop(); double op2 = s.Pop(); switch (str[i]) { case '+': s.Push(op1 + op2); break; case '-': s.Push(op2 - op1); break; case '*': s.Push(op1 * op2); break; case '/': s.Push(op2 / op1); break; } } } // результат выражения – последнее значение в стеке return s.Pop(); } 80
Страницы
- « первая
- ‹ предыдущая
- …
- 79
- 80
- 81
- 82
- 83
- …
- следующая ›
- последняя »