Вычисление функции - C# (177775)
Формулировка задачи:
Задача состоит в следующем: необходимо написать кода для вычисления значения x. Пример x=(4+2+3)*2+4/2-2.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace test2 { class Program { static void Main(string[] args) { string str = "( 4 + 2 + 3 ) * 2 + 4 / 2 - 2"; // string[] allowed = new string[] { "+", "-", "*", "/", "(", ")" }; string[] exp = str.Split(' '); Queue<string> ops = new Queue<string>(); Queue<double> vals = new Queue<double>(); Queue<string> opsinbr = new Queue<string>(); Queue<double> valsinbr = new Queue<double>(); int opout = 0; int opinbr = 0; bool inbr = false; for (int i = 0; i < exp.Length; i++) { String s = exp[i]; if (s.Equals("(")) { inbr = true; } else if (s.Equals("+") || s.Equals("*") || s.Equals("/") || s.Equals("-")) { if (inbr) { opinbr++; opsinbr.Enqueue(s); } else { opout++; ops.Enqueue(s); } } else if (s.Equals(")")) { for (int l = 0; l < opinbr; l++) { GetComput(opsinbr, valsinbr); } opinbr = 0; Console.WriteLine(valsinbr.Dequeue()); } else { if (inbr) { valsinbr.Enqueue(Convert.ToDouble(s)); } else { vals.Enqueue(Convert.ToDouble(s)); } } } Console.WriteLine(vals.Dequeue()); Console.WriteLine(opout); Console.WriteLine(opinbr); Console.ReadKey(); } private static void GetComput(Queue<string> opsinbr, Queue<double> valsinbr) { String opinbr = opsinbr.Dequeue(); if (opinbr.Equals("+")) { valsinbr.Enqueue(valsinbr.Dequeue() + valsinbr.Dequeue()); } else if (opinbr.Equals("*")) { valsinbr.Enqueue(valsinbr.Dequeue() * valsinbr.Dequeue()); } else if (opinbr.Equals("/")) { valsinbr.Enqueue(valsinbr.Dequeue() / valsinbr.Dequeue()); } else if (opinbr.Equals("-")) { valsinbr.Enqueue(valsinbr.Dequeue() - valsinbr.Dequeue()); } } private static void GetComp(Queue<string> ops, Queue<double> vals) { String op = ops.Dequeue(); if (op.Equals("+")) { vals.Enqueue(vals.Dequeue() + vals.Dequeue()); } else if (op.Equals("*")) { vals.Enqueue(vals.Dequeue() * vals.Dequeue()); } else if (op.Equals("/")) { vals.Enqueue(vals.Dequeue() / vals.Dequeue()); } else if (op.Equals("-")) { vals.Enqueue(vals.Dequeue() - vals.Dequeue()); } } } }
написал код, но где-то ошибка есть, не могу понять, где именно. Need help
Решение задачи: «Вычисление функции»
textual
Листинг программы
var result = Convert.ToDouble(new DataTable().Compute("( 4 + 2 + 3 ) * 2 + 4 / 2 - 2", null));
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д