Розробка програм мовою С++ з використанням технології об’єктно-орієнтованого програмування

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

Рубрика Программирование, компьютеры и кибернетика
Вид контрольная работа
Язык украинский
Дата добавления 25.03.2010
Размер файла 159,8 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

1

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

Національний технічний університет

Інститут інформаційних технологій і комп'ютерної інженерії

Кафедра обчислювальної техніки

РОЗРОБКА ПРОГРАМ МОВОЮ С++ З ВИКОРИСТАННЯМ ТЕХНОЛОГІЇ ОБ'ЄКТНО-ОРІЄНТОВАНОГО ПРОГРАМУВАННЯ

Пояснювальна записка

до курсової роботи

з дисципліни

"Програмування"

за спеціальністю

"Комп'ютерні системи і мережі"

08-23.П.4.01.00.000.ПЗ

АНОТАЦІЯ

В даній курсовій роботі була виконана розробка програми на мові програмування С++ з використанням об'єктно-орієнтованих методів. У порівнянні з традиційними способами програмування ООП володіє поруч переваг. Головна з них полягає в тім, що ця концепція найбільшою мірою відповідає внут-рішній логіці функціонування операційної системи (ОС) Windows. Програма, що складається з окремих об'єктів, відмінно пристосована до реагування на події, що відбуваються в ОС. Програма включає в себе роботу з файлами, класами, обробку числової інформації і роботу з графікою. В ході роботи було створено програмну оболонку вирішуваної задачі і розроблено методи вирішення завдання пошуку двох трикутників з найменшими тупими кутами та двох з найбільшими кутами, а також реалізовано алгоритм перевірки перетину даних трикутників з іншими та виведення їх на дисплей.

ЗМІСТ

ВСТУП

1 АНАЛІЗ СУЧАСНОГО СТАНУ ТЕХНОЛОГІЙ ПРОГРАМУВАННЯ ТА ОБГРУНТУВАННЯ ТЕМИ

2 РОЗРОБКА ПРОГРАМИ ВИКОНАННЯ ОСНОВНОГО ЗАВДАННЯ

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

2.2 Структура даних та функцій

3 РОЗРОБКА ТА ВИКОНАННЯ ТЕСТОВОГО ПРИКЛАДУ

4 ІНСТРУКЦІЯ КОРИСТУВАЧА

ВИСНОВКИ

ПЕРЕЛІК ПОСИЛАНЬ

Додаток А

ВСТУП

Представлення даних на моніторі у графічному виді вперше було реалізовано всередині 50-х років для великих ЕОМ, що застосовувались в наукових і військових дослідженнях. Тепер, графічний спосіб відображення даних став приналежністю великого числа комп'ютерних систем. Графічний інтерфейс є необхідним для програмного забезпечення різного класу, починаючи з операційних систем.

Комп'ютерна графіка, це спеціальна ділянка інформатики, що вивчає методи і засоби створення та обробки зображень за допомогою програмно-апаратних обчислювальних комплексів.

Комп'ютерна графіка охоплює всі види та форми представлення зображень, як на екрані монітора, так і на зовнішньому носії (папір, плівка, тощо). Комп'ютерна графіка застосовується для візуалізації даних у різних сферах людської діяльності:

- медицина - комп'ютерна томографія;

- наука - склад речовин, векторні поля графіки процесів;

- дизайн - реклама, поліграфія, моделювання.

В залежності від способу формування зображень, комп'ютерну графіку можна поділити на:

- растрову;

- векторну;

- фрактальну;

- тривимірну.

За способами представлення кольорів комп'ютерна графіка поділяється на:

- чорно-білу;

- кольорову.

За спеціалізацією в різних галузях комп'ютерна графіка є:

- інженерною;

- науковою;

- web-графікою;

- комп'ютерною поліграфією.

На перетині комп'ютерних, телевізійних та кінотехнологій стрімко розвивається комп'ютерна графіка і анімація. Значне місце посідає графіка для комп'ютерних ігор. Обіг ігрових програм складає десятки мільярдів доларів і стимулює розвиток анімації.

Структура та методи комп'ютерної графіки засновані на досягненнях фундаментальних та прикладних наук: математики, фізики, хімії, біології, статистики, програмування тощо. Це стосується, як програмних, так і апаратних засобів створення та обробки зображень. Тому комп'ютерна графіка є однією з найважливіших ділянок інформатики та стимулює розвиток комп'ютерної індустрії.

1 АНАЛІЗ СУЧАСНОГО СТАНУ ТЕХНОЛОГІЙ ПРОГРАМУВАННЯ ТА ОБГРУНТУВАННЯ ТЕМИ

Об'єктном-орієнтованем програмувамння (ООП)-одна з парадигм програмування, яка розглядає програму як множину «об'єктів»,що взаємодіють між собою. В ній використано декілька технологій від попередніх парадигм, зокрема успадкування, модульність, поліморфізм та інкапсуляцію. Не зважаючи на те, що ця парадигма з'явилась в 1960-тих роках, вона не мала широкого застосування до 1990-тих. На сьогодні багато із мов програмування (зокрема, Java, ActionScript 3, C#, C++, Python, PHP, Ruby та Objective-C) [1] підтримують ООП.

Об'єктно-орієнтоване програмування сягає своїм корінням до створення мови програмування Симула в 1960-тих роках, одночасно з посиленням дискусій про кризу програмного забезпечення. Разом із тим, як ускладнювалось апаратне та програмне забезпечення, було дуже важко зберегти якість програм. Об'єктно-орієнтоване програмування частково розв'язує цю проблему шляхом наголошення на модульності програми.

