Реферат по предмету "Информатика, программирование"


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

Міністерство освіти і науки України
Вінницький національний технічний університет
Інститут автоматики електроніки та комп’ютерних систем управління
Кафедра комп’ютерних
систем управління
ДОСЛІДЖЕННЯ ЗМІНИ ТЕМПЕРАТУРИ ТЕРМОПАРИ ЗАДОПОМОГОЮ ЧИСЕЛЬНИХ МЕТОДІВ НА ЕОМ

КУРСОВА РОБОТА
З дисципліни ”Обчислювальні методи тазастосування ЕОМ”
2004

Міністерство освіти і науки України
Вінницький національний технічний університет
Інститут автоматики електроніки та комп’ютерних систем управління
Кафедра комп’ютерних систем управління
Затверджено на
засіданні кафедри КСУ
Протокол №__________
”___”__________ 2004 р.
ІНДИВІДУАЛЬНЕ ЗАВДАННЯ
на виконання курсової роботи
на тему ”Дослідження зміни температуритермопари за допомогою чисельних методів на ЕОМ ”
з дисципліни „ Обчислювальніметоди та застосування ЕОМ”
Дослідженнязміни температури термопари за допомогою чисельних методів на ЕОМ.
Вприведеній тарировочній таблиці для термопари дані показання вольтметра призміні температури з постійним кроком:Т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)  /> (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:
doublestepin(double x1,int f) – піднесення числа до степені f;
double faktorial(int k) – факторіал числа k;
doubleGetA(int i) – отримання множника а для першої інтерполяційної формули Ньютона;
doubleIntNuton1(double X1) – обчислення по першій інтерполяційній формулі Ньютона;
doubleGetВ(int i) – отримання множника а для другої інтерполяційної формули Ньютона;
doubleIntNuton2(double X1) – обчислення по другій інтерполяційній формулі Ньютона;
doubleIntLang(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
#include «menys.h»
#include
#include
#include
#include
/////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////
void main(void)
{
grinit();
init();
while (1)
{
getcurcorpos();
if (kbhit())
if (getch()==0)
if (getch()==45)break;
};
closegraph();
}
3.2 Лістинг модуля MENYS.H
 
#include
#include
#include «wind.h»
#include «edits.h»
#include «calc.h»
#include
//---
// =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,chars[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, intp=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;
BoolMeny6=0;
}
}
}
else
if((getbutton(1))&&(!OnPMenu)&&(!MenN2))
{
if (!mousein(xy1,yy1,xy2+6,yy2+yy1+4))
{
close(OnPMenu);
if (BoolPMeny1)
{
FPMeny1[0].close(1);
BoolPMeny1=0;
}
if (BoolPMeny2)
{
FPMeny2[0].close(1);
BoolPMeny2=0;
}

BoolMeny1=0;
BoolMeny2=0;
BoolMeny3=0;
BoolMeny4=0;
BoolMeny5=0;
BoolMeny6=0;
BoolPMeny1=0;
BoolPMeny2=0;
}
}
else if (onoff) setonoff(0);
}
void TMeny::setpos(int x,int y, char* capt,int i)
{
left=x;
top=y;
caption=capt;
if (i) Draw();
}
void TMeny::Draw()// Метод постройкикнопок------------
{
int i;
setfillstyle(1,7);
setlinestyle(0,0,0);
setcolor(color);
mouseoff();

bar(left,top,left+width,top+height);
moveto(5+left,5+top);
outtext(caption);
if (color==colornotsel) setcolor(7);
rectangle(left,top,left+width,top+height);
rectangle(left+2,top+2,left+width-2,top+height-2);
mouseon();
} // Метод постройки кнопок--------------------------------
TMeny::TMeny()
{
caption='\0';
width=180;
height=18;
top=0;
left=0;
color=colornotsel;
onoff=0;
}
void DrowMenyAll(TMeny FirstMeny[],int FMeny, int p)
{
if (!p)
{
xy1=FirstMeny[0].getleft()-4;
yy1=FirstMeny[0].gettop()-4;
xy2=FirstMeny[0].getleft()+FirstMeny[0].getwidth();
yy2=FirstMeny[FMeny-1].gettop()-FirstMeny[0].gettop()+FirstMeny[0].getheight()+8;
size = imagesize(xy1-2, yy1-2, xy2+6, yy1+yy2+4);
arrow = malloc(size);
mouseoff();
getimage(xy1-2, yy1-2, xy2+6, yy1+yy2+4, arrow);
int dx=(xy2-xy1+4)/5;
int dy=(yy2+2)/5;
for (int k=1;k
{
windows(xy1,yy1,dx*k,dy*k,7,"",0);
delay(30);
}
mouseon();
windows(xy1,yy1,xy2-xy1+4,yy2+2,7,"",0);
windows(xy1+2,yy1+2,xy2-xy1,yy2-2,7,"",1);
for (int gg=0;gg
{
FirstMeny[gg].Draw();
}
}
else
{
xy1p=FirstMeny[0].getleft()-4;
yy1p=FirstMeny[0].gettop()-4;
xy2p=FirstMeny[0].getleft()+FirstMeny[0].getwidth();
yy2p=FirstMeny[FMeny-1].gettop()-FirstMeny[0].gettop()+FirstMeny[0].getheight()+8;
sizep = imagesize(xy1p-2, yy1p-2, xy2p+6,yy1p+yy2p+4);
arrowp = malloc(sizep);
mouseoff();
getimage(xy1p-2, yy1p-2, xy2p+6, yy1p+yy2p+4, arrowp);
int dx=(xy2p-xy1p+4)/5;
int dy=(yy2p+2)/5;
for (int k=1;k
{
windows(xy1p,yy1p,dx*k,dy*k,7,"",0);
delay(30);
}
mouseon();
windows(xy1p,yy1p,xy2p-xy1p+4,yy2p+2,7,"",0);
windows(xy1p+2,yy1p+2,xy2p-xy1p,yy2p-2,7,"",1);
for (int gg=0;gg
{
FirstMeny[gg].Draw();
}
}
}
void mysound()
{
sound(1000);
delay(30);
nosound();
}

void messageabout()
{ mysound();
size=imagesize(199,99,200+241,241);
arrow=malloc(size);
getimage(199,99,200+241,241,arrow);
mouseon();
windows(200,100,240,140,7,"",0);
windows(202,102,236,15,colorhead,«Пропрограму»,1);
setcolor(11);
mouseoff();
outtextxy(230,130," КУРСОВА РОБОТА ");
outtextxy(230,150," ");
outtextxy(230,170," iнтерполяцiя по");
outtextxy(230,190," Лагранжу i Ньютону ");
outtextxy(230,210,"");
mouseon();
while (getbutton(1));
while ((!getbutton(1))&&(!kbhit()));
mouseoff();
putimage(199,99,arrow,0);
mouseon();
free(arrow);
while (kbhit()) getch();
}
void messageaboutavt()
{ mysound();
size=imagesize(199,99,200+241,241);
arrow=malloc(size);
getimage(199,99,200+241,241,arrow);
mouseon();
windows(200,100,240,140,7,"",0);
windows(202,102,236,15,colorhead,«Про автора»,1);
setcolor(11);
mouseoff();
outtextxy(230,130," КУРСОВА РОБОТА ");
outtextxy(230,150," Програму написав ");
outtextxy(230,170," ");
outtextxy(230,190," ст.гр.5AC-02 ");
outtextxy(230,210," Гега А.М.");
mouseon();
while (getbutton(1));
while ((!getbutton(1))&&(!kbhit()));
mouseoff();
putimage(199,99,arrow,0);
mouseon();
free(arrow);
while (kbhit()) getch();
}
void TButton::mousemove(int i)
{
if (mousein(left,top,left+width,top+height))
{
if (getbutton(1))
{
if (onoff!=1) setonoff(1);
}
else
if (onoff==1)
{
setonoff(0);
DoSome(i);
}
else
{
if (onoff!=Flat) setonoff(Flat);
}
}else if (onoff!=0) setonoff(0);
}
void TButton::setpos(int x,int y, char* capt,int i)
{
left=x;
top=y;
caption=capt;
Draw();
}
TButton::TButton()
{
caption='\0';
width=100;
height=18;
top=0;
left=0;
color=ButtonColor;
onoff=0;
}

void TButton::Draw()// Метод постройкикнопок------------
{
int i=onoff;
setfillstyle(1,color);
setlinestyle(0,0,0);
mouseoff();
bar(left,top,left+width,top+height);
setcolor(1);
switch (i)
{
case 0:setcolor(coloroff);break;
case 1:setcolor(colordn);break;
case 2:setcolor(coloron);break;
}
rectangle(left,top,left+width,top+height);
rectangle(left+2,top+2,left+width-2,top+height-2);
switch (i)
{
case 0:moveto(5+left,5+top);break;
case 1:moveto(6+left,6+top);break;
case 2:moveto(5+left,5+top);break;
}
if ((!Flat)&&(!i)) moveto(5+left,5+top);
outtext(caption);
mouseon();
} // Метод постройкикнопок--------------------------------

void grinit()//---Инициал графики----------------------------
{
int gdriver = DETECT, gmode, errorcode;
initgraph(&gdriver, &gmode, "");
errorcode = graphresult();
if (errorcode != grOk)
{
printf(«Graphics error: %s\n»,grapherrormsg(errorcode));
printf(«Press any key to halt:»);
getch();
exit(1);
}
mouseinit();
mouseon();
}//_voidgrinit()//-----------------------------------------------
void getcurcorpos()
{
int i;
if (BoolMeny1)
for (i=0; i
{
if (BoolMeny1)
FMeny1[i].mousemove(i);
}//===================================
MenN2=1;
if (BoolMeny2)
for (i=0; i
{
if (BoolMeny2)
FMeny2[i].mousemove(i);
}//====================================
MenN2=0;
if (BoolMeny3)
for (i=0; i
{
if (BoolMeny3)
FMeny3[i].mousemove(i);
}//====================================
OnPMenu=1;
if (BoolPMeny1)
for (i=0; i
{
if (BoolPMeny1)
FPMeny1[i].mousemove(i);
}//===================================
if (BoolPMeny2)
for (i=0; i
{
if (BoolPMeny2)
FPMeny2[i].mousemove(i);
}//====================================
OnPMenu=0;

for (i=0; i
{
button[i].mousemove(i);
}//=======================================
}
///////////////////////////////////////////////////////////////////
//----------------------------------------------------------------
//-----------------------------------------------------------------
void init()
{
mouseoff();
cleardevice();
mouseon();
windows(1,1,637,477,7,"",0);
// windows(1,25,637,27,7,"",0);
windows(3,50,630,406,7,"",1);
windows(3,3,633,20,colorhead,«Iнтерполяцiя поЛагранжу та Ньютону»,1);
// windows(1+2,20+2,637-3,27-4,7,"",1);
windows(3,460,630,17,7,"",1);
button[0].setwidth(18);
button[0].setheight(18);
button[0].setpos(615,4,«X»);
button[1].setpos(5,28," Довiдка");
button[2].setpos(110,28,«Тестування»);
button[3].setpos(215,28,«Результати»);
button[4].setpos(320,28," Вихiд");

int h;
for (h=0;h
FMeny1[h].setwidth(150);
FMeny1[0].setpos(10,53,«Про автора»);
FMeny1[1].setpos(10,53+19,«Про програму»);
for (h=0;h
FMeny2[h].setwidth(100);
FMeny2[0].setpos(115,53, «Тест 1 >»);
FMeny2[1].setpos(115,53+19,«Тест 2 >»);
for (h=0;h
FMeny3[h].setwidth(100);
FMeny3[0].setpos(220,53,«В файл»);
FMeny3[1].setpos(220,53+19,«На екран»);
FMeny3[2].setpos(220,53+19+19,«На друк»);
for (h=0;h
FPMeny1[h].setwidth(100);
FPMeny1[0].setpos(227,57,«По Лагранжу»);
FPMeny1[1].setpos(227,57+19,«По Ньютону»);
for (h=0;h
FPMeny2[h].setwidth(100);
FPMeny2[0].setpos(227,57+19,«По Лагранжу»);
FPMeny2[1].setpos(227,57+19+19,«ПоНьютону»);
}
///////////////////////////////////////////////////////////////////////
void DoSome(int i)
{
switch (i)
{
case 0:
closegraph();exit(1);
break;
case 1:
DrowMenyAll(FMeny1,Meny1,0);
BoolMeny1=1;
break;
case 2:
DrowMenyAll(FMeny2,Meny2,0);
BoolMeny2=1;
break;
case 3:DrowMenyAll(FMeny3,Meny3,0);
BoolMeny3=1;break;
case 4: closegraph();exit(0); break;
///////////////////////
case 20:messageaboutavt();break;
case 21:messageabout();;break;
case 22:;break;
case 23:;break;
////////////////////////
///////////////////////
case 30:;break;
case 31:break;
case 32:;break;
case 33:;break;
case 34:windows(3,50,630,406,7,"",1);break;
case 40:
/* int dy=30,dx=20;
for (int i=0;i
{
putpixel(i+dx,dy*IntLang(i)+120,4);
putpixel(i+dx,dy*IntNuton1(i)+120,2);
putpixel(i+dx,dy*IntNuton2(i)+120,1);
if ((i%20)==0)
{
setcolor(4);
circle(i+dx,dy*IntLang(i)+120,2);
setcolor(2);
circle(i+dx,dy*IntNuton1(i)+120,2);
setcolor(1);
circle(i+dx,dy*IntNuton2(i)+120,2);
}
}
*/
edit1[0].setpos(200,200,«Введiтьфайл»,"");
EditEnter(edit1,FEdit1);
if (exittru==27) break;
if ((in = fopen(edit1[0].gettext(), «wt»))== NULL)
{
fprintf(stderr, «Cannot open inputfile.\n»);
break;
}
fprintf(in,«Результати роботи\n»);
if (Tt!=-1000)
{
fprintf(in," Iнтерполяцiя по Лагранжу\n");
fprintf(in,«T=%10.5f\n»,Tt);
fprintf(in,«Q=%10.5f\n»,FLTt);
E=fabs(FLTt/6006);
fprintf(in,«e=%10.5f\n»,E);
}
if (Ttn!=-1000)
{
fprintf(in," Iнтерполяцiя по Ньютону\n");
fprintf(in,«T=%10.5f\n»,Ttn);
fprintf(in,«Q=%10.5f\n»,FNTt1);
E=fabs(FNTt1-IntLang(Ttn));
fprintf(in,«e=%10.5f\n»,E);
}
fclose(in);
break;
case 41:
windows(3,50,630,406,7,"",1);
setcolor(4);
mouseoff();
outtextxy(240,80,«Результати роботи»);
if (Tt!=-1000)
{
setcolor(1);
outtextxy(50,150," Iнтерполяцiя поЛагранжу");
sprintf(sd,«T=%10.5f»,Tt);
outtextxy(40,170,sd);
sprintf(sd,«Q=%10.5f»,FLTt);
outtextxy(40,190,sd);
E=fabs(FLTt/6006);
sprintf(sd,«e=%10.5f»,E);
outtextxy(40,210,sd);
}

if (Ttn!=-1000)
{
setcolor(1);
outtextxy(50,250," Iнтерполяцiя поНьютону");
sprintf(sd,«T=%10.5f»,Ttn);
outtextxy(40,270,sd);
sprintf(sd,«Q=%10.5f»,FNTt1);
outtextxy(40,290,sd);
E=fabs(FNTt1-IntLang(Ttn));
sprintf(sd,«e=%10.5f»,E);
outtextxy(40,310,sd);
}
mouseon();
break;
case 42:
fprintf(stdprn,«Rezult\r\n»);
if (Tt!=-1000)
{
fprintf(stdprn," Interpol LAGRANG\r\n");
fprintf(stdprn,«T=%10.5f\r\n»,Tt);
fprintf(stdprn,«Q=%10.5f\r\n»,FLTt);
E=fabs(FLTt/6006);
fprintf(stdprn,«e=%10.5f\r\n»,E);
}
if (Ttn!=-1000)
{
fprintf(stdprn," Interpol NUTON\r\n");
fprintf(stdprn,«T=%10.5f\r\n»,Ttn);
fprintf(stdprn,«Q=%10.5f\r\n»,FNTt1);
E=fabs(FNTt1-IntLang(Ttn));
fprintf(stdprn,«e=%10.5f\r\n»,E);
}
fprintf(stdprn, "\f");
break;
case 100:;
case 110:
edit1[0].setpos(200,200,«Введiть t (поЛагр.)»,"");
EditEnter(edit1,FEdit1);
if (exittru==27) break;
Tt=atof(edit1[0].gettext());
FLTt=IntLang(Tt);
//printf("\n f(%f)= %10.10f %10.10f %10.10f ",Tt,FLTt,FNTt1,FNTt2);
break;
case 101:;
case 111:
edit1[0].setpos(200,200,«Введiть t (поНьютону)»,"");
EditEnter(edit1,FEdit1);
if (exittru==27) break;
Ttn=atof(edit1[0].gettext());
//FLTt=IntLang(Ttn);
if (Ttn
FNTt1=IntNuton1(Ttn);
else
FNTt1=IntNuton2(Ttn);
//printf("\n f(%f)= %10.10f %10.10f %10.10f ",Tt,FLTt,FNTt1,FNTt2);
break;
///////////////////////
}
}
 

4 Розробка тестів та аналіз результату тестування
Для впевненості роботи програми проведемо їїтестування. Але тестування необхідно виконувати в два основних етапи:тестування головної програми, тобто достовірність роботи головного менюпрограми, та власне і роботи самих пунктів меню, правильність роботи самихметодів.
 
4.1 Опис тестів
При запуску програми (ехе-файл чи з середовища ТуроСі) з'являється головне меню програми (рисунок 4.2.1). Вибір необхідного пунктуменю можна здійснювати за допомогою миші, вибраний пункт зразу ж підсвічується.Для його виконання достатньо нажати клавішу „Enter” чи клацнути два рази лівою клавішеюмишки.
Тест 1: вихід з програми.
Активуємопункт меню „Вихід”, за допомогою якого можна вийти з програми при натисненнікнопки миші.
Тест 2: тестування по Лагранжу.
Активуємопункт меню „Тестування ” — „Тест 1 ” –“По Лагранжу”. З’являється вікно в якому вводимо значеннятемператури для певного тестування.
Тест 3: тестування по Ньютону.
Активуємопункт меню „Тестування” — „Тест 2 ”-–“По Ньютону”. З’являється вікно в якому вводимо значеннятемператури для певного тестування.
Тест 4: запис результатів тестування в файл.
Дляцього потрібно активувати пункт меню “Результати”-“В файл”. З’являється діалоговевікно в якому потрібно вказати назву файлу, в який безпосередньо будевиконуватись запис результатів тестування за відповідним методом.
Тест 5: вивід результатів тестування на екран.
Дляцього потрібно активувати пункт меню “Результати”-“Наекран”. На екрані зразу ж з’являютьсярезультати тестування за певним методом або обидва результати одночасно.
Тест 6: вивід результатів тестування на друк.
Цезробимо за допомогою кнопки меню “Результати”-“Надрук”.Результати тестування виведуться на друк лише в томувипадку, якщо налаштований принтер.
 
Тест 7: отримання інформації про автора.
Активуємопункт меню „Довідка”-„Про автора”. Активується діалогове вікно в якому описанікороткі відомості про автора.
Тест 8: отримання інформації про програму.
Активуємопункт меню „Довідка”-„Про програму”. Активується діалогове вікно в якому з’являється назва курсової роботи.
 
4.2 Аналіз результатів тестування
/>

Рисунок 4.2.1. Головне меню програми
 
Тест 1. Відкрили пункт меню „Вихід” — „Вихід[Alt+X]” та вийшли зпрограми.
Тест 2. Активували пункт меню „Тестування ” — „Тест 1 ” –“По Лагранжу”. Вводимо по черзі вдіалоговому вікні чисельне значення температури Т=270,320,550,750,670С.
/> />
Рисунок 4.2.2.Результати проведення тесту № 2
Тест 3. Активували пункт меню „Тестування” — „Тест 2 ”-–“По Ньютону”
Вводимо почерзі в діалоговому вікні чисельне значення температури Т=270,320,550,750,670С.
/>

Рисунок 4.2.3. Результати проведення тесту № 3
 
Тест 4. Нехай потрібно записати результатитестування в файл „Інтерполяція”. Внесемо дану інформаціюв діалогове вікно, яке зявиться на екрані.
/>

Рисунок 4.2.4.Результати проведення тесту №4
 

Тест 5. Користувача цікавить вивід результатівтестування на екран./> />
Надамо йому таку інформацію.
 
Рисунок4.2.5.Результати проведення тесту № 5
 /> />
Тест 6.Виведемо результати тестуванняна друк.
Рисунок 4.2.6. Результати проведення тесту № 6
 /> />
Тест 7. Активували пункт меню„Довідка”-„Про автора”.
Рисунок 4.2.7.Результати проведення тесту №7
/> />
Тест 8. Активуємо пункт меню„Довідка”-„Про програму”.
 
Рисунок4.2.8. Результати проведення тесту №8
Якщозробити загальний висновок з проведеного аналізу тестування програмногопродукту, то можна з впевненістю сказати про те, що проведена робота є непросто практичною реалізацією поставленого перед розробником завдання, а самепрограмою, яка готова вирішувати реальні задачі.
Допереваг даної програми можна віднести:
-   зручний інтерфейс, який засвоєю простотою приховує можливість вирішувати різноманітні завдання різногоступеня складності;
-   добре відлагоджений процесвирахування напруги матеріалу провідника за вказаною температурою, даєможливість вірно застосовувати провідники в певних приладах тощо.
Значною перевагою програми є те, що є можливість виводу надрук звітів про здійснене тестування матеріалів, що покращує конкурентоспроможністьпрограмного продукту.

5 Оцінка похибок результатів експериментальнихдосліджень
Для аналізу похибок необхідно знати точне та наближенезначення. Для функції тестування провести аналіз похибки набагато простіше,адже точне значення знаходиться дуже легко.
Похибка при інтерполяції за Лагранжем може бутиоцінена таким чином:
/> (5.1)
де />.
Похибка інтерполяції для першої формули Ньютона можнаоцінити відповідно як:  />  (5.2)
де /> (5.3)
Похибка інтерполяції для другої формулиНьютона можна оцінити відповідно як:
/>  (5.4)
де /> (1.23)

6 Оцінка ефективності комплексу програм для дослідження
 
Комплекспрограм дослідження зміни температури термопари розроблено в середовищі Turbo C .
Ефективність програми це багатокритеріальна оцінка,яка формується як на основі об’єктивних так і суб’єктивних оцінок її роботикористувачем. Але основними є:
-    швидкодія;
-    об’єм програмного коду;
-    взаємодія з іншими прикладними програмами таопераційними системами.
Дана програма є ефективним варіантом розробкипоставленої у курсовій роботі задачі завдяки тому, що були використані основиструктурного програмування:
-    окремі частини програмного коду, якібагаторазово використовуються розміщенні в окремих функціях ;
-    функції, для обробки самостійних частинизнаходяться в окремих модулях;
-    структура програми є чітко структурованою;
-    дана програма складена з урахуваннямвикористання оптимального об’єму пам’яті.
Передбаченозручний інтерфейс користувача, можливість запуску програми паралельно з іншимипрограмами (тільки в Windows), що прискорює роботу користувача і робитьпрограму більш практичною.
Загальнийрозмір програми складає 119 Кбайт. Програма не містить архівів, щосаморозпаковуються, файлів, що робить можливість її швидкого запуску прямо знезахищеної дискети. Але краще робити запуск із твердого диска, тому щошвидкість звертання до нього і швидкість запису на нього вище, ніж у дискети,так само це підвищить надійність збереження інформації.
Програмабула написана під MS-DOS, але може працювати і під іншимиоболонками, які симулюють роботу MS-DOS — Windows, OS/2, MAC,що підтримують 16-бітний код і кодування MS-DOS.
Дані, які отримані в результаті оцінки ефективності комплексу програмприведені в таблиці, що представлена нижче.
Таблиця 6.1 Дослідження ефективності програмиФайл Розмір до трансляції (Кб) Розмір ЕХЕ-файла (Кб) Час виконання задачі (с) INTERP.CPP 1 79,9 1,5 MENYS.H 17 - 0,2 EDITS.H 5 - 0,2 CALC.H 2 - 0,2 WIND.H 1 - 0,1 MOUSE.H 2 - 0,1 MINMENY.H 18 - 0,3

7Розробка пакету документів для супроводженнякомплексу програм
7.1 Розробка інструкції програмісту
Дана програма написана на мові програмування Св середовищі Turbo C. Вона призначена длядослідження зміни температури термопари за допомогою чисельних методів.Використовується інтерполяція по Лагранжу і по Ньютону. Оцінюється похибкаметодів інтерполяції.
Програму можна розширити, але мінятиалгоритм не рекомендується. Дана програма, хоч і була розроблена на доситьпотужному комп’ютері, не ставить високих вимог до ПК користувача, тому вонаможе вільно працювати на кожному підприємстві чи організації де це потрібно.
Таблиця 7.1.1Потреби до ресурсів ПКПроцесор ОЗУ Монітор HDD FDD 486DX 8Mb 14” 600Mb 3.14 FDD
7.1.1 При написані даної програми використовується методструктурного програмування .
7.1.2 Програма знаходиться на дискеті на якій є всінеобхідні файли для роботи з даною програмою.
7.1.3 Програма складається з таких файлів:
Таблиця7.1.2 Файлипрограмного продукту.Назва Призначення INTERP.CPP Основна програма. MENYS.H Бібліотека з меню та кнопками DIALOGS.H Бібліотека з вікнами для вводу тексту CALC.H Бібліотека з функціями для роботи з обчисленням. Даний файл можна доробляти, редагувати в залежності від потреб користувача. WIND.H Бібліотека малює вікна, панельки
Вробочому каталозі програми повинні бути розташовані файли:
·  INTERP.EXE – файл запуску програми
·  EGAVGA.BGI – драйвер підтримки графічного режиму
·  KEYRUS.COM – драйвер клавіатури, для підтримкиукраїнських і російських шрифтів
·  START.BAT – запуск KEYRUS.COM і INTERP.EXE.
Якщовсі ці файли знаходяться в одному каталозі, то програму можна запускати.
 
7.2 Інструкція користувачеві
 
7.2.1 Дана програма може використовуватися для покращенняефективності роботи інженера на підприємстві.
7.2.2 До початку роботи з програмою всі файли, щознаходяться на дискеті потрібно скопіювати в папку на жорсткому диску./> />
7.2.3 Для запуску програми потрібновідкрити файл INTERP.EXE – це файл запуску програми, після чого з’являєтьсяголовне меню програми.
Рисунок 7.2.1. Головне меню програми

7.2.4 Перехід по пунктах меню відбувається за допомогоюклавіш управління курсором чи за допомогою миші.
7.2.5 Для активізаціїпотрібного пункту меню використовується клавіша чи клацнути лівою клавішею миші.
7.2.6 Програма працює в інтерактивномурежимі, тобто реагує на кожну дію користувача.
7.2.7 Для виходу з програми потрібно вголовному меню вибрати пункт “Вихід” – „Вихід[Alt+X]” і натиснути .

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

Використана література
 
1. Проценко С.В.Техніка програмування мовою Сі: Навч.посібник.-К.: Либідь, 1993.
2. Методичнівказівки до лабораторних робіт з курсу “Обчислювальніметоди та застосування ЕОМ ”, Частина І, Вінниця ВПІ 1992.
3. Міщенко С.М.,Конспект лекцій з обчислювальних методів та застосування ЕОМ, ВНТУ,2004.
4. Шуп Т. Розв’язання інженерних задач на ЕОМ.-М.:, 1982.
5. Бахвалов Н.С.Чисельні методи.Т.І. Аналіз, алгебра, ЗДР.-М: Наука, 1975.
6. Хеммінг Р.В.Чисельні методи – М.: Наука,1972
7. Лященко
8. Турчак Л.І.Основи чисельних методів. – М. Наука,1987.

Додаток А
Міністерство освіти інауки України
Вінницькийнаціональний технічний університет
Інститут автоматикиелектроніки та комп’ютерних систем управління
Кафедра комп’ютернихсистем управління
Технічне завдання
на виконання курсовоїроботи
” Дослідження зміни температури термопари за допомогоючисельних методів на ЕОМ.”
При розробці даної роботи необхідно виконуватислідуючи етапи:
1.1 Найменування та галузь застосування об’єктарозробки: цей комплекс програм може бути застосований на будь-якомупідприємстві для полегшення та покращення результатів роботи інженерів
1.2 Підстава для проведення роботи: дослід штучногоінтелекту
1.3 Дата початку роботи:8.01.04.
1.4 Дата закінчення роботи: 10.04.04.
1.5 Мета призначення розробки: створити як найкращийкомплекс програм для полегшення та покращення роботи інженера підприємства
1.6Вимоги до надійності системи: використанняструктурного програмування, окреме підключення модулів, єдине меню, тощо – усеце забезпечує надійність системи. Програмне забезпечення та супроводжуючатекстова документація повинна задовільнити таким гостам:
ГОСТ 19.701-90 (МСО 5807-85) ГОСТ 19.101-77 (СТСЄВ1626-7а)
ГОСТ 19.781-74 ГОСТ 7.1-84 ДСТУ 3008-85
ГОСТ 19.401-78 ГОСТ 19.106-78
1.7 Стадії та етапи розробки:
1 етап: розробка індивідуального та технічногозавдання.(до 15.01.04)
2 етап: огляд та аналіз методів моделювання змінитемператури термопари на ЕОМ (до 1.02.04).
3 етап: розробка алгоритмів моделювання змінитемператури термопари на ЕОМ (до 20.02.04).
4 етап: розробка керуючої програми, яка повиннапрацювати в режимі багато ієрархічного меню (до 10.03.04).
5 етап: об’єднання всіх програмних модулів татестування керуючої програми (до 15.03.04).
6 етап: розробка тестів, тестування та демонстраціяроботи всього комплексу (до 15.03.04).
7 етап: розробка технічної документації тапояснювальної записки (до 20.03.04).
8 етап: вимоги до безпеки: розроблене програмнезабезпечення повинно відповідати вимогам Сніп та ДЕСТів до робочого місцяоператора ЕОМ.

Додаток Б
 
Лістингимодулів
 
ЛістингмодуляEDITS.H
#include
constcoloredit=14; // цвет самого поля для ввода
constcolordialog=7; //цвет окна диалог
constFEdit1=1;
constFEdit2=0;
constFEdit3=0;
constFEdit4=0;
constFEdit5=0;
constFEdit6=0;
void*arrow;
intsize,xy1,xy2,yy1,yy2;
void*arrowp;
intsizep,xy1p,xy2p,yy1p,yy2p;
intFEdit=0;
classTEdit
{
public:
TEdit();
~TEdit(){};

voidEditDrow();
voidsetwidth(int x){width=x;};
voidsetheight(int x){height=x;};
voidsettop(int x){top=x;};
voidsetleft(int x){left=x;};
voidsetonoff(int x,int k=1){
onoff=x;
if(k) EditDrow();
};
voidsetcol(int x){color=x;};
voidsetcapt(char *x){caption=x;};
voidsettext(char x[20]){strcpy(text,x);};
intgetwidth()const {return width;};
intgetheight()const {return height;};
intgettop()const {return top;};
intgetleft()const {return left;};
intgetonoff()const {return onoff;};
intgetcol()const {return color;};
constchar* getcapt(){return caption;};
constchar* gettext(){return text;};
voidmousemove(int i);
voidonkeypress(int i);
voidsetpos(int x,int y, char* capt,char* texts,int i=0);
private:
intwidth;
intheight;
inttop;
intleft;
intonoff;
intcolor;
char*caption;
chartext[20];
};
voidTEdit::setpos(int x,int y, char* capt,char* texts,int i)
{
strcpy(text,texts);
left=x;
top=y;
caption=capt;
if(i) EditDrow();
}
TEdit::TEdit()
{
caption='\0';
text[0]='2';
text[1]='3';
text[2]='\0';
width=170;
height=18;
top=0;
left=0;
color=coloredit;
onoff=0;
}
voidTEdit::EditDrow()
{
inti;
intx=left;
inty=top;
intxx=width;
intyy=height;
setfillstyle(1,color);
setlinestyle(0,0,0);
mouseoff();
bar(x,y,x+xx,y+yy);
setcolor(8);
line(x-1,y-1,x-1,y+yy+1);
line(x-1,y-1,x+xx+1,y-1);
setcolor(15);
line(x,y+yy+1,x+xx+1,y+yy+1);
line(x+xx+1,y,x+xx+1,y+yy+1);
moveto(6+x,6+y);
setcolor(color+10);
outtext(text);
line(x+strlen(text)*8+6,y+15,x+strlen(text)*8+10,y+15);
moveto(x,y-15);
setcolor(color+13);
outtext(caption);
if(onoff) setcolor(11);
elsesetcolor(colordialog);
rectangle(x-4,y-4,x+xx+4,y+yy+4);
mouseon();
}
//////////////////////////////////////////////////////////////////
//ОБЪЯВЛЕНИЕ ОБЪЕКТОВ
//////////////////////////////////////////////////////////////////
TEdit*TempEdit, edit1[FEdit1];
//char *strrez[FEdit];
intexittru=1;
voidTEdit::mousemove(int i)
{
if(mousein(left,top,left+width,top+height))
{
if(!onoff)
if(getbutton(1))
{
intj;
for( j=0;j
if((i!=j)&&(TempEdit[j].getonoff())) TempEdit[j].setonoff(0);
setonoff(1);
}
}
}
voidTEdit::onkeypress(int i)
{
if((onoff)&&(kbhit()))
{
charc=getch();
switch(c)
{
case8: if (strlen(text))
{
text[strlen(text)-1]='\0';
EditDrow();
}break;
case9: setonoff(0);
if(i==(FEdit-1)) TempEdit[0].setonoff(1);
elseTempEdit[i+1].setonoff(1);break;
case13:exittru=13;break;
case27:exittru=27;break;
case0:
switch(getch())
{
case72:
setonoff(0);
if(i==0) TempEdit[FEdit-1].setonoff(1);
elseTempEdit[i-1].setonoff(1);
break;//up
case80:
setonoff(0);
if(i==(FEdit-1)) TempEdit[0].setonoff(1);
elseTempEdit[i+1].setonoff(1);
break;//down
};break;
}
if(((c>=32)||(c
{
intslen=strlen(text);
text[slen]=c;
text[slen+1]='\0';
EditDrow();
}
}
}
voidEditInitall()
{
edit1[0].setpos(200,200,"","");
}
voidEditInit()
{
TempEdit[0].setonoff(1,0);
inti;
for(i=1;i
TempEdit[i].setonoff(0,0);
xy1=TempEdit[0].getleft()-10;
yy1=TempEdit[0].gettop()-45;
xy2=TempEdit[FEdit-1].getleft()+TempEdit[FEdit-1].getwidth()+10;
yy2=TempEdit[FEdit-1].gettop()+TempEdit[FEdit-1].getheight()-yy1+10;
size= imagesize(xy1-2, yy1-2, xy2+4, yy1+yy2+2);
arrow= malloc(size);
mouseoff();
getimage(xy1-2,yy1-2, xy2+4, yy1+yy2+2, arrow);
mouseon();
windows(xy1,yy1,xy2-xy1+2,yy2,colordialog,"",0);
windows(xy1+2,yy1+2,xy2-xy1-2,18,1,«Ввiд»,1);
for( i=0;i
{
TempEdit[i].EditDrow();
}
}
voidEditEnter(TEdit *edit1, int rrr)
{
inti;
FEdit=rrr;
TempEdit=edit1;
EditInit();
exittru=0;
while(!exittru)
{
for(i=0; i
{
TempEdit[i].onkeypress(i);
TempEdit[i].mousemove(i);
}
}
mouseoff();
putimage(xy1-2,yy1-2,arrow,0);
mouseon();
free(arrow);
}
///////////////////////END DIALOG ////////////////////////////////
 
ЛістингмодуляWIND.H
#include
#include «mouse.h»
void windows(int x,int y,int xx,int yy,int color,char s[100],int p)
{
int i;
setfillstyle(1,color);
setlinestyle(0,0,0);
mouseoff();
bar(x,y,x+xx,y+yy);
if (p) setcolor(8);
else setcolor(15);
line(x-1,y-1,x-1,y+yy+1);
line(x-1,y-1,x+xx+1,y-1);
if (! p) setcolor(8);
else setcolor(15);
line(x,y+yy+1,x+xx+1,y+yy+1);
line(x+xx+1,y,x+xx+1,y+yy+1);
if (! p) moveto(5+x,5+y);
else moveto(6+x,6+y);
setcolor(color+10);
outtext(s);
mouseon();
}
ЛістингмодуляCALC.H
#include
#include
#include
#include
const N=6;
float x[N]={0, 20, 40, 60, 80, 100},
y[N]={-0.67, -0.254, 0.171, 0.609, 1.057, 1.517};
//float x[N]={1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7},
// y[N]={1, 0.90909, 0.83333, 0.76923, 0.71329, 0.66667, 0.625, 0.58824};
float
dy0=y[1]-y[0];
int COO=0;
float H=x[1]-x[0];
double stepin(double x1,int f)
{
if (f==0) return 1.0;
double rez=x1;
for (int i=1;i
rez*=x1;
// printf("\nx1=%f ^=%d rez=%f if_0=%d",x1,f,rez, rez==0);
return rez;
}
double faktorial(int k)
{
double rez=1;
for (int i=1;i
rez*=i;
// printf("\n fact(%d)=%f",k,rez);
return rez;
}
double GetA(int i)
{
// if (i) return (stepin(((y[i]-y[i-1])/H),i)*(1/faktorial(i)));
if (i) return (stepin((dy0),i)/(faktorial(i)*stepin(H,i)));
else
return y[0];
}
double IntNuton1(double X1) //Интерполяц по NUTON 1
{
// return 0;
double D,S;
S=0;
int i,j;
for (i=0;i
{
D=GetA(i);
for (j=0;j
{
D*=(X1-x[j]);
}
S+=D;
// printf("\nS=%10.10f",S);
}
return S;
}
double GetB(int i)
{
if (i) return (stepin(((y[N-i]-y[N-i-1])/H),i)*(1/faktorial(i)));
else
return y[N-1];
}
double IntNuton2(double X1) //Интерполяц по NUTON 2
{
// return 0;
double D,S;
S=0;
int i,j;
for (i=0;i
{
D=GetB(i);
for (j=(N-1);j>=(N-i);j--)
{
D*=(X1-x[j]);
}
S+=D;
}
return S;
}
double IntLang(double X1) //Интерполяц по Лагранджу
{
// return 0;
// printf("\n%d",COO++);
double D,S;
S=0;
int i,j;
for (i=0;i
{
D=1;
for (j=0;j
{
if (i!=j) D*=(X1-x[j])/(x[i]-x[j]);
}
S+=D*y[i];
}
return S;
}

ЛістингмодуляMOUSE.H
#include
#include
#include
#include
struct REGPACK reg;
//инициализирует мышу
int mouseinit()
{ reg.r_ax=0;
intr(0x33,®);
if (!reg.r_ax) {
textcolor(15+128);
gotoxy(23,10);printf("╔═════════ER R O R═════════╗");
gotoxy(23,11);printf("║ MOUSE IS NOT PRESENT! ║");
gotoxy(23,12);printf("║ Press any key… ║");
gotoxy(23,13);printf("╚═══════════════════════════╝");
getch();
textcolor(7);
return 1;
}
return 0;
}
//показывает курсор мыши
void mouseon()
{
reg.r_ax=1;
intr(0x33,®);
}
//прячет курсор мыши
void mouseoff()
{
reg.r_ax=2;
intr(0x33,®);
}
// возвращает координаты мыши
void getmousexy(int *x,int *y)
{
reg.r_ax=3;
intr(0x33,®);
*x=reg.r_cx;
*y=reg.r_dx;
}
//устанавливает координаты
void setmousexy(int x,int y)
{
reg.r_cx=x;
reg.r_dx=y;
reg.r_ax=4;
intr(0x33,®);
}
const left=1;
const right=2;
int getbutton(int but)
{
reg.r_ax=5;
reg.r_bx=but;
intr(0x33,®);
return (reg.r_ax)==but;
}
int mousein(int x1,int y1,int x2,int y2)
{
int x,y;
getmousexy(&x,&y);
if (x>=x1 & x=y1 & y
}

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


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

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

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

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.