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

Архив2 / курсач docx11 / Kursach(144)

.docx
Скачиваний:
50
Добавлен:
07.08.2013
Размер:
5 Mб
Скачать

Титульна сторінка

Зміст

Вступ 3

Постановка задачі 4

Розробка структури програмного забезпечення 5

Розробка алгоритму функціонування 8

Розробка програмного забезпечення 15

Вступ

Програма призначена для розв’язання простих лабіринтів, які складаються з клітин, які містять одиниці або нулі. Одиниці позначають зайняті клітини, на які заборонено заходити, а нулі – порожні.

Програма завантажує лабіринт із файлу, виконує побудову лабіринту, знаходить шлях до виходу (якщо він існує) і будує шлях розв’язання.

Постановка задачі

Лабіринт являє собою матрицю з одиниць і нулів і зберігається у файлі.

Для проходу по лабіринту існують наступні правила:

  • Шлях починається у точці старту (позначається як «2»), а закінчується у точці фінішу (позначається як «3»).

  • Клітина, що містить одиницю, вважається закритою, на неї заборонено входити.

  • Ходи можливі лише на сусідні клітини, якщо вони вільні (містять нуль)

  • Ходи по діагоналі заборонено

Програма повинна знаходити шлях від старту до фінішу, виводити попередження, якщо лабіринт не має розв’язання або введений невірно, а також графічно будувати лабіринт і шлях розв’язання.

Також необхідно передбачити перевірку вхідних даних на коректність і вивести попередження, якщо данні не відповідають необхідним умовам.

Алгоритм розв’язання повинен розв’язувати не лише лінійні лабіринти, а і лабіринти, що містять замкнені петлі і розгалуження.

Розробка структури програмного забезпечення

Програма містить чотири класи, які безпосередньо використовуються для виконання поставленої задачі

  • Point – описує «клітину» лабіринту

  • Labyrinth – описує матрицю лабіринту, яка складається з клітин

  • Solver – наслідує клас Labyrinth, містить методи для розв’язання лабіринту

  • vGraphics – містить методи для візуалізації роботи програми

Опис призначення полів і методів класів

Тип

Назва

Призначення

Point

Поле

value

Містить значення клітини

Поле

x

Містить x-координату клітини

Поле

y

Містить y-координату клітини

Метод

Point

Конструктор, створює нову клітину з заданими координатами і значенням

Метод

getvalue

Повертає значення клітини

Метод

getx

Повертає x-координату клітини

Метод

gety

Повертає y-координату клітини

Labyrinth

Поле

M

Містить кількість рядків лабіринту

Поле

N

Містить кількість стовбців лабіринту

Поле

Maze

Містить матрицю клітин (Point) розмірністю MxN

Метод

Labyrinth

Конструктор, створює лабіринт, заповнюючи його даними з файлу

Solver

Поле

Start

Містить клітину, з якої починається шлях

Поле

Finish

Містить клітину, в якій закінчується шлях

Поле

IsSolved

Містить "true", якщо лабіринт розв'язано

Поле

P_Solution

Містить стек клітин, які є розв’язком лабіринту

Поле

VisitedPoints

Містить масив клітин, які були відвідані під час розв'язання

Метод

Correct

Повертає "true", якщо введено коректний лабіринт з одним стартом і фінішем

Метод

GetPath

Повертає стек клітин, які є розв'язком для побудови

Метод

GetSolutionPath

Виконує пошук шляху, повертає "true", якщо існує розв'язок

Метод

GetStartAndFinish

Знаходить старт і фініш, присвоює їх відповідним полям

Метод

Solve

Розв'язує лабіринт, або повертає "false", якщо розв'язку не існує

Метод

Solver

Конструктор, створює новий екземпляр класу, завантажує лабіринт з файлу

Метод

Visited

Перевіряє, чи була відвідана задана клітина

vGraphics

Поле

G

Містить екземпляр System::Graphics для виконання функцій малювання

Поле

S

Містить екземпляр Solver для візуалізації лабіринту і розв'язку

Поле

ln_w

Містить товщину позначки шляху-розв'язку

Поле

sq_a

Містить товщину клітини лабіринту

Метод

BuildMaze

Будує лабіринт

Метод

BuildSolution

Будує розв'язок лабіринту

Метод

vGraphics

Конструктор, створює новий екземпляр класу, розраховує ln_w та sq_a

Схема класів

Розробка алгоритму функціонування

Блок-схема метода Solver::GetSolutionPath, який виконує пошук шляху розв'язання.

Блок-схема метода Solver::Correct, який виконує перевірку коректності лабіринту

Блок-схема метода vGraphics::BuildSolution, який виконує побудову точок шляху

Розробка програмного забезпечення

Тестування програмного забезпечення

Для тестування програми було використано наступні файли:

  • Maze_1.vmz, Maze_2.vmz, Maze_3.vmz – файли, які містять звичайні лабіринти.

  • Maze_1_with_start_and_finish_error.vmz – лабіринт без старту і з двома фінішами

  • Maze_1_without_exit.vmz – лабіринт, який не має виходу

  • wrong_file.vmz – файл з розширенням лабіринту, який містить довільний текст, який не є лабіринтом

Тести звичайних лабіринтів:

Maze_1.vmz

Maze_2.vmz

Maze_3.vmz

Як видно з результатів тестування, програма коректно знаходить шлях розв’язку, не має за циклювань на петлях та розгалуженнях

Тестування файлів з помилками:

Maze_1_with_start_and_finish_error.vmz

Maze_1_without_exit.vmz

wrong_file.vmz

Отже, програма має захист від можливих помилок у вхідних даних, повідомляє про них користувача. Помилки у вхідних даних не впливають на правильність роботи програми

Інструкція користувача

Інтерфейс програми

Вікно програми складається з трьох областей:

  1. Меню функцій

  2. Інформація про відкритий лабіринт

  3. Графічне зображення лабіринту

Кнопки в меню функцій стають активними при виконанні попередньої функції.

Для відкриття лабіринту необхідно натиснути кнопку загрузки лабіринту та вказати файл з розширенням .vmz.

Якщо файл було відкрито без помилок, з’являється інформація про розмір лабіринту, а також стане активною кнопка побудови.

При побудові лабіринту у графічній частині з’являється зображення, а також стає активною функція розв’язання, яка будує шлях-розв’язок.

У програмі можливі наступні помилки та попередження:

Виникає при спробі відкрити файл, що містить дані, які не можуть бути розпізнані як лабіринт

Виникає при спробі розв’язати лабіринт без старту/фінішу, або якщо їх більше ніж потрібно

Інформаційне попередження, з’являється при спробі розв’язати лабіринт, що не має жодного шляху від старту до фінішу.

Список використаної літератури

Соседние файлы в папке курсач docx11