Колинько 4 семестр 2018 / АиСД 2 лаб
.docxМИНОБРНАУКИ РОССИИ
Санкт-Петербургский государственный
электротехнический университет
«ЛЭТИ» им. В.И. Ульянова (Ленина)
Кафедра вычислительной техники
отчет
по лабораторной работе №1
по дисциплине «Алгоритмы и структуры данных»
Тема: «Поддержка обработки исключительных ситуаций»
Вариант №42
Студенты гр. 6307 |
|
Лазарев С.О. Медведев Е.Р. |
Преподаватель |
|
Колинько П.Г. |
Санкт-Петербург
2018
СОДЕРЖАНИЕ
Цель 3
ЗАДАНИЕ 3
Расположение операторов throw и блоков контроля 5
Пример работы программы 7
ВЫВОДЫ 8
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ 9
ПРИЛОЖЕНИЕ 10
Цель
Получить практические навыки по работе с механизмом контроля исключительных ситуаций.
ЗАДАНИЕ
Дополнить программу работы с библиотеками фигур механизмом контроля исключительных ситуаций.
Возможно выявление следующих ошибок:
-
Непопадание точки на экран;
-
Некорректные параметры при формировании фигуры;
Классы для фиксаций особых ситуаций
1. Попадание точки за пределы экрана
Class point_error: public std::exception{
public:
virtualconstchar* what() const throw
{
return "Point error:";
}
};
2. Некорректные параметры при инициализации фигуры
Class initizialition_error: public std::exception {
public:
virtualconstchar* what() const throw {
return "Bad initizialition:";
}
};
Расположение операторов throw и блоков контроля
Оператор throwв функции put_point (если точка не попадает в границы экрана, то происходит «выброс исключения»)
void put_point(int a, int b){
if (on_screen(a,b)) screen[b] [a] = black;
else {
throw point_error();
}
}
Блоки контроля и защищённые части кода в функциях drawдля различных фигур (если в защищённой части кода произошёл «выброс исключения», то происходит переход в блок catch (обработчик ошибочной ситуации))
Void line::draw(){
try {
put_line(w, e);
}
catch (point_error& e) {
std::cout << e.what() <<" line::draw()";
std::cin.get();
}
}
Void rectangle :: draw( )
{
try {
put_line(nwest(), ne);
put_line(ne, seast());
put_line(seast(), sw);
put_line(sw, nwest());
}
catch(point_error& e){
std::cout << e.what() <<" rectangle::draw() ";
std::cin.get();
}
}
void cross::draw() {
try {
put_line(swest(), nwest());
put_line(seast(), swest());
put_line(seast(), nwest());
put_line(swest(), point(south().x, east().y));
put_line(west(), south());
}
catch (point_error& e) {
std::cout << e.what() << "cross::draw() ";
std::cin.get();
throw e;
}
}
Оператор throw в защищённом блоке кода в конструкторе класса line (выброс исключения происходит, при отрицательном значении переменной длины линии)
line::line(pointa, intL) {
try {
if (L< 0) {
initizialition_error bad_init;
throw bad_init;
}
w = (point(a.x + L - 1, a.y));
e =a;
}
catch (initizialition_error bad_init) {
std::cout << bad_init.what() <<" line::line()\n";
std::cout <<"Abnormal termination\n";
std::cin.get();
abort();
}
}
Пример работы программы
Рис. 1. Сообщение о непопадание точки на экран при отрисовке объекта line
Рис. 2. Сообщение о некорректной конфигурации объекта line
ВЫВОДЫ
В результате работы в программу работы с библиотекой фигур был добавлен механизм работы с исключительными ситуациями. Данный механизм отслеживает ошибки непопадания точки на экран и ошибки некорректной конфигурации фигуры, и выводит на экран сообщение с указанием ошибки и объекта, в котором эта ошибка произошла.
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
-
Алгоритмы и структуры данных. – Методические указания к лабораторным работам, практическим занятиям и курсовому проектированию, часть 2, глава 1 «Работа с иерархией объектов: наследование и полиморфизм».
ПРИЛОЖЕНИЕ
error.h
#pragma once
#include <iostream>
using namespace std;
class point_error : public std::exception {
public:
virtual const char * what() const throw()
{
return "Point error:";
}
};
class initizialition_error : public std::exception {
public:
virtual const char * what() const throw()
{
return "Плохая инициализация:";
}
};