На відміну від традиційних поглядів, коли програму розглядали як набір підпрограм, або як перелік інструкцій комп'ютеру, ООП програми можна вважати сукупністю об'єктів. Відповідно до парадигми об'єктно-орієнтованого програмування, кожний об'єкт здатний отримувати повідомлення, обробляти дані, та надсилати повідомлення іншим об'єктам. Кожен об'єкт - своє рідний незалежний автомат з окремим призначенням та відповідальністю.

У порівнянні з традиційними способами програмування ООП володіє поруч переваг. Головне з них полягає в тім, що ця концепція найбільшою мірою відповідає внутрішній логіці функціонування операційної системи (ОС) Windows [2]. Програма, що складається з окремих об'єктів, відмінно пристосована до реагування на події, що відбуваються в ОС. До інших переваг ООП можна віднести велику надійність коду і можливість повторного використання відпрацьованих об'єктів.

Сучасна практика програмування вимагає вдосконалення прийомів розробки комп'ютерних програм, прискорення та полегшення процессу їх проектування. При цьому програмні засоби повинні бути орієнтовані на тривалу роботу з користувачем. Це ставить перед розробником-програмістом завдання, що спрямовані не тільки на технологічні вимоги організації інтерфейсу програми, а й на психолого - фізіологічні особливості сприймання людиною інформації.

Ріст приватного сектору економіки призвів до перегляду об'ємів витрат на комп'ютерну техніку та на спеціалізоване програмне забезпечення. Набагато вигідніше стало розробляти нескладні програмні засоби, орієнтовані на розв'язання вузько спеціалізованих завдань. Тому, перед навчальними закладами постала мета підготувати спеціалістів, які спроможні створювати гнучкі програмні засоби, не витрачаючи на їх розробку та впровадження багато фінансів та часу.

Особливі можливості надають об'єктно-орієнтовані середовища програмування, що дозволяють швидко конструювати програмний засіб, використовуючи готові компоненти та описуючи процедури обробки події певного об'єкта, тоді як традиційне, процедурне програмування вимагає більш ретельного опису та налагодження програм [3]. Для кращого порівняння традиційної та об'єктно-орієнтованої технологій програмування розглянемо їх основні переваги та недоліки.

Традиційне програмування базувалося на розробці тексту основної програми, яка викликала окремі процедури, що накопичувалися у великі бібліотеки розрахункових та службових процедур. Основним недоліком такої технології була наявність високої вірогідності помилок при зростанні кількості процедур, а це значно утруднювало налагодження програми. Складність програмного засобу обмежувала можливість слідкування за процесом обробки даних, з'являлися проблеми узгодження інтерфейсу при розробці програми кількома програмістами.

Зусиллями спеціалістів була представлена структурна технологія програмування, яка являла собою сукупність технологічних прийомів, що охоплюють виконання всіх етапів розробки програмного засобу. Така технологія програмування базувалася на декомпозиції складних систем і вимагала побудови ієрархічної структури розв'язання задачі з використанням методу покрокової деталізації. Створена програма мала правільну структурну організацію і містила декілька процедур, які викликалися основною програмою або процедурою більш високого рівня. Підтримка принципів структурного програмування була закладена до основи процедурних мов програмування. Ці мови містили основні оператори управління, дозволяли вкладення процедур, функцій, локалізацію та обмеження даних. Усе це дало змогу зробити перші кроки до абстругування та маскування інформації, що є засобами об'єктно-орієнтованого програмування.

Подальше зростання складності та розмірів програмного забезпечення розвивало можливості структурування даних, дозволяло описувати типи даних користувача.

Одночасно виникла необхідність розмежувати доступ до глобальних даних програми, тому з'явилася технологія модульного програмування. Вона припускає виокремлення групи процедур та функцій з однаковими глобальними даними в окремі файли, які використовуються в інших програмах як окремо компілюючі модулі: модуль графічних ресурсів, модуль виведення інформації на принтер та інші. Усі змінні в модульних програмах розподіляються на дві частини: відкриті (public), тобто доступні поза модулем в інших програмах, та закриті (private) - доступ до яких може бути тільки в межах процедури. Такий підхід значно поліпшив розробку програм кількома програмістами, кожний з яких розробляв свій окремий модуль, який можна було використовувати в інших програмах. Таку технологію програмування підтримували Pascal, C, С++ та інші [4]. Дані середовища програмування були орієнтовані на користування операційною системою MS-DOS [5].

Недоліком модульного програмування була обмеженість у розмірі програми. Так, при використанні програмістом понад 100 000 операторів зростала складність міжмодульних інтерфейсів, тому передбачити взаємовплив окремих частин програми було практично неможливо.

Технологія об'єктно-орієнтованого програмування зменшила кількість зв'язків між окремими частинами програми, що дозволило скоротити час її розробки та полегшити процес створення Windows-додатків, тобто програм, що орієнтуються на операційну систему Windows. Дана технологія базується на описі окремих об'єктів, кожний з яких належить до певного класу. Параметри об'єкта кожного класу утворюють ієрархію властивостей, а процедури та функції, які називають методами, виконуються після запитів.

Основною перевагою об'єктно-орієнтованого програмування є значне зменшення кількості міжмодульних повідомлень та зменшення об'єму інформації, що передається між модулями. Локалізація даних, їх інтегрування з процедурами обробки дозволяють створювати незалежні між собою окремі частини програми, які також можуть бути використані в інших програмах. Так, на основі поєднання готових, уже описаних блоків можна сконструювати кінцевий програмний засіб.

При використанні об'єктно-орієнтованих програм вимоги до об'єму пам'яті такі, як і при традиційному програмуванні, при цьому склад програми став більш компактний, а процес її вдосконалення - полегшений. Об'єктно-орієнтований підхід використовує такі технологічні засоби, як спадкування, поліморфізм, композицію та наповнення. Усе це сприяє проектуванню складних об'єктів при використанні більш простих. Ці засоби є основними показниками об'єктно-орієнтованого програмування.

