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