Исключить деление на ноль - C#
Формулировка задачи:
Здравствуйте. Есть код по вычислению значения выражения. Он рабочий и вычисляет значение верно. НО! Я не знаю что нужно дописать, чтобы при делении на ноль выдавалось: "На ноль делить нельзя", а не "бесконечность".
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
//Метод возвращает true, если проверяемый символ - разделитель ("пробел" или "равно")
static private bool IsDelimeter(char c)
{
if ((" =".IndexOf(c) != -1))
return true;
return false;
}
//Метод возвращает true, если проверяемый символ - оператор
static private bool IsOperator(char с)
{
if (("+-/*^()".IndexOf(с) != -1))
return true;
return false;
}
//Метод возвращает приоритет оператора
static private byte GetPriority(char s)
{
switch (s)
{
case '(': return 0;
case ')': return 1;
case '+': return 7;
case '-': return 7;
case '*': return 8;
case '/': return 8;
case '^': return 9;
default: return 6;
}
}
static private double Counting(string input)
{
double result = 0;
Stack<double> temp = new Stack<double>();//Временный стек для решения
for (int i = 0; i < input.Length; i++)
{
//Если символ - цифра, то читаем все число и записываем на вершину стека
if (Char.IsDigit(input[i]))
{
string a = string.Empty;
while (!IsDelimeter(input[i]) && !IsOperator(input[i]))//Пока не разделитель
{
a = a + input[i];//Добавляем
i++;
if (i == input.Length) break;
}
temp.Push(double.Parse(a));//Записываем в стек
i--;
}
else if (IsOperator(input[i]))//Если символ - оператор
{
//Берем два последних значения из стека
double a = temp.Pop();
double b = temp.Pop();
if (result == b / 0)
{
}
else
switch (input[i])//Производим над ними действие, согласно оператору
{
case '+': result = b + a;
break;
case '-': result = b - a;
break;
case '*': result = b * a;
break;
case '/': result = b / a;
break;
case '^': result = double.Parse(Math.Pow(double.Parse(b.ToString()), double.Parse(a.ToString())).ToString());
break;
}
temp.Push(result);//Результат вычисления записываем обратно в стек
}
}
return temp.Peek();//Забираем результат всех вычислений из стека и возвращаем его
}
static void Main(string[] args)
{
string stage;
using (StreamReader reader = new StreamReader("test.txt"))//Читаем текстовый файл
{
stage = reader.ReadLine();
}
Console.WriteLine(stage);
string values = "";
StreamReader file = new StreamReader("test.txt", System.Text.Encoding.Default);//Выделяем числа
while (!file.EndOfStream)//Пока файл не прочитан весь, то продолжаем его читать
{
values = file.ReadLine();
}
string[] split = values.Split(new Char[] { ' ', ',', '.', ':', '\t', '=' });
for (int i = 0; i < split.GetLength(0) - 1; i = i + 2)
{
stage = stage.Replace(split[i], split[i + 1]);//Подставляем вместо переменных конкретные значения
}
Console.WriteLine(values);
Console.WriteLine("Выражение с числами:");
Console.WriteLine(stage);
double result = Counting(stage);
Console.WriteLine("Результат:{0}", result);
Console.ReadKey();
}
}
}Решение задачи: «Исключить деление на ноль»
textual
Листинг программы
if (a == 0 && input[i] == '/')