бесплатные рефераты

Дослідження зміни температури термопари за допомогою чисельних методів на ЕОМ

Дослідження зміни температури термопари за допомогою чисельних методів на ЕОМ

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

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

Інститут автоматики електроніки та комп'ютерних систем управління

Кафедра комп'ютерних

систем управління

ДОСЛІДЖЕННЯ ЗМІНИ ТЕМПЕРАТУРИ ТЕРМОПАРИ ЗА ДОПОМОГОЮ ЧИСЕЛЬНИХ МЕТОДІВ НА ЕОМ

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

З дисципліни ”Обчислювальні методи та застосування ЕОМ”

2004

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

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

Інститут автоматики електроніки та комп'ютерних систем управління

Кафедра комп'ютерних систем управління

Затверджено на

засіданні кафедри КСУ

Протокол №__________

”___”__________ 2004 р.

ІНДИВІДУАЛЬНЕ ЗАВДАННЯ

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

на тему ”Дослідження зміни температури термопари за допомогою чисельних методів на ЕОМ ”

з дисципліни „ Обчислювальні методи та застосування ЕОМ”

Дослідження зміни температури термопари за допомогою чисельних методів на ЕОМ.

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

Т0

0

20

40

60

80

100

QмВ

-0,670

-0,254

0,171

0,609

1,057

1,517

Використовуючи інтерполяцію по Лагранжу і Ньютону, знайти показання вольтметра при Т0=270; 320; 550; 750; 670С. Оцінити похибку методів інтерполяції [1,3] . Зробити висновки.

Анотація

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

Зміст

Вступ

1.Огляд і варіантний аналіз чисельних методів моделювання зміни температури термопари

1.1 Основні поняття і визначення

1.2 Класифікація методів рішення поставленої задачі

1.3.Опис методів моделювання зміни температури термопари на ЕОМ

1.3.1. Інтерполяційний многочлен Лагранжа

1.3.2 .Перший інтерполяційний многочлен Ньютона

1.3.3. Другий інтерполяційний многочлен Ньютона

1.3.4. Інтерполювання функцій за схемою Ейткіна

1.3.5. Сплайн-інтерполяція

1.4. Уточнена постановка задачі

2. Розробка алгоритмів моделювання зміни температури термопари за допомогою чисельних методів на ЕОМ

2.1. Планування вхідних та вихідних даних

2.2 Аналіз задач, які вирішуються при дослідженні зміни температури термопари на ЕОМ

2.3 Описовий алгоритм головної програми

2.4 Схема алгоритму головної програми

2.5 Опис основних функцій моделювання

2.6 Структура комплексу програм для дослідження зміни температури термопари

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

3.1 Лістинг головної програми INTERP.CPP

3.2 Лістинг модуля MENYS.H

4. Розробка тестів та аналіз результату тестування

4.1 Опис тестів

4.2 Аналіз результатів тестування

5. Оцінка похибок результатів експериментальних досліджень

6. Оцінка ефективності комплексу програм для дослідження

7. Розробка пакету документів для супроводження комплексу програм

7.1 Розробка інструкції програмісту

7.2 Інструкція користувачеві

Висновки

Використана література

Додаток А. Технічне завдання.

Додаток Б. Лістинги модулів

Додаток В. Структура дискети.

Вступ

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

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

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

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

1 Огляд і варіантний аналіз чисельних методів моделювання термопари

1.1 Основні поняття та визначення

Нехай на відрізку [а; b] визначено певний клас функцій {Р(х)}, наприклад клас алгебраїчних многочленів, а в точках х0, х1,..., хn цього проміжку задано значення деякої функції y=f(x): y0=f(x0), y1=f(x1),….yn=f(xn).

Інтерполяція - це наближена заміна функції f на відрізку [а; b] однією з функцій Р(х) цього класу так, щоб функція P(х) в точках x0,x1, ..., xn набувала тих самих значень, що й функція f, тобто щоб Р(xi)= уi (і = 0, 1, ..., n). На Рис.1.1.1 зображена інтерполяція функції.

Вузли інтерполювання - це точки х0, хi, ..., хn, в яких задана функція.

Функція Р(х) називається інтерполюючою функцією.

Інтерполяційна формула - це формула у=P(х), за допомогою якої обчислюють значення функції f у проміжку [а;b].

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

