Написать программу в которой обрабатываются следующие исключительные ситуации

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

1. деление на ноль.

2. не выделена динамическая память оператором NEW.

3. пользователь нажал клавиши [Ctrk+C], [Ctrl+Break].

4. попытка открыть несуществующий файл.

При возникновении таких ситуаций программа генерируется исключения и дальнейший ход вычислительного процесса прерывается. Язык С++ был одним из первых, в систему программирования которого были встроены средства, представлявшие разработчику возможность распознавать причину возникшей ситуации и способы ее решения.

В зависимости от инструментальные среды реализации версии языка С++, отличаются и средства обработки исключительных ситуаций. Но на сегодняшний момент именно файловые системы типа Builder C++ являются предоставляют наиболее развитые инструменты обработки исключительных ситуаций.

По умолчанию, в интегрированной системе визуального программирования IDE — Builder C++ исключительная ситуация характеризуется созданием временного объекта специального вида, так называемого исключения. Объект исключения разрушается автоматически после обработки. Если это исключение специально не перехватить, то оно будет обработано стандартным образом методом:

Java для начинающих. Урок 37: Исключения (часть 1). Обработка исключений.

Application -> HandleException

Как правило, на экране появляется диалоговое окно с сообщением следующего вида:

Имя приложения

Division by zero

— Деление на ноль

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

1) Избежать снятия выполнения программы из-за «мелочей».

2) Предотвратить «утечку» ресурсов в виде:

· потери динамически распределенной памяти.

· не уничтожения временных файлов и прочего «мусора».

3) Точно установить причину исключения и сообщить об этом пользователю и разработчику для устранения.

4) Обеспечить «мягкое» завершение программы.

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

Пример попытки открытия файла на ввод и запись в него последовательности символов «пример».

File *fp; — любое имя указывающее на предопределенную структуру через него идет обмен файлами

Fprintf (fp, “пример”);

Str=new char(size)

Недостатки первого способа обработки исключительных ситуаций:

1) Не приняты меры для дальнейшей, нормальной работы программы при генерации исключительной ситуации.

2) Пользователь не информирован о возникновении исключительной ситуации и желательных действиях. Это связано с тем что – _finally не знает, произошло ли исключение и его причину, так как проверка и идентификация исключительной ситуации генерируется функцией ExcepAddr только после выхода из блока операторов _ finally.

Второй способ обработки ИС был введен еще в Turbo C++. Он основан на безусловном завершении приложения вызовом функции формата:

8. Подготовительный курс С++. Исключительные ситуации

void exit(status);

Параметр status определяет код завершения. Если параметр равен 0 – это означает нормальное завершение программы. Если параметр равен 1 – то это означает аварийное завершение.

Функция EXIT прекращает работу программы следующим образом:

— закрывает все открытые файлы,

— очищает буфера обмена ввода-вывода, распечатывая из них информацию,

— последовательно (в обратном порядке) и безусловно выполняет собственные пользовательские функции завершения, которые имеют:

int atexit (имя функции);

Читайте также:
Программы необходимые для запуска игр

atexit (myexit1);

atexit(myexit2);

void myexit1(void) // удаление всех *.tmp в текущем каталоге.

