СДЕЛАЙТЕ СВОИ УРОКИ ЕЩЁ ЭФФЕКТИВНЕЕ, А ЖИЗНЬ СВОБОДНЕЕ

Благодаря готовым учебным материалам для работы в классе и дистанционно

Скидки до 50 % на комплекты
только до

Готовые ключевые этапы урока всегда будут у вас под рукой

Организационный момент

Проверка знаний

Объяснение материала

Закрепление изученного

Итоги урока

Тестирование ИС Практическая работа №9

Категория: Информатика

Нажмите, чтобы узнать подробности

Просмотр содержимого документа
«Тестирование ИС Практическая работа №9»

Практическая работа № 9

«Анализ и обеспечение обработки исключительных ситуаций»


Цель работы - изучить операторы, используемые при обработке исключительных ситуаций, возникающих во время выполнения вычислительных процессов, получить практические навыки в составлении программ.

Общие сведения

Исключительная ситуация (или исключение) - это ошибка, которая возникает во время выполнения программы. Используя С#-подсистему обработки исключительных ситуаций, с такими ошибками можно справляться. В С# эта подсистема включает в себя усовершенствованные методы, используемые в языках C++ и Java. Преимущество подсистемы обработки исключений состоит в автоматизации создания большей части кода, который ранее необходимо было вводить в программы "вручную". Обработка исключений упрощает "работу над ошибками", позволяя в программах определять блок кода, именуемый обработчиком исключении, который будет автоматически выполняться при возникновении определенной ошибки. В этом случае не обязательно проверять результат выполнения каждой конкретной операции или метода вручную. Если ошибка возникнет, ее должным образом обработает обработчик исключений.

Еще одним преимуществом обработки исключительных ситуаций в С# является определение стандартных исключений для таких распространенных программных ошибок, как деление на нуль или попадание вне диапазона определения индекса. Чтобы отреагировать на возникновение таких ошибок, программа должна отслеживать и обрабатывать эти исключения. Без знания возможностей С#-подсистемы обработки исключений успешное программирование на С# попросту невозможно.

В С# исключения представляются классами. Все классы исключений должны быть выведены из встроенного класса исключений Exception, который является частью пространства имен System. Таким образом, все исключения - подклассы класса Exception.

Программные инструкции, которые нужно проконтролировать на предмет исключений, помещаются в try-блок. Если исключение возникает в этом блоке, оно дает знать о себе выбросом определенного рода информации. Это выброшенное исключение может быть перехвачено программным путем с помощью catch-блока и обработано соответствующим образом. Системные исключения автоматически генерируются С#-системой динамического управления. Чтобы сгенерировать исключение вручную, используется ключевое слово throw. Любой код, который должен быть обязательно выполнен при выходе из try-блока, помещается в блок finally.

Ядром обработки исключений являются блоки try и catch. Эти ключевые слова работают "в одной связке"; формат записи try/catch-блоков обработки исключений имеет следующий вид:

try {

// Блок кода, подлежащий проверке на наличие ошибок.

}

catch (ExcepTypel exOb) {

// Обработчик для исключения типа ExcepTypel

}

catch (ExcepType2 exOb) {

// Обработчик для исключения типа ЕхсерТуре2

}

Здесь ЕхсерТуре - это тип сгенерированного исключения. После "выброса" исключение перехватывается соответствующей инструкцией catch, которая его обрабатывает. Как видно из формата записи try/catch-блоков, с try-блоком может быть связана не одна, а несколько catch-инструкций. Какая именно из них будет выполнена, определит тип исключения. Другими словами, будет выполнена та catch-инструкция, тип исключения которой совпадает с типом сгенерированного исключения (а все остальные будут проигнорированы). После перехвата исключения параметр exOb примет его значение.

Задавать параметр exOb необязательно. Если обработчику исключения не нужен доступ к объекту исключения (как это часто бывает), в задании параметра exOb нет необходимости. Поэтому во многих примерах этой главы параметр exOb не задан.

Важно понимать следующее: если исключение не генерируется, то try-блок завершается нормально, и все его catch-инструкции игнорируются. Выполнение программы продолжается с первой инструкции, которая стоит после последней инструкции catch. Таким образом, catch-инструкция (из предложенных после try-блока) выполняется только в случае, если сгенерировано соответствующее исключение.

Ниже представлены наиболее часто используемые исключения, определенные в пространстве имен System:

Исключение

Значение

ArrayTypeMismatchException

Тип сохраняемого значения несовместим с типом массива

DivideByZeroException

Попытка деления на нуль

IndexOutOfRangeException

Индекс массива оказался вне диапазона

InvalidCastException

Неверно выполнено динамическое приведение типов

OutofMemoryException

Недостаточный объем свободной памяти

OverflowException

Имеет место арифметическое переполнение

NullReferenceException

Попытка использовать нулевую ссылку

StackoverflowException

Переполнение стека

Иногда требуется перехватывать все исключения, независимо от их типа. Для этого используется catch-инструкция без параметров. В этом случае создается обработчик "глобального перехвата", который используется, чтобы программа гарантированно обработала все исключения.

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

 Пример:

using System;

namespace ConsoleApplication {

 class OurClass {

   static void Main(string[] args) {

 float num1 = 1, num2 = 2, summarize, multiply, sub, divide = 0;

 Console.Write("Введите первое число:");

 try { num1 = float.Parse(Console.ReadLine()); }

 catch {

  Console.WriteLine("Неправильный формат числа!\n"+

       "В качестве значения первого числа будет 1");

}

Console.Write("Введите второе число:");

 try { num2 = float.Parse(Console.ReadLine()); }

     catch {

  Console.WriteLine("Неправильный формат числа!\n"+

       "В качестве значения второго числа будет 2");

 }

summarize = num1 + num2; multiply = num1 * num2; sub = num1 - num2;

 try { divide = num1 / num2; }

 catch(DivideByZeroException) {

  Console.WriteLine("Нельзя делить на нуль!");

 }

     Console.WriteLine(

     "\n" + num1 + " + " + num2 + " = " + summarize +

"\n" + num1 + " * " + num2 + " = " + multiply +

"\n" + num1 + " - " + num2 + " = " + sub +

"\n" + num1 + " / " + num2 + " = " + divide);

Console.Write("\nДля выхода из программы нажмите [Enter]:");

     string anykey = Console.ReadLine();

   }

 }

}

Задание для самостоятельного выполнения

Оптимизировать программу, включив в нее обработку исключительных ситуаций: ввода данных, операции деления и др.

Выход за границы массива(матрицы). Матрица 2х2, мы, к примеру, перемножаем элементы (3;3)