Курсовая работа по предмету "Программирование, компьютеры и кибернетика, ИТ технологии"


Програмування мовою С++ з використанням об’єктно-орієнтованого програмування



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

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

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

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

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

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

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

З дисципліни «Програмування» за спеціальністю

«Компютерні системи і мережі»

08-23.П.74.01.00.000.ПЗ

Керівник: курсової роботи

Ст. викладач каф. ОТ

Черняк О.І.

__________________

(підпис)

«___»_________ 2008 р.

Розробив

Ст.гр. 2КІ-07

____________ Черненко Ю.

(підпис)

Вінниця ВНТУ 2008 р.

Анотація

В даній курсовій роботі була виконана розробка програми на мові програмування С++ з використанням обєктно-орієнтованого програмування, яка включала в себе роботу з файлами, класами, обробку числової інформації і роботу з графікою.

Зміст

Вступ

1. Аналіз стану технологій програмування та обґрунтування теми

2. Розробка програми виконання завдання

2.1. Розробка методу вирішення задачі

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

3. Розробка програми меню

4. Розробка та виконання тестового прикладу

5. Інструкція користувача

Висновки

Перелік посилань .

Додатки

Вступ

Мова програмування Сi була розроблена в 1972 р. Деннисом Рiтчi, який є одним з авторів операцiйноi системи UNIX. Мова програмування Сi пізніше була використана для програмування цiеi системи, а також багатої бібліотеки обслуговуючих програм, оскільки, являлася універсальною мовою загального призначення, мова Сi зручна для програмування системних задач. Поява мікрокомпютерів закріпила позицii мови Сi. Було створено близько 30 його нових компіляторів, а після проведення Американським національним інститутом стандартів (American National Standards Institute) робiт по стандартизацii в області програмування почали розроблятися компілятори, що вiдповiдали опублікованому весною 1986 р. проекту стандарту.

Першим компілятором по стандарту ANSI являлась система Турбо Сi версii 1.0 фiрми Borland International. Ця система, що складається з компілятора мови Сi, повязаного з ним редактора, компоновщика i бібліотек, забезпечила користувачам зручну інтегровану операційну оболонку, а також суттєво полегшувала професійне програмування, в якому визначальними параметрами є висока швидкість компiляцii, висока якість згенерованого коду та невеликий обєм оперативної память. Мова С серед сучасних мов програмування є однією iз найбільш поширених. Вона універсальна, але найбільш ефективне її використання в задачах системного програмування - розробки трансляторів, операційних систем, інструментальних засобів. Мова С добре зарекомендувала себе ефективністю, лаконічністю запису алгоритмів, логічною стрункістю програм. У багатьох випадках програми, написані на мові С, можна порівняти по швидкості з програмами, написаними на мові Асемблера, при цьому вони більш наглядні i прості у супроводі.

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

-в мові С реалізовані окремі операцii низького рівня (а саме операцii над бітами). Окремі з таких операцій напряму вiдповiдають машинним командам;

- мова С підтримує механізм показчикiв на змiннi i функцii;

-базовi типи даних мови С відображають тi ж обєкти, з якими потрібно мати справу програмі на мові Асемблера,- байти, машинні слова, символи, строки;

- як в нiякiй iншiй мові програмування високого рівня в мові С накладаються лише незначні обмеження на перетворення типів даних;

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

1. Аналіз сучасного стану технологій програмування та обґрунтування теми

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

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

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

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

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

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

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

Всі мови обєктна орієнтованого програмування (ООП), включаючи С++, основані на трьох основних концепціях, які називаються: інкапсуляція, поліморфізм і наслідування.

Характеристики обєктів

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

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

Абстракція

Ціль обєктно-орієнтованого програмування полягає в тому, щоб побачити в задачі абстракції обєктів реального світу. Що за реальні обєкти малися на увазі? Буквально будь-які, аби вони давали представлення про функціонування програм. Ці обєкти можуть бути матеріальними -- ракети, кулінарні книги, інструменти. Або вони можуть бути ролями -- сторож, батько, художник. Вони можуть бути подіями -- недостача памяті, розпродаж, закривання дверей. Тобто усе, що дає поняття про те, що в дійсності представляє із себе обєкт.

