Теория множеств
Дипломная работа - Компьютеры, программирование
Другие дипломы по предмету Компьютеры, программирование
рдинатами.
Функциональное назначение: перевод координат точек в экранные и вывод на экран кружочков с соответствующим номером в позиции согласно координате.
Условия выполнения: команда пользователя, наличие в массиве координаты хотя бы одной точки.
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.задано две точки. Ес