Обработка динамических структур данных

Автор: Пользователь скрыл имя, 25 Марта 2012 в 20:23, курсовая работа

Краткое описание

В курсовом проекте рассматриваются динамические структуры данных, а именно двоичные деревья, а также возможности текстового и графического режима среды ABC Pascal. Проект посвящен разработке алгоритмов и написанию программы, выполняющей обработку динамических структур данных, и программы, формирующей на экране монитора ПЭВМ заданный рисунок (схему).

Оглавление

1 Постановка задачи……………………………………………………………………………5
2 Структура разработки программы…………………………………………………………..7
3 Динамические структуры данных …………………………………………………………..9
3.1 Двоичные деревья………………………………………………………………………...9
3.1.1 Бинарные (двоичные) деревья……………………………………………………..9
3.1.2 Типовые операции над двоичными деревьями …………………………………11
3.2 Метод решения…………………………………………………………………………...16
3.3 Алгоритмизация задачи………………………………………………………………….19
3.3.1 Основной алгоритм……………………………………………………………..….19
3.3.2 Создание корня двоичного дерева………………………………………………...20
3.3.3 Формирование двоичного дерева из текстового файла…..…….……………..…21
3.3.4 Запись двоичного дерева в файл…………………………………………………..21
3.4 Тестирование программы………………………………………………………………..22
3.5 Анализ результатов…………………………………………………………………….…25
4 Построение схемы в среде ABC Pascal …………………………………….……………….26
4.1 Графический режим………………………………………………………………………26
4.1.1 Реализация схем в ABC Pascal…………………………………………………………27
4.2 Алгоритм построения заданного рисунка………………………………………………31
4.3 Анализ качества реализации схемы……………………………………………………..32
5 Инструкции по пользованию программой………………………………………………….33
5.1 Руководство пользователя……………………………………………………………….33
5.2 Руководство программиста………………………………………………………………35
5.3 Руководство по условиям эксплуатации программы…………………………………..36
Заключение ……………………………………………………………………………………..37
Список литературы ………………………………………………………………….................38

Файлы: 1 файл

мои животные=)).doc

— 267.00 Кб (Скачать)

 

Таблица 1.3 Результаты тестирования программы в экстремальных условиях

 

Условия

Входные данные

Результат

Экстремальные

f:text

‘G:/data.txt’ текстовый файл со словами

Загадайте животное

"да"-1, "нет"-0

Это птица? 1

Не летает? 0

Очень маленькая птица? erv546

Введите 0 или 1

Очень маленькая птица? 1

Живет в клетке? 1

Это Попугай? 54gv

Введите 0 или 1 1

Я угадала!

Играем еще?

Условия

Входные данные

Результат

 

Экстремальные

f:text

‘G:/data.txt’ текстовый файл со словами

 

Загадайте животное

"да"-1, "нет"-0

Это птица? rth

Введите 0 или 1

Это птица? 456

Введите 0 или 1

Это птица? 345

Введите 0 или 1

Это птица? 1

Не летает? 1

Домашняя птица? 1

Оно Гогочит? 0

Это Курица? 1

Я угадала!

Играем еще?

 

 

 

 

Загадайте животное

"да"-1, "нет"-0

Это птица? 0

Она мяукает? 0

Это большое животное? 1

Это рыба? 0

Она хрюкает? 0

Это человекообразное? 0

Ест людей? 0

Имеет большую пасть? 0

Имеет длинную шею? 0

Дает молоко? 0

Спит зимой? 0

Она полосатая? 0

Она скачет? 0

Это Слон? 1

Я угадала!

Играем еще?

 

 

При тестировании программы в нормальных, «нулевых» и экстремальных условиях получены ожидаемые результаты.


3.5. Анализ результатов

 

Для определения правильности работы программы необходимо выполнить анализ полученных результатов.

Программа использует двоичное дерево и корректно выполняет следующие операции над ним:

1) формирование нового дерева

2) формирование дерева из файла

3) добавление вершины в дерево

4) запись дерева в файл

Тестирование программы в нормальных условиях прошло успешно, что подтверждает правильность выполнения программы.

Тестирование программы на «нулевых» условиях прошло ожидаемо. Файл, с которого должно происходить считывание дерева отсутствует, и программа создает новое дерево с единственной вершиной. Программа позволяет заполнить дерево, добавляя вопросы и ответы, при этом работа программы нисколько не искажается.

При экстремальных условиях программа выдает сообщение об ошибке и предлагает повторить ввод.


4 Построение рисунка в  среде ABC Pascal

 

4.1   Графический режим

            

Любое изображение на экране дисплея строится из точек. Что именно мы увидим на экране, зависит от того, какие точки будут иметь какой цвет. Режим в котором управление цветом/яркостью производится для каждой точки экрана в отдельности, называется графическим. Именно такой режим применяется в современных операционных системах и прикладных программах, использующих стандарты графического интерфейса, что, в частности, позволяет в значительной мере заменить в интерфейсе национальный язык более универсальным – пиктографическим. Однако графический интерфейс требует больших затрат оперативной и долговременной памяти  высокой производительности процессора. В ряде случаев даже в современных высокопроизводительных компьютерах приходится применять специальные устройства – графические ускорители.

