Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ЯП / ЯП / Laba_4_Terentyev

.docx
Скачиваний:
70
Добавлен:
11.05.2015
Размер:
114.33 Кб
Скачать

Министерство образования и науки РФ

Федеральное государственное бюджетное образовательное учреждение

высшего профессионального образования

«ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ

УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ» (ТУСУР)

Кафедра комплексной информационной безопасности электронно-вычислительных систем (КИБЭВС)

ГЕНЕРИРОВАНИЕ И ОБРАБОТКА ИСКЛЮЧИТЕЛЬНЫХ СИТУАЦИЙ

Отчет по лабораторной работе №4

по дисциплине «Языки программирования»

Выполнил: Студент гр.520-2

________ Терентьев Д.С.

«____» _________ 2013 г.

Принял: Доцент каф. КИБЭВС

___________ Романов А.С.

«____» _________ 2013 г.

2013

1 Введение

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

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=");

int x = int.Parse(Console.ReadLine());

Console.Write("y=");

int y = int.Parse(Console.ReadLine());

Console.WriteLine(x / y);

}

catch (DivideByZeroException)

{

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

return M();

}

return 0;

}

Данный вариант не будет завершать работы программы при вводе данных при которых происходит деление на нуль, а будет постоянно предупреждать и просить повторения ввода новых параметров. Пример работы представлен на рисунке 4.1.2:

Рисунок 4.1.2 – работа функции с обработчиком исключений.

4.2. Схема Бертана Мейера

static int M()

{

Console.Write("Введите числа от 1 до 10\n");

Console.Write("x=");

string str1 = Console.ReadLine();

Console.Write("y=");

string str2 = Console.ReadLine();

int x, y, f;

x = Convert.ToInt32(str1);

y = Convert.ToInt32(str2);

bool success = true;

do

{

try

{

bool danger = false;

danger = CheckDanger(x, y);

f = x / y;

if (x < 1 || x > 10) throw new ArgumentOutOfRangeException("Число должно быть от 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 Заключение

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

Соседние файлы в папке ЯП