Запретить деление на 0 - C#
Формулировка задачи:
Как сделать чтобы во время деления на 0 выбивало: "на 0 делить нельзя"
сейчас 10/0= 10 почему так?
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 == '/' && y != 0)
x /= y;
else if (op == '*')
x *= y;
else if (op == '^')
x = Math.Pow(x, y);
}
}
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 (((int)expr[index] >= 48 && (int)expr[index] <= 57 || (int)expr[index] == 46))
{
dbl += expr[index].ToString();
index++;
if (index == expr.Length)
{
index--;
break;
}
}
return double.Parse(dbl);
}
}
}Решение задачи: «Запретить деление на 0»
textual
Листинг программы
static void MagicDouble()
{
double a = 0.3, b = 0.1, c = 0.2;
Console.WriteLine(a == (b + c));
}