D=findfirst(“*.tmp”, // ffblk – системная структура, содержащая описание одного файла

D=findnext( // системная функция перехода к чтению атрибутов очередного файла

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

Третий способ (кардинальный, в интегрированный системе визуального программирования Builder C++) основан на обработке классов исключительных ситуаций. Иерархия классов исключительных ситуаций VCL поддерживается автоматически подключаемой библиотекой (ко всем модулям).

EMATH ERROR – базовый класс ИС с операциями с плавающей запятой

EOVERFLOW – переполнение регистра

EZERODIVIDE – деление на ноль

EUNDERFLOW – потеря значащих разрядов

EXCEPTION – базовый класс VCL

ECONTROLC – пользователь нажал [CTRL+C]

EABORT – намеренное прерывание вычислений

E STREAM ERROR – базовый класс исключений ошибок потоков

EFOPEN ERROR – ошибка открытия файла

EF CREAT ERROR -.

Использование блока операторов:

Catch (Тип ИС)

позволяет организовать обработку конкретной исключительной ситуации. Причем количество используемых операторов catch не ограничено. Исключительная ситуация в операторе catch может быть установлена:

— ссылкой на класс исключения операций библиотеки ,

— специально генерируем исключением:

catch(std::bad_alloc) // недостаток памяти при использовании оператора NEW,

— многоточием (…) для обработки любой ИС.

В отличие от _finally, блоки catch позволяют установить тип сгенерированной ИС и дифференцированно на них реагировать. Допускает несколько блоков catch в одном try.

Пусть в интегрированный системе визуального программирования Builder C++ в двух окнах редактирования Edit1 и Edit2 пользователь должен ввести действительные числа c типом данных float.

< A=StrToFloat(Edit1->Text); // переводит символьную строку в тип данных float

A=A / StrToFloat (Edit2 -Text); >

Catch(Econvert Error Application ->MessageBox(“Ввели ошибочное число”, “Повторите ввод”, MВ_ОК);

/ /Слишком большое число >

Catch(EZeroDivide Application ->MessageBox(“Ввели ноль”, “Повторите ввод”, MВ_ОК); >

Так как исключения VCL имеют иерархию, то можно обработать сразу совокупность исключений, указав базовый класс:

Catch(EmathError Application ->MessageBox (“Ошибка вычислений”, “Повторите ввод”, MВ_ОК); >

Использование символа «…»(многоточия) позволяет перехватить любые исключения, например:

Блоки try … catch могут быть вложенными явным или неявным образом.

Четвертый способ позволяет обрабатывать ИС на уровне всего приложения. Для этого предусмотрено событие OnException самого приложения Application. Здесь используется класс Exception (он наследует все функции базового класса) для идентификации ИС отличным от библиотеки VCL.h способом.

Для использования класса установки исключительной ситуации Exception и события ОnException надо сделать следующее:

а) в заголовочный файл приложения добавить объявления собственного обработчика ИС, например MyIS:

Void_fastcall MyIS(Tobject*Sender,Exception*E)

в) в файле unit- модуля реализовать обработчики, например для первой формы TForm1 проекта в интегрированный системе визуального программирования Builder C++:

Void_fastcall TForm1::MyIS(Tobject*Sender,Exception*E)

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

Application -> OnException = MyIS;

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

Void _fastcаll TАorm1::MyIS(Tobject *Sender, Exception *E)

If (string(E -> СlassName()) = = “EZeroDivide”)

Читайте также:
В какой программе работают пиксар

S+= “Деление на ноль”;

If (string(E -> СlassName()) = = “EOverFlow”)

S+= “Переполнение”;

Application -> MessageBox(S.C_str(), “Повторите ввод”, MВ_ОК); // Вывод диалогового окна с сообщением

Пятый способ основан на обработке сигналов был также как и второй введен еще в Turbo C++. В языке С++ сигнал представляет собой непредвиденное событие, которое может вызвать прерывание программы. Для этого используется библиотечный файл < Signal.h >.

Основные стандартные сигналы:

· SIGINT – получение программой интерактивного сигнала, например нажатие пользователем комбинации клавиш [Ctrl+C] для снятия программы с выполнения.

· SIGUSR1, SIGUSR2,… — сигналы специально генерируемые функцией Raise(), в которую передаются целочисленные номера сигнала.

· SIGFPE – возникновение арифметические ошибки.

· SIGABRT – аварийное завершение программы, например по требованию операционной системы.

Технология организации обработки ИС на основе сигналов следующая:

а) Вызов обработчика должен быть заранее включен. Например, при открытии формы, то есть событии OnCreat, надо установить этот обработчик с помощью оператора:

Signal(сигнал, имя функции);

Например, Signal(SIGINT, MyIS);

в) Написать встроенный модуль в виде функцию обработки исключительной ситуации как сигнала:

void MyIS(int N)

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:

Об этом полезно знать:

Вертикальная и горизонтальная коммуникация С точки зрения направления движения различают вертикальную (с направлением вверх или вниз) и горизонтальную коммуни­кацию.
Задания для закрепления. 1.Старениемавтомобиляназывается __________________________________________ 1. Старением автомобиля называется.
Финансовые ресурсы предприятия Осуществление финансовых отношений предполагает наличие у предприятия финансовых ресурсов.
Личные права и свободы человека и гражданина Эти права составляют первооснову правового статуса человека и гражданина.
Неопределенности вида 0/0 а) Рациональные выражения. В случае неопределенности 0/0 для рациональных выражений всегда применяется прием сокращения множителя.

Источник: studopedia.ru

Добавить в код программы обработку исключительных ситуаций — C#

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

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication23 < internal class Program < private static void Main() < int[] x = new int[10], y = new int[10]; var r = new Random(); for (int i = 0; i < x.Length; i++) < x[i] = r.Next(200) — 100; y[i] = r.Next(200) — 100; Console.WriteLine(«() + ()i», x[i], y[i]); > int maxRe = 0, maxIm = 0; foreach (int i in x) if (Math.Abs(maxRe) < Math.Abs(i)) maxRe = i; foreach (int i in y) if (Math.Abs(maxIm) < Math.Abs(i)) maxIm = i; Console.WriteLine(«Вектор максимальной длины: () + ()i,rn» + «Его длина составляет «, maxRe, maxIm, Math.Sqrt(maxRe * maxRe + maxIm * maxIm)); Console.ReadKey(); > > >