Механізм спадкування реалізується через доступ до методів і властивостей об'єкта певного класу і дозволяє приписати їх іншому об'єкту цього ж класу. Цей механізм забезпечує створення похідних класів. Ці класи розширюють можливості вже існуючих класів без їх перепрограмування та повторної компіляції. Саме це дозволило зменшити об'єм програмного засобу та збільшити його функціональність.

Механізм поліморфізму забезпечує можливість визначення різних аспектів єдиного за назвою методу для класів різних рівнів ієрархії. Подібний підхід дозволяє будувати більш гнучкі й досконалі ієрархії класів, змінюючи в похідних класах методи відповідно до вимог програми.

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

В основу орієнтованого програмування покладені такі принципи, як абстрагувавня, обмеження доступу, модульність, ієрархічність, типізація, паралелізм та стійкість. Мова програмування вважається об'єктно-орієнтованою, якщо в ній реалізовані перші чотири принципи, серед них С++Builder, Visual С++, Delphi та інші. Так, абстрагуванням є процес виокремлення певних характеристик об'єкту, що відрізняють його від інших та визначають його особливості. Залежно від поставленої задачі характеристикою може бути форма предмета, його вага, матеріал або закон руху тощо. Абстрагування допускає об'єднання усіх характеристик, що визначають стан та поведінку об'єкта, в єдину програмну одиницю певного типу.

Так формується клас об'єкта. Обмеження доступу дозволяє приховувати окремі елементи об'єкта, що не відображають його істотні характеристики. Необхідність обмеження доступу припускає розмежування двох частин в описі характеристик об'єкта, а саме на інтерфейс та реалізацію. Інтерфейсом є сукупність доступних елементів, що характеризують стан та поведінку об'єкта, тоді як реалізація відображає сукупність тільки недоступних елементів цього ж об'єкта. Це дозволяє розробнику програмного засобу виконувати конструювання програми за етапами, а також легко модифікувати реалізацію окремих об'єктів. Об'єднання усіх властивостей об'єкта в єдину абстракцію та обмеження доступу до реалізації його властивостей визначило таке важливе поняття об'єктно-орієнтованого програмування, як інкапсуляція.

Модульність припускає реалізацію програм у вигляді окремих частин, так званих модулів. Використання модульності спрощує проектування та налагодження програми. Ієрархічність є впорядкованою системою характеристик об'єкта. Вона використовується під час розробки структури класу, при побудові складних класів на базі простих за рахунок додавання нових характеристик та інших уточнень.

Основним недоліком об'єктно-орієнтованого програмування є зниження швидкості роботи середовища через більш складну організацію програмної системи. Цей недолік усувається при використанні розробником сучасної високошвидкісної комп'ютерної техніки. Відсутність єдиної прийнятої термінології є недоліком теоретичного аспекту об'єктно-орієнтованого програмування.

Розробка програмних засобів для операційних систем Windows має ряд особливостей. Так, взаємодія програмного засобу з користувачем та з операційною системою здійснюється через відправлення та обробку повідомлень. Таку побудову обробки повідомлень в програмі назвали подією. Управління подіями є процесом самостійним, не зв'язаним з програмуванням. Існують програми, що працюють за принципом події, але не є об'єктно-орієнтованими. Поєднання об'єктно-орієнтованої технології та опис реакції програми на подію дозволили істотно спростити процес програмування. Існуючі об'єктно-орієнтовані середовища програмування дозволяють порівняно легко розробляти складні Wіndows-програми, автоматизувати операції розробки програмного засобу та пропонують велику кількість різних шаблонів та заготовлень.

Процес розробки комп'ютерної програми на основі об'єктно-орієнтованого програмування містить такі етапи, як аналіз, проектування, еволюція та модифікація. Метою аналізу є максимально повний опис поставленої задачі. На цьому етапі аналізується предметна область задачі, виконується об'єктна декомпозиція програми та визначаються особливості поведінки об'єктів. За результатами аналізу розробляється структурна схема програми, описуються об'єкти та події над ними.

Проектування поділяється на логічне та фізичне. Логічне полягає у розробці структури класів, коли визначаються поля для збереження складових об'єктів, алгоритми методів, що описують поведінку об'єктів. Розробляючи класи об'єктів, слід відповісти на такі питання:

- Скільки класів потрібно для реалізації об'єктів, отриманих при декомпозиції задачі?

- Які дані необхідно описати як поля класу?

- Які методи, що визначають поведінку об'єктів, треба помістити до класу?

- Чи зв'язані між собою класи задачі? Чи потрібна побудова ієрархії класів?

Фізичне проектування містить об'єднання опису класів у модулі, вибір схеми їх підключення (статична або динамічна), визначення способів взаємодії з обладнанням, операційною системою та іншим програмним забезпеченням (базами даних, мережним оточенням), забезпечення синхронізації процесів для систем рівнобіжної обробки тощо. На етапі проектування використовуються такі прийоми розробки класів як спадкування, композиція, наповнення. Результатом етапу проектування є створення ієрархії класів та їх опис.

Еволюція системи представляє етап послідовної реалізації та підключення класів до проекту. Процес починається із створення основного інтерфейсу проекту, бібліотеки класів, описуються тип поля класу, розробляються алгоритми методів, уточнюються вимоги до програми та вносяться певні зміни. Одержаний прототип продукту тестується й налагоджується.

Модифікація являє собою етап додавання нових функціональних можливостей до програми. Зміни торкаються лише реалізації класу, не змінюючи його інтерфейсу, інакше внесення на цьому етапі змін до інтерфейсу викличе необхідність узгоджуння процесів взаємодії між об'єктами та потребує змін в інших класах програми. Простота модифікації дозволяє легко адаптувати програмний продукт до умов експлуатації, що постійно змінюються.

