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

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

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<=5; 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<FMeny;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<=5; 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<FMeny;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();

}//_void grinit()//-----------------------------------------------

void getcurcorpos()

{

int i;

if (BoolMeny1)

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

{

if (BoolMeny1)

FMeny1[i].mousemove(i);

}//===================================

MenN2=1;

if (BoolMeny2)

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

{

if (BoolMeny2)

FMeny2[i].mousemove(i);

}//====================================

MenN2=0;

if (BoolMeny3)

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

{

if (BoolMeny3)

FMeny3[i].mousemove(i);

}//====================================

OnPMenu=1;

if (BoolPMeny1)

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

{

if (BoolPMeny1)

FPMeny1[i].mousemove(i);

}//===================================

if (BoolPMeny2)

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

{

if (BoolPMeny2)

FPMeny2[i].mousemove(i);

}//====================================

OnPMenu=0;

for (i=0; i<ButtonN; 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<Meny1;h++)

FMeny1[h].setwidth(150);

FMeny1[0].setpos(10,53,"Про автора");

FMeny1[1].setpos(10,53+19,"Про програму");

for (h=0;h<Meny2;h++)

FMeny2[h].setwidth(100);

FMeny2[0].setpos(115,53, "Тест 1 >");

FMeny2[1].setpos(115,53+19,"Тест 2 >");

for (h=0;h<Meny3;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<PMeny1;h++)

FPMeny1[h].setwidth(100);

FPMeny1[0].setpos(227,57,"По Лагранжу");

FPMeny1[1].setpos(227,57+19,"По Ньютону");

for (h=0;h<PMeny2;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<110;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 input file.\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<50)

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 Для активізації потрібного пункту меню використовується клавіша <ENTER> чи клацнути лівою клавішею миші.

7.2.6 Програма працює в інтерактивному режимі, тобто реагує на кожну дію користувача.

7.2.7 Для виходу з програми потрібно в головному меню вибрати пункт “Вихід” - „Вихід[Alt+X]” і натиснути <ENTER>.

Висновки

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

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

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

В третій главі подано лістинг всієї програми, а саме головної програми та лістинг головних функцій.

В четвертій главі виконано тестування меню та тестування самої програми.

В п'ятій главі зроблено оцінку похибок отриманих результатів.

В шостій главі виконано дослідження на ефективність програми, приведено таблицю ефективності.

В сьомій главі подана інструкція системному програмісту та користувачеві описані мінімальні характеристики комп'ютера для роботи даної програми, зроблено перелік файлів без яких неможлива робота програми. В пункті 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 <stdlib.h>

const coloredit=14; // цвет самого поля для ввода

const colordialog=7; //цвет окна диалог

const FEdit1=1;

const FEdit2=0;

const FEdit3=0;

const FEdit4=0;

const FEdit5=0;

const FEdit6=0;

void *arrow;

int size,xy1,xy2,yy1,yy2;

void *arrowp;

int sizep,xy1p,xy2p,yy1p,yy2p;

int FEdit=0;

class TEdit

{

public:

TEdit();

~TEdit(){};

void EditDrow();

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

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

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

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

void setonoff(int x,int k=1){

onoff=x;

if (k) EditDrow();

};

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

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

void settext(char x[20]){strcpy(text,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;};

const char* gettext(){return text;};

void mousemove(int i);

void onkeypress(int i);

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

private:

int width;

int height;

int top;

int left;

int onoff;

int color;

char *caption;

char text[20];

};

void TEdit::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;

}

void TEdit::EditDrow()

{

int i;

int x=left;

int y=top;

int xx=width;

int yy=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);

else setcolor(colordialog);

rectangle(x-4,y-4,x+xx+4,y+yy+4);

mouseon();

}

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

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

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

TEdit *TempEdit, edit1[FEdit1];

// char *strrez[FEdit];

int exittru=1;

void TEdit::mousemove(int i)

{

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

{

if (!onoff)

if (getbutton(1))

{

int j;

for ( j=0;j<FEdit;j++)

if ((i!=j)&&(TempEdit[j].getonoff())) TempEdit[j].setonoff(0);

setonoff(1);

}

}

}

void TEdit::onkeypress(int i)

{

if ((onoff)&&(kbhit()))

{

char c=getch();

switch (c)

{

case 8: if (strlen(text))

{

text[strlen(text)-1]='\0';

EditDrow();

}break;

case 9: setonoff(0);

if (i==(FEdit-1)) TempEdit[0].setonoff(1);

else TempEdit[i+1].setonoff(1);break;

case 13:exittru=13;break;

case 27:exittru=27;break;

case 0:

switch (getch())

{

case 72:

setonoff(0);

if (i==0) TempEdit[FEdit-1].setonoff(1);

else TempEdit[i-1].setonoff(1);

break;//up

case 80:

setonoff(0);

if (i==(FEdit-1)) TempEdit[0].setonoff(1);

else TempEdit[i+1].setonoff(1);

break;//down

};break;

}

if (((c>=32)||(c<0))&&(strlen(text)<19))

{

int slen=strlen(text);

text[slen]=c;

text[slen+1]='\0';

EditDrow();

}

}

}

void EditInitall()

{

edit1[0].setpos(200,200,"","");

}

void EditInit()

{

TempEdit[0].setonoff(1,0);

int i;

for (i=1;i<FEdit;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<FEdit;i++)

{

TempEdit[i].EditDrow();

}

}

void EditEnter(TEdit *edit1, int rrr)

{

int i;

FEdit=rrr;

TempEdit=edit1;

EditInit();

exittru=0;

while (!exittru)

{

for (i=0; i<FEdit; 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 <graphics.h>

#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 <math.h>

#include <stdlib.h>

#include <string.h>

#include <process.h>

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<f;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<=k;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<N;i++)

{

D=GetA(i);

for (j=0;j<i;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<N;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<N;i++)

{

D=1;

for (j=0;j<N;j++)

{

if (i!=j) D*=(X1-x[j])/(x[i]-x[j]);

}

S+=D*y[i];

}

return S;

}

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

#include <dos.h>

#include <conio.h>

#include <stdio.h>

#include <process.h>

struct REGPACK reg;

//инициализирует мышу

int mouseinit()

{ reg.r_ax=0;

intr(0x33,&reg);

if (!reg.r_ax) {

textcolor(15+128);

gotoxy(23,10);printf("г=========E R R O R=========¬");

gotoxy(23,11);printf("¦ MOUSE IS NOT PRESENT! ¦");

gotoxy(23,12);printf("¦ Press any key ..... ¦");

gotoxy(23,13);printf("L===========================-");

getch();

textcolor(7);

return 1;

}

return 0;

}

//показывает курсор мыши

void mouseon()

{

reg.r_ax=1;

intr(0x33,&reg);

}

//прячет курсор мыши

void mouseoff()

{

reg.r_ax=2;

intr(0x33,&reg);

}

// возвращает координаты мыши

void getmousexy(int *x,int *y)

{

reg.r_ax=3;

intr(0x33,&reg);

*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,&reg);

}

const left=1;

const right=2;

int getbutton(int but)

{

reg.r_ax=5;

reg.r_bx=but;

intr(0x33,&reg);

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<=x2 & y>=y1 & y<=y2) return 1; else return 0;

}

Додаток В

Структура дискети

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


© 2010 РЕФЕРАТЫ