Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

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



НАЦІОНАЛЬНИЙ АВІАЦІЙНИЙ УНІВЕРСИТЕТ

Кафедра комп’ютеризованих систем захисту інформації

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

з дисципліни

„Інформаційні технології”

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

Виконала:

студентка БІ -141 ІКІТ

Миронова Ганна Олександрівна

Керівник

ст.викл. Дубчак О.В.

Київ 2013


НАЦІОНАЛЬНИЙ АВІАЦІЙНИЙ УНІВЕРСИТЕТ

Кафедра комп’ютеризованих систем захисту інформації

ЗАВДАННЯ

на виконання курсової роботи

студентки групи БІ-141 Миронової Ганни Олександрівни

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

Варіант № 19

Термін виконання: 30.01.13 р. – 20.04.13 р.

Завдання видав ст.викл. Дубчак О.В.

«30» січня 2013 р.

Завдання прийняв до виконання ____________________

(підпис студента)

Курсову роботу захищено з оцінкою ________________ «___»04.2012р.


№19. У ромбі (рис.2) задано діагональ d2 та сторона а. Обчислити та вивести всі інші елементи ромба, периметр P, діагональ d1 та площу S.

Тип ліній креслення: суцільна.

Параметри, що передаються функції ПІБ(): символ «+».

Колір тексту/тла: LIGHTBLUE /MAGENTA.

Колір ліній/тла: BROWN/ YELLOW.


Реферат

Ключові слова та словосполучення: програмне середовище BorlandC++, структура алгоритму, вихідні дані, змінна, константа, тип даних, функція користувача, текстовий режим, графічний режим.

Дана пояснювальна записка складається з 21 сторінки, що має у собі вступ, три розділи, висновки. В роботі представлений один малюнок – креслення даної фігури засобами MS Word. Список літератури складається з джерел. Пояснювальна записка має 3 додатки.

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

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



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

Завданнями курсової роботи є провести геометричні розрахунки та накреслити дану фігуру засобами MS Word; провести розрахунки у середовищі MathCAD; створити та декомпозувати блок-схему у програмі MS Visio; у середовищі BorlandC++ написати програмний продукт, який запрошує користувача увести значення двох параметрів ромба, використовуючи отримані дані, знаходить невідомі параметри, виводить їх у вигляді таблиці в текстовому вікні (з заданими кольорами тла та тексту) з використанням функції користувача, у графічному режимі малює задану фігуру з встановленими кольорами ліній та тла, підписує всі параметри фігури, виводить інформацію про виконавця роботи, знаходить час виконання завдання.

Методи дослідження – теоретичний, математичний, аналітичний.

Програмні засоби, що використовуються в курсовій роботі: середовища MS Word, MathCAD, MS Visio, BorlandC++.



Зміст

Розділ 1. 7

Формулювання умови задачі, вихідні дані та креслення геометричної фігури 7

Розрахункові формули та пояснення щодо способу вирішення завдання та хід розв’язання. 7

Розділ 2. Обчислення з поясненнями параметрів заданої фігури для довільних вихідних даних (засобами MathCAD) 9

Розділ 3. 10

Опис програмного продукту. 10

Текст програмного продукту. 15

Висновки. 18

Додатки. 20

Додаток 1. Блок-схема. 20

Додаток 2. Вихідні та обчислені дані 21

Додаток 3. Креслення у графічному режимі 22


Вступ

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

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

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

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

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


Розділ 1

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

Умова задачі: У ромбі (рис.1) задано діагональ d2 та сторону а. Обчислити та вивести всі інші елементи ромба, периметр Р, діагональ d1 та площу S.

Вихідними даними є значення діагоналі d2 та сторони а.

Рис.1

На рисунку 1 зображено креслення заданого ромба АВСD, в якому AB=BC=CD=AD=a, AC=d1, BD=d2.

Розрахункові формули та пояснення щодо способу вирішення завдання та хід розв’язання

