Вычисление функции - 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));