Порівнюючи середовища програмування Vіsual C++, Delphі та C++ Buіlder, треба відзначити, що Vіsual C++ є найбільш універсальним програмним пакетом, а тому найбільш складним. Він використовує розвинуту об'єктну модель C++ та має більш могутню бібліотеку об'єктів. Інтерфейс і засоби Vіsual C++ потребують більше часу на їх освоєння й орієнтовані на професійні розробки високого рівня. Delphі та C++ Buіlder [6] використовують ідентичні середовища програмування та бібліотеку об'єктів VCL (Vіsual Component Lіbrary). Розробка програмних засобів у цих середовищах у порівнянні з Vіsual C++ [7] значно більш автоматизована й полегшена. Вони містять засоби зв'язку з популярними базами даних, дозволяють створювати якісні програмні продукти за істотно коротший термін. Виходячи з того факту, що Паскаль є найкращою навчальною мовою програмування, ми визначили Delphі (Object Pascal) найбільш сприятливим середовищем для навчання студентів програмування.

Будь-який програмний засіб, розроблений на основі Delphi містить об'єкт-форму (вікно програми), де розміщуються певні компоненти. При цьому всі об'єкти форми повинні відповідати вимогам замовника та орієнтуватися на тривалу роботу з користувачем. Тому, крім техніко-технологічних вимог до розробки програм, слід також урахувати психолого-фізіологічні вимоги до поданої на екрані інформації. Основна увага під час процесу розробки комп'ютерної програми зосереджується на проектуванні форми з включенням змістового, наочного та емоційного компонентів, що впливають на ефективність роботи програмного засобу. Кожний з компонентів знаходиться у постійному взаємозв'язку з іншими компонентами. Змістовий компонент визначається вимогами до коректного представлення інформації та вимагає правильності отриманих результатів при розрахунках. Так, під час роботи з фінансовими документами варто вибирати правильний спосіб представлення числових даних.Отримані результати, що містять дрібну частину, мають бути правильно округлені та однозначно представлені. При цьому варто дотримувати єдиних вимог, використовуючи однакову кількість знаків у дрібній частині числа, роздільник груп розрядів у числових даних з великим значенням, єдиний формат числових даних в одній області представлення (шрифт, колір, вид тощо).

До змістового компонента відносять наявність у програмі інформаційних областей з необхідними довідковими відомостями, точну розробку не обхідних вихідних форм згідно із законодавством України, можливості роботи у комп'ютерній мережі з використанням клієнт-серверних технологій.

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

Комп'ютерна програма повинна містити допоміжну, спливаючу інформацію, що пояснює призначення кожного компонента форми на екрані. Це значно полегшує освоєння користувачем роботи програмного засобу. При цьому слід уникати зайвих текстових подробиць та незначущих графічних прикрас, що відволікає увагу людини під час роботи з програмою. Особливу увагу треба приділити кольоровому оформленню програмного засобу, який повинен відповідати закономірностям сприймання людиною спектру кольорів. Дотримання цих вимог дозволяє користувачеві працювати з програмою без впливу на його фізичний стан. Тому розробнику комп'ютерної програми слід пам'ятати такі правила:

- короткохвильові кольори (фіолетовий, синій) при систематичному викорис-танні призводять до пригніченого стану користувача, надмірного напруження його очей;

- чим більша довжина хвилі колірного спектру (червоний, рожевий, жовтогорячий), тим сильнішим є вплив на зоровий аналізатор користувача, а це призводить до його стомлення;

- кольори середньої частини спектра (зелений, прилеглі до жовтого та блакитного, а також сірий) створюють найкращі умови для сприйняття інформації, оскільки не викликають ні пригнічуваної, ні збуджуючої дії;

- велика кількість областей з різнокольоровими відтінками спричинює роззосередження уваги користувача. Контрастне забарвлення створює різкий перепад довжини хвиль кольору, що важко сприймається людським оком, тому екран слід оформлювати в єдиній тональності;

- одночасно рекомендується використовувати не більше 4-х основних кольорів;

- однакові відтінки кольорів, окремі рамки використовують для передачі єдності інформації, її подібності, тоді як контрастні кольори або взагалі відсутність кольору (білий чи фоновий) - для розходження, ізолювання інформації.

Деякі інформаційні об'єкти програмного засобу потребують підвищеної уваги користувача. З метою її активізації слід використовувати коректні способи, що зосереджують увагу, при цьому не відволікають людину від змісту інформації. До таких прийомів відносять збільшення шрифту або підкреслення тексту, кольорове оформлення, використання короткочасного переміщення об'єкта або його нетривале мерехтіння (кілька секунд) з низькою частотою [8].

Велике значення має ефективне використання площі екрана програми. Слід раціонально використовувати під усі види інформації не більше 90% від загальної площі екрану. При цьому краще розподілити екран на окремі зони для компонентів уведення інформації, отримання результатів, а також для компонентів виклику додаткової інформації, переходу до попереднього або наступного етапів роботи комп'ютерної програми. Емоційний компонент орієнтований на розвиток позитивних емоційних умов роботи користувача з програмним засобом, застосування ним ефективних засобів управління програмою.

Найбільш сприятливою формою організації програмного засобу є використання компонента меню, однак при цьому також слід дотримуватися певних норм. Так, при створенні меню необхідно обмежуватися не більше як дев'ятьма командами, тоді як кожна команда меню не повинна перевищувати трьох укладень. Робота з пунктами меню має здійснюватися за допомогою одночасної роботи користувача як з мишею, так і з клавіатурою. Обробка інформації припускає можливості сортування, пошуку та вибірки даних за певною умовою. При роботі з інформацією великих об'ємів треба використовувати швидкі методи розміщення на формі екранних покажчиків процентного виконання операції обробки даних.