Першим кроком у вирішенні задачі стало знаходження кутів ромба. Розглянула трикутник ADС, в якому нам відомі сторона АС (діагональ ромба d2), сторони CD=AD=a (як сторони ромба, а вони, як відомо, є рівними за означеням). Тоді за теоремою косинусів знайшла кут D. Для того, щоб результат відображався у градусах, домножила на 180/ .

Далі знайду кут A. Відомо, що сума двох непротилежних кутів паралелограма дорівнює 180 градусам, тому (2).

Однією з властивостей паралелограма є рівність протилежних кутів, тому ми одразу можемо визначити кути, що лишилися: C=A, B=D.

Після цього я можу знайти іншу діагональ ромба. Для цього пропоную два способи. В основі першого способу лежить теорема косинусів. Тут ми розглядаємо трикутник АВС, в якому відомими є дві сторони, що дорівнюють а, та кут між ними, що дорівнює A. Тоді знайдемо третю сторону, тобто невідому діагональ ромба:

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

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

Далі знайшла периметр (сума всіх сторін) ромба за формулою:

(4).

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

(5) або .

У своїй роботі я використовуватиму першу з цих формул.

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


Розділ 2. Обчислення з поясненнями параметрів заданої фігури для довільних вихідних даних (засобами MathCAD)

Для того, щоб обчислити невідомі параметри ромба у програмі MathCAD, створила файл з розширенням .хmcd.

За допомогою оператора локального присвоювання(:=) задала сторону та другу діагональ, які в дані задачі є константами, присвоївши їм довільні дані. Так, сторона ромба дорівнює 6 одиницям виміру(метри, сантиметри, міліметри), а друга діагональ відповідно 5 одиницям. Ідентифікаторами цих констант обрала а для сторони та d2 для діагоналі.

Всі інші параметри ромба в даній програмі є звичайними змінними, котрим я привласнила значення за допомогою формул та оператора локального присвоювання. Так я задала кут D як змінну з ідентифікатором D, використовуючи формулу (1). Формулу в свою чергу створила за допомогою панелі Калькулятор. Аналогічно кут A з ідентифікатором A задала з використанням формули (2). Кут С та B з однойменними ідентифікаторами задала такими, що дорівнюють вже визначеним змінним A та D відповідно. Далі привласнила значення першій діагоналі ромба за допомогою ідентифікатора d1 та формулу (3). Так само зробила для знаходження периметра фігури(ідентифікатор Р та формула (4)) та площі(ідентифікатор S та формула(5)).

Для того, щоб отримати відповіді на поставлену задачу, поруч з визначеннями змінних ще раз написала їх ідентифікатори та оператор чисельного виводу(=). Таким чином на екрані з’являться значення змінних, тобто програма знайде шукані параметри фігури.

Для зручності користування програмою, за допомогою послідовності команд Вставка/Регион текста додала на аркуш написи «Сторона ромба:», «Діагональ ромба AC», «Кут А в градусах:», «Кут B в градусах:», «Кут C в градусах:», «Кут D в градусах:», «Діагональ ромба BD», «Периметр ромба:», «Площа ромба:» перед привласненням значення відповідним константам або змінним. Зберігла отриманий файл.

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


Розділ 3

Опис програмного продукту

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

На початку створила файл з розширенням .СРР за допомогою послідовності команд File/New. Обов’язковою частиною роботи при створенні програми є підключення заголовних бібліотек, в яких містяться необхідні для виконання завдання функції. Так за допомогою директиви #include я підключила наступні заголовні файли:

· stdio.h. Цей файл призначений для стандартного введення/виведення даних. З даної бібліотеки використовуватиму функції printf та scanf.

· conio.h. Файл для роботи з текстовим екраном. В створеній програмі використовуються такі функції: getch, clrscr, window, cprintf, gotoxy, textbackground, textcolor.