Інтерполяційний многочлен - це многочлен виду Рn(х), який задовольняє умови , наближену рівність f(x)=Pn(x) називають інтерполяційною формулою, а різницю Rn(f,x)=f(x) - Pn(x) -- залишковим членом інтерполяційної формули. Хоч інтерполяційний многочлен і єдиний, проте можливі різні форми його запису. Інтерполяційний поліном має слідуючий вид:

(1.1)

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

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

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

Нехай у таблиці задана точка і треба знайти апроксимувальну криву в діапазоні (рисунок 1.1.2.). В цьому випадку похибка в кожній табличній точці буде Тоді сума квадратів похибок визначається виразом:

(1.2)

Як правило, функцію обирають у вигляді лінійної комбінації вибраних функцій :

(1.3)

Умова мінімуму Е визначається рівнянням:

(1.4)

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

Залишкова середня квадратична похибка апроксимації оцінюється:

(1.5)

При побудові апроксимувальної функції використовуються ортогональні поліноми, для яких

, якщо

Коефіцієнти визначаються зі співвідношень

(1.6)

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

1.2 Класифікація методів

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

На Рис.1.2.1 приведено класифікацію чисельних методів обробки результатів експерименту.

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

Інтерполяцію даних проводять тоді, коли:

1) функцію задано таблично для деяких значень аргументу, а треба знайти її значення для значень аргументу, яких у таблиці немає;

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

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

1.3 Опис методів моделювання зміни температури термопари на ЕОМ

Охарактеризуємо основні методи інтерполяції, які приведені на рис.1.2.1.

1.3.1 Інтерполяційний многочлен Лагранжа

Інтерполяція за Лагранжем вживається в загальному випадку для довільно розташованих вузлів.

Інтерполяційний поліном для методу Лагранжа представлений у вигляді:

, (1.7)

де всі (j=0,…, n) - поліноми ступеня n, коефіцієнти яких можна знайти з допомогою (n+1) рівняння: .

Для полінома, який шукаємо, отримаємо:

(1.8)

Формулу (1.8) називають інтерполяційний многочлен Лагранжа.

Треба відзначити дві головні властивості поліномів Лагранжа:

(1.9)

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

Похибка при інтерполяції за Лагранжем може бути оцінена таким чином:

(1.10)

де .

1.3.2 Перший інтерполяційний многочлен Ньютона.

Інтерполяційний поліном випадку має вигляд:

...

...+, (1.11)

Коефіцієнти знаходять з рівнянь:

,, (1.12)

(1.13)

Формула (1.13) носить назву першої інтерполяційної формули Ньютона. Цей вираз незручний для інтерполяції поблизу останніх значень .

Похибка інтерполяції для першої формули Ньютона можна оцінити відповідно як: (1.14)

де (1.15)

1.3.3 Другий інтерполяційний многочлен Ньютона

В випадку, коли, першу інтерполяційну формулу Ньютона застосувати незручно, використовують другу інтерполяційну формулу Ньютона, яка отримана при використанні лівих різниць від останнього значення (інтерполяція “назад”). Тоді інтерполяційний поліном має вигляд:

(1.16)

Коефіцієнти визначаються таким чином:

, (1.17)

(1.18)

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

(1.19)

- ліва різниця другого порядку.

(1.20)

(1.21)

Формула (1.21) є кінцевим виразом для другої інтерполяційної формули Ньютона.

Похибка інтерполяції для другої формули Ньютона можна оцінити відповідно як:

(1.22)

де (1.23)

1.3.4 Інтерполювання функцій за схемою Ейткіна

Особливістю інтерполяційної схеми Ейткіна є однотипність обчислень. Якщо в (n+1)-му вузлах інтерполювання xi (i=0,1,…,n) функція f набуває значеньyi (i=0,1,…,n),то значення інтерполяційного многочлена степеня n в точці , що не зберігається з вузлами інтерполювання, обчислюють за формулою Ейткіна:

(1.24)

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

Отже, щоб обчислити в точці х значення інтерполяційного многочлена n-го степеня за схемою Ейткіна, треба в цій точці обчислити значення n лінійних, n-1 квадратичних, n-2 кубічних многочленів, два многочлени (n-1)-го степеня і, нарешті, один многочлен n-го степеня.

1.3.5 Сплайн-інтерполяція

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

Наприклад, у випадку, який показаний на рисунку 1.3.1, необхідно задати всі кубічні функції В найбільш загальному випадку ці багаточлени мають такий вигляд:

i=1,2, ... ,m (1.25)

де - постійні, які визначені вказаними умовами (j= 1,2,3,4).

Перші (2m) умов потребують, щоб сплайни стикалися в заданих точках:

,i=1, 2, ... , m,

, i=0, 1, ... , m-1. (1.26)

Наступні (2m-2) умов потребують, щоб в місцях дотику сплайнів були рівні перші та другі похідні

i=1, ... , m-1, (1.27)

i=1, ... , m-1.

Система алгебраїчних рівнянь має розв'язок, якщо кількість рівнянь дорівнює кількості невідомих. Для цього необхідні ще два рівняння. Як правило, використовують такі додаткові умови:

(1.28)

Отриманий таким чином сплайн зветься “природним кубічним сплайном”.

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

1.4 Уточнена постановка задачі

Нехай на відрізку [а; b] визначено певний клас функцій {Р(х)}, наприклад клас алгебраїчних многочленів, а в точках х0, х1,..., хn цього проміжку задано значення деякої функції y=f(x): y0=f(x0), y1=f(x1),….yn=f(xn). Наближену заміну функції f на відрізку [а; b] однією з функцій Р(х) цього класу так, щоб функція P(х) в точках x0,x1, ..., xn набувала тих самих значень, що й функція f, тобто щоб Р(xi)= уi (і = 0, 1, ..., n), називають інтерполюванням, або інтерполяцією. Точки х0, хi, ..., хп називають вузлами інтерполювання, функцію Р(х) -- інтерполюючою функцією, а формулy у=P(х), за допомогою якої обчислюють значення функції f у проміжку [а;b], -- інтерполяційною формулою.

З геометричного погляду задача інтерполювання полягає в знаходженні кривої у= Р(х) певного класу, яка проходить через точки площини з координатами (хi, уi)

(i = 0, 1, ....,n) (рис.1.1.1).

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

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

Розглядатимемо лише задачу параболічного інтерполювання, яку сформулюємо так: в n+1 різних точках х0, x1,..., хn задано значення

функції f: y0=f(x0), y1=f(x1),…, yn=f(xn) і треба побудувати многочлен

(1.29)

степеня n, який задовольняв би умови

(1.30)

Для визначення n+1 коефіцієнтів многочлена (1.29), який задовольняє умови (1.30), запишемо систему (n+1)-го лінійних рівнянь виду:

(1.31)

Ця система має єдиний розв'язок, бо її визначник є визначником Вандермонда, який не дорівнює нулю, бо вузли xi=(i=0,1,…,n) різні. А тому й задача параболічного інтерполювання має єдиний розв'язок, тобто існує єдиний алгебраїчний многочлен виду (1.29), що задовольняє умови (1.30). Многочлен Рn(х), який задовольняє умови (1.29), називають інтерполяційним многочленом, наближену рівність f(x)=Pn(x) -

інтерполяційною формулою, а різницю Rn(f,x)=f(x) - Pn(x) -- залишковим членом інтерполяційної формули. Хоч інтерполяційний многочлен, що задовольняє умови (1.29), і єдиний, проте можливі різні форми його запису.

Інтерполяційний многочлен будують тоді, коли:

1) функцію задано таблично для деяких значень аргументу, а треба знайти її значення для значень аргументу, яких у таблиці немає;

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

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

2 Розробка алгоритмів моделювання зміни температури термопари за допомогою чисельних методів на ЕОМ

2.1 Планування вхідних та вихідних даних

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

Дані, які вводяться для обчислення зміни температури термопари мають тип float, тобто вони можуть приймати як цілі, так і дробові значення на інтервалі 3.4*10-38 до 3.4* 1038. Всі вхідні та вихідні данні можна звести в таблицю.

Таблиця 2.1.1 Вхідні та вихідні данні

Назва змінної

Ідентифікатор

Межі зміни

Тип

1

Значення Т

x[N]

3.4*10-38 -3.4* 1038

float

2

Значення QмВ

y[N]

3.4*10-38 -3.4* 1038

float

3

Значення температури

Tt

3.4*10-38 -3.4* 1038

float

4

Значення температури

Ttn

3.4*10-38 -3.4* 1038

float

5

Результат по Лагранжу

FLTt

1,7Е-308…1,7+308

double

6

Результат по Ньютону

FNTt1

1,7Е-308…1,7+308

double

7

Похибка

E

3.4*10-38 -3.4* 1038

float

2.2 Аналіз задач, які вирішуються при дослідженні зміни температури термопари на ЕОМ

Як відомо, термопара - це найпростіше замкнене електричне коло, що складається з двох різнорідних провідників (чи напівпровідників).