Рутинна робота користувача при введенні чи редагуванні даних викликає втому та знижує уважність, веде до зростання кількості помилок. Наявність режиму автоматичного збереження даних та можливість скасування останньої дії допоможуть уникнути зайвих проблем. Для покращення емоційного стану користувача під час роботи розробники програмного засобу передбачають звуковий супровід, створення мовних або музичних фрагментів. Робота із звуковою інформацією також має певні особливості. Так, слід пам'ятати, що час обробки звукової інформації довший, ніж зорової, тому звук і текст не повинні дублюватися, а можуть лише доповнювати один одного. Для більш осмисленого сприймання звукової інформації її чергують із текстовою. При використанні музичних збірників треба пам'ятати, що використання спокійного музичного супроводу підтримує увагу, тоді як ритмічна музика увагу роззосереджує.

Одним із важливих факторів підтримки сприятливих умов роботи з програмним засобом є стійкість програми до некваліфікованих дій користувача. Тому при введенні інформації слід передбачити використання маски введення даних, застосування єдиного роздільника дрібної частини числа незалежно від способу введення користувачем. Це дозволяє уникнути введення некоректних даних та “зависання” системи.

2 РОЗРОБКА ПРОГРАМИ ВИКОНАННЯ ОСНОВНОГО ЗАВДАННЯ

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

Маючи координати точок трикутника знаходимо довжину відрізків за формулами:

; (1)

; (2)

(3)

далі, маючи сторони трикутника, за теоремою косинусів знаходимо косинус трикутників

(4)

(5)

(6)

За допомогою операції arcos знаходимо кути a1, a2, a3.

a1=arccos (cosa1)*180/3.14159 (7)

a2=arccos (cosa2)*180/3.14159 (8)

a3=arccos (cosa3)*180/3.14159 (9)

Щоб перевірити чи перетинаються трикутники, потрібно перевірити чи перетинаютьсяїхні відрізки. Щоб перевірити чи перетинаються відрізки, складаємо рівняння прямої для відрізка а. Підставляємо в це рівняння точки відрізка в

A=y2-y1 (10)

B=x1-x2; (11)

C=y1* (x2-x1)-x1* (y2-y1); (12)

R1=A*x4+B*y4+C; (13)

R2=A*x5+B*y5+C; (14)

Складаємо рівняння прямої для відрізка в. Підставляємо в це рівняння точки відрізка а.

A=y5-y4; (15)

B=x4-x5; (16)

C=y4* (x5-x4)-x4* (y5-y4); (17)

R1=A*x1+B*y1+C; (18)

R2=A*x2+B*y2+C; (19)

Якщо R1 і R2 в двох випадках різних знаків, то відрізоки а і в перетинаються, інакше не перетинаються.

2.2 Структура даних та функцій

1. Виділяємо основні об'єкти, які є в задачі:

Трикутник - СTriangle

Відрізок - CLine

Точка - CPoint

2.Визначаємо, чи необхідно створювати додаткові класи для задачі. Для цього розглядаємо задачі, які виникають і вирішуємо, чи необхідно створювати додаткові класи до цих задач:

1. визначаємо чи трикутник тупокутній;

2. визначаємо трикутник з найбільшим та нфймуншим тупими кутами; 3. визначаємо чи ці трикутники перетинаються;

4. считування з файлів координат цю задачу покладаємо на CTManager;

5.рисуваннятрикутників на екрані. Цю задачу може виконувати CTriangle, але CTrManager повинен повідомляти CTriangle його колір.

3.Задачі, які виконує кожен клас:

CTrManager

1.Завантажує координати трикутники з файла та створює об'єкти трикутників;

2.Визначає ті трикутники, які перетинаються і повідомляє їм їх колір;

3.Визначає трикутники з найбільшим та найменшим тупими кутами;

Визначає чи перетинаються вони і повідомляє їм їх колір;

4. Змушує трикутники рисувати себе на єкрані;

5.Чистить пам'ятьпісля роботи програми;

6.Визначаєтупокутні трикутники і записує їх координати в файл.

CTriangle

1.Отримує координати своїх точок і створює в собі об'єкти Cline;

2.Визначає свій найбільший кут;

3.Отримує об'єкт іншого трикутника і визначає чи перетинається з ним;

4.Змушує свої відрізки рисуватись на екрані заданим кольором.

CLine

1.Отримує від трикутника координати своїх точок істворює в собі CPoint;

2.Отримує об'єкт іншого відрізка і визначає чи він перетинається з ним;

4.Рисує себе заданим кольором.

CPoint

1.Зберігає координати точки.

Для того, щоб показати спорідненість графічних об'єктів CTriangle і Cline введемо додатковий (абстрактний) клас CGrObject. Цей клас буде батьком згаданих класів.

Функції, які використовувались у данній програмі:

IsIntersection - функція, яка перевіряє перетинання відрізків

Render - функція, яка рисує себе заданим кольором

GetMaxAngle - функція, яка визначає найбільший кут

LoadData - функція, яка завантажує координати з файла

BigAngleFilter - функція, яка визначає найбільший кут

TestMaxMinAngle - функція, яка визначає трикутники з найбільшим та найменшим тупими кутами

TestMaxMinIntersection - функція, яка визначає, чи перетинаються трикутники з найбільшим та найменшим тупим кутом

RenderAll - функція, яка заставляє трикутники рисувати себе

UnloadData - функція, яка чистить пам'ять після роботи програми

Fscanf - функція для читання з файла

Closegraph - функція, яка вимикає графічний режим і повертається знову до текстового