программа находит вектор наибольшей длины

Код к задаче: «Добавить в код программы обработку исключительных ситуаций»

Листинг программы

Console.WriteLine(«Хотите поизвращаться-нажмите 1»); Console.WriteLine(«Закрыть и не видеть этот ужас нажмите 2»); int n = 0; n = int.Parse(Console.ReadLine()); switch (n)

Источник: studassistent.ru

2 Задание

1) Разработать программу, генерирующую исключительную ситуацию, и обрабатывающую вызванное исключение.

2) Доработать пример кода, реализующего схему Б. Мейера так, чтобы угроза исключения зависела от значения генерируемого случайного числа, а обработчик исключения мог изменять границы интервала, повышая вероятность успеха.

Читайте также:
Прекращена работа программы при запуске любой программы

3 Краткая теория

Исключительные ситуации – это ситуации, возникающие во время выполнения программы, не позволяющие корректно выполнять вычисляемые действия. Виды исключений:

  • Ошибка ограничений (Constrain_Error) – выход за пределы диапазона.
  • Ошибка памяти (Storage_Error) – недостаточность памяти.
  • Программная ошибка (Program_Error) – нарушение правил языка.
  • Ошибка задачи (Tasking_Error) – ошибки, возникающие при взаимодействии задач.

Семантика обработки исключений: 1. Если исключительная ситуация не обработана внутри процедуры, попытка ее выполнения оставляется, и исключительная ситуация снова возбуждается в точке вызова. 2. Если исключительная ситуация возбуждается во время выполнения обработчика, а обработчик оставляется, то исключение снова возбуждается в точке вызова. 3. Возможен выбор: возбудить то же самое исключение или другое в точке вызова. Базовая технология обработки исключений в С++ заключается в использовании триады try…throw…catch. Нормальная ситуация обрабатывается кодом, следующим за ключевым словом try, а код, располагающийся за ключевым словом catch, выполняется только в исключительных случаях. Выбрасывание осуществляется с помощью оператора throw. При выбросе исключения выполнение блока try останавливается и начинается выполнение блока catch (обработчика исключения). 4 Ход работы 4.1. Напишем функцию, которая производит деление двух чисел: static void M(int x, int z) < Console.WriteLine(x / y); >Если ввести значение у = 0, то происходит деление на нуль и программа завершится с ошибкой, как показано на рисунке 4.1.1: Рисунок 4.1.1 – Демонстрация работы функции. Для того, чтобы программа не прекращала работу из-за данной функции доработаем её, добавив обработчик исключений: static int M() < try < Console.Write(«Введите параметрыn»); Console.Write(«x y Делить на нуль нельзя!»); return M(); >return 0; > Данный вариант не будет завершать работы программы при вводе данных при которых происходит деление на нуль, а будет постоянно предупреждать и просить повторения ввода новых параметров. Пример работы представлен на рисунке 4.1.2: Рисунок 4.1.2 – работа функции с обработчиком исключений. 4.2. Схема Бертана Мейера static int M() < Console.Write(«Введите числа от 1 до 10n»); Console.Write(«x y Число должно быть от 1 до 10. «); if (y < 1 || y >10) throw new ArgumentOutOfRangeException(«Число должно быть от 1 до 10. «); > catch (DivideByZeroException) < Console.WriteLine(«Делить на нуль нельзя!»); return M(); >catch (ArgumentOutOfRangeException) < while (CheckDanger(x, y)) < if (x < 1 || x >10) x = x / 2; else y = y / 2; > return(x / y); > > while (!success); return (x/y); > static bool CheckDanger(int x, int y) < try < if (x < 1 || x >10) throw new ArgumentOutOfRangeException(«Число должно быть от 1 до 10. «); if (y < 1 || y >10) throw new ArgumentOutOfRangeException(«Число должно быть от 1 до 10. «); return (false); > catch < return (true); >>Рисунок 4.2.1 – Работа функции со схемой обработки исключений Б. Мейера 5 Заключение В ходе выполнения данной лабораторной работе мы ознакомились с исключительными ситуациями возникающими при выполнении программы, написали программу в которой могут возникать исключительные ситуации связанные с входными данными, и реализовали обработчики исключений.

Источник: studfile.net

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru