Калькулятор со скобками (обратная польская запись) - C#

Узнай цену своей работы

Формулировка задачи:

взял реализацию...сделанную по принципу ОПН ..нашел баг в проге..нещитает числа с запятыми начал переделывать и вот ошибка -- op2 = double.Parse(numbersStack.Pop); op1 = double.Parse(numbersStack.Pop); - Ошибка 2 Аргумент "1": преобразование типа из "группа методов" в "string" невозможно. В чем дело?
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public static string ToRPN(string initialString)
{
// В стеке будут содержаться операции из выражения
Stack<char> opervsteke = new Stack<char>();
 
//последняя операция
char lastOperation;
 
// Результирующая строка
string result = string.Empty;
// Удаляем из входной строки лишние пробелы
initialString = initialString.Replace(" ", "");
 
for (int i = 0; i < initialString.Length; i++)
{
// Если текущий символ - число, добавляем его к результирующей строке
 
if (Char.IsDigit(initialString[i]) || initialString[i] == ',' || initialString[i] == '.' || initialString[i] == '-')
{
result += initialString[i];
continue;
}
if (IsOperation(initialString[i]))
{
// Если это не первая операция в выражении,
// то нам необходимо будет сравнить ее
// с последней операцией, хранящейся в стеке.
// Для этого сохраняем ее в переменной lastOperation
//
if (opervsteke.Count != 0)
lastOperation = opervsteke.Peek();
 
// Иначе (если это первая операция), кладем ее в стек,
// и переходим к следующему символу
else
{
opervsteke.Push(initialString[i]);
continue;
}
 
// Если приоритет текущей операции больше приоритета
// последней, хранящейся в стеке, то кладем ее в стек
//
if (GetOperationPriority(lastOperation) < GetOperationPriority(initialString[i]))
{
opervsteke.Push(initialString[i]);
continue;
}
 
// иначе, выталкиваем последнюю операцию,
// а текущую сохраняем в стек
else
{
result += opervsteke.Pop();
opervsteke.Push(initialString[i]);
continue;
}
}
 
// Если текущий символ - '(', кладем его в стек
if (initialString[i].Equals('('))
{
opervsteke.Push(initialString[i]);
continue;
}
if (initialString[i].Equals(')'))
{
while (opervsteke.Peek() != '(')
{
result += opervsteke.Pop();
}
opervsteke.Pop();
}
}
            while (!(opervsteke.Count == 0))
            {
                result += opervsteke.Pop();
            }
 
            // Возвращаем результат
            return result;
        }
 
   >
        public static double CalculateRPN(string rpnString)
        {
           
            Stack<double> numbersStack1 = new Stack<double>();
            Stack<char> numbersStack = new Stack<char>();
            
            double op1, op2;
 
            for (int i = 0; i < rpnString.Length; i++)
            {
                // Если символ - цифра, помещаем его в стек,
                   
                if (Char.IsDigit(rpnString[i])|| rpnString[i]== ',' ||  rpnString[i] == '.' || rpnString[i] == '-')
                    numbersStack.Push((rpnString[i]));
 
                // иначе (символ - операция), выполняем эту операцию
                // для двух последних значений, хранящихся в стеке.
                // Результат помещаем в стек
                else
                {
                    op2 = double.Parse(numbersStack.Pop);
                    op1 = double.Parse(numbersStack.Pop);
                    numbersStack1.Push(ApplyOperation(rpnString[i], op1, op2));
                }
            }
 
            return (numbersStack1.Pop());
        }

Решение задачи: «Калькулятор со скобками (обратная польская запись)»

textual
Листинг программы
op2 = double.Parse(numbersStack.Pop());
op1 = double.Parse(numbersStack.Pop());

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.133 из 5
Похожие ответы