Інкапсуляція

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

Модульність

Інкапсуляція дозволяє сховати від кінцевого користувача деталі реалізації і зробити систему менш складною і більш зрозумілою. Концепція модульності йде далі. Тепер, коли обєкти визначені і непотрібні подробиці заховані, потрібно згрупувати обєкти в логічні модулі, що поєднують взаємозалежні обєкти і класи, а іншим модулям нехай будуть доступні тільки ті деталі інтерфейсу, що абсолютно необхідні. Інтерфейсні частини знаходяться у файлах заголовків (за традицією вони мають розширення .h чи .hpp). При цьому деталі реалізації, що не представляють інтересу для інших модулів, залишаться у файлах типу .с, .сс, .ср чи .срр. У чому переваги такого підходу?

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

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

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

Ієрархія

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

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

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

Поліморфізм

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

Огляд аналізу і проектування

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

З обєктно-орієнтованого аналізу, як правило, починається цикл розробки; ми розглядаємо задачу з погляду класів і обєктів.

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

Обєктно-орієнтоване програмування полягає власне у втіленні в життя наших класів і обєктів (використовуючи, у даному випадку, C++).

Темі обєктно-орієнтованого аналізу і проектування присвячено чимало чудових глибоких праць: але практично всі автори -- як теоретики, так і практики-- згодні з думкою батька-засновника C++ Бъярна Страуструпа (Bjarne Stroustrop), який стверджує, що досконалих правил ідентифікації обєктів проблемної області не буває. Експериментування, навчання на своїх успіхах і своїх помилках -- це найкраще правило.

Методи аналізу

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

Аналіз поведінки

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

Аналіз області застосування

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

Аналіз "з кінця"

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

Структурний аналіз

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

Який би аналітичний підхід до проблеми не застосовувався, завжди потрібно памятати, що ж ми шукаємо. Ключові характеристики обєктів -- це абстракція, інкапсуляція, модульність і ієрархія. Коли ми окреслили обєкти -- будь-яким доступним нам методом -- почнемо з того, що постараємося зрозуміти, яка інформація абсолютно необхідна взаємодіючим класам (інкапсуляція). Розберемося, які класи взаємозалежні, а які ні (модульність). І нарешті подивимося, які класи мають схожі характеристики і функціонування (ієрархія). Поки ми перебуваємо в стадії аналізу і проектування, ми вільні як завгодно комбінувати обєкти, розділяти їх і так далі. Коли ж почнеться реалізація, повертатися буде вже занадто пізно. Давайте експериментувати, поки є можливість!

Проектування

Як уже згадувалося, обєктно-орієнтовані аналіз і проектування -- дуже близькі родичі. Коли задача проаналізована, залишається насправді тільки уточнити деталі реалізації. Тут самий час зосередитися на взаємозвязках між обєктами і модулями. Роздивитися типи спадкування між обєктами, визначити необхідні типи повідомлень, число параметрів і так далі. Існує ряд систем позначення для відтворення проекту на папері. Гарне документування проекту може істотно полегшити його втілення в життя.

Вигоди

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

Проект повинен

* Грамотно використовувати обєктно-орієнтовані конструкції C++. Широко використовуйте класи і наслідування.

* Створювати по можливості самодостатні класи -- вони будуть гарними кандидатами на повторне використання.

* Бути зрозумілим. Найбільша вигода обєктно-орієнтованого проектування -- в представленні проблеми в легкодоступному, тим хто розуміє, вигляді.

Захоплення ресурсів при ініціалізації

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

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

2. Розробка програми виконання завдання

2.1. Розробка методу вирішення задачі

Нехай а, в, с, d - сторони трикутника.

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

Запишемо рівняння прямої через 2-ві точки:

Y0=Y2-Y1;

X0=X2-X1;