В графическом режиме минимальным объектом, выводом которого может управлять программист, является пиксель – графическая точка. Пиксель имеет меньшие размеры по сравнению с символом, они определяются разрешением монитора. Разрешение монитора задается в виде rx*ry, где rx – количество пикселей на экране по горизонтали, а ry – по вертикали. Размер пикселя можно получить, разделив геометрический размер экрана на разрешение. Минимально допустимое значение размера пикселя, он определяет степень детализации изображения, определяется техническими параметрами монитора.

Графические координаты задают положение точки на экране дисплея. В качестве графических координат используются порядковые номера пикселей. Допустимый диапазон изменения графических координат – от 0 до rx – 1 для x – координаты и 0 до ry – 1 для y – координаты. Такой отсчет является верхний левый угол экрана. Значение x – координаты отсчитываются слева направо, а y – координаты – сверху вниз.

Для правильного отображения рисунков на экране необходимо учесть различия между декартовой и графической системами координат:

- графические координаты принимают только целочисленные значения;

- графические координаты принимают значения, ограниченные как снизу (нулевым значением), так и сверху (значением расширения);

- графическая координата y отсчитывается сверху вниз.

Чтобы работа в графическом режиме была возможна, этот режим должен поддерживаться видеоадаптером. ABC Pascal обеспечивает работу со следующими видеоадаптерами: CGA, MCGA, EGA, VGA< Hercules, AT&T 400, 3270 PC, IBM – 8514. Видеоадаптером управляет специальная программа, которая называется драйвером. Драйвер хранится в отдельном файле на диске и содержит как исполняемый код, так и необходимые ему для работы данные. Признак файла с драйвером – расширение .bgi имени файла. Имя файла с драйвером соответствует типу видеоадаптера компьютера.

В пакет ABC Pascal входит модуль GraphABC, который содержит процедуры, функции, а также встроенные типы и константы, предназначенные для работы в графическом режиме. Чтобы воспользоваться возможностями этого модуля, в начале программы необходимо разместить оператор Uses.

 

4.1.1. Реализация схем в ABC Pascal

 

Модуль GraphABC содержит константы, типы, процедуры и функции для рисования в графическом окне. Они подразделяются на следующие группы:

1)      графические примитивы;

2)      действия с цветом;

3)      действия с точками и прямоугольниками;

4)      действия с пером;

5)      действия с кистью;

6)      действия со шрифтом;

7)      действия с рисунками;

8)      действия с графическим окном.

Подробно рассмотрим некоторые из них.

 

1        Графические примитивы:

а) procedure SetPixel(x,y,color: integer) - закрашивает один пиксель с координатами (x,y) цветом color;

б) function GetPixel(x,y): integer - возвращает текущее значение цвета для пикселя с координатами (x,y);

в) procedure MoveTo(x,y: integer) - передвигает невидимое перо к точке с координатами (x,y); эта функция работает в паре с функцией LineTo(x,y);

г) procedure LineTo(x,y: integer) - рисует отрезок от текущего положения пера до точки (x,y); координаты пера при этом также становятся равными (x,y);

д) procedure Line(x1,y1,x2,y2: integer) - рисует отрезок с началом в точке (x1,y1) и концом в точке (x2,y2);

е) procedure Circle(x,y,r: integer) - рисует окружность с центром в точке (x,y) и радиусом r;

ж) procedure Ellipse(x1,y1,x2,y2: integer) - рисует эллипс, заданный своим описанным прямоугольником с координатами противоположных вершин (x1,y1) и (x2,y2);

з) procedure Rectangle(x1,y1,x2,y2: integer) - рисует прямоугольник, заданный координатами противоположных вершин (x1,y1) и (x2,y2);

и) procedure RoundRect(x1,y1,x2,y2,w,h: integer) - рисует прямоугольник со скругленными краями; (x1,y1) и (x2,y2) задают пару противоположных вершин, а w и h – ширину и высоту эллипса, используемого для округления краев;

й) procedure Arc(x,y,r,a1,a2: integer) - рисует дугу окружности с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки);

к) procedure Pie(x,y,r,a1,a2: integer) - рисует сектор окружности, ограниченный дугой (параметры процедуры имеют тот же смысл, что и в процедуре Arc);

л) procedure Chord(x,y,r,a1,a2: integer) - рисует фигуру, ограниченную дугой окружности и отрезком, соединяющим ее концы (параметры процедуры имеют тот же смысл, что и в процедуре Arc);

м) procedure TextOut(x,y: integer; s: string) - выводит строку s в позицию (x,y) (точка (x,y) задает верхний левый угол прямоугольника, который будет содержать текст из строки s);

н) procedure FloodFill(x,y,color: integer) - заливает область одного цвета цветом color, начиная с точки (x,y);

о) procedure FillRect(x1,y1,x2,y2: integer) - заливает прямоугольник, заданный координатами противоположных вершин (x1,y1) и (x2,y2), цветом текущей кисти;

