Калькулятор со скобками (обратная польская запись) - 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());
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д