X*Y0-X1*Y0 = X0*Y-X0Y1

X*Y0- X0*Y = X1*Y0 -X0Y1

X1*Y0 -X0Y1=Z

(ми отримали рівняння прямих)

X11*Y01 -X01Y11=W;

Знайдемо розвязок даної системи рівнянь

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

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

В програмі TRIK.H описаний власний клас Point. В цьому класі зберігаються всі відомості про чотирикутники. В класі описані слідуючи члени:

int x;- координати Х точки.

int y;- координати У точки.

Також в даному класі описані слідуючи методи:

void drow(int col);- виводить на екран точку вказаним кольором.

class Point

{

int x, y;

public:

Point(){}

Point(int _x, int _y) { x=_x; y=_y; }

int getx(){ return x; }

int gety(){ return y; }

void draw(int color) { setcolor(color); circle(x, y, 3); }

};

3. Розробка програми меню

class MenuItem // головний клас опису кнопок

{

int x1;

int y1;

int x2;

int y2;

char str[80];

public:

void setParam(int xx1,int yy1,int xx2,int yy2,char *sstr) // введення координат кнопок

{

x1=xx1;

y1=yy1;

x2=xx2;

y2=yy2;

strcpy(str,sstr); // копіює назву меню

};

void showAct(void); // показує кнопку в момент натиску

void showPas(void); // показує кнопку в інший момент

void About(void); // показує кнопку About

void Run(int); // показує кнопку Run

};

/***************************************************/

class Menu // клас меню для керування кнопок

{

MenuItem mits[5]; // масив кнопок

int nomAct;

int oldNomAct;

void onLeft(void); // функція для руху кнопки вліво

void onRight(void); // функція для руху кнопки вправо

void onEnter(void); // функція для відкриття кнопки

void show(void);

void show1(void);

public:

Menu(int xx,int yy);

void getMessage(int msg); // яка кнопка вибрана

};

4. Розробка та виконання тестового прикладу

Тексти вхідних файлових даних

4.1 Текст файлу rect.txt

wer

Point 1: x= 0; y= 0;

Point 2: x= 0; y= 100;

Point 3: x= 100; y= 0;

Point 4: x= 100; y= 100;

Point 5: x= 32; y= 206;

Point 5: x= 32; y= 20;

Point 13: x= 35; y= 79;

4.2 Текст файлу About.dat

Vukonav:

Chernenko Yuriy "2KI - 07"

4.3 Текст файлу MENUDATA.TXT

About

Edit File

Edit Program

Run

Exit

5. Інструкція користувача

Запуск програми виконується через файл MENU.EXE .

Відкривається меню програми. При натиснення на кнопку About , користувач получає інформацію про розробника програми. Кнопки Edit File та Edit Program дозволяє редагувати текст вхідних даних та саму програму відповідно. При натисканні на кнопку Run виконується програма . Кожна наступна дія в програмі виконується після натисканні на клавішу клавіатури. Кнопка Exit дозволяє користувачу вийти з програми.

Висновки

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

Перелік посилань

В.В. Подбєльский, С.С. Фомін “Програмування на мові Сі”

М. Уєйт, С. Прата, Д. Мартін “Мова Сі”

П. Кіммел “Borland C++ 5”

Джесс Ліберті “Освой самостоятельно С++ за 21день”

Гіберт Шілдт “Язык С для проффесионалов ”

Додатки

Додаток А.

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

Текст програми

#include <stdio.h>

#include <conio.h>

#include <graphics.h>

#include <math.h>

class Point

{

int x, y;

public:

Point(){}

Point(int _x, int _y) { x=_x; y=_y; }

int getx(){ return x; }

int gety(){ return y; }

void draw(int color) { setcolor(color); circle(x, y, 3); }

};

long sd(Point p1, Point p2, Point p3)

{

return ((long)(p3.getx()-p1.getx())*(long)(p2.gety()-p1.gety())-(long)(p2.getx()-p1.getx())*(long)(p3.gety()-p1.gety()));

}

int Peretyn(Point p1, Point p2, Point p3, Point p4)

{

if (sd(p1, p2, p3)*sd(p1, p2, p4)<=0 && sd(p3, p4, p1)*sd(p3, p4, p2)<=0) return 1;

return 0;

}

class Polygon

{

Point p1, p2, p3, p4;

long s;

public:

Polygon(){ s = 0; }

Polygon(Point _p1, Point _p2, Point _p3, Point _p4)

{

p1=_p1; p2=_p2; p3=_p3; p4=_p4; s=0;

Point t;

if (Peretyn(p1, p2, p3, p4))

{

t=p2; p2=p3; p3=t;

}

else

if (Peretyn(p2, p3, p4, p1))

{

t=p1; p1=p2; p2=t;

}

}

void Calc()

{

s+=(long)(p1.getx()-p2.getx())*(long)(p1.gety()+p2.gety());

s+=(long)(p2.getx()-p3.getx())*(long)(p2.gety()+p3.gety());

s+=(long)(p3.getx()-p4.getx())*(long)(p3.gety()+p4.gety());

s+=(long)(p4.getx()-p1.getx())*(long)(p4.gety()+p1.gety());

s=labs(s)/2;

}

long gets() { return s; }

void sets(long _s) { s=_s; }

void draw(int color)

{

setcolor(color);

moveto(p4.getx(), p4.gety());

lineto(p1.getx(), p1.gety());

lineto(p2.getx(), p2.gety());

lineto(p3.getx(), p3.gety());

lineto(p4.getx(), p4.gety());

}

};

float Angle(Point p1, Point p2)

{

long dx = (p2.getx()-p1.getx());

long dy = (p2.gety()-p1.gety());

if (dx==0 && dy==0) return 0;

float res = float(dx*dx)/(float(dx*dx+dy*dy));

if (dx<0) res=-res;

return res;

}

int main()

{

clrscr();

FILE *f=fopen("rect1.txt", "r");

int i, j, n;

char s[200];

fgets(s, 200, f);

for(n=0;!feof(f);++n) fgets(s, 200, f);

rewind(f);

Point* p=new Point[n];

fgets(s, 200, f);

for(i=0; i<n; i++)

{

int x, y;

fscanf(f, "%s%s%s%d%s%s%d%s", s, s, s, &x, s, s, &y, s);

p[i]=Point(x, y);

if (x<p[0].getx() || (x==p[0].getx() && y<p[0].gety()))

{

Point t=p[0]; p[0]=p[i]; p[i]=t;

}

}

Polygon test(Point(10, 0), Point(10, 1), Point(9, 1), Point(9, 2));

for(i=1; i<n; i++)

{

float An = Angle(p[0], p[i]);

int nom = i;

for(j=i+1; j<n; j++)

{

float an = Angle(p[0], p[j]);

if (an<An)

{

An = an; nom = j;

}

}

Point t = p[i]; p[i]=p[nom]; p[nom]=t;

}

int gd=DETECT, gm;

initgraph(&gd, &gm, "e: cgi");

if (graphresult()!=grOk)

{

printf("ERROR!n");

return 1;

}

setcolor(GREEN);

for(i=0; i<n; i++)

p[i].draw(GREEN);

int i1, i2, i3, i4;

Polygon pmin, pmax; pmin.sets(1000000000);

for(i1=0; i1<n; i1++)

for(i2=i1+1; i2<n; i2++)

for(i3=i2+1; i3<n; i3++)

for(i4=i3+1; i4<n; i4++)

{

if (i1==40 && i2==43 && i3==47 && i4==49)

{

i2=i2;

}

Polygon pp = Polygon(p[i1], p[i2], p[i3], p[i4]);

pp.Calc();

if (pp.gets()>pmax.gets()) pmax=pp;

if (pp.gets()<pmin.gets())

pmin=pp;

}

pmin.draw(RED);

pmax.draw(YELLOW);

getch();

closegraph();

}

Додаток Б.

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

Текст програми меню

#include<stdio.h>

