Міністерство освіти і науки України
Національний університет "Львівська політехніка"
Кафедра "Інформаційні системи та мережі "
К У Р С О В А Р О Б О Т А
з дисципліни "Проблемно-орієнтовані мови програмування"
на тему:
" Виведення графіків функцій у декартовій(двовимірній, трьовимірній) та полярній системах координат."
Зміст
Вступ…………………………………………………………………………...3
1.Формулювання задачі………………………………………….…………...4
2.Методи та засоби розв’язування задачі……………………………..…….5
3.Алгоритми розв'язування задачі……………………………...…………...13
4.Опис програми на мові C/C++…………………………………………….20
5.Технологія програмування, виконання та відлагодження програми…...22
6.Інструкція користувачеві……………………………………………….....24
7.Аналіз результатів комп'ютерної реалізації програми..…………….….28
Висновки……………………………………………………………………….30
Список використаної літератури……………………………………………..31
Додаток 1………………………………………………………………………32
Вступ
Метою виконання курсової роботи є закріплення теоретичних знань та практичних навичок програмування, набутих при вивченні дисциплін "Основи програмування" та “Проблемно орієнтовані мови програмування”.
В ході виконання курсової роботи студенти повинні навчитися самостійно працювати з літературою, розробляти алгоритми, здійснювати їх програмну реалізацію та від лагодження на сучасних обчислювальних системах.
Завдання даної курсової роботи охоплює практично весь курс дисципліни «Проблемно-орієнтовані мови програмування», включаючи в себе основні його розділи. Програма охоплює всі ці розділи і вимагає виявити знання та навички, отримані при їх вивченні. При розробці програми студент набуває навичок практичного програмування, створюючи продукт, який має практичну цінність як прикладна програма, зручний інтерфейс з керуванням за допомогою клавіатури та миші, та інші елементи та особливості, притаманні професійним програмам, що пишуться для користувача, не знайомого з програмуванням.
1. Формулювання задачі.
Завдання даної курсової роботи полягає у створенні програми для виведення графіків у трьох основних системах координат.
Необхідно створити програму, яка б мала інтерфейс з керуванням за допомогою клавіатури та миші, була б зручна у використанні.
Я вибрав типовий графічний інтерфейс в якому головні пункти меню є кнопками і нажатті на них відкривається підменю. За допомогою першого пункту головного меню можна зберегти або відкрити графік а також вийти з програми. Другий пункт предназначений для налаштування програми: для введення функції, вибору системи координат, вибору масштабу.
Третій пункт – це довідка.
При виборі системи координат у змінну записується її номер і після чого викликається функція, яка відповідно до цього номеру виводить розмітку.
Далі вводиться функція, як рядок символів. Після введення цей рядок перетворюється у зворотній польський запис, який є досить зручним для обчислення. Після перетворення рядка символів в циклі для кожного значення змінної, яке відповідає положенню точки на екрані, обчислюється значення виразу і виводиться один піксель. Після виведення графіка його можна зберегти, для подальшого використання. Для цього викликається функція, яка перетворює кожен і записує його у файл формату BMP.
Основною хитрістю цього меню є рисування чорних і білих ліній по периметру кнопки, що створює ефект об’ємності при наведенні і нажиманні на неї.
2. Методи та засоби розв’язування задачі.
Зворотний польський запис:
Звичною формою виразів є інфіксна, коли знак бінарної операції записується між позначеннями операндів цієї операції, наприклад, a+b. Розглянемо запис знаків операцій після позначень операндів, тобто постфіксний запис, наприклад, ab+. Такий запис має також назву зворотного польського, оскільки його запропонував польський логік Ян Лукасевич. Далі словосполучення "зворотний польський запис" позначатимемо ЗПЗ.
Опишемо відповідність між звичними інфіксними виразами та їх ЗПЗ. Нехай E, E1, E2 позначають вирази в інфіксній формі, <op1>, <op2> – знаки унарної та бінарної операцій, <opf> – ім'я функції. Виразу E залежно від його вигляду відповідає ЗПЗ L(E) згідно з правилами:
E
L(E)
стала чи ім'я змінної
E
'(' E1 ')'
L(E1)
<op1>E1
L(E1) <op1>
E1<op2>E2
L(E1) L(E2) <op2>
<opf>'('E1')'
L(E1) <opf>
Як бачимо, ці правила рекурсивні, і ЗПЗ складніших виразів описуються за допомогою ЗПЗ їх простіших підвиразів.
У наступних прикладах покажемо застосування наведених правил з урахуванням старшинства та властивості лівостороннього зв'язування операцій :
L( b * c ) = b c * ;
L( -(-a) ) = L( (-a)) - = a--;
L( a + b * c ) = L(a) L(b*c) + = a b c * + ;
L( a + b - c ) = L( a + b ) L( c ) - = a b + c - ;
L( 1-sin( a+b ) ) = L(1) L( sin( a+b ) ) - = 1 L( a+b ) sin - =1 a b + sin - .
Вирази зі знаками унарних операцій далі не розглядаються.
2. Алгоритм побудови ЗПЗ.
Вираз є послідовністю символів – цифр, букв та інших знаків. Але вони утворюють лексичні одиниці, або лексеми, чотирьох різновидів: сталі, імена (позначення функцій), знаки операцій та дужки. Будемо дивитися на вираз саме як на послідовність лексем, які ми одержуємо послідовним читанням виразу зліва направо.
Розглянемо докладніше побудову вихідної послідовності лексем L(E) за лексемами виразу E.
З правил побудови L(E) випливає, що порядок елементарних позначень операндів (сталих чи імен змінних) у виразах E і L(E) однаковий, тому сталі й імена змінних можна одразу записувати у вихідну послідовність.
Порядок знаків операцій змінюється: у вхідному виразі вигляду E1 op2 E2 знак op2 передує знакам операцій виразу E2, а у вихідному виразі L(E1) L(E2) op2 – навпаки. Тому знак op2 треба запам'ятати, видати L(E2), а після нього – op2. Знаки операцій у виразах E1 та E2 потрібно так само зберігати й видавати після ЗПЗ виразів, що позначають операнди цих операцій. Таке змінювання порядку знаків досягається за використання магазина, або стека; знаки операцій надходять у нього й вилучаються у вихідний вираз за принципом "останнім увійшов – першим вийшов" ("Last In – First Out", або LIFO).
На порядок знаків у вихідному виразі впливає їх старшинство, або пріоритет:
L( a + b * c ) = a b c * + ; L( a + b - c ) = a b + c - .
Операція '*' старша за '+', тому в першому виразі операція '+' застосовується до значень a та b*c. У другому виразі старшинство '+' та '-' однакове, операції мають властивість лівостороннього зв'язування, тому '+' застосовується до a і b, а '-' – до a+b і c.
Отже, коли у вхідній послідовності читається знак операції op2, з верхівки магазина треба видати у вихідний вираз усі знаки, пріоритети яких не нижчі від пріоритету op2 (усі вони є знаками з виразу E1), і тільки після цього запам'ятати op2 у магазині. Якщо пріоритет знака з верхівки магазина нижче ніж у op2, то op2 записується в магазин, оскільки має появитися у вихідному виразі раніше.
Процес побудови ЗПЗ виразу можна подати послідовністю трійок вигляду
(вихідна послідовність лексем;
магазин;
непрочитана частина виразу).
Верхівку магазина будемо вказувати праворуч.
Приклад 1. Початок перетворення виразу a+b*c зображається послідовністю трійок
( ; ; a + b * c ) – початковий стан: вихідна послідовність і магазин порожні;
( a ; ; + b * c ) – ім'я перенесено у вихідну послідовність;
( a ; + ; b * c ) – знак перенесено в магазин;
( a b ; + ; * c ) – ім'я перенесено у вихідну послідовність.
Після цього знак '*' вміщується в магазин над знаком '+':
( a b ; + * ; c ).
Пріоритет операції '*' вищий від '+', тому b є операндом '*', а не '+'.
При перетворенні виразу a+b-c результатом читання його початку a+b буде
( a b ; + ; - c ),
після чого знак '-' "виштовхне" з магазина '+', тобто наступною буде трійка
( a b + ; - ; c ).
Пріоритети '+' і '-' рівні, тому b пов'язується з операцією '+' ліворуч.
Відкриваюча та відповідна їй закриваюча дужки задають початок і кінець виразу, всі знаки операцій якого мають з’явитися у вихідному виразі раніше від знаків, що є в магазині перед появою відкриваючої дужки. Для відокремлення цих знаків відкриваюча дужка записується в магазин. За появи на вході закриваючої дужки всі знаки операцій до відкриваючої дужки виштовхуються з магазина у вихідний вираз, а дужка вилучається з магазина, тобто дужки "взаємно знищуються".
Ім'я функції записується в магазин і видається безпосередньо за ЗПЗ виразу її аргумента. Ім'я функції виштовхується з верхівки з появою у вхідному виразі знака операції або закриваючої дужки.
Після того, як вираз прочитано, в магазині ще можуть залишитися знаки операцій; їх треба записати у вихідну послідовність.
Отже, уся описана обробка лексем подається таким алгоритмом:
while на вході є лексема C do
case C of
стала чи ім'я змінної: скопіювати її у вихідну послідовність;
знак операції: до появи на верхівці магазину відкриваючої дужки виштовхнути звідти та скопіювати у вихідну послідовність усі знаки, чий пріоритет не нижчий від пріоритету С; заштовхнути С в магазин;
відкриваюча дужка: заштовхнути С в магазин;
закриваюча дужка: до появи на верхівці магазину відкриваючої дужки виштовхнути звідти та скопіювати у вихідну послідовність усі знаки операцій; виштовхнути відкриваючу дужку;
end;
Для роботи з графікою я використовував наступні функції:
Ініціалізація та завершення роботи графічної системи.
void far initgraph(int far*graphdriver, int far*graphmode, const char far*pathtodriver)
Ініціалізує графічну систему і переводить відеоадаптер у графічний режим. Параметр graphdriver задає графічний драйвер, а параметр graphmode - графічний режим. Якщо graphdriver=DETECT, то викликається процедура автоматичного самовизначення графічного драйвера та режиму. Параметр drivepath задає шлях до графічного драйвера. Якщо drivepath=”” (порожній рядок), то драйвер повинен бути розміщений у поточному каталозі. Для EGA-драйвера визначені наступні режими: EGALO=0 {640*200 пікселів; 16 кольорів; 4 сторінки} EGAHI=1 {640*350 пікселів; 16 кольорів; 2 сторінки} Для VGA-драйвера визначені наступні режими: VGALO=0 {640*200 пікселів; 16 кольорів; 2 сторінки} VGAMED=1 {640*480 пікселів; 16 кольорів; 2 сторінки} VGAHI=2 {640*480 пікселів; 16 кольорів; 1 сторінка}
void far closegraph(void)
Закриває графічну систему, відновлює режим екрану, який був до встановлення графічного режиму, та вивільняє пам’ять, яка використовувалася під буфер.
Виведення графічних примітивів
void far arc(int x, int y, int startangle, int endangle, int radius)
Малює дугу з центром у точці (x,y), радіусом radius від кута startangle до endangle. Кути відраховуються в градусах проти годинникової стрілки, починаючи від горизонтальної лінії.
void far bar(int left, int top, int right, int bottom)
Виводить зафарбований прямокутник з координатами головної діагоналі (left, top)-(right, bottom). Використовується шаблон заповнення та колір, встановлені функціями setfillstyle та setfillpattern.
void far bar3d(int left, int top, int right, int bottom, int depth, int topflag) Виводить зафарбований паралелепіпед з координатами передньої грані (left, top)-(right, bottom), глибиною контуру depth (в пікселах) та верхньою гранню, якщо topflag=1. Шаблон і колір зафарбовування визначається функціями setfillstyle та setfillpattern. Стиль контурної лінії визначається функціями setlinestyle та setcolor.
void far circle(int x, int y, int radius)
Малює коло радіуса radius з центром (x,y). Колір лінії задається функцією setcolor.
void far cleardevice(void)
Витирає екран кольором, встановленим у setbkcolor, встановлюючи курсор у позицію (0,0).
void far clearviewport(void)
Витирає вікно фоновим кольором, встановлює курсор на початок вікна (0,0).
void far drawpoly(int numpoints, const int far *polypoints)
Малює багатокутник з numpoints вершинами, координати (x, y) яких задаються у масиві структур polypoints. Використовується поточний стиль та колір лінії.
void far ellipse(int x, int y, int startangle, int endangle, int xradius, int yradius);
Малює частину еліпса з центром (x,y), горизонтальною та вертикальною півосями xradius, yradius. Еліпс виводиться поточним кольором від
кута startangle до endangle, які задаються в градусах і відраховуються проти годинникової стрілки від горизонтального напрямку.
void far fillellipse( int x, int y, int xradius, int yradius )
Малює зафарбований еліпс з центром (x,y) та горизонтальною і вертикальною півосями xradius, yradius. Еліпс зафарбовується поточним кольором стилю заповнення, а контур - поточним кольором лінії.
void far fillpoly(int numpoints, const int far *polypoints)
Малює та зафарбовує багатокутник з numpoints вершинами, координати (x, y) яких задаються у масиві структур polypoints. Використовується колір та стиль заповнення, визначені у setfillstyle та setfillpattern. Cтиль та колір лінії визначається setlinestyle.
void far floodfill(int x, int y, int border)
Зафарбовує замкнуту область, обмежену кольором border. Точка (x,y) повинна знаходитися всередині замкнутої області, інакше зафарбовується зовнішня її частина. Шаблон заповнення визначається функціями setfillstyle та setfillpattern. Границя області визначається кольором border. line void far line(int x1, int y1, int x2, int y2); Малює лінію від точки (x1,y1) до точки (x2,y2). Товщина та тип лінії задається setlinestyle, а колір визначається setcolor.
void far linerel(int dx, int dy)
Виводить лінію від поточного вказівника до точки, розміщеної на відстані (dx,dy). Стиль та колір лінії визначається функціями setlinestyle та setcolor. void far lineto(int x, int y);
Виводить лінію до точки, з координатами (x,y). Стиль та колір лінії визначається функціями setlinestyle та setcolor.
void far moverel(int dx, int dy);
Переміщує поточний вказівник у точку, яка знаходиться на відстані (dx,dy) відносно поточної позиції.
void far moveto(int x, int y)
Переміщує поточний вказівник у точку (x,y).
void far outtext(const char far *textstring)
Виводить рядок textstring у позицію поточного вказівника. Довгий рядок відсікається на межі встановленого вікна. Параметри шрифта встановлюються функцією settextstyle. Параметри виведення (вирівнювання, центрування, поворот на 90 градусів) встановлюється функцією settextjustify.
void far outtextxy(int x, int y, const char far *textstring)
Виводить рядок textstring у позицію (x,y). Довгий рядок відсікається на межі встановленого вікна. Параметри шрифта встановлюються функцією settextstyle. Параметри виведення (вирівнювання, центрування, поворот на 90 градусів) встановлюється функцією settextjustify.
void far putimage(int left, int top, const void far *bitmap, int op)
Виводить на екран бітовий образ, що визначається вказівником bitmap, у вигляді прямокутника з верхнім лівим кутом (left, top). Параметр bitmap містить інформацію про довжину і ширину бітового образу та сам бітовий образ. Параметр op задає бінарну операцію над кожним байтом бітового образу та відповідним зображенням на екрані. Визначені наступні константи: COPY_PUT=0; {MOV} XOR_PUT=1; {XOR}
OR_PUT=2;{OR} AND_PUT=3{AND} NOT_PUT=4;{NOT} Зображення, яке виводить putimage не відсікається на межі вікна. Якщо частина зображення виходить за екран, то зображення не виводиться взагалі.
void far pieslice(int x, int y, int startangle, int endangle, int radius)
Малює та заповнює кольором сектор круга радіуса radius з центром (x,y) від кута startangle до endangle. Контур сектора малюється поточним кольором. Параметри заповнення встановлюються функціями setfillstyle та setfillpattern.
void far putpixel(int x, int y, int color)
Виводить точку з координатами (x,y) кольором color.
void far rectangle(int left, int top, int right, int bottom)
Виводить прямокутник з координатами головної діагоналі (left, top)-(right, bottom). Стиль та колір лінії задається функціями setlinestyle та setcolor.
void far restorecrtmode(void)
Тимчасово відновлює початковий текстовий режим екрану, який був до встановлення графічного режиму. Повернення у графічний режим забезпечується функцією setgraphmode. void far sector( int x, int y, int startangle, int endangle, int xradius, int yradius).Виводить та заповнює еліптичний сектор з центром (x,y) від кута startangle до кута endangle з горизонтальним та вертикальним радіусами відповідно xradius та yradius. Шаблон заповнення та колір визначається функціями setfillstyle та setfillpattern.
3. Алгоритм розв'язування задачі
На рисунку 1 зображено графічну схему головної функції, в якій Ініціалізується графічний режим і передається управління на функцію, яка керує роботою меню.
На рисунку 2 зображена функція, яка керує роботою графічного меню.
На рисунку 3 зображена функція, яка розгортає вiдповiдне меню при натисканні на кнопку.
На рисунку 4 зображена функція яка керує роботою випадаючого меню.
На рисунку 5 зображена функція для перетворення рядка з рівнянням у зворотній польський запис.
На рисунку 6 зображена функція для рисування графіка в декартовiй двовимірній системі координат.
Функції для виведення графіків в інших системах координат використовують схожі алгоритми.
Функція main(рис.1)
Функція process(рис.2)
Функція PullMenuDown(рис.3)
Функція HandleMenu(рис.4)
Функція topolish(рис.5)
Функція printgraph_2d (рис.6)
4. Опис програм на мовах C/C++.
Назва програми: Graphic printer.
Призначення програми: Виведення графіків функцій у декартовій (двовимірній, трьохвимірній) та полярній системах координат, та збереження у форматі BMP.
Мова програмування: Turbo C. Ця мова програмування була розроблена для написання операційної системи UNIX, і завоювала неабияку популярність завдяки вдалій реалізації багатьох можливостей, які характерні як для мов високого рівня, так і для системного програмування. Вважається високорівневою ассемблерною мовою. Автори Керніган і Рітчі. На основі мови Сі розроблено багато інших мов, таких як С++, Java та інших.
С++ - розширення мови Сі на засадах об’єктно-орієнтовного програмування.
Логічна структура програми: при старті програми функцією main ініціалізується графічний режим та керування роботою програми передається у функцію process, в якій працює безмежний цикл, який аналізує натиснуті гарячі клавіші та позицію курсору і передає керування на відповідні функції. При натисненні на кнопку меню викликається функція, яка рисує чорні і білі лінії по периметру кнопки, для створення ефекту об’ємності кнопки. Після чого зберігається область екрану, яка буде закрита розгортаючим меню, далі викликається функція, яка виводить підменю, і при наведенні на пункт меню виділяється. При згортанні меню викликається функція, яка відновлює область екрану і кнопку. Якщо вибирається система координат, то змінюється значення глобального параметра, тому його не потрібно передавати у функції, далі викликається функція, яка рисує розмітку в залежності від значення цієї змінної і викликається відповідна функція для виведення графіка. Рисування графіка для різних систем координат я оформив у різних функціях для більшої гнучкості алгоритму і незалежності функцій, що дає змогу легко редагувати і виправляти помилки у цій частині програми. Після виведення графіка можна змінюючи масштаб добитися найкращого вигляду графіка. Для цього використовується глобальна змінна, яка використовується у рисуванні розмітки та виведенні графіка. Ця змінна визначає на скільки потрібно змінювати значення змінної в рівнянні, при зміщенні на один піксель на дисплеї. Тобто вона визначає вартість пікселя екрану у одиницях змінної рівняння. В кінці можна зберегти графік у файл. Для цього викликається функція, яка зчитує і перетворює кожен піксель екрану в межах вікна для виведення графіків і записує їх у двійковий файл, який зберігається у тому ж каталозі що і програма.
Вхідні дані та вихідні дані:
Вхідними даними є рисунок у форматі BMP, розміром 440x300 і глибиною кольору 24 біти. Цей рисунок повинен знаходитися у тому ж каталозі що і програма.
Вихідними даними є рисунок з такими ж параметрами.
Програмні засоби:
Інтегроване середовище Turbo C++ 3.0, вбудовані в нього редактор та компілятор, драйвер egavga.bgi . Протестовано на операційній системі – режим емуляції DOS, вбудований у ОС Microsoft Windows XP Professional SP3. Потребує систему з установленою MS-DOS або її емулятором.
Технічні засоби:
Програма потребує комп’ютера на базі IBM-PC. Протестовано на Mobile DualCore Intel Pentium T2310, 1466 MHz (11 x 133) + 1Gb RAM.
.
5. Технологія програмування, виконання та відлагодження програми.
Програма написана з використанням засобів структурованого програмування . Структурованому програмуванню відповідає розбиття програми на функції.
Реалізація програми була розділена згідно своїх логічних частин. Окремо були реалізовані інтерфейс програми та її основний код. Далі я ці файли скопіював в один і налагодив зв’язки між функціями.
Реалізований інтерфейс абсолютно незалежний від основної програми і може бути використаний при написанні інших програм. Це особливо актуально для різних низькорівневих програм, які не запускаються під управлінням Windows’а, але потребують якісного управління.
Програма була розроблена в інтегрованому середовищі розробки програм Turbo C++ 3.0. Дане середовище забезпечує засоби відлагодження програми: покрокове виконання програми, перегляд та модифікація значень змінних програми під час її виконання:
Для успішного написання програми її відлагодження повинно відбуватися покроково. Тобто після того, як ми написали якусь частину програми (це може бути підпрограма) ми виконуємо компіляцію, знаходимо помилки і виправляємо їх. Ми повинні пам’ятати, що ті помилки, які показує компілятор, не завжди стосуються саме тих частин на які він вказує. Причина може виявитися у попередніх операторах. Також ми повинні пам’ятати, що компілятор не показує логічних помилок, які ми створюємо. Тому перед запуском програми необхідно перевірити нашу програму на наявність таких помилок. У таких випадках нам допомагає попередньо розроблений алгоритм розв’язування задачі.
Програма відкомпільована у виконавчий exe-файл, який може завантажуватися і виконуватися під управлінням будь-якої операційної системи, що підтримує команди DOS’у. Запуск програми (готового exe-файлу) можна здійснювати з командного рядка, або будь-яким іншим способом (запуск з командного файлу, запуск програми у Windows’і і т.д.). Використовуючи інтегроване середовище Turbo C++ також можна запустити програму. Для цього потрібно відкрити файл програми, який містить функцію main і виконати команду меню Run – Run. Програма буде наново відкомпільована, тому повинні бути наявні всі файли включення та бібліотеки.
Для нормальної роботи програми на комп’ютері повинен бути певний носій інформації (логічний диск, або віртуальний диск в оперативній пам’яті, дискета або CD), в якій зберігатиметься програма.
Управління програмою реалізоване за допомогою миші та клавіатури і відповідає програмному інтерфейсу. Для нормальної роботи миші перед запуском програми в оперативну пам’ять повинен бути завантажений драйвер миші.
6.Інструкція користувачеві.
Керування виведенням графіків здійснюється за допомогою одного пункту головного меню – Graphic. В цьому пункті є три підпункти(рис7): для введення рівняння, для вибору системи координат і для введення масштабу.
(рис.7)
Рівняння вводиться, як функція від вказаних змінних.
Система координат вибирається одна з 3-ох(рис.8): декартова 2D, декартова 3D та полярна.
рис.8
Масштаб вводиться як відповідність кількості пікселів на екрані до одиничного значення функції(рис.9).
рис.9
Спочатку потрібно вибрати систему координат та ввести функцію(рис.10), далі змінюючи масштаб добитися найкращого вигляду.
Після цього за допомогою пункту головного меню File(рис.11) можна зберегти графік у форматі BMP, для перегляду у windows або відтворення.
рис.10
рис.11
7. Аналіз результатів комп’ютерної реалізації програми
При тестуванні програми вводилися різні графіки в різних системах координат.
Програма є дуже вимоглива і споживає багато ресурсів оскільки в ній реалізований графічний інтерфейс, який потребує постійного швидкого циклу та багато перевірок типу на якій кнопці знаходиться курсор.
Це є основним недоліком графічного інтерфейсу такого типу, але це не відіграє великої ролі оскільки DOS є однозадачною ОС.
Також при виведенні графіка для кожної точки на екрані потрібно рахувати значення функції з рядка символів, а це потребує великої кількості перевірок та операцій. Найбільш це відчутно при виведенні графіка в трьохвимірній системі координат.
При збереженні та відтворенні файлу для кожного пікселя потрібно робити велику кількість операції при перетворенні з 24 бітного кольору в 4 бітний.
Графіки:
На рисунку 12 зображено графік функції f(x)=sin(x);.
На рисунку 13 зображено графік функції f(x,y)=cos(x).
На рисунку 14 зображено графік функції f(x,y)=sqrt(1-x*x-y*y)
На рисунку 15 зображено графік функції f(b)=b/10;.
(рис.12)
(рис.13)
(рис.14)
(рис.15)
Висновки
Виконавши дану курсову роботу я написав програму, закріпив теоретичні знання та практичні навички програмування, набуті при вивченні дисципліни “Проблемно-орієнтовані мови програмування”.
В ході виконання курсової роботи я навчився самостійно працювати з літературою, розробляти алгоритми та програми на мові програмування Ci.
Позитивними сторонами даної роботи є хороший інтерфейс та легкість його зміни. Основні дії виконані в окремих функціях і описані коментарями, що полегшує доробку програми . Недолік – певна незакінченість програми та відсутність ряду можливостей, які могли бути присутні.
Список використаної літератури
1. Методичні вказівки до курсової роботи з дисциплiни "Проблемно-
орієнтовані мови програмування" для студентів спеціальності “Інтелектуальні системи прийняття рішень” / Укл. П.О.Кравець. - Львів:
Видавництво Національного університету “Львівська політехніка”, 2005. - 18
с.
3. Керниган, Ричи – Язык Си.
4. «"C" для профессиональных программистов» – створення інтерфейсу.
5. Реферат на тему: «Зворотний польський запис»
6. Архів з описами 275 типів файлів завантажений з сайту www.progs-maker.narod.ru
Додаток 1. Текст програми на мові Turbo C.
///////////////////////////////////////////////////////////////
// Graphiс printer //
// Курсова робота з П.О.М.П. //
// студента групи КН-117, IКНI, кафедра IСМ //
// Панчошника Н.В. //
// " Виведення графiкiв функцiй у декартовiй(двовимiрнiй, //
// трьохвимiрнiй) та полярнiй системах координат " //
///////////////////////////////////////////////////////////////
#include <stdio.h>
#include <conio.h>
#include <graphics.h>
#include <alloc.h>
#include <dos.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#define NO 0
#define YES 1
#define NONE -1
#define MAX_MENU 3//максимальна к-сть елементiв в меню
//координати вiкна для виведення графiка
#define a 100
#define b 100
#define b1 400
#define a1 540
//****************************************************************************
int Selection=NONE; //вибраний пункт меню
int button,x,y; //статус мишi
int sisc=NONE; //система координат
int pix=30; //к-сть пiкселiв на одиницю
char func[30]; //функцiя
void *p;
size_t area;
struct MENU //елемент меню(кнопка)
{
int x;
int y; //координати кнопки
int x1;
int y1;
unsigned char Active[MAX_MENU]; // активнiсть пунктiв меню
};
struct tstek
{
char data[16];
struct tstek *down;
}*top;
//****************************************************************************
int MouseOn(struct MENU *);
void Process();
void Xorbar(int sx,int sy,int ex,int ey,int c);
void Show();
void Hide();
void Status();
void DrawBtn(struct MENU *,char *);
void Hlight(struct MENU *t);
void PullMenuDown(char *H[],int ,struct MENU *);
void PullMenuUp(struct MENU *);
void HandleMenu(int n,struct MENU *);
void Status();
void Push(struct MENU *);
void Show();
void Up(struct MENU *);
void Hide();
void Xorbar(int sx,int sy,int ex,int ey,int c);
void winp(struct MENU *,int );
void Win(int sx,int sy,int ex,int ey);
void rozmitka();
void save_BMP();
void open_BMP();
void print_graph();
void push(char *);
void topolish();
void printgraph_2d();
void printgraph_3d();
void printgraph_pol();
void HELP1();
//****************************************************************************
// координати кнопок меню
struct MENU File={0,0,60,20};
struct MENU Graphik={60,0,140,20};
struct MENU siscoord={60,0,140,20};
struct MENU Help={140,0,200,20};
struct MENU Close={619,0,639,20};
struct MENU sfunc={200,29,539,49};
struct MENU mashtab={100,77,180,97};
//****************************************************************************
//****************************************************************************
void main()
{
int gd = DETECT,gm;
initgraph(&gd, &gm,"");
Selection=NONE;
for(gd=0;gd<MAX_MENU;gd++)
{
File.Active[gd]=YES;
Graphik.Active[gd]=YES;
Help.Active[gd]=YES;
Close.Active[gd]=YES;
siscoord.Active[gd]=YES;
}
area=imagesize(0,0,150,150);
p=malloc(area);
if(p==NULL)
{
closegraph();
restorecrtmode();
printf("Not Enough Memory !\n try to reduce the area used.\n");
exit(1);
}
top=(struct tstek *)malloc(sizeof(struct tstek));
top->down=0;
setfillstyle(1,7);
bar(0,0,640,480);
Process();
closegraph();
}
//****************************************************************************
//****************************************************************************
// Функцiя для керування роботою графiчного iнтерфейсу
void Process()
{
char *fm[]={"Open Image F3","Save Image F2","Exit Esc"};
char *gm[]={"Function f","Sistem s","Mashtab m"}; //пункти меню
char *hm[]={"About F1"};
char *ss[]={"Decart 2D ","Decart 3D ","Polar "};
char KEY;
// рисування кнопок меню
DrawBtn(&File,"File");
DrawBtn(&Graphik,"Graphiс