Исключить деление на ноль - 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] == '/')

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.3 из 5
Похожие ответы