#include<conio.h>

#include<iostream.h>

#include<graphics.h>

#include<string.h>

#include<process.h>

#include <stdlib.h>

#include <math.h>

#include <dir.h>

#include "clases.h"

#define LEFT 75

#define RIGHT 77

#define ENTER 13

char bc_path[255]="e: cBIN c.exe";

char bc_path1[255]="e: cBIN";

int findfile(void);

void f_file(char *fname);

void generateNewInfile(void);

/**********************************************/

class MenuItem

{

int x1;

int y1;

int x2;

int y2;

char str[80];

public:

void setParam(int xx1,int yy1,int xx2,int yy2,char *sstr)

{

x1=xx1;

y1=yy1;

x2=xx2;

y2=yy2;

strcpy(str,sstr);

};

void showAct(void);

void showPas(void);

void About(void);

void Run(int);

};

void MenuItem::showPas(void)

{

setviewport(x1,y1,x2,y2,1);

setfillstyle(1,0);

bar(1,1,x2,15);

setfillstyle(1,8);

bar(1,1,x2-1,14);

setfillstyle(1,15);

bar(0,0,x2-2,13);

setfillstyle(1,7);

bar(1,1,x2-2,13);

setcolor(15);

outtextxy(6,4,str);

setcolor(0);

outtextxy(5,3,str);

};

void MenuItem::showAct(void)

{

setviewport(x1,y1,x2,y2,1);

setfillstyle(1,0);

bar(0,0,x2,15);

setfillstyle(1,9);

bar(2,3,x2,14);

setcolor(12);

outtextxy(7,5,str);

setcolor(10);

outtextxy(6,4,str);

};

void MenuItem::About(void)

{

char str[80];

window(10,5,70,15);

FILE*f1=fopen("About.dat","r");

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

{

fgets(str,80,f1);

gotoxy(1,i+1);

printf("%s",str);

i++;

};

getch();

};

void MenuItem::Run(int activ)

{

switch (activ) {

case 0: About();

break;

case 1: f_file("input.txt");

break;

case 2: f_file("menu.cpp");

break;

case 3: int res = spawnl(P_WAIT,"circles.exe",NULL);

break;

case 4: closegraph();

exit(0);

break;

};

};

/***************************************************/

class Menu

{

MenuItem mits[5];

int nomAct;

int oldNomAct;

void onLeft(void);

void onRight(void);

void onEnter(void);

void show(void);

void show1(void);

public:

Menu(int xx,int yy);

void getMessage(int msg);

};

Menu::Menu(int xx,int yy)

{

int x,y;

x=xx;

y=yy;

char str[80];

FILE *f;

f=fopen("menudata.txt","r");

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

{

fgets(str,80,f);

mits[i].setParam(x,y,x+strlen(str)*8+1,y+15,str);

x+=strlen(str)*8+3;

};

nomAct=0;

oldNomAct=1;

show();

};

void Menu::getMessage(int msg)

{

switch(msg)

{

case LEFT:

onLeft();

show1();

break;

case RIGHT:

onRight();

show1();

break;

case ENTER:

onEnter();

show1();

};

};

void Menu::onLeft(void)

{

oldNomAct=nomAct;

nomAct=(nomAct==0)?4:nomAct-1;

};

void Menu::onRight(void)

{

oldNomAct=nomAct;

nomAct=(nomAct==4)?0:nomAct+1;

};

void Menu::onEnter(void)

{

mits[nomAct].Run(nomAct);

};

void Menu::show(void)

{

int gdr=DETECT,gm;

initgraph(&gdr,&gm,"e: cgi");

setfillstyle(1,0);

bar(0,0,639,479);

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

if(i==nomAct)

mits[i].showAct();

else

mits[i].showPas();

};

void Menu::show1(void)

{

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

if(i==nomAct)

mits[i].showAct();

else

mits[i].showPas();

};

//**********************************************

main()

{

Menu mnu(40,40);

while(1)

mnu.getMessage(getch());

}

int findfile()

{

struct ffblk ffblk;

if(findfirst(bc_path,&ffblk,0)==0) return 1;

for(;;)

{

cleardevice();

gotoxy(1,1);

cout << "nЌҐ¬®¦г §­ ©вЁ । Єв®а д ©«iў.";

cout << "n‚ўҐ¤iвм и«пе в i¬п д ©«г вЁЇг bc.exe";

cout << "nЌ ЇаЁЄ« ¤ C:cinc.exe Ў® exit ¤«п ўЁе®¤г.n";

cin >> bc_path;

if(bc_path[0]==e&&bc_path[1]==x)

{

cleardevice();

return 0;

}

if(findfirst(bc_path,&ffblk,0)==0)

{

cleardevice();

return 1;

}

else

{

cout << "n” ©«n"<<bc_path<<"n­Ґ§­ ©¤Ґ­® Ў® ­ҐЄ®а­Єв­Ґ i¬п д ©«гn";

getch();

}

}

}

void f_file(char *fname)

{

if(findfile()==0) return;

char cmd[250];

strcpy(cmd, "notepad ");

strcat(cmd,bc_path1);

strcat(cmd,fname);

system(cmd);

}




Не сдавайте скачаную работу преподавателю!
Данную курсовую работу Вы можете использовать для написания своего курсового проекта.

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем курсовую работу самостоятельно:
! Как писать курсовую работу Практические советы по написанию семестровых и курсовых работ.
! Схема написания курсовой Из каких частей состоит курсовик. С чего начать и как правильно закончить работу.
! Формулировка проблемы Описываем цель курсовой, что анализируем, разрабатываем, какого результата хотим добиться.
! План курсовой работы Нумерованным списком описывается порядок и структура будующей работы.
! Введение курсовой работы Что пишется в введении, какой объем вводной части?
! Задачи курсовой работы Правильно начинать любую работу с постановки задач, описания того что необходимо сделать.
! Источники информации Какими источниками следует пользоваться. Почему не стоит доверять бесплатно скачанным работа.
! Заключение курсовой работы Подведение итогов проведенных мероприятий, достигнута ли цель, решена ли проблема.
! Оригинальность текстов Каким образом можно повысить оригинальность текстов чтобы пройти проверку антиплагиатом.
! Оформление курсовика Требования и методические рекомендации по оформлению работы по ГОСТ.

Читайте также:
Разновидности курсовых Какие курсовые бывают в чем их особенности и принципиальные отличия.
Отличие курсового проекта от работы Чем принципиально отличается по структуре и подходу разработка курсового проекта.
Типичные недостатки На что чаще всего обращают внимание преподаватели и какие ошибки допускают студенты.
Защита курсовой работы Как подготовиться к защите курсовой работы и как ее провести.
Доклад на защиту Как подготовить доклад чтобы он был не скучным, интересным и информативным для преподавателя.
Оценка курсовой работы Каким образом преподаватели оценивают качества подготовленного курсовика.

Сейчас смотрят :

Курсовая работа Проектирование подсистем оперативного управления производством
Курсовая работа Производительность труда и пути ее повышения
Курсовая работа Рынок труда и политика занятости
Курсовая работа Интегрированные уроки как одно из средств повышения активности учащихся на уроках в старших классах
Курсовая работа Финансовые услуги коммерческих банков
Курсовая работа Вирусы и природа их происхождения
Курсовая работа Деятельность органа федерального казначейства и его территориальных органов
Курсовая работа ПРОКУРАТУРА РОССИЙСКОЙ ФЕДЕРАЦИИ
Курсовая работа Организация работы вагоносборочного участка ремонтного депо пассажирских вагонов
Курсовая работа Конкуренция и ее роль в рыночной экономике
Курсовая работа Роль государственного сектора в экономике
Курсовая работа Педагогический рисунок
Курсовая работа Устав муниципального образования
Курсовая работа Методы и приемы словарной работы на уроках русского языка в начальной школе.
Курсовая работа Технология обслуживания пассажиров в аэропортах