Згідно індивідуального завдання на курсову роботу, було розроблено програмний продукт, який виконує наступні функції:

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

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

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

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

2.3 Описовий алгоритм головної програми

Основна програма працює в режимі двухрівневого меню, яке розроблене в Turbo C. В розробленій програмі використовується меню, тобто всі функції можуть використовуватись нескінченну кількість разів. Така властивість забезпечується завдяки використанню циклу в головній програмі, вихід з якого здійснюється лише при одній умові : вибір пункту меню „Вихід”.

Головне меню містить такі пункти:

- “Довідка”;

-“Тестування ”;

-„Результати”;

- „Вихід ”.

1. Пункт меню „ Довідка ” включає в себе такі пункти підменю:

“Про автора ”, яке містить короткі відомості про автора програми;

„Про програму ” - за допомогою якого ми можемо переглянути коротке описання програми.

2.Пункт меню „Тестування” включає в себе пункти підменю:

“Тест 1” - за допомогою якого ми можемо протестувати дану програму за першим інтерполяційним многочленом Ньютона та Лагранжа;

„Тест 2 ” - за допомогою якого ми можемо протестувати дану програму за другим інтерполяційним многочленом Ньютона та Лагранжа;

3.Пункт меню „Результати” включає в себе такі пункти підменю:

- “В файл ” - за допомогою якого ми можемо записати нові тестування у вказаний файл;

- „На екран ” - за допомогою якого ми можемо вивести на екран результати тестування;

- „На друк ” - за допомогою якого ми можемо вивести результати тестування на друк.

4. Пункт меню „Вихід” дає змогу користувачеві вийти з даної програми.

2.4 Схема алгоритму головної програми

Рисунок 2.4.1 Логічна схема керуючої програми

Рисунок 2.4.2 Логічна схема підменю „Довідка”

Рисунок 2.4.3 Логічна схема підменю „Тестування”

Рисунок 2.4.4 Логічна схема підменю „Результати”.

Рисунок 2.4.5 Логічна схема підменю „Вихід ”.

2.5 Опис основних функцій моделювання

Перелік функцій CALC.H:

double stepin(double x1,int f) - піднесення числа до степені f;

double faktorial(int k) - факторіал числа k;

double GetA(int i) - отримання множника а для першої інтерполяційної формули Ньютона;

double IntNuton1(double X1) - обчислення по першій інтерполяційній формулі Ньютона;

double GetВ(int i) - отримання множника а для другої інтерполяційної формули Ньютона;

double IntNuton2(double X1) - обчислення по другій інтерполяційній формулі Ньютона;

double IntLang(double X1) - обчислення по Лагранжу.

2.6 Структура комплексу програм для дослідження зміни температури термопари

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

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

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

Таблиця 2.6.2. Список бібліотек, які використовуються.

Назва модуля

Принадлежність

Опис

STDIO.H

Стандартна бібліотека

Функції вводу-виводу

CONIO.H

Стандартна бібліотека

Функції роботи з екраном(консолью)

IOSTREAM.H

Стандартна бібліотека

Потоки ввод-вивід

DOS.H

Стандартна бібліотека

Спеціальні функції

MATH.H

Стандартна бібліотека

Математичні функції

MENYS.H

Власна бібліотека

Головне меню програми.Бібліотека з меню та кнопками.

INTERP.CPP

Власна бібліотека

Основна програма.

DIALOGS.H

Власна бібліотека

Бібліотека з вікнами для вводу тексту.

CALC.H

Власна бібліотека

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

WIND.H

Власна бібліотека

Бібліотека малює вікна і панельки.

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

3.1 Лістинг головної програми INTERP.CPP

#include <stdio.h>

#include "menys.h"

#include <conio.h>

#include <stdlib.h>

#include <string.h>

#include <process.h>

/////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////

void main(void)

{

grinit();

init();

while (1)

{

getcurcorpos();

if (kbhit())

if (getch()==0)

if (getch()==45)break;

};

closegraph();

}

3.2 Лістинг модуля MENYS.H

#include <graphics.h>

#include <string.h>

#include "wind.h"

#include "edits.h"

#include "calc.h"

#include <stdlib.h>

//---

// =0 если клавиши подняты

// =2 или на уровне панели

const Flat=2;

const coloron=10;

const coloroff=1;

const colordn=14;

const colorhead=1;

//----

int OnPMenu=0, MenN2=0;

float Tt=-1000, Ttn=-1000;// значення температури яку вводять

double FLTt,FNTt1,FNTt2;

char string[25],sd[25];

float E;

FILE *in;

const colorsel=10;

const colornotsel=1;

const ButtonColor=7;

const ButtonN=5;

const Meny1=2;

const Meny2=2;

const Meny3=3;

const Meny4=0;

const Meny5=0;

const Meny6=0;

const PMeny1=2;

const PMeny2=2;

int BoolMeny1=0;

int BoolMeny2=0;

int BoolMeny3=0;

int BoolMeny4=0;

int BoolMeny5=0;

int BoolMeny6=0;

int BoolPMeny1=0;

int BoolPMeny2=0;

void DoSome(int i);

void windows(int x,int y,int xx,int yy,int color,char s[100],int p);

class TButton

{

public:

TButton(); //Конструктор

~TButton(){}; //деструктор

virtual void Draw();

void setwidth(int x){width=x;};

void setheight(int x){height=x;};

void settop(int x){top=x;};

void setleft(int x){left=x;};

virtual void setonoff(int x){onoff=x;Draw();};

void setcol(int x){color=x;};

void setcapt(char *x){caption=x;};

int getwidth()const {return width;};

int getheight()const {return height;};

int gettop()const {return top;};

int getleft()const {return left;};

int getonoff()const {return onoff;};

int getcol()const {return color;};

const char* getcapt(){return caption;};

virtual void mousemove(int i);

virtual void setpos(int x,int y, char* capt,int i=0);

protected:

int width;

int height;

int top;

int left;

int onoff;

int color;

char *caption;

};

class TMeny:public TButton

{

public:

TMeny();

~TMeny(){};

virtual void Draw();

virtual void setonoff(int x)

{

onoff=x;

if (!onoff) color=colornotsel;

else color=colorsel;

Draw();

};

virtual void mousemove(int i);

virtual void setpos(int x,int y, char* capt,int i=0);

virtual void close(int p=0);

};

void DrowMenyAll(TMeny FirstMeny[],int FMeny, int p=0);

//////////////////////////////////////////////////////////////////////////////

//ОБЪЯВЛЕНИЕ ОБЪЕКТОВ

///////////////////////////////////////////////////////////////////////////////////////////

TButton button[ButtonN];

TMeny FMeny1[Meny1],FMeny2[Meny2],FMeny3[Meny3],

FPMeny2[PMeny2],FPMeny1[PMeny1];

//////////////////////////////////////////////////////////////////////////////////////////

void TMeny::close(int p)

{

if (!p)

{

setonoff(0);

mouseoff();

putimage(xy1-2,yy1-2, arrow, 0);

mouseon();

free(arrow);

}

else

{

setonoff(0);

mouseoff();

putimage(xy1p-2,yy1p-2, arrowp, 0);

mouseon();

free(arrowp);

}

}

void TMeny::mousemove(int i)

{

if (mousein(left,top,left+width,top+height))

{

if (!getbutton(1))

{ //Не нажата

if (!onoff) setonoff(1);

if ((BoolMeny2)&&(!OnPMenu))

switch (i)

{

case 0:

if (BoolPMeny2)

{

FPMeny2[0].close(1);

BoolPMeny2=0;

}

if (!BoolPMeny1)

{

DrowMenyAll(FPMeny1,PMeny1,1);

BoolPMeny1=1;

}

break;

case 1:

if (BoolPMeny1)

{

FPMeny1[0].close(1);

BoolPMeny1=0;

}

if (!BoolPMeny2)

{

DrowMenyAll(FPMeny2,PMeny2,1);

BoolPMeny2=1;

}

break;

}

}

else

{

if ((onoff)&&(!(MenN2)))

{

//Нажата

close(OnPMenu);

if (BoolPMeny1)

{

if (BoolMeny2) FMeny2[0].close();

DoSome(i+100);

}

else

if (BoolPMeny2)

{

if (BoolMeny2) FMeny2[0].close();

DoSome(i+110);

}

else

if (BoolMeny1) DoSome(i+20); else

if (BoolMeny2) DoSome(i+30);else

if (BoolMeny3) DoSome(i+40);else

if (BoolMeny4) DoSome(i+50);else

if (BoolMeny5) DoSome(i+60);else

if (BoolMeny6) DoSome(i+70);

BoolPMeny1=0;

BoolPMeny2=0;

BoolMeny1=0;

BoolMeny2=0;

BoolMeny3=0;

BoolMeny4=0;

BoolMeny5=0;

Страницы: 1, 2


© 2010 РЕФЕРАТЫ