РАЗРАБОТКА ПРОГРАММЫ ДЛЯ РЕШЕНИЯ ЗАДАЧИ «Нахождение общей точка N кругов»

РАЗРАБОТКА ПРОГРАММЫ ДЛЯ РЕШЕНИЯ ЗАДАЧИ
«Нахождение общей точка N кругов»

КУРСОВАЯ РАБОТА

по дисциплине «Системное программирование»


Содержание

Введение 4

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

2 Организация входных и выходных данных 6

3 Описание алгоритма 7

4 Выбор технических и программных средств 9

5 Спецификация программы 10

6 Тестирование 11

Заключение

Список литературы

Приложение - Текст программы


Введение

В данной работе рассматривается задача нахождения общей точки для всех кругов на плоскости.

В данную пояснительную записку входят следующие разделы:

Постановка задачи. Формулировка задания для программы.

Организация входных данных. В этом разделе описаны данные, которые пользователь должен ввести, для работы программы.

Описание алгоритма. Это словесное описание действий и операций, выполняемых программой для получения конечного результата.

Выбор технических и программных средств. Здесь описывается выбор программно-аппаратные средства, необходимые для создания этой программы.

Спецификация программы. Это описание минимального набора файлов проекта, пояснение роли каждого файла.

Тестирование программы. Описание действий программы при некорректно введенных данных пользователем.

Далее после этих разделов следует оригинал исходного кода программы.


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

Пусть даны вещественные числа x1, x2,...,xn; y1, y2,...,yn, r1,r2,...,rn. Определите, есть ли на плоскости точка, принадлежащая всем кругам c1, c2,...,cn, где сi меет центр с координатами xi, yi и радиус ri.


2 Организация входных и выходных данных

В данной программе входными данными является количество кругов, координаты по оси OX, координаты по оси OY и радиус.

Количество кругов имеют целочисленный тип “int” - диапазон 0 до 9999, (ограничен программно) в памяти занимает 4 байта.

Координаты по оси OX, координаты по оси OY и радиус имеют вещественный тип “double” – диапазон ограничен десятью цифрами, (ограничен программно) в памяти занимает 8 байта.

Выходными данными является информация, поясняющая, есть ли общая точка на плоскости у этих кругов.


3 Описание алгоритма

В флаг, который информирует нас о наличии или отсутствии общей точки, устанавливается значение «истина», подтверждающее наличие общей точки.

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

1) сравниваются два круга (все круги сравниваются друг с другом поочередно),

2) вычисляется расстояние между их центрами с помощью следующей формулы: , где х1, у1 и х2 ,у2 – координаты их центров соответственно,

3) сравнивается вычисленное расстояние с суммой их радиусов,

4) если сумма радиусов меньше расстояния между центрами значит, круги не пересекаются, и программа сразу же установит флаг в состояние «ложь» и перестанет дальнейший перебор кругов за ненадобностью,

После того как программа выполнит проверку на присутствие общей точки и установит флаг в соответствующее состояние, произойдет проверка флага. Если флаг находится в состоянии «Истина», то пользователю будет выдано соответствующее сообщение с текстом информирующем о то, что круги имеют общую точку, иначе пользователю будет выдано сообщение с текстом информирующем о то, что круги не имеют общую точку.

Блок-схема программы приведена на рисунке 1.


Рисунок 1. Блок-схема функции нахождения общей точки.

4 Выбор технических и программных средств

Для создания данной программы была использована среда программирования Borland C++ Builder 6 как распространенная и популярная. При помощи C++ Builder 6 можно создавать Desktop приложения для операционной системы Windows, конструируя его при помощи имеющихся компонентов. Это ускоряет процесс создания приложения и позволяет сократить количество ошибок программиста.

Для работы среды разработки C++ Builder 6 и создания текущего приложения было использовано следующее оборудование:

1) Процессор Intel Core 2 Duo E6600, 2400 MHz, 4Mb cache

2) Материнская плата Intel Rogers City DG965RY

3) ОЗУ 4 Gb

4) Клавиатура SVEN Basic 304, мышь Logitech G1

5) Монитор NEC MultiSync LCD93VM


5 Спецификация программы

Исполняемым файлом является файл с именем «MyProgramm.exe» - это приложение работает без поддержки каких-либо других файлов, поэтому может быть запущено из любого места на жестком диске.

Программа не требует никаких доп. настроек, структура проекта приведена в таблице 1.

Таблица 1 - Файлы проекта

Название

Назначение

Примечание

MyProgramm.dpr

Файл проекта

Содержит основные данные о программе, список всех модулей, пути к ним, директивы начальной загрузки.

MyProgramm.cpp

uAbout.cpp

uHelp.cpp

uMainForm.cpp

uOptions.cpp

Файл-модуль с кодом программы

Содержит практически весь код программы, написанный программистом.

MyProgramm.res

WindowsXP.res

Файл ресурсов

Содержит нужные для компиляции ресурсы. Формат двоичный.

MyProgramm.bpr

uAbout.dfm

uHelp.dfm

uMainForm.dfm

uOptions.dfm

Файл с параметрами

Содержит параметры и значения свойств формы


6 Тестирование

После запуска программы пользователю будет представлена главная форма приложения (рисунок 2).

Рисунок 2. Главная форма.

На главной форме присутствует панель управления и рабочая область. Панель управления предназначена для быстрого доступа к функциям приложения, все кнопки на панели управления продублированы в меню программы. Функция рабочей области, проверка правильности работы программы и наглядное изображение входных данных. Для того, чтобы приступить к вводу данных в приложение необходимо нажать на кнопку «Ввести количество и координаты кругов» расположенной на панели управления либо выбрать пункт меню Действие затем Ввести количество и координаты кругов. После чего появиться окно Параметры (Рисунок 3). На вкладке Координаты окна Параметры представлено поле для ввода количества кругов и два параметра, «Найти общие точки после закрытия окна» и «Задавать координаты автоматически».

Поле для ввода количества кругов может принимать целочисленные не отрицательные значения в диапазоне от 0 до 9999. Ввод неверных данных контролируется приложением, при неверном вводе пользователь увидит соответствующее сообщение о неверном вводе (Рисунок 4).

Рисунок 3. Окно параметры с вкладкой Количество.

Рисунок 4. Сообщение, информирующее пользователя о неверном вводе данных.

Параметр «Найти общие точки после закрытия окна» предназначен для определения общей точки для всех кругов сразу после закрытия окна Параметры. Если этот параметр не доступен для изменения и его текст горит серым цветом то вывод сообщения информирующее пользователя об общей точки сразу после закрытия окна, выполняться не будет. Параметр недоступен в случае, если пользователь ввел меньше двух кругов в поле для ввода кругов.

Параметр «Задавать координаты автоматически» предназначен для автоматического заполнения координат введенного количества кругов. Заполнение производиться при помощи генератора псевдослучайных числе в диапазоне от 0.8952 до 15.5168. Если этот параметр не доступен для изменения и его текст горит серым цветом, то генерирование данных производиться не будет. Параметр недоступен в случае, если пользователь ввел меньше одного круга в поле для ввода кругов. Если пользователь установил этот параметр и он доступен для изменения, то ввод координат вручную невозможен. Для ручного ввода координат необходимо снять этот параметр.

На окне присутствует вкладка Координаты (Рисунок 5) предназначенная для ручного ввода параметров круга. Вкладка недоступна если количество кругов меньше одного или установлен параметр «Задавать координаты автоматически».

Рисунок 5. Вкладка Координаты.

На вкладке Координаты расположены элементы для ввода параметров и информирующие элементы. Надпись «Круг:» информирует пользователя о том какой номер круга представлен для заполнения его параметров. Надпись «Всего кругов» информирует пользователя о том, сколько всего кругов доступно для заполнения параметров. Поле для ввода расположения центра круга по оси Х имеет надпись «по Х:», поле для ввода расположения центра круга по Y имеет надпись «по Y:». В эти поля можно ввести любое число, не превышающее десяти символов. Поле для ввода радиуса имеет надпись «Радиус:». В это поле можно ввести неотрицательное значение больше нуля, не превышающее десяти символов. Поля «по Х:» и «по Y:» контролируются приложением и ввод неверных данных не возможен, если эти поля будут пусты, то приложение заполнит каждое из них нулем. Поле «Радиус:» так же контролируется приложением и ввод неверных данных невозможен. Если в поле для ввода радиуса будет нуль или оно будет пустым, то приложение сообщит об этом пользователю (Рисунок 6) и заполнит его значением по умолчанию равное один.

Рисунок 6. Неверный ввод радиуса.

После того как все параметры установлены можно закрыть окно Параметры, нажав на кнопку «Закрыть» расположенной в нижней части окна. Как только окно Параметры будет закрыто, программа произведет построение изображения на главной форме (Рисунок 7), если был установлен параметр «Найти общие точки после закрытия окна», то появиться соответствующее сообщение (Рисунок 8).

Рисунок 7. Главная форма и нарисованные круги.

Рисунок 8. Результат работы приложения по нахождению общей точки.

Если параметр «Задавать координаты автоматически» был установлен и сгенерированные координаты не удовлетворяют нуждам, нажмите на кнопку «Сгенерировать другие координаты», расположенной на панели управления (Рисунок 9).

Рисунок 9. Кнопка «Сгенерировать другие координаты».

Как только приложение закончит построение новых кругов, можно нажать на кнопку «Найти общие точки» (Рисунок 10), расположенной на панели управления, для нахождения общей точки для всех кругов.

