Отчет 5 - Генерирование и обработка исключительных ситуаций - СФ
.pdfМинистерство науки и высшего образования Российской Федерации Федеральное государственное бюджетное образовательное учреждение высшего образования
ТОМСКИЙ ГОСУДАРСТВЕЕНЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)
Кафедра комплексной информационной безопасности электронно-
вычислительных систем (КИБЭВС)
Генерирование и обработка исключительных ситуаций
Отчет по лабораторной работе № 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