РОЗРОБКА АЛГОРИТМУ ВИКОНАННЯ ЗАВДАННЯ
Міністерство освіти і науки України
Вінницький державний технічний університет
Кафедра КС
КУРСОВА РОБОТА
з дисципліни технологія програмування
Тема: “Створення програми на мові С++”
Захищена:
“___” ________ 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; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!