Шаг 228.
Язык программирования C#. Начала.
Обработка исключений. Использование исключений. Пример 1

    На этом шаге мы рассмотрим простой пример использования исключения.

    Начиная с этого шага, мы рассмотрим несколько примеров, в которых используется обработка исключительных ситуаций. Начнем с программы, в которой решается линейное уравнение вида Ax = B. В общем случае решением этого уравнения является значение x = B/A. Но эта формула справедлива, только если параметр A≠0. А если A=0, то возможны два варианта. При B≠0 уравнение решений не имеет, а при B=0 решением является любое число. Соответствующий программный код представлен в примере ниже.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace pr228_1
{
    // Класс с главным методом:
    class Program
    {
        // Метод для решения уравнения: 
        static double solve(double A, double B) {
            // Если значение параметра A отлично от нуля: 
            if(A != 0) return B/A;
            // Текстовая переменная: 
            string msg;
            // Если параметр B имеет нулевое значение: 
            if(B == 0) msg = "Peшение - любое число";
            // Если значение параметра B отлично от нуля: 
            else msg = "Решений нет";
            // Генерируется исключение: 
            throw new ArithmeticException(msg);
        }
        
        // Главный метод:
        static void Main()
        {
            // Числовые переменные: 
            double A, B, x;
            Console.WriteLine("Решение уравнения Ax = B");
            // Контролируемый код:
            try
            {
                Console.Write("Парметр A = ");
                // Считывается значение параметра A: 
                A = Double.Parse(Console.ReadLine());
                Console.Write("Парметр B = ");
                // Считывается значение параметра B: 
                B = Double.Parse(Console.ReadLine());
                // Вычисление решения: 
                x = solve(A, B);
                // Отображение решения: 
                Console.WriteLine("Решение x = {0}", x);
            }
            // Обработка исключения: 
            catch (Exception e)
            {
                // Отображение описания исключения:
                Console.WriteLine(e.Message);
            }
            // Задержка:
            Console.ReadLine();
        }
    }
}
Архив проекта можно взять здесь.

    Результат выполнения программы может быть таким (здесь и далее выделены введенные пользователем значения):


Рис.1. Результат выполнения программы

    Таким:


Рис.2. Результат выполнения программы

    Таким:


Рис.3. Результат выполнения программы

    Или таким:


Рис.4. Результат выполнения программы

    Для решения уравнения мы описали специальный статический метод solve(). У метода два аргумента типа double. Это параметры A и B уравнения. Результатом метод возвращает частное A/B. Но такое значение вычисляется только в случае, если первый аргумент A отличен от нуля. Если первый аргумент нулевой, то проверяется (на предмет равенства нулю) значение второго аргумента B. В зависимости от результатов проверки, текстовой переменной msg присваивается значение, и эта переменная передается в качестве аргумента конструктору класса ArithmeticException при генерации исключения. Таким образом, метод solve() результатом возвращает решение уравнения или метод генерирует исключение класса ArithmeticException, если решений нет или если решением может быть любое число. Эта информация содержится в описании исключения (свойство Message объекта исключения).

    В главном методе программы сначала считываются значения параметров A и B, а затем для вычисления решения уравнения вызывается метод solve(). Все эти команды выполняются внутри try-блока, а соответствующий catch-блок перехватывает все исключения, в том числе и связанные с некорректно введенными значениями.


Если деление на ноль выполняется на множестве действительных чисел, то исключение не генерируется (в отличие от случая, когда деление на ноль выполняется на множестве целых чисел).

    На следующем шаге мы продолжим изучение этого вопроса.




Предыдущий шаг Содержание Следующий шаг