ВУЗ:
Составители:
Рубрика:
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={'+','-','*','/'};
Stack s = 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
- …
- следующая ›
- последняя »
