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

9373_8_6

.pdf
Скачиваний:
2
Добавлен:
20.06.2023
Размер:
800.54 Кб
Скачать

МИНОБРНАУКИ РОССИИ САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ «ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА) Кафедра информационных систем

ОТЧЕТ

по практической работе №6

по дисциплине «Объектно-ориентированное программирование»

Студент гр. 9373

 

Заболотников М.Е.

Студентка гр. 9373

 

Петрова С.В.

Преподаватель

 

 

Егоров С.С.

Санкт-Петербург

2022

Постановка задачи.

Разработать GUI приложение, выполняющее функцию визуализации ориентированного графа, задаваемого матрицей смежности, представленной в виде файла, структуру которого требуется разработать.

Выполнение работы.

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

1.Класс Interface:

a)Прежде всего была создана форма Ui::Interface* ui для создания оформления диалогового окна основного интерфейса (область видимости: private);

b)GWindow* GraphWindow – указатель на диалоговое окно для отрисовки графа (область видимости: private);

c)QString file_data – переменная, в которой будут храниться данные из файла в виде строки (область видимости: private);

d)Конструктор класса Inteface() (область видимости: public);

e)Деструктор класса ~Interface() для удаления объекта класса(область видимости: public);

f)метод QString readFile() для чтения данных из файла (область видимости: public);

g)метод bool isGoodMatrix() – проверяет корректность прочтённых данных (область видимости: public);

h)void on_pushButton_clicked() – проверяет, нажата ли первая кнопка

(область видимости: private);

i)void on_pushButton_2_clicked() – проверяет, нажата ли вторая кнопка

(область видимости: private).

2.Класс Graph:

a)Matrix madja – атрибут для хранения матрицы смежности (область

видимости: private);

2

b)int count_vertex – атрибут для хранения данных о количестве вершин

(область видимости: private);

c)Конструктор класса Graph() – пустой, – который создаёт базовый граф из одной вершины (область видимости: public);

d)Конструктор класса Graph(QString, int, int) – создаёт граф из данных файла (область видимости: public);

e)метод void draw() – метод, который будет отрисовывать наш граф

(область видимости: public).

Деструктор в данном классе не требуется, так как объект этого класса

будет создаваться не динамически.

3.Класс GWindow:

a)Ui::GWindow* ui – форма для создания оформления диалогового окна отрисовки графа (область видимости: private);

b)GWindow(Graph) – конструктор класса, который окно для отрисовки базового графа (область видимости: public);

c)expicit GWindow(QWidget *parent = nullptr) – конструктор класса,

который создаёт окно для отрисовки графа из файла (область видимости: public);

d)~GWindow() – деструктор класса (область видимости: public);

e)метод void draw() – метод. который отрисовывает граф (область видимости: public);

f)void paintEvent() – метод, который является обработчиком для события типа "перерисовка виджета" (область видимости: protected).

4.Класс Matrix:

a)атрибут int n – атрибут, хранящий данные о количестве строк в матрице из файла (область видимости: private);

b)атрибут int m – атрибут, хранящий данные о количестве столбцов в матрице из файла (область видимости: private);

3

c)QVector<QVector<qint16>> matrix – атрибут, который представляет из себя двумерный вектор, в который будут записываться данные из матрицы (область видимости: private);

d)Matrix() – пустой – конструктор класса, который создаёт базовую матрицу из одного элемента "0" (область видимости: public);

e)Matrix(QStringList, int, int) – конструктор класса, который будет создавать матрицу исходя из данных, прочитанных из файла

(область видимости: public);

f)~Matrix() – деструктор класса (область видимости: public);

g)метод int size() – метод, высчитывающий объём матрицы ( )

(область видимости: public);

h)метод int findEdge() – метод, который находит ребро между указанными вершинами (область видимости: public).

4

Диаграмма классов представлена на рис. 1:

Рисунок 1 – Диаграмма классов

Тесты работы программы.

Для проверки корректности работы программы было проведено несколько тестов. Важно отметить правила формирования матрицы. Файл должен иметь расширение txt, матрица формируется использованием клавиш "1", "0", "Tab" (для разделения между элементами) и "Enter" (для переноса с целью формирования новой строки). Исходя из этого, проделаем следующие тесты:

1. Пусть имеется матрица смежности следующего вида:

5

Рисунок 2 – Матрица смежности 6х6

Посмотрим, что выдаёт программа:

Рисунок 3 – Граф из 6-ти вершин Зелёными точками отмечены вершины, имеющие так называемые

"петли" (им соответствуют единицы на соответствующем месте на главной диагонали матрицы). Как видно из рисунка, программа отработала верно.

2. Если мы выберем другой файл с другой матрицей:

Рисунок 4 – Матрица смежности 4х4

6

то программа построит граф:

Рисунок 5 – Граф на четырёх вершинах

3.Теперь проверим, как программа реагирует на файлы с ошибочными данными. Пусть имеется файл с матрицей:

Рисунок 6 – Матрица смежности 3х4

Так как матрица не является квадратной, то и граф по ней построить

нельзя:

Рисунок 7 – Ошибка

4.Пусть имеется матрица квадратная, но в ней есть другие числа, кроме

"0" и "1":

7

Рисунок 8 – Матрица с ошибочными значениями Программа реагирует на неё следующим образом:

Рисунок 9 – Ошибка

5. Финальный тест: матрица смежности 3х3:

Рисунок 10 – Матрица смежности 3х3

Результат работы программы:

Рисунок 11 – Граф на трёх вершинах

8

Выводы.

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

и запрограммирована отрисовка ориентированного графа. Проведены тесты работы программы и выяснилось, что программа работает корректно.

9