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

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

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

взял реализацию...сделанную по принципу ОПН ..нашел баг в проге..нещитает числа с запятыми начал переделывать и вот ошибка -- op2 = double.Parse(numbersStack.Pop); op1 = double.Parse(numbersStack.Pop); - Ошибка 2 Аргумент "1": преобразование типа из "группа методов" в "string" невозможно. В чем дело?
Листинг программы
  1. public partial class Form1 : Form
  2. {
  3. public Form1()
  4. {
  5. InitializeComponent();
  6. }
  7. public static string ToRPN(string initialString)
  8. {
  9. // В стеке будут содержаться операции из выражения
  10. Stack<char> opervsteke = new Stack<char>();
  11. //последняя операция
  12. char lastOperation;
  13. // Результирующая строка
  14. string result = string.Empty;
  15. // Удаляем из входной строки лишние пробелы
  16. initialString = initialString.Replace(" ", "");
  17. for (int i = 0; i < initialString.Length; i++)
  18. {
  19. // Если текущий символ - число, добавляем его к результирующей строке
  20. if (Char.IsDigit(initialString[i]) || initialString[i] == ',' || initialString[i] == '.' || initialString[i] == '-')
  21. {
  22. result += initialString[i];
  23. continue;
  24. }
  25. if (IsOperation(initialString[i]))
  26. {
  27. // Если это не первая операция в выражении,
  28. // то нам необходимо будет сравнить ее
  29. // с последней операцией, хранящейся в стеке.
  30. // Для этого сохраняем ее в переменной lastOperation
  31. //
  32. if (opervsteke.Count != 0)
  33. lastOperation = opervsteke.Peek();
  34. // Иначе (если это первая операция), кладем ее в стек,
  35. // и переходим к следующему символу
  36. else
  37. {
  38. opervsteke.Push(initialString[i]);
  39. continue;
  40. }
  41. // Если приоритет текущей операции больше приоритета
  42. // последней, хранящейся в стеке, то кладем ее в стек
  43. //
  44. if (GetOperationPriority(lastOperation) < GetOperationPriority(initialString[i]))
  45. {
  46. opervsteke.Push(initialString[i]);
  47. continue;
  48. }
  49. // иначе, выталкиваем последнюю операцию,
  50. // а текущую сохраняем в стек
  51. else
  52. {
  53. result += opervsteke.Pop();
  54. opervsteke.Push(initialString[i]);
  55. continue;
  56. }
  57. }
  58. // Если текущий символ - '(', кладем его в стек
  59. if (initialString[i].Equals('('))
  60. {
  61. opervsteke.Push(initialString[i]);
  62. continue;
  63. }
  64. if (initialString[i].Equals(')'))
  65. {
  66. while (opervsteke.Peek() != '(')
  67. {
  68. result += opervsteke.Pop();
  69. }
  70. opervsteke.Pop();
  71. }
  72. }
  73. while (!(opervsteke.Count == 0))
  74. {
  75. result += opervsteke.Pop();
  76. }
  77. // Возвращаем результат
  78. return result;
  79. }
  80. >
  81. public static double CalculateRPN(string rpnString)
  82. {
  83. Stack<double> numbersStack1 = new Stack<double>();
  84. Stack<char> numbersStack = new Stack<char>();
  85. double op1, op2;
  86. for (int i = 0; i < rpnString.Length; i++)
  87. {
  88. // Если символ - цифра, помещаем его в стек,
  89. if (Char.IsDigit(rpnString[i])|| rpnString[i]== ',' || rpnString[i] == '.' || rpnString[i] == '-')
  90. numbersStack.Push((rpnString[i]));
  91. // иначе (символ - операция), выполняем эту операцию
  92. // для двух последних значений, хранящихся в стеке.
  93. // Результат помещаем в стек
  94. else
  95. {
  96. op2 = double.Parse(numbersStack.Pop);
  97. op1 = double.Parse(numbersStack.Pop);
  98. numbersStack1.Push(ApplyOperation(rpnString[i], op1, op2));
  99. }
  100. }
  101. return (numbersStack1.Pop());
  102. }

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

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

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


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

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

15   голосов , оценка 4.133 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы