РОЗРОБКА АЛГОРИТМУ ВИКОНАННЯ ЗАВДАННЯ



Міністерство освіти і науки України

Вінницький державний технічний університет

Кафедра КС

 

 

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

з дисципліни технологія програмування

Тема: “Створення програми на мові С++”

 

 

Захищена:

“___” ________ 2001

на оцінку _________

Виконав: ст. гр. 2КС-00

Московко С.М.

Перевірив: Черняк А.І.

 

 

Вінниця 2001


ЗАВДАННЯ ДО КУРСОВОЇ РОБОТИ

 

У файлі задано координати вершин трикутників. Вивести на екран ці трикутники. Другим кольором виділити рівнобедрені трикутники. Третім - два трикутники, що перетинаються та мають найбільшу сумарну площу.

 


АНОТАЦІЯ

 

Курсова робота присвячена розробці програми на мові програмування С++. Програма розробляється з використанням компілятора Borland C++ 3.1, Вона використовує таки принципи ООП, як інкапсуляція, наслідування, скритність даних і т. ін. Розробляється алгоритм розв’язання поставленої в завданні задачі, інтерфейс програми.


ЗМІСТ

 

Вступ

Загальна структура курсової роботи

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

Програмна реалізація алгоритму

Розробка допоміжних програмних засобів

Висновки .

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

Додаток

 


ВСТУП

 

Мова С++ розвилась з С, яка в свою чергу була створена на основі попередніх мов – BCPL і B. Мова С була розвинута з В Денісом Рітчі в Bell Laboratories і вперше реалізована на комп’ютері DEC PDP-11 в 1972 р. С використовує багато важливих концепцій BCPL і B, а також добавляє нові типи даних і інші засоби. Спочатку С набув широкої розповсюдженості як мова розробки операційної системи UNIX. Сьогодні фактично усі нові операційні системи написані на С або на С++. Протягом двох останніх десятиріч С стала доступною для більшості комп’ютерів. Вона незалежна від апаратних засобів. При ретельній розробці цій мові можна написати мобільні програми, які легко переносити на більшість комп’ютерів.

С++ - розширення С – був розроблений Б’ярном Страустрапом на початку 80-х років в Bell Laboratories. С++ забезпечує ряд властивостей, які “приводять в порядок” мову С, але, що більш важливо, вона забезпечує можливість об’єктно-орієнтованого програмування. Це явилось революційною ідеєю в світі програмного забезпечення. Об’єкти – це ефективні компоненти програмного забезпечення, які ефективно повторно використовуються, моделюють елементи реального світу. Об’єктно-орієнтовані програми легше розуміти, коректувати та модифікувати.

С++ - це гнучка мова, вона надає можливість програмувати і в стилі С, і в об’єктно-орієнтованому стилі, і в обох стилях одночасно.

 

 


ЗАГАЛЬНА СТРУКТУРА РОБОТИ

 

В курсовій роботі інтерфейс і основа частини виконуються в окремих файлах. Інтерфейсна частина запускає на виконання виконуваний файл основного модуля.

В склад проекту програми входять наступні файли:

MENU.cpp – програма інтерфейсної частини. Інтерфейс програми реалізований у вигляді меню.

New@.cpp – програма основної частини. Розв’язує поставлену в завданні задачу. Результат виводить в графічному вигляді.

Trea.txt –файл з координатами вершин трикутників.

Menuab.dat – файл з назвами кнопок інтерфейсної частини.

Notepad.exe- текстовий редактор для редагування вхідного файлу

About.txt - “О програме”.

Egavga.bgi – драйвер графічного режиму.

Схематично, взаємодію цих компонентів можна зобразити так:

 

 

 


Програма Menu.cpp – інтерфейсна частина – запускає на виконання виконуваний файл за допомогою функції system. Вона також дає можливість редагувати вхідні файли та текст програми new@.cpp. В якості редактора використовується редактор компілятора Borland C++ 3.1. Для цього виконують функцію system, наприклад, так:

system(“bc.exe new@.cpp”);

для вдалого виконання цієї операції шлях до файлів компілятора повинен бути вказаним у файлі autoexec.bat або програма, редагований файл і компілятор повинні знаходитись в одному каталозі.

Файл trea.txt містить координати вершин трикутників. Кількість вершин трикутників частково обмежена до 1000.

 

РОЗРОБКА АЛГОРИТМУ ВИКОНАННЯ ЗАВДАННЯ

 

Для розв’язання поставленої задачі будемо проглядати по черзі кожен трикутник і дивитись, чи він не перетинається з іншим трикутником. Якщо перетинається, то змінюємо колір обох трикутників. Щоб визначити, чи перетинаються трикутники треба перевірити, на перетин кожну сторону трикутника з кожною стороною іншого трикутника. Якщо хоча б одна сторона першого трикутника перетинається з хоча б одною стороною другого трикутника, то фігури перетинаються.

Отже, задача зводиться до визначення, чи перетинаються два відрізка. Визначити це можна наступним чином.

Складемо рівняння прямих обох відрізків у вигляді ax + by +c. Таким чином, ми отримаємо коефіцієнти двох прямих для рівнянь:

a1*x + b1*y + c1 для одного відрізка і a2*x + b2*y + c2 – для іншого.

Далі підставляємо координати кінців другого відрізка в рівняння для прямої першого і координати кінців першого в рівняння прямої другого відрізка і визначаємо значення виразу рівняння. Якщо для обох кінців кожного відрізка отримали величини різні за знаком, то відрізки перетинаються, в протилежному випадку – ні.

Визначити коефіцієнти a, b і c рівняння прямої можна наступним чином. Нехай, в нас є координати двох точок прямої (в нашому випадку це координати кінців відрізка, сторони фігури) (x1, y1) і (x2, y2).

Тоді коефіцієнти визначаються так:

 

a = y2 – y1,

b = x1 – x2,

c = x2*y1 – x1*y2.

 

Тобто, нехай в нас є два відрізка AB і CD. Координати кінців відрізків наступні: A(x1, y1), B(x2, y2), C(x3, y3) і D(x4, y4).

Для визначення, чи вони перетинаються, складаємо рівняння прямих:

 

a1 = y2 – y1,            a2 = y4 – y3,

b1 = x1 – x2,           b2 = x3 – x4,

c1 = x2y1 – x1y2,             c2 = x4y2 – x3y4.

 

Далі визначаємо значення цих виразів при підстановці точок іншого відрізка:

 

r1 = a1x3 + b1y3 + c1,

r2 = a1x4 + b1y4 + c1,

r3 = a2x1 + b2y1 + c2,

r4 = a2x2 + b2y2 + c2.

 

Тепер, якщо величини r1 і r2 протилежні за знаком, то це означає, що вершини C і D лежать по різні сторони прямої AB, а значить відрізок CD перетинає пряму, на якій лежить AB. Аналогічно, якщо r3 і r4 протилежні за знаком, то відрізок AB перетинає пряму CD, а отже, відрізки перетинаються.

Рівнобедрений трикутник – це трикутник, у якого хоча б дві сторони (два ребра) рівні. Знайдемо довжини трьох сторін трикутника і порівняємо їх між собою. Якщо відомі координати кінців відрізка (сторони), то довжину визначимо так:

 

,

 

Площу трикутників знайдемо за ф. Герона:

 

 

де р-півпериметр:  , і a, b, c – сторони трикутника

де (x1, y1) і (x2, y2) – координати кінців відрізка.

Таким чином, отримуємо наступний алгоритм:

Зчитати координати вершин трикутників.

Порівняємо довжини сторін трикутників. Якщо хоча б дві рівні – трикутник рівнобедрений. Змінюємо його колір.

Візьмемо один трикутник, та почнемо порівнювати його сумарну площу з усіма іншими. І якщо ця сума більша за попередню, і ці два трикутники перетинаються, замінемо значення найбільшої сумарної площі. Так потрібно розглянути усі трикутники.

У двох трикутників, які лишили значення сумарної площі незмінним, змінимо значення кольору.

 


Дата добавления: 2021-01-21; просмотров: 70; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!