Практикум по курсу "Объектно-ориентированное программирование" на языке C#. Андрианова А.А - 81 стр.

UptoLike

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