Тема: Потрібна допомога по програмі
Потрібна допомога з програмою)
Як зробити щоб програма рахувала вираз з дужками? наприклад такий (10+5)/3
Зара зависає. Прикрипів проект. Хто може допоможіть дуже виручите.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Coursework
{
class Parser
{
public static double Eval(char[] expr)
{
return parseSummands(expr, 0);
}
private static double parseSummands(char[] expr, int index)
{
double x = parseFactors(expr, ref index);
while (true)
{
char op = expr[index];
if (op != '+' && op != '-')
return x;
index++;
double y = parseFactors(expr, ref index);
if (op == '+')
x += y;
else
x -= y;
}
}
private static double parseFactors(char[] expr, ref int index)
{
double x = trigFunctions(expr, ref index);
while (true)
{
char op = expr[index];
if (op != '/' && op != '*' && op != '^')
return x;
index++;
double y = trigFunctions(expr, ref index);
if (op == '*')
x *= y;
if (op == '^')
x = Math.Pow(x, y);
if (op == '/')
x /= y;
if (y == 0)
{
MessageBox.Show("На 0 ділити не можна", "Повідомлення");
}
}
}
private static double trigFunctions(char[] expr, ref int index)
{
if (expr[index] >= 48 && expr[index] <= 57 || expr[index] == 46 || expr[index] == 45)
return GetDouble(expr, ref index);
else
{
char op = expr[index];
if (op != 'c' && op != 't' && op != 's')
return GetDouble(expr, ref index);
index += 4;
double x = GetDouble(expr, ref index);
if (index + 1 != expr.Length) index++;
if (op == 'c')
return Math.Cos(x);
if (op == 't')
return Math.Tan(x);
else
return Math.Sin(x);
}
}
private static double GetDouble(char[] expr, ref int index)
{
string dbl = "";
while ((expr[index] >= 48 && expr[index] <= 57 || expr[index] == 46))
{
dbl += expr[index].ToString();
index++;
if (index == expr.Length)
{
index--;
break;
}
}
return double.Parse(dbl);
}
}
}