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

Отчет 5 - Генерирование и обработка исключительных ситуаций - СФ

.pdf
Скачиваний:
3
Добавлен:
19.03.2023
Размер:
298.14 Кб
Скачать

Министерство науки и высшего образования Российской Федерации Федеральное государственное бюджетное образовательное учреждение высшего образования

ТОМСКИЙ ГОСУДАРСТВЕЕНЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)

Кафедра комплексной информационной безопасности электронно-

вычислительных систем (КИБЭВС)

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

Отчет по лабораторной работе № 5 По дисциплине «Языки программирования»

Студент гр. ххх

________ ххх

________

Принял

Ххх

ххх

________ ххх

________

Томск 2023

1 Введение

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

Для работы был выбран язык программирования – C++.

2

2 Ход работы

На рисунках 2.1 и 2.2 представлен код исключительной ситуации – деления на нуль. На рисунке 2.1 функция, которая генерирует данную ситуацию, а на рисунке 2.2 представлена конструкция try-catch, которая обрабатывает исключение.

Рисунок 2.1 - Функция деления

Рисунок 2.2 - Обработчик исключения

На рисунках 2.3 и 2.4 представлен код исключительной ситуации – деления, доработанный схемой обработки исключительных ситуации Б. Мейера.

На рисунке 2.3 код функции, которая реализовывает исключительную ситуацию.

На рисунке конструкция try-catch, которая обрабатывает исключительную

ситуацию.

3

Рисунок 2.3 - Функция деления, доработана схемой Б. Мейера

Рисунок 2.4 - Обработчик для доработанной схемы Б. Мейера

4

Также проверка возможности продолжения программы представлена на рисунке 2.5, данная функция сравнивает количество попыток, введенных пользователем.

Рисунок 2.5 - Проверка возможности продолжения программы

5

3Заключение

Входе выполнения данной лабораторной работы были написаны функции деления, первая – функция обычного деления, вторая – функция деления,

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

Код программы представлен в приложении А.

6

Приложение А

(обязательное)

Код приложения

#include <iostream> using namespace std;

int alltries = 5;

double divide(double numenator, double denumenator)

{

cout << "==== Деление на ноль ====\n"; if (denumenator == 0)

throw exception("Деление на ноль невозможно!"); return numenator / denumenator;

}

double divideForMayer(double numenator, double denumenator)

{

return numenator / denumenator;

}

bool ChekDanger(int divider)

{

if (divider == 0) return true;

else return false;

}

bool ChekContWork(int nowtry)

{

if (nowtry<alltries) return true;

else false;

}

double divideMeyer()

{

cout << "\n==== Программирование по контракту ====\n"; double x, y, f;

bool success = true; int nowtry = 0;

bool Danger = false; do

{

cout << "Введите делимое: "; cin >> x;

cout << "\nВведите делитель: "; cin >> y;

cout << endl; try

{

if(ChekDanger(y)) throw exception("Деление на ноль!\n"); f = divideForMayer(x,y);

success = true;

}

catch (exception err)

{

if (ChekContWork(nowtry)) cout << " Попробуйте ещё!\n"; else throw exception(" Попытки закончились!\n");

7

success = false; nowtry++;

cout << err.what();

cout << "Номер попытки " << nowtry << ", всего попыток: " <<

alltries << endl;

}

catch (...)

{

success = true;

cout << "Неопределенная ошибка\n";

throw exception("\nНеопределенная ошибка\n");

}

} while (!success); return (f);

}

int main()

{

setlocale(LC_ALL, "ru");

double numenator, denumenator; cout << "Введите делимое: "; cin >> numenator;

cout << "\nВведите делитель: "; cin >> denumenator;

try

{

cout << "\nРезультат деления: " << divide(numenator,denumenator);

}

catch (exception err)

{

cout << err.what() << endl;

}

cout << "\n\n--------------------------------

" << endl;

try

{

cout << "Результат деления: " << divideMeyer();

}

catch (const exception err)

{

cout << err.what();

}

}

8