Вычисление функции - C# (177775)

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

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

Задача состоит в следующем: необходимо написать кода для вычисления значения x. Пример x=(4+2+3)*2+4/2-2.
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. namespace test2
  7. {
  8. class Program
  9. {
  10. static void Main(string[] args)
  11. {
  12. string str = "( 4 + 2 + 3 ) * 2 + 4 / 2 - 2";
  13. // string[] allowed = new string[] { "+", "-", "*", "/", "(", ")" };
  14. string[] exp = str.Split(' ');
  15. Queue<string> ops = new Queue<string>();
  16. Queue<double> vals = new Queue<double>();
  17. Queue<string> opsinbr = new Queue<string>();
  18. Queue<double> valsinbr = new Queue<double>();
  19. int opout = 0;
  20. int opinbr = 0;
  21. bool inbr = false;
  22. for (int i = 0; i < exp.Length; i++)
  23. {
  24. String s = exp[i];
  25. if (s.Equals("("))
  26. {
  27. inbr = true;
  28. }
  29. else if (s.Equals("+") || s.Equals("*") || s.Equals("/") || s.Equals("-"))
  30. {
  31. if (inbr)
  32. {
  33. opinbr++;
  34. opsinbr.Enqueue(s);
  35. }
  36. else
  37. {
  38. opout++;
  39. ops.Enqueue(s);
  40. }
  41. }
  42. else if (s.Equals(")"))
  43. {
  44. for (int l = 0; l < opinbr; l++)
  45. {
  46. GetComput(opsinbr, valsinbr);
  47. }
  48. opinbr = 0;
  49. Console.WriteLine(valsinbr.Dequeue());
  50. }
  51. else
  52. {
  53. if (inbr)
  54. {
  55. valsinbr.Enqueue(Convert.ToDouble(s));
  56. }
  57. else
  58. {
  59. vals.Enqueue(Convert.ToDouble(s));
  60. }
  61. }
  62. }
  63. Console.WriteLine(vals.Dequeue());
  64. Console.WriteLine(opout);
  65. Console.WriteLine(opinbr);
  66. Console.ReadKey();
  67. }
  68.  
  69. private static void GetComput(Queue<string> opsinbr, Queue<double> valsinbr)
  70. {
  71. String opinbr = opsinbr.Dequeue();
  72. if (opinbr.Equals("+"))
  73. {
  74. valsinbr.Enqueue(valsinbr.Dequeue() + valsinbr.Dequeue());
  75. }
  76. else if (opinbr.Equals("*"))
  77. {
  78. valsinbr.Enqueue(valsinbr.Dequeue() * valsinbr.Dequeue());
  79. }
  80. else if (opinbr.Equals("/"))
  81. {
  82. valsinbr.Enqueue(valsinbr.Dequeue() / valsinbr.Dequeue());
  83. }
  84. else if (opinbr.Equals("-"))
  85. {
  86. valsinbr.Enqueue(valsinbr.Dequeue() - valsinbr.Dequeue());
  87. }
  88. }
  89. private static void GetComp(Queue<string> ops, Queue<double> vals)
  90. {
  91. String op = ops.Dequeue();
  92. if (op.Equals("+"))
  93. {
  94. vals.Enqueue(vals.Dequeue() + vals.Dequeue());
  95. }
  96. else if (op.Equals("*"))
  97. {
  98. vals.Enqueue(vals.Dequeue() * vals.Dequeue());
  99. }
  100. else if (op.Equals("/"))
  101. {
  102. vals.Enqueue(vals.Dequeue() / vals.Dequeue());
  103. }
  104. else if (op.Equals("-"))
  105. {
  106. vals.Enqueue(vals.Dequeue() - vals.Dequeue());
  107. }
  108. }
  109. }
  110. }
написал код, но где-то ошибка есть, не могу понять, где именно. Need help

Решение задачи: «Вычисление функции»

textual
Листинг программы
  1. var result = Convert.ToDouble(new DataTable().Compute("( 4 + 2 + 3 ) * 2 + 4 / 2 - 2", null));

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


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

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

9   голосов , оценка 4 из 5

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

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

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