Теория множеств

Дипломная работа - Компьютеры, программирование

Другие дипломы по предмету Компьютеры, программирование

рдинатами.

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

Условия выполнения: команда пользователя, наличие в массиве координаты хотя бы одной точки.

4.Построить прямую

Входные данные: номер точки I (первая точка прямой)

Выходные данные: номер точки j (вторая точка прямой). Изображение прямой на экране.

Функциональное назначение: Вывод номера второй точки в поле вывода Point2. Значение определяется из таблицы вывода sg - четвертый столбец, I-тая строка.

Координаты точек I и j из массива t переводятся в экранные и соединяются прямой на экране.

Условия выполнения: наличие точки с номером I, существование для нее точки с которой она образует искомую прямую (соответствующей записи в таблице вывода).

Диаграмма потоков данных 2-го уровня

Согласно спецификации процесса Поиск в диаграмме потоков данных 1-го уровня, этот процесс является сложным и требует декомпозиции.

Рис. 2.8 - Диаграмма потоков данных 2-го уровня

Таблица 2.4. Словарь данных DFD 2 уровня

ОбозначениеСодержаниеI, jЦелые числа, обозначающее номера точек (индексы массива t) для которых выполняется поиск прямойA,bКоэффициенты прямой для заданной пары точек.Номер и координата второй точкиНомер - целое число, определяемое по таблице вывода матрицы четвертом столбце строки содержащей данные о первой точке. Координата - значения соответствующей переменной в массиве множества.kНомер точки множества не равной I, jRКоличество точек множества, лежащих по одну сторону от заданной прямойзнакДействительное число, определяющее разницу между левой и правой частью уравнения прямой

Спецификация процессов

1.Поиск.

Входные данные: I, j - номера точек

Выходные данные: r - количество точек лежащих по одну сторону от прямой. Функциональное назначение: координаты пары точек подставляются в уравнение прямой, определяются коэффициенты прямой. В полученное уравнение прямой подставляются последовательно координаты оставшихся точек множества. Подiитывается количество точек, разница между левой и правой частью уравнения прямой для которых меньше нуля.

Условие выполнения: наличие координат хотя бы трех точек.

2.Прямая.

Входные данные: массив t, I, j- массив координат точек, номера точек

Выходные данные: a, b - коэффициенты прямой.

Функциональное назначение:

Определение коэффициентов уравнения прямой

=ax+b.

a:=; b:=

При a=1, b=xi

При a=0, b=yi

3.Знак

Входные данные: a, b, k - коэффициенты уравнения прямой, номер точки множества

Выходные данные: знак - разница между левой и правой частью уравнения прямой для k-той точки.

Функциональное назначение: znak=;

Условия выполнения:

.3 Рабочий проект

Выбор языка программирования

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

Спецификация модулей

Модуль Lib

Содержит:

Описание введенных типовn=100; - максимально допустимое количество точек множестваtochka = record -тип составной тип координат точки,y:real; координаты по осям абiисс и ординат;= array [1..n] of tochka; - тип для множества точек

Глобальные переменныеt:mnogina; - массив координат точек множества:integer; - количество точек множества,sy:integer; - отступы в области прорисовки множества от краев,Xmax,Ymin,Ymax,Mx,My:real; - граничные значения координат точек множества, коэффициенты перевода реальных координат в экранные.

Модуль Unit1

Функциональное Назначение: поиск для каждой точки множества точек согласно постановки задачи. Содержит основные функции:. Соответствует процессу Определение коэффициентов прямой. (см. Технический проект)

Входные данные: i, j: integer (индексы элементов массиве t)

Выходные данные: a,b: real (коэфициенты уравнения прямой для данной пары точек). Алгоритм:

Если t[i].x = t[j].x то:=1;b:=-t[i].x

иначе

если t[i].y = t[j].y то=0; b=t[i].y

иначе=(t[i].y-t[j].y)/(t[i].x-t[j].x);=(t[j].y*t[i].x-t[i].y*t[j].x)/(t[i].x-t[j].x);

Текст процедуры:

pryamaya(i,j:integer;var a,b:real);t[i].x=t[j].x then:=1;b:=-t[i].xt[i].y=t[j].y then:=0;b:=t[i].y:=(t[i].y-t[j].y)/(t[i].x-t[j].x);:=(t[j].y*t[i].x-t[i].y*t[j].x)/(t[i].x-t[j].x);;;

Тестирование модуля:

Используется метод "Эквивалентное разбиение"

Тест 1. Координаты точек разлычны

0

1

Результат=-1 b=1

Тест 2 Координаты точек равны по ординате

0

0

Результат= 0 b=0

Тест 3. Координаты равны по аобiиссе

1

0

Результат=1 b=-1

Функция Search.

Входные данные: t (см. описание глобальных переменных)

Выходные данные sg.cells[3, i] - четвертый столбец таблицы вывода, содержит номера точек для построения прямой.

Алгоритм

Алгоритм процедуры Poisk

Текст модуля

pryamaya(i,j:integer;var a,b:real);t[i].x=t[j].x then:=1;b:=t[i].xt[i].y=t[j].y then:=0;b:=t[i].y:=(t[i].y-t[j].y)/(t[i].x-t[j].x);:=(t[j].y*t[i].x-t[i].y*t[j].x)/(t[i].x-t[j].x);;;znak(a,b:real;k,i,j:integer):real;:=t[k].y-a*t[k].x-b;;poisk(i,j:integer;var r:integer);k:integer;,b:real;(i,j,a,b);:=0;k:=1 to nt do(kj then(i,j,r);(r=0)or(r=nt-2) then sg.Cells[3,i]:=floattostr(j);;();.Enabled:=True;;

Тестирование методами "черного ящика"

Эквивалентное разбиение

1.задано две точки. Ес