Добавил:
github.com Кофедра ВТ-помойка Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
42
Добавлен:
17.11.2018
Размер:
57.31 Кб
Скачать

МИНОБРНАУКИ РОССИИ

Санкт-Петербургский государственный

электротехнический университет

«ЛЭТИ» им. В.И. Ульянова (Ленина)

Кафедра вычислительной техники

отчет

по лабораторной работе №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

ВЫВОДЫ

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

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

  1. Алгоритмы и структуры данных. – Методические указания к лабораторным работам, практическим занятиям и курсовому проектированию, часть 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 "Плохая инициализация:";

}

};

Соседние файлы в папке Колинько 4 семестр 2018