Рисунок 10. Кнопка «Найти общие точки»

Для удобства и проверки достоверности приложения присутствует возможность перемещения изображения и изменения масштаба.

Для перемещения изображения можно воспользоваться двумя способами с помощью мыши или с помощью клавиатуры.

Для того чтобы переместить изображение с помощью мыши вам необходимо: нажать правой клавишей мыши на любом месте изображения, не отпуская правой клавиши переместить мышь в том направлении, в котором это необходимо, после этого отпустить правую клавишу. После того как вы отпустите правую клавишу, будет выполнено построение нового изображения, для этого может потребоваться некоторое количество времени. Время для построения нового изображения зависит от производительности вашего компьютера и параметров, которые вы задали в программе.

Для перемещения изображения с помощью клавиатуры вам необходимо воспользоваться курсорами. Курсоры это клавиши в правой части клавиатуры: 4,8,6,2. Но эти клавиши могут использоваться, как курсоры только тогда когда клавиша NumLock находиться в неактивном состоянии (индикатор не горит). Так же в качестве курсоров используются клавиши в нижней части клавиатуры с изображенными на них стрелками, эти стрелки указывают направление, в котором будет перемещено изображение.

Изменить масштаб можно тремя способами с помощью меню программы, с помощью клавиш на панели управления, с помощью мыши.

Для изменения масштаба с помощью меню программы вам необходимо нажать на кнопку Действие из меню программы и нажить на Увеличение или Уменьшение. Если нет возможности воспользоваться мышью, нажмите клавишу Alt на клавиатуре и с помощью курсоров перемесите выделение на кнопку Действие и нажмите курсор с направлением: Вниз. Нажимайте на курсор до тех пор, пока выделение не достигнет кнопки Увеличение или Уменьшение.

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

Для изменения масштаба с помощью мыши, воспользуйтесь центральным колесом мыши. Вращая колесо, разгибая палец, изображение уменьшиться, при сгибании пальца увеличиться (при правильном обхвате мыши).

Если во время работы с приложением возникнут вопросы, то в приложении есть справка, в которой есть ответы на большинство этих вопросов.


Заключение

В данной программе входными данными является количество кругов, координаты по оси OX, координаты по оси OY и радиус.

Координаты по оси OX, координаты по оси OY и радиус имеют вещественный тип “double” – диапазон ограничен десятью цифрами, (ограничен программно) в памяти занимает 8 байта.

Выходными данными является информация, поясняющая, есть ли общая точка на плоскости у этих кругов.

В данной работе рассматривается задача нахождения общей точки для всех кругов на плоскости.

В данную пояснительную записку входят следующие разделы:

Постановка задачи. Формулировка задания для программы.

Организация входных данных. В этом разделе описаны данные, которые пользователь должен ввести, для работы программы.

Описание алгоритма. Это словесное описание действий и операций, выполняемых программой для получения конечного результата.

Выбор технических и программных средств. Здесь описывается выбор программно-аппаратные средства, необходимые для создания этой программы.

Спецификация программы. Это описание минимального набора файлов проекта, пояснение роли каждого файла.

Тестирование программы. Описание действий программы при некорректно введенных данных пользователем.

Далее после этих разделов следует оригинал исходного кода программы.


Список литературы

  1. Разработка управляющих программ для систем: учебное пособие / И.И.Колтунов, А.С.Лобанов. – М.: МГТУ «МАМИ», 2009. – 81 с.
  2. Система автоматизированного программирования для устройств: учебное пособие / И.И.Колтунов, А.С.Лобанов. – М.: МГТУ «МАМИ», 2011. – 38 с.
  3. Программирование для устройств: учебное пособие / И.И.Колтунов, А.В.Анкин. – М.: МГТУ «МАМИ», 2011. – 67 с.


Приложение

void __fastcall TMainForm::N10Click(TObject *Sender)

{

bool points = true;

for (int i = 0; i < NumberOfCircle - 1; i++)

for (int j = i + 1; j < NumberOfCircle; j++)

if ((FormOptions->MyCircle[i].Radius + FormOptions->MyCircle[j].Radius)<

FormOptions->MyLength(FormOptions->MyCircle[i].X,

FormOptions->MyCircle[i].Y,

FormOptions->MyCircle[j].X,

FormOptions->MyCircle[j].Y))

{

points = false;

break;

}

if (points == false) MessageBoxA(0,"Общей точки нет","Определить",0|64);

else MessageBoxA(0,"Общая точка есть","Определить",0|64);

}

double TFormOptions::MyLength(double x1, double y1, double x2, double y2)

{

return sqrt(((x2-x1)*(x2-x1))+((y2-y1)*(y2-y1)));

}

РАЗРАБОТКА ПРОГРАММЫ ДЛЯ РЕШЕНИЯ ЗАДАЧИ «Нахождение общей точка N кругов»