п) procedure Polygon(var a; n: integer) - строит ломаную по n точкам, координаты которых заданы в массиве a элементов типа Point;

р) procedure Polyline(var a; n: integer) - строит замкнутую ломаную по n точкам, координаты которых заданы в массиве a элементов типа Point.

 

 

 

2        Действия с цветом:

а) function RGB(r,g,b: integer): integer - возвращает целое значение, являющееся кодом цвета, который содержит красную, зеленую и синюю составляющие с интенсивностями r, g и b соответственно (r, g и b – целые в диапазоне от 0 до 255, причем, 0 соответствует минимальной интенсивности, 255 – максимальной);

б) function GetRed(color: integer) - выделяет красную составляющую из цвета color (целое в диапазоне от 0 до 255);

в) function GetGreen(color: integer) - выделяет зеленую составляющую из цвета color (целое в диапазоне от 0 до 255);

г) function GetBlue(color: integer) - выделяет синюю составляющую из цвета color (целое в диапазоне от 0 до 255).

 

Стандартные цвета

clBlack – черный
clPurple – фиолетовый
clWhite – белый
clMaroon – темно-красный
clRed – красный
clNavy – темно-синий
clGreen – зеленый
clBrown – коричневый
clBlue – синий
clSkyBlue – голубой
clYellow – желтый

  

clCream – кремовый
clAqua – бирюзовый
clOlive – оливковый
clFuchsia – сиреневый
clTeal – сине-зеленый
clGray – серый
clLime – ярко-зеленый
clLightGray – светло-серый
clMoneyGreen – цвет зеленых денег
clDarkGray – темно-серый

 

 

3        Действия с точками и прямоугольниками

Модуль GraphABC содержит определения типов Point и Rect, используемых для запоминания координат точки и прямоугольника.Следующие процедуры и функции предназначены для работы с этими типами:

а) function PointF(x,y: integer): Point - возвращает запись типа Point по координатам точки x, y;

б) function RectF(l,t,r,b: integer): Rect - возвращает запись типа Rect по координатам l, t левого верхнего и r, b правого нижнего углов прямоугольника;

в) function PtInRect(r: Rect; p: Point): boolean - возвращает True, если точка p находится внутри прямоугольника r, и False в противном случае;

г) function EqualRect(r1,r2: Rect): boolean - возвращает True, если прямоугольники r1 и r1 равны, и False в противном случае;

д) function IntersectRect(r1,r2: Rect): boolean - возвращает True, если прямоугольники r1 и r1 пересекаются, и False в противном случае;

е) procedure InflateRect(var r: Rect; n: integer) - процедура, "надувающая" прямоугольник на n пикселей; если n отрицательно, то прямоугольник "сдувается".

При построении графического  изображения исходный рисунок условно разбивается на отдельные элементы. Используя стандартные графические процедуры и функции языка программирования ABC Pascal, производится построение данных элементов, а именно:

 procedure Line: вычерчивает линию с указанными координатами начала и кон­ца.

Заголовок: Procedure Line (Xl,Yl,X2,Y2:   Integer); здесь X1...Y2 - координаты начала (XI, Y1) и конца (Х2, Y2) линии;  

 procedure Ellipse: чертит дугу эллипса. Заголовок: Procedure Ellipse (X,Y: Integer;

BegA,EndA,R1,R2: Word); здесь X, Y - координаты центра; BegA, EndA - соответственно начальный и конечный углы дуги; R1, R2 – радиусы по вертикали и горизонтали. Углы отсчитываются против часовой стрелки и указываются в градусах. Нулевой гол соответствует горизонтальному направлению вектора слева направо. Если задать значения начального угла 0 и конечного - 359, то будет выведена полный эллипс;

 procedure SetColor: устанавливает цвет пера, задаваемый параметром color. Заголовок: SetColor (color: integer): здесь color – соответствующий цвет из списка стандартных цветов, представленного чуть выше.

 Procedure TextOut: выводит строку, начиная с заданного места. Заголовок: Procedure TextOut (X,Y: Integer; Txt: String): здесь X, Y – координаты точки вывода; Txt – выводимая строка. Указатель не ме­няет своего положения.

 

 

 


4.2. Алгоритм построения заданного рисунка

 

Для построения заданного рисунка (рисунок 10) необходимо использовать стандартные процедуры и функции Turbo Pascal, описанные ранее. При разрешении экрана 640*480, необходимо сделать точные вычисления координат точек и по этим координатам вызвать требуемые функции.

 

 

 

 

 

 

 

 

 

 

 

Рисунок 10

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4.3. Анализ качества реализации рисунка (схемы)

 

Построенный в результате рисунок, представленный в приложении Д совпадает с исходным рисунком (рисунок 10). Благодаря точным вычислениям координат, построенный рисунок не имеет существенных искажений. Основные компоненты самолета позволяют наглядно сравнить схему заданного рисунка с построенным рисунком, при помощи координатной сетки.

Информация о работе Обработка динамических структур данных