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