3 РОЗРОБКА ТА ВИКОНАННЯ ТЕСТОВОГО ПРИКЛАДУ

В цей файл ми записуєм координати трикутників, які з'являться на екрані після запуску програми. Координати кожного трикутника починаються з нової стрічки.Так, як трикутник кожний має три точки,а кожна точка має по дві координати, то в кожній стрічці ми записуємо по шість координат.Вхідні дані представленні на рисунку 1.

(рис.1)

4 ІНСТРУКЦІЯ КОРИСТУВАЧА

Для запуску програми потрібні такі вимоги щодо апаратної частини та програмного забезпечення комп'ютера:

Апаратна частина:

- монітор: розмір 14дюймів;

- відеокарта: тип SGVA (GVA),

максимальне розрішення - 640х480 точок;

підтримує кількість кольорів - 16 (позначаються від 0 до 15);

- слоти на материнській платі: ISA, PCI, AGP

- процесор: тип Intel 386;

тактова частота: 33 МГц;

- ОЗУ: 4 МБ;

- HDD: 540 МБ;

- інтерфейс: IDE

Програмна частина:

- MS DOC (Windows 3.1);

- cередовище: Turbo C (Borland C).

Для роботи з графікою потрібно налаштувати середовище. Заходимо в меню Options >Linker >Libraries (ставимо галочку коло папки Graphics library)

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

1. об'явити змінні для переходу в графічний режим;

2. ініціалізувати графіку (увімкнути);

3. нарисувати те, що потрібно;

4. закрити графічний режим.

ВИСНОВКИ

Об'єктно-орієнтовані системи легко підтримуються. Їх перевага полягає в способі комплектування об'єктно-орієнтованих програмних модулів. Традиційне ПО складається з даних і процедур, здійснюючий доступ і зміну даних. Дані і процедури комплектуються окремо, тому зміна структури даних впливає на різні модулі, написані різними користувачами. У об'єктно-орієнтованій системі дані і процедури розглядаються разом як частина одного пакету - об'єкту. При зміні даних всі задіяні процедури легко ідентифікуються і змінюються одночасно. Оскільки зміна розповсюджується тільки на одну область системи, його побічний вплив на всю систему зменшується.

Урахування перелічених техніко-технологічних та психолого-фізіологічних особливостей розробки програмного засобу дозволяє спеціалісту значно знизити термін створення ефективної комп'ютерної програми, зорієнтованої на підвищену якість обробки інформації та продуктивну роботу користувача.

Унаслідок багатьох переваг, а також ще ряду причин, ООП є в даний час найперспективнішим, поширенішим і ефективнішим напрямом в програмуванні.

ПЕРЕЛІК ПОСИЛАНЬ

1. Глушаков С.В. Програмування в середовищі Windows: Учбовий курс/ Глушаков С.В., Мельников В.В., Сурядний А.С.-Харьків: Фоліо; М.: «Видання АСТ», 2001. - 487 с.

2. Буч Г. Объектно-ориентированный анализ и проектирование с примерами приложений на С++ / Г. Буч-М.: Бином. - СПб.: Невский диалект, 1999.-644 с.

3.Иванова Г.С. Объектно-ориентированное программирование: Учеб. для вузов / Иванова Г.С., Ничушкина Т.Н., Пугачев Е.К. - М.: Изд-во МГТУ имени Н.Э.Баумана, 2001. - 320 с., ил. (Сер. Информатика в техническом университете).

4. Скляров В.А. Язык С++ и объектно-ориентированное программирование/ Скляров В.А. - М.: Высш. шк., 1997. - 478 с.

5. Хоор К. О структурной организации данных /Дал У., Дейкстра Э., Хоор К. Структурное программирование. - М. : Мир, 1975. - С. 98-197.

6. Ишкова Э.C++ начала программирования/ Ишкова Э. - М.: Бином, 2001.-276 с.

7. Мархель И.И. Компьютерная технология обучения: Психолого-педагогические проблемы / Мархель И.И. - Советская педагогика, 1990. -

с. 87-91.

8. Машбиц Е.И. Психолого-педагогические проблемы компьютеризации обучения /Машбиц Е.И. - М.: Педагогика, 1988. - 191 с.

Додаток А

(Обов'язковий)

Лістинг програми

#include <iostream.h>

#include<conio.h>

#include <math.h>

#include <stdio.h>

#include <graphics.h>

#include <stdlib.h>

class CPoint

{

public:

float x;

float y;

CPoint ()

{

x=0;

y=0;

}

};

class CGrObject

{

public:

int Color;

CGrObject ()

{

Color=0;

}

void Render ()

{

}

};

class CLine: public CGrObject

{

public:

CPoint A;

CPoint B;

CLine ();

CLine (float x1,float y1, float x2,float y2);

int IsIntersection (CLine *pL);

void Render ();

};

CLine::CLine ()

{

A.x=0;

A.y=0;

B.x=0;

B.y=0;

}

CLine::CLine (float x1,float y1, float x2,float y2)

{

A.x=x1;

A.y=y1;

B.x=x2;

B.y=y2;

}

int CLine::IsIntersection (CLine *pL)

{

float x1=this->A.x;

float y1=this->A.y;

float x2=this->B.x;

float y2=this->B.y;

float x4=pL->A.x;

float y4=pL->A.y;

float x5=pL->B.x;

float y5=pL->B.y;

int R=0;

float A;

float B;

float C;

float R1;

float R2;

A=y2-y1;

B=x1-x2;

C=y1* (x2-x1)-x1* (y2-y1);

R1=A*x4+B*y4+C;

R2=A*x5+B*y5+C;

if (R1>0&&R2<0) R=1;

if (R1<0&&R2>0) R=1;

A=y5-y4;

B=x4-x5;

C=y4* (x5-x4)-x4* (y5-y4);

R1=A*x1+B*y1+C;

R2=A*x2+B*y2+C;

if (R==1)

{

if (R1>0&&R2<0) R=2;

if (R1<0&&R2>0) R=2;

}

if (R==1) R=0;

if (R==2) R=1;

return R;

}

void CLine::Render ()

{

setcolor (Color);

line (A.x,A.y,B.x,B.y);

}

class CTriangle : public CGrObject

{

public:

CLine a;

CLine b;

CLine c;

CTriangle ()

{

Color=12;

}

CTriangle (float x1, float y1, float x2, float y2, float x3, float y3);

void Render ();

int IsIntersection (CTriangle* pT);

float GetMaxAngle ();

};

CTriangle::CTriangle (float x1, float y1, float x2, float y2, float x3, float y3)

{

Color=12;

a.A.x=x1;

a.A.y=y1;

a.B.x=x2;

a.B.y=y2;

b.A.x=x2;

b.A.y=y2;

b.B.x=x3;

b.B.y=y3;

c.A.x=x3;

c.A.y=y3;

c.B.x=x1;

c.B.y=y1;

}

void CTriangle::Render ()

{

a.Color=Color;

b.Color=Color;

c.Color=Color;

a.Render ();

b.Render ();

c.Render ();

}

int CTriangle::IsIntersection (CTriangle* pT)

{

int R=0;

R=R+a.IsIntersection (& (pT->a));

R+=a.IsIntersection (& (pT->b));

R+=a.IsIntersection (& (pT->c));

R+=b.IsIntersection (& (pT->a));

R+=b.IsIntersection (& (pT->b));

R+=b.IsIntersection (& (pT->c));

R+=c.IsIntersection (& (pT->a));

R+=c.IsIntersection (& (pT->b));

R+=c.IsIntersection (& (pT->c));

if (R>0)

{

R=1;

}

return R;

}

float CTriangle::GetMaxAngle ()

{

float x1=a.A.x;

float y1=a.A.y;

float x2=a.B.x;

float y2=a.B.y;

float x3=c.A.x;

float y3=c.A.y;

float d1=0;

float d2=0;

float d3=0;

float a1=0;

float a2=0;

float a3=0;

d1= ( (x2-x1)* (x2-x1)+ (y2-y1)* (y2-y1));

d2= ( (x3-x1)* (x3-x1)+ (y3-y1)* (y3-y1));

d3= ( (x3-x2)* (x3-x2)+ (y3-y2)* (y3-y2));

double cosa1;

if ( (2*sqrt (d2)*sqrt (d3))!=0)

{

cosa1= (d2+d3-d1)/ (2*sqrt (d2)*sqrt (d3));

}

else

{

cosa1=1;

}

double cosa2;

if ( (2*sqrt (d1)*sqrt (d3))!=0)

{

cosa2= (d1+d3-d2)/ (2*sqrt (d1)*sqrt (d3));

}

else

{

cosa2=1;

}

double cosa3;

if ( (2*sqrt (d1)*sqrt (d2))!=0)

{

cosa3= (d1+d2-d3)/ (2*sqrt (d1)*sqrt (d2));

}

else

{

cosa3=1;

}

a1=acosl (cosa1)*180/3.14159;

a2=acosl (cosa2)*180/3.14159;

a3=acosl (cosa3)*180/3.14159;

float Max=a1;

if (a2>Max)

{

Max=a2;

}

if (a3>Max)

{

Max=a3;

}

return Max;

}

class CTrManager

{

int MAXindex;

int MINindex;

int Peretin;

public:

CTriangle* TA;

int N;

CTrManager ()

{

N=0;

Peretin=0;

MINindex=-1;

MAXindex=-1;

}

void LoadData ();

void BigAngleFilter ();

void TestMaxMinAngle ();

void TestMaxMinIntersection ();

void RenderAll ();

void UnloadData ();

};

void CTrManager::LoadData ()

{

//from file

FILE* in;

in=fopen ("input.txt", "rt");

N=0;

float x1, y1, x2, y2, x3, y3;

while (!feof (in))

{

fscanf (in,"%f %f %f %f %f %f\n",&x1, &y1, &x2, &y2, &x3, &y3);

N++;

}

fclose (in);

TA=new CTriangle[N];

in=fopen ("input.txt", "rt");

for (int i=0;i<N;i++)

{

fscanf (in,"%f %f %f %f %f %f\n",&x1, &y1, &x2, &y2, &x3, &y3);

TA[i].a.A.x=x1;

TA[i].a.A.y=y1;

TA[i].a.B.x=x2;

TA[i].a.B.y=y2;

TA[i].b.A.x=x2;

TA[i].b.A.y=y2;

TA[i].b.B.x=x3;

TA[i].b.B.y=y3;

TA[i].c.A.x=x3;

TA[i].c.A.y=y3;

TA[i].c.B.x=x1;

TA[i].c.B.y=y1;

}

}

void CTrManager::RenderAll ()

{

if (MAXindex!=MINindex)

{

TA[MAXindex].Color=2;

TA[MINindex].Color=14;

}

for (int i=0;i<N;i++)

{

TA[i].Render ();

}

settextjustify (LEFT_TEXT, TOP_TEXT);

if (Peretin==1)

{

outtextxy (10, 10, "Trikutniki peretinajutsa");

}

else

{

outtextxy (10, 10, "Peretinu nemae");

}

}

void CTrManager::BigAngleFilter ()

{

FILE* out;

out=fopen ("out.txt", "wt");

for (int i=0;i<N;i++)

{

if (TA[i].GetMaxAngle ()>90)

{

// to file

fprintf (out, "%2.2f %2.2f %2.2f %2.2f %2.2f %2.2f\n",TA[i].a.A.x, TA[i].a.A.y, TA[i].a.B.x, TA[i].a.B.y, TA[i].b.B.x, TA[i].b.B.y);

}

}

fclose (out);

}

void CTrManager::TestMaxMinAngle ()

{

MAXindex=0;

MINindex=0;

int WasBig=0;

for (int i=0;i<N;i++)

{

if (TA[i].GetMaxAngle ()>90)

{

WasBig=1;

if (TA[i].GetMaxAngle ()>TA[MAXindex].GetMaxAngle ())

{

MAXindex=i;

}

if (TA[i].GetMaxAngle ()<TA[MINindex].GetMaxAngle ())

{

MINindex=i;

}

}

}

if (WasBig==0)

{

MAXindex=-1;

MINindex=-1;

}

}

void CTrManager::TestMaxMinIntersection ()

{

if (MAXindex!=MINindex)

{

Peretin=TA[MAXindex].IsIntersection (&TA[MINindex]);

}

}

void CTrManager::UnloadData ()

{

delete [] TA;

}

int GraphDriver; /* The Graphics device driver */

int GraphMode; /* The Graphics mode value */

double AspectRatio; /* Aspect ratio of a pixel on the screen*/

int MaxX, MaxY; /* The maximum resolution of the screen */

int MaxColors; /* The maximum # of colors available */

int ErrorCode; /* Reports any graphics errors */

struct palettetype palette; /* Used to read palette info */

void Initialize (void)

{

int xasp, yasp; /* Used to read the aspect ratio*/

GraphDriver = DETECT; /* Request auto-detection */

initgraph (&GraphDriver, &GraphMode, "");

ErrorCode = graphresult (); /* Read result of initialization*/

if (ErrorCode != grOk){ /* Error occured during init */

printf (" Graphics System Error: %s\n", grapherrormsg (ErrorCode));

exit (1);

}

getpalette (&palette); /* Read the palette from board */

MaxColors = getmaxcolor () + 1; /* Read maximum number of colors*/

MaxX = getmaxx ();

MaxY = getmaxy (); /* Read size of screen */

getaspectratio (&xasp, &yasp); /* read the hardware aspect */

AspectRatio = (double)xasp / (double)yasp; /* Get correction factor */

}

int main ()

{

Initialize ();

CTrManager M;

M.LoadData ();

M.BigAngleFilter ();

M.TestMaxMinAngle ();

M.TestMaxMinIntersection ();

M.RenderAll ();

getch ();

M.UnloadData ();

closegraph ();

return 0;

}


Подобные документы

  • Концепції об'єктно-орієнтованого програмування. Методи створення класів. Доступ до методів базового класу. Структура даних, функції. Розробка додатку на основі діалогових вікон, програми меню. Засоби розробки програмного забезпечення мовами Java та С++.

    курсовая работа [502,5 K], добавлен 01.04.2016

  • Аналіз сучасного стану технологій програмування. Засоби реалізації об'єктів в мові C++, структура даних і функцій. Розробка програмного продукту - гри "трикутники", з використовуванням моделей, класів і функцій об’єктно-орієнтованого програмування.

    курсовая работа [117,8 K], добавлен 14.03.2013

  • Об’єктно-орієнтоване програмування мовою С++. Основні принципи об’єктно-орієнтованого програмування. Розробка класів з використанням технології візуального програмування. Розробка класу classProgressBar. Базовий клас font. Методи тестування програми.

    курсовая работа [211,3 K], добавлен 19.08.2010

  • Зчитування числової інформації з файлу DATA.txt, аналізування, обробка та виконання графічного відображення. Редагування файлу тексту програми. Метод відображення кнопки з надписом на екрані. Створення нових класів на основі інших, вже створених.

    курсовая работа [196,2 K], добавлен 14.03.2013

  • Програма на мові програмування С++. Аналіз стану технологій програмування та обґрунтування теми. Розробка програми виконання завдання, методу вирішення задачі. Робота з файлами, обробка числової інформації і робота з графікою. Розробка програми меню.

    курсовая работа [41,0 K], добавлен 17.02.2009

  • Розробка програми на мові програмування С++ з використанням об'єктно-орієнтованого програмування. Робота з файлами, графікою, класами, обробка числової інформації. Графічні засоби мови програмування. Алгоритм задачі та допоміжні програмні засоби.

    курсовая работа [102,5 K], добавлен 14.03.2013

  • Редагування за допомогою текстового редактора NotePad вхідного файлу даних. Програмна реалізація основного алгоритму з використанням засобів об'єктно-орієнтованого програмування. Об’ява та опис класів і об'єктів. Розробка допоміжних програмних засобів.

    курсовая работа [69,4 K], добавлен 14.03.2013

  • Прототип об'єктно-орієнтованого програмування. Управління процесом реалізації програми. Розвиток апаратних засобів. Об'єктно-орієнтовані мови програмування. Надійність і експлуатаційні якості програм. Візуальне об’єктна-орієнтовне проектування Delphi.

    контрольная работа [28,9 K], добавлен 18.05.2009

  • Розробка програми для моделювання роботи алгоритму Дейкстри мовою C# з використанням об’єктно-орієнтованих принципів програмування. Алгоритм побудови робочого поля. Програмування графічного інтерфейсу користувача. Тестування програмного забезпечення.

    курсовая работа [991,4 K], добавлен 06.08.2013

  • Розгляд особливостей мови програмування С++: основні можливості, характеристика функцій. Аналіз файлів з вхідними даними. Використання похідних класів як ефективний засіб об’єктно-орієнтованого програмування. Способи роздруківки графічного вирішення.

    курсовая работа [510,9 K], добавлен 14.03.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.