· stdlib.h. Це бібліотека загального призначення для керування пам`ятю, пошуку, сортування та перетворень типів даних. З ней буде використана функція exit.

· math.h. Бібліотека містить математичні функції, серед яких у програмному продукті використані pow,sqrt,acos.

· graphics.h. Файл використовується для роботи з графічним режимом. При створенні даної програми застосовуються initgraph, closegraph, clearviewport, setbkcolor,setcolor,setlinestyle, line, outtextxy.

· time.h. Бібліотека для роботи з часом та датами. З її допомогою використовую функцію clock, спеціальний тип змінних clock_t та макрос CLK_TCK.

· dos.h. Бібліотека має деякі спеціальні функції, з яких в програмі використовується функція delay.

Після цього визначила функцію користувача, якій у тілі програми буде віддаватися відповідний символ, тому записала її наступним чином MHO(char ch). Далі визначила головну функцію main() та відкрила її тіло.

Використовується функція clrscr() для очистки екрану кольором за вмовчанням(тобто чорним). Далі в тілі програми визначаються всі змінні, що надалі будуть використовуватися. Змінним, що відповідають параметрам ромба, надаю тип float, бо вони є речовинними числами (такими, в складі яких є ціла та дробова частина). Ідентифікатори цих змінних у програмі наступні: a – для сторони, d1 – для першої діагоналі, d2 – для другої діагоналі, A, B, C, D відповідно для кутів A, B, C, D, P – для периметра ромба, S – для площі ромба. Далі визначила спеціальні змінні, за допомогою яких програма знаходитиме час виконання завдання. Це змінні start та end, які відповідно є початком та кінцем відліку часу. Вони будуть використовуватися функцією clock(), яка працює з типом даних clock_t, тому цим змінним надаю даний тип.

Далі починаю відлік часу, за який виконується програма. Для цього викликаю функцію, що повертає час, таким чином: start=clock(), тобто змінній start передаю значення функції clock().

Використовую функцію printf() для того, щоб на екрані з’явилося прохання ввести значення сторони ромба. Згідно з синтаксисом даної функції керуючий рядок, тобто в даному речення, котре ми повинні отримати на екрані, записується в лапках. Відмічу, що тут відсутній список аргументів, бо вони не використовуються в керуючому рядку. Тепер користувач у вікні користувача має можливість ввести значення сторони ромба з клавіатури. Після натиснення кнопки Enter користувачем програма зчитує введені дані за допомогою функції scanf(). В ній у керуючому рядку записаний тип даних, що зчитуються, після знаку %. В цій програмі відповідно після % написаний специфікатор формату f, тому що раніше змінна а була задана як число з плаваючою комою. В списку аргументів написано розташування зчитуваних даних, тобто за допомогою амперсанда обчислює адресу змінної (після & пишемо ідентифікатор потрібної нам змінної, в даному випадку а. Аналогічно створила запрошення на введення значення другої діагоналі ромба. Після введення значень користувачем так само, як для сторони, зчитується значення діагоналі d2.

Для правильного виконання завдання треба перевірити умову існування ромба (вона була описана і першому розділі). Для цього в коді програми використала оператор умовного переходу if. Умовами виконання послідовності операторів обрала те, що сторона ромба а повинна бути меншою або дорівнювати другій діагоналі ромба d2, та сторони повинні мати від’ємні значення. Умови перерахувала за допомогою оператора логічного І (||). Тоді при дійсності будь-якої з цих умов виконуватиметься тіло циклу, що складається з двох операторів та відокремлюється фігурними дужками. В тілі циклу записано повідомлення про помилку, що виводиметься на екран через функцію printf() з нового рядка(для цього на початку керуючого рядка написала керуючу послідовність \n). Другим оператором в тілі циклу є оператор безумовного переходу goto, який посилається на мітку m. Цю мітку встановлюю перед запрошеннями на введення значень параметрів ромба з клавіатури. Для того, щоб нові запрошення, виводились з нового рядка, наприкінці керуючого рядка функції printf() у тілі циклу написала керуючу послідовність \n. Тобто якщо користувач введе з клавіатури дані, що задоводьняють умові, на екрані зявиться повідомлення про помилку та прохання ще раз ввести значення параметрів фігури, і користувач зробить ті ж самі дії. Проте існує і альтернативний варіант без використання операторів умовного та безумовного переходів – при створенні програми підключити ще одну бібліотеку з заголовним файлом complex.h, яка працює з комплексними числами.

Якщо ж ця умова не виконується, тобто фігура з заданими параметрами існує, програма буде обчислювати шукані параметри ромба. Спочатку знайшла змінну D, використавши функції бібліотеки math.h у формулі (1). Так замість arсcos у мові С використовується функція acos(x), а функція pow(x,y) визначає число, яке отримуємо при возведенні числа х в степінь у. також використала макрос M_PI, що відповідає значенню числа Пі. Отже, в мові С формула знаходження кута D набула такого вигляду: D=acos((2*pow(a,2)-pow(d2,2))/(2*pow(a,2)))*180/M_PI.

Після цього проргама знайде змінну А, віднявши від 180 значення отриманої змінної D (A=180-D), змінну С (C=A) та змінну В (B=D).

Далі програма обчислює значення змінної d1 з використанням функцій з бібліотеки math.h. Тут крім описаних раніше функцій ще використовується функція sqrt(х) – знаходження квадратного кореня з числа х. Тому формула (3) матиме вигляд: d1=2*sqrt((pow(a,2)-pow((d2/2),2))).

Програма обрахує значення змінних Р та S відповідно так: P=4*a та S=d1*d2/2.

Далі використала функцію delay() з аргументом 1000, що призупинила програму на 1000 мілісекунд.

Після всіх обчислень створюється текстове вікно за допомогою функції window(x,y,x1,y1), де х та у – координати верхнього лівого кута вікна, а х1 та у1 – координати нижнього правого кута. Я обрала координати текстового вікна таким чином, щоб воно не перекривало введені дані у вікні користувача. В даному програмному продукті зручно обрати х=45, у=3, х1=80, у1=25. Далі встановила фон текстового вікна згідно з варіантом – пурпурний. Тому функції textbakground() задала значення 5, замість 5 можна також написати MAGENTA в якості параметра. Колір тексту за варіантом – блакитний, тому параметром функції textcolor() стало число 9 (або слово LIGHTBLUE). Далі програма очищує створене вікно заданим кольором фону за допомогою функції clrscr().

Після цього програма передає керування функції користувача MHO(). Функція користувача оголошується після підключення заголовних файлів всіх потрібних бібліотек. Згідно варіанту параметром, що передається функції, є символ «+». Цей параметр є фактичним. Значення, що повертає функція – строка з символів, тобто значення, що повернеться матиме символьний тип даних. Тому при оголошенні вона буде написана таким чином – char MHO(char ch), а при виклику функції в тілі програми – char МНО(‘+’). Визначення функції користувача та тіло цієї функції знаходиться після закриття тіла головної функції. При визначенні функції користувача вона записується так само, як і при оголошенні, але в цьому випадку не ставиться крапка з комою наприкінці. Після визначення функції користувача відкривається тіло функції користувача. Функцією користувача ми виводи темо межі таблиці, тому для зручності та оптимізації використаємо оператор циклу for. В тілі функції користувача оголошуємо змінну і – лічильник циклу). Я вручну прорахувала кількість символів «+» необхідних для створення таблиці. В моєму випадку необхідно 34 символи. Далі записую цикл, в якому ініціалізуємо і як 0, задаємо умову, що і менше 35, і збільшуємо і на одиницю (++ - інкремент). Отже, доки виконуватиметься цикл, програма повинна друкувати символ «+». Тому в тілі функції користувача пишу наступний оператор – функцію cprintf(), яка використовується для виводу даних в текстовому режимі. В керуючому рядку вказую тип даних, що друкуються після знака % (в цьому випадку друкуються дані символьного типу, тому ставлю специфікатор с). А в списку аргументів написала ідентифікатор змінної, значення якої виводимуться на екран(тут ch, якій значення передається з головної функції). Обов’язково потрібно записати функцію return, що повертатиме значення в головну функцію.

Крім того функцію користувача можна представити по-різному, але в кінцевому випадку вона матиме однаковий вигляд. Наприклад, формальним параметром, який передає головна функція може бути кількість символів або кількість символів та символ. Ще одним варіантом може бути те, що ці параметри будуть визначатися в функції користувача. Крім того функція може мати тип не char, а void, тоді вона не буде повертати значення і не буде в її тілі використовуватися функція return.

Тож в тілі головної функції записала MHO(‘+’) і виконалась функція користувача. Це буде верхня границя таблиці, в якій виводимуться результати. В текстовому вікні функцією виводу є функція cprintf(), тож за її допомогою створила наступний рядок, який виводитиме слово Rezul`tat. Для цього в керуючому рядку функції використовую послідовність \r\n для того, щоб виводимі дані починалися з початку нового рядка у вікні. Ставлю символ «+» як межу таблиці, пишу слово Rezul`tat, додаю пробіли перед та після нього, щоб воно розміщувалося по центру рядка таблиці, додаю ще один символ «+» як межу таблиці і знову використовую \r\n для того, щоб наступні дані виводилися з початку нового рядка. Далі програма виводить на екран чергову межу таблиці через функцію MHO(‘+’). Знову використовую cprintf() для виведення значення сторони ромба. Керуючий рядок так само починається з послідовності \r\n, символу «+», далі напис, який пояснює, що саме виводиться(тут – сторона), потім знову ставиться межа таблиці «+», і далі записується специфікатор формату змінної, що починається зі знака %. Для всіх змінних специфікатором формату обираю 8.3f, бо всі змінні речовинного типу. Такий специфікатор означає, що змінна буде написана з 8 символів 3 з яких знаходитимуться після коми. Після специфікатора формата в керуючому рядку пишу символ «+» та послідовність \r\n. В списку аргументів – змінна а, бо саме її значення відповідає стороні ромба. Після цього аналогічно використовується функції MHO(‘+’) та cprintf(). В останній змінюю тільки текст – пояснення до того, значення якої взмінної виводиться – та аргумент, тобто значення змінної. Це робиться за такої послідовності: після виведення значення сторони ромба на екрані з’являтимуться значення першої діагоналі, другої діагоналі, кутів A,B.C,D (кожний в окремому рядку), периметра та площі фігури. Закінчую таблицю функцією користувача. Таким чином, користувач отримує у текстовому вікні з відповідними кольорами тла та тексту розв’язання завдання у вигляді таблиці.

Після цього зупиняю таймер: end=clock() – це є кінцевим викликом функції clock(), що повертає час. Для того, щоб дізнатися час виконання програми знову користуюся функцією cprintf(), в якій з нового рядка виводжу напис Chas vykonannja roboty та специфікатор формату %4.2f, а як аргумент пишу (end-start)/(CLK_TCK), де CLK_TCK – спеціальний макрос, що визначає кількість годин у секундах. Використала функцію getch() для завершення роботи в текстовому режимі.

Крім того програма повинна малювати заданий ромб. Для цього встановлюю драйвер графічного пристрою. Спочатку за допомогою змінної driver автовизначається найприйнятніший для комп’ютера графічний режим: int driver=DETECT,gmode,errorcode. Використовую функцію initgraph(&driver,&gmode,"C:\\BORLANDC\\BGI"), яка зчитує у пам'ять відповідний драйвер, встановлює відеорежим та визначає маршрут до директорії, де знаходиться потрібний файл. Далі передбачаю та опрацьовую помилки за допомогою функції graphresult(), що повертає код помилки виконання для останньої графічної операції, оператора умовного переходу if, функцій printf(), grapherrormsy(), що повертає рядок з повідомленням про помилку за заданим кодом помилки, getch() та exit(1).

Після підключення драйвера задаю колір тла жовтим функцією setbkcolor(), де в якості аргументу використовується 14 або YELLOW, очищую екран та встановлюю курсор у верхній лівий кут функцією clearviewport(), задаю колір ліній та тексту коричневим функцією setcolor(), де аргумент 6 або BROWN. В функції setlinestyle(SOLID_LINE,1,NORM_WIDTH), встановила, що намальовані лінії повинні бути суцільним(перший аргумент), їх заповнення повинно бути суцільним заданим кольором (другий аргумент), і вони будуть нормальної ширини(третій аргумент).

Після цього починаю малювати ромб за допомогою функції line(x,y,x1,y1), яка малює відрізки, кінцями яких є точки з координатами (х,у) та (х1,у1). Взагалі треба пам’ятати, що в графічному режимі Х- координата збільшується зліва направо від верхнього лівого кута, а Y- координата зверху вниз від лівого верхнього кута. В координатах використовуватиму значення параметрів ромба, помножаючи їх величини в 10 разів, тому що в графічному режимі координати задаються у пікселях. Для цього спочатку вручну розрахувала необхідні координати. Спочатку малюю першу діагональ d2, тобто АС, для якої довільно обрала координати точки А(230,150), а точка С матиме координати (230,150+10* d2), бо вони мають однакові Х-координати, а відстань між ними дорівнює значенню d2. Далі програма малює діагональ BD (d1). Ці дві точки матимуть однакові координати Y, які будуть знаходитися посередині АС та дорівнювати 150+5* d2. Х-координати точок знайшла як відстані від точки перетину діагоналей: для В – 230+5* d1, для D – 230-5*d1. Після цього функцією line зєднала всі чотири точки A,B,C,D.

Далі використала функцію outtextxy(), щоб підписати параметри ромба. Для цього в дужках написала координати позиції, з якої починати виведення інформації на екран, а потім у лапках що саме виводиться на екран. Для того, щоб підписати кути, використала вже знайдені координати точок A,B,C,D, трохи змінивши їх значення для того, щоб точка та підпис не зливалися. Підписи діагоналей розташовувала на рівні чвертей діагоналей та з використанням координат вже заданих або знайдених точок. За допомогою цієї ж функції outtextxy() внизу графічного вікна вивела про виконавця роботи.

Завершила роботу з графічним режимом функцією closegraph() та з самою програмою функціями getch() та return 0.

Текст програмного продукту

#include<stdio.h>

#include<conio.h>

#include<math.h>

#include<graphics.h>

#include<stdlib.h>

#include<dos.h>

#include<time.h>

char MHO(char ch);

main()

{

clrscr();

float a,d1,d2,A,B,C,D,P,S;

clock_t start,end;

start=clock();

m:printf("Vvedit` znachennja storonu romba a=");

scanf("%f",&a);

printf("\nVvedit` znachennja diagonali romba d2=");

scanf("%f",&d2);

if(a<=d2/2||a<=0||d2<=0){printf("\nDanui romb ne isnue.Povtorit` vvedennja!\n");goto m;}

D=acos((2*pow(a,2)-pow(d2,2))/(2*pow(a,2)))*180/M_PI;

A=180-D;

C=A;

B=D;

d1=2*sqrt((pow(a,2)-pow((d2/2),2)));

P=4*a;

S=d1*d2/2;

window(45,3,80,25);

textbackground(5);

textcolor(9);

clrscr();

delay(1000);

MHO('+');

cprintf("\r\n+ Rezul`tat +\n\r");

MHO('+');

cprintf("\r\n+ Storona romba +%8.3f+\n\r",a);

MHO('+');

cprintf("\r\n+ Persha diagonal` romba +%8.3f+\n\r",d1);

MHO('+');

cprintf("\r\n+ Druga diagonal` romba +%8.3f+\n\r",d2);

MHO('+');

cprintf("\r\n+ Kut A +%8.3f+\n\r",A);

MHO('+');

cprintf("\r\n+ Kut B +%8.3f+\n\r",B);

MHO('+');

cprintf("\r\n+ Kut C +%8.3f+\n\r",C);

MHO('+');

cprintf("\r\n+ Kut D +%8.3f+\n\r",D);

MHO('+');

cprintf("\r\n+ Perymetr romba +%8.3f+\n\r",P);

MHO('+');

cprintf("\r\n+ Plosha romba +%8.3f+\n\r",S);

MHO('+');

end=clock();

cprintf("\r\nChas vykonannja roboty: %4.2f sekynd",(end-start)/(CLK_TCK));

getch();

int driver=DETECT,gmode,errorcode;

initgraph(&driver,&gmode,"C:\\BORLANDC\\BGI");

errorcode=graphresult();

if(errorcode!=grOk)

{printf("Graphics error:%s\n",grapherrormsg(errorcode));

printf("press any key!");

getch();

exit(1);}

setbkcolor(14);

clearviewport();

setcolor(6);

setlinestyle(SOLID_LINE,1,NORM_WIDTH);

line(230,150,230,150+10*d2);

line(230-5*d1,150+5*d2,230+5*d1,150+5*d2);

line(230-5*d1,150+5*d2,230,150);

line(230,150,230+5*d1,150+5*d2);

line(230+5*d1,150+5*d2,230,150+10*d2);

line(230,150+10*d2,230-5*d1,150+5*d2);

outtextxy(233,150+10*d2/4,"d2");

outtextxy(230-10*d1/4,140+10*d2/2,"d1");

outtextxy(220-5*d1/2,145+5*d2/2,"a");

outtextxy(230,140,"A");

outtextxy(233+5*d1,150+5*d2,"B");

outtextxy(230,155+10*d2,"C");

outtextxy(225-5*d1,150+5*d2,"D");

outtextxy(170,410,"Vykonala studentka grupy 141 ICIT Mironova Hanna");

outtextxy(170,430,"Variant 19");

getch();

closegraph();

return 0;}

char MHO(char ch)

{int i;

for(i=0;i<35;i++)cprintf("%c",ch);return 0;}


Висновки

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

Робота є актуальною та перспективною, може використовуватися учнями, вчителями на уроках математики, інформатики.

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

Тож, виконуючи завдання курсової роботи, я поліпшила свої навички проведення розрахунків в програмі MathCAD, роботи в MS Word; поглибила знання у сфері алгоритмізації та декомпозиції алгоритмів (MS Visio). Також покращила вміння розробляти програмний продукт засобами мови С у середовищі BorlandC++ з підключенням стандартних та спеціальних бібліотек, використанням функції користувача, текстового та графічного режимів.


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

1. Керниган Б., Ритчи Д. Язык программирования Си.: Пер. с англ. - М.: Издательский дом «Вильямс», 2007. -304 с.:ил.- Парал.тит.англ

2. Березин Б.И., Березин С.Б. Начальный курс С и С++. – М.: Диалог-Мифи, 2003. -288 с.

3. Лекці з дисципліни «Інформаційні технології», викладач Дубчак О.В, 2013 р.


Додатки

Додаток 1. Блок-схема


Додаток 2. Вихідні та обчислені дані


Додаток 3. Креслення у графічному режимі


Дата добавления: 2015-10-21; просмотров: 21 | Нарушение авторских прав




<== предыдущая лекция | следующая лекция ==>
 | Коробка КП-0 для скрытой под роз. И выкл.

mybiblioteka.su - 2015-2024 год. (0.048 сек.)