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

 

Програма для обчислення визначеного інтегралу була написана Турбо Сі 3.1, компілятор який дає досить оптимізований програмний код, і скомпільована в 16-ти бітному коді. Передбачено зручний інтерфейс користувача, можливість запуску програми паралельно з іншими програмами (тільки в Windows), що прискорює роботу користувача і робить програму більш практичною.

Загальний розмір програми складає 52,7 Кбайт. Програма не містить архівів, що саморозпаковуються, що робить можливість її швидкого запуску прямо з незахищеної дискети. Але краще робити запуск із твердого диска, тому що швидкість звертання до нього і швидкість запису на нього вище, ніж у дискети, так само це підвищить надійність збереження інформації. У принципі дана програма - примітивна демонстраційна версія, яку можна розвити в дійсну гарну програму: організувати запис результатів на диск, вивід на принтер, меню зі спливаючими підказками. При використанні Visual C++ існує можливість підключення безлічі бібліотек і модулів, при підключенні яких можна зробити дійсно професійну програму, що буде робити усе, що хочеш і буде проста у користуванні.

Програма була написана під MS-DOS, але може працювати і під іншими оболонками, які емулюють роботу MS-DOS - Windows, OS/2, MAC, що підтримують 16-бітний код і кодування MS-DOS.

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

Мінімальні технічні вимоги для програмного i апаратного забезпечення для інсталяції програми:

- Операційна система: MS-DOS 6.22, Windows 3.1, Windows 95, 98, ME, 2000, Windows NT, OS/2 чи MAC (підтримка 16-бітного коду і символьного кодування DOS)

- 512 Kбайт ОЗУ при роботі з MS-DOS;

- VGA Card

- 55 Kбайт на жорсткому диску чи дискеті

- дисковод 1.44 Mб.

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

 

Таблиця 6.1. Розмір вихідних файлів

Назва модуля Розмір, Кб Опис
lew_int.cpp 14,38 Головна програма
CWindow.cpp 3,93 Опис класу „CWindows”
int_prg.hlp 0.090 Файл допомоги
int_aut.hlp 0.141 Файл допомоги
lew_int.exe 52.7 Виконуюча програма

 



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

 

Інструкція програмісту

Опис вихідного коду

Код програми на С++ міститься в файлах з розширеням *.срр. Для зручного користування програма розбита на 2 модулі (бібліотеки), призначення яких описане в пп.2.5.

 

Зміна інтегруючої функції.

Для зміни інтегруючої функції в усіх методах, за виключенням тестування у файлі lew_int.cpp знайти функцію f, яка має такий опис: float f(CD fd), та змінити лише формулу. При цьому слід знати, що змінна fd.fit – це і є змінна, по якій проводиться інтегрування. Змінна fd.kt – це коефіцієнт, який може приймати різні значення.

Для зміни інтегруючої функції в тестуванні необхідно таким же чином змінити функцію f1(CD fd) або f2(CD fd) для тесту №1 або тесту №2 відповідно.

 

Зміна тексту допомоги

Щоб змінити текст допомоги потрібно відкрити в будь-якому текстовому редакторі, шо підтримує кодування DOS, файли int_prg.cpp для зміни тексту допомоги про програму, або int_aut.cpp для зміни тексту допомоги про автора.

 



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

 

Запуск

Запуск програми здійснюється після запуску MS-DOS чи емулятора DOS у випадку використання Windows, OS/2 чи MAC. Файл, що запускає програму – lew_int.exe. Після запуску програми перед користувачем з'являється її інтерфейс, рис.7.1.

 

Рисунок 7.1.Iнтерфейс програми

 

Ввод данних

Для вводу даних (крок, межі інтегрування, межі зміни коефіцієнту k) вибираємо пункт “Зміна параметрів”. У випадаючому вікні(рис.7.2) вибираємо необхідний параметер, який хочемо змінити. При виборі пункуту „Крок” програма робить запит на ввод кроку(рис.7.3.). При виборі пункту „Межі інтегрування” програма робить запит на ввод початкового та кінцевого проміжків інтегрування(рис.7.4). Для зміни меж коефіцієнта k необхідно вибрати пункт „Межі коефіцієнта к”(рис.7.5). При цьому слід мати на увазі, що якщо замість числової інформації ввести текстову (букви), то результати роботи програми стануть непередбачуваними, можливий збій і аварійний вихід з програми. Також слід пам”ятати, що при дослідженні методами Нютона-Котеса та Чебишева кількість проміжків інтегрування неповинна перевищувати 7, тому що саме на таку максимальну кількість призначені алгоритми даних методів.


Рисунок 7.2. Підменю зміни параметрів

 

Рисунок 7.3. Зміна кроку дослідження функції

 

Рисунок 7.4. Ввод нових меж інтегрування


Рисунок 7.5. Зміна меж зміни коефіціету k

 



Перегляд результатів

Результати роботи програми з”являються при виборі необхідного методу розв’язання поставленої задачі(рис.7.6). Результати з’являються не більше ніж через 1 с. після вводу даних.

Для спостереження залежності результату від коефіцієнта k дані групуються в таблицю (рис.7.7.), яку можна переглянути, вибравши метод рішення поставленої задачі з меню „Дослідження”.

 

Рисунок 7.6. Вибір методу розв’язання задачі


Рисунок 7.7. Перегляд данних

 

Для виведення інфоромації про програму або автора вибираємо пункт “Про програму” або „Про автора” відповідно з меню допомоги „?”.

 


Вихід з програми

Для виходу з програми достатньо вибирати пункт “Вихід”, і натиснути клавішу <Enter>.



Висновки

 

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

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

В другому розділі наведено математичну модель програми.

Третій розділ присвячений тестуванню програми, а також дослідженню об’єкта на ЕОМ.

В четвертому розділі проводиться аналіз результатів дослідження.

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

В шостому розділі приводиться аналіз ефективності програми.

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

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



Додаток А

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

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

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

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

 

Узгоджено Розроблено

 

Керівник __________С.М. Москвіна

Студент_________ О.В.Левицька

”_____” __________2004р.

 

Технічне завдання

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

” Дослідження еліптичного інтегралу на ЕОМ.”

 

При розробці даної роботи необхідно виконувати слідуючи етапи:

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 етап: вимоги до безпеки: розроблене програмне забезпечення повинно відповідати вимогам Сніп та ДЕСТів до робочого місця оператора ЕОМ.

 



Додаток Б

Лістинг головної програми

 

#include <stdio.h>

#include <conio.h>

#include <io.h>

#include <sys\stat.h>

#include <stdlib.h>

#include <math.h>

#include "cwindow.cpp"

void FrameW(int x1,int y1,int x2,int y2,int tb=3,int tk=15,int rk=15){

int ii;

textcolor(rk);

textbackground(tb);

//int x=wherex(),

// y=wherey();

gotoxy(x1,y1); cprintf("г");

for(ii=x1+1;ii<=x2-1;ii++)

cprintf("-");

cprintf("");

for(ii=y1+1;ii<=y2-1;ii++){

gotoxy(x1,ii);

cprintf("¦");

}

gotoxy(x1,y2); cprintf("L");

for(ii=x1+1;ii<=x2-1;ii++)

cprintf("-");

cprintf("-");

for(ii=y1+1;ii<=y2-1;ii++){

gotoxy(x2,ii);

cprintf("¦");

}

window(x1+1,y1+1,x2-1,y2-1);

clrscr();

textcolor(tk);

}

void cursor_off(){

union REGS r;

r.x.ax=0x100;

r.x.cx=0x2607;

int86(0x10,&r,&r);

}

void cursor_on(){

union REGS r;

r.x.ax=0x100;

r.x.cx=0x506;

int86(0x10,&r,&r);

}

void VievZavd(void){

window(1,1,79,24);

FrameW(4,7,35,11);

cprintf("  f ________________");

cprintf("\n\rF(k,f)=S v1-(k^2)*sin(Q)^2 dQ");

cprintf("\n\r  0");

}

class CD {

public:

float fip,fik,fit,kp,kk,kt,h,hi;

public:

CD(float,float,float,float,float);

void Change_fi(void);  // интервал

void Change_k(void);  // коефициенты

void Change_h(void);  // шаг

void Viev(void);  // вывод значений

};

CD::CD(float _fip,float _fik,float _kp,float _kk,float _h){

fip=_fip;

fik=_fik;

kp=_kp;

kk=_kk;

h=_h;

hi=0.1;

}

void CD::Change_fi(void){

window(1,1,80,25);

CWindows win1(24,9,56,16,"");

win1.ShowWindow();

cprintf("Змiна меж iнтегрування");

cprintf("\n\rВведiть новi межi fi");

cprintf("\n\r fi_поч=");

cursor_on();

scanf("%f",&(this->fip));

cprintf("\r fi_кiнц=");

scanf("%f",&(this->fik));

cursor_off();

Viev();

win1.HideWindow();

}

void CD::Change_k(void){

window(1,1,80,25);

CWindows win1(24,9,56,16,"");

win1.ShowWindow();

cprintf("Змiна меж коефiцiэнтiв");

cprintf("\n\rВведiть новi коефiцiэнти");

cursor_on();

cprintf("\n\rk_поч=");

scanf("%f",&(this->kp));

cprintf("\rk_кiнц=");

scanf("%f",&(this->kk));

cursor_off();

Viev();

win1.HideWindow();

}

void CD::Change_h(void){

window(1,1,80,25);

CWindows win1(24,9,56,16,"");

win1.ShowWindow();

cprintf(" Змiна кроку");

cprintf("\n\rВведiть новий крок");

cprintf("\n\rh=");

cursor_on();

scanf("%f",&(this->h));

cursor_off();

Viev();

win1.HideWindow();

}

void CD::Viev(void){ //

window(1,1,79,24);

FrameW(4,3,50,5);

cprintf("fip=%4.2f;fik=%4.2f;kp=%4.2f;kk=%4.2f;h=%5.4f",fip,fik,kp,kk,h);

}

void Ramky(void) //Ф-я для вивода рамки

{ //синего цвета на весь экран

window(1,1,80,25);

textbackground(15);

clrscr();

window(3,2,78,24);

textbackground(1);

clrscr();

for(int i=1;i<=1747;i++) cprintf("-");

window(1,1,80,25);

}

void PrintfStrMenu(char str[20]) //Вывод невыделеного пункта меню

{

text_info TextBegin; //начальные установки текста

gettextinfo(&TextBegin); //Получить начальные установки

textcolor(0);

textbackground(15);

cprintf("%s",str);

textattr(TextBegin.attribute);

}

void PrintfStrMenuP(char str[20])  //Вывод выделеного пунка меню

{

text_info TextBegin; //начальные установки текста

gettextinfo(&TextBegin); //Получить начальные установки

textcolor(0);

textbackground(2);

cprintf("%s",str);

textattr(TextBegin.attribute);

}

int menu() //Ф-я вывода главного меню

{ //возыращает номер выделеного пункта

int num=1; //Режим меню

char key=1; //Опрос клавиши

char numMin=1; //Мин. реж. меню

char numMax=5; //Макс. реж. меню

int PosMenuX=3, //Положение верхнего

PosMenuY=1, //левого угла меню

HightMenu=1, //Высота меню

WidthMenu=75; //Ширина меню

//*******************************************

window(PosMenuX,PosMenuY,PosMenuX+WidthMenu,PosMenuY+HightMenu-1);

cursor_off();

do{

gotoxy(1,1);

if (num==1){

PrintfStrMenuP("? ");

}

else{

PrintfStrMenu("? ");

}

if (num==2){

PrintfStrMenuP(" Дослiдження ");

}

else{

PrintfStrMenu(" Дослiдження ");

}

if (num==3){

PrintfStrMenuP(" Тестування ");

}

else{

PrintfStrMenu(" Тестування ");

}

if (num==4){

PrintfStrMenuP(" Змiна параметрiв ");

}

else{

PrintfStrMenu(" Змiна параметрiв ");

}

if (num==5){

PrintfStrMenuP(" Вихiд ");

}

else{

PrintfStrMenu(" Вихiд ");

}

if((key=getch())==0){  //если код расширеной клавиши,

switch(getch()){ // то щитываем очередной из буф. клавиатуры

case 72:;break; //клавиша вверх

case 75:--num;break;

case 77:++num;break;

case 80:key=13;break; //клавиша вниз

}

if(num<numMin) num=numMax; //если выбираем больше максимального,. то получаем минимальный

if(num>numMax) num=numMin; // <= а здесь наоборот

}

else{

if((key>=numMin+48)&&(key<=numMax+48))

num=key-48;

}

} while(!(key==13));  //выход, если нажат ентер

return num;

}

//*************************  Выпадающие меню **************************

void PrintfStrMenu_x(char str[20]) //Вывод невыделеного пункта меню

{

text_info TextBegin; //начальные установки текста

gettextinfo(&TextBegin); //Получить начальные установки

textcolor(0);

textbackground(7);

cprintf("%s\n\r",str);

textattr(TextBegin.attribute);

}

void PrintfStrMenuP_x(char str[20])  //Вывод выделеного пунка меню

{

text_info TextBegin; //начальные установки текста

gettextinfo(&TextBegin); //Получить начальные установки

textcolor(0);

textbackground(6);

cprintf("%s\n\r",str);

textattr(TextBegin.attribute);

}

int menu_x(int _PosMenuX,int _PosMenuY,int _WidthMenu,int _HightMenu,char _numMax=1,char s1[]="123321",char s2[]="",char s3[]="",char s4[]="",char s5[]="") //Ф-я вывода главного меню

{ //возыращает номер выделеного пункта

int num=1; //Режим меню

char key=1; //Опрос клавиши

char numMin=1; //Мин. реж. меню

char numMax=_numMax; //Макс. реж. меню

int PosMenuX=_PosMenuX, //Положение верхнего

PosMenuY=_PosMenuY, //левого угла меню

HightMenu=_HightMenu, //Высота меню

WidthMenu=_WidthMenu; //Ширина меню

char *s[6];

s[1]=s1;

s[2]=s2;

s[3]=s3;

s[4]=s4;

s[5]=s5;

//*******************************************

cursor_off();

window(1,1,80,25);

CWindows win_1(PosMenuX,PosMenuY,PosMenuX+WidthMenu,PosMenuY+HightMenu);

win_1.ShowWindow();

do{

gotoxy(1,1);

for(int i=1;i<=numMax;i++){

if(i==num) PrintfStrMenuP_x(s[i]);

else PrintfStrMenu_x(s[i]);

}

if((key=getch())==0){  //если код расширеной клавиши,

switch(getch()){ // то щитываем очередной из буф. клавиатуры

case 72:--num;break; //клавиша вверх

case 75:{key=27;}break;

case 77:{key=27;}break;

case 80:++num;break; //клавиша вниз

}

if(num<numMin) num=numMax; //если выбираем больше максимального,. то получаем минимальный

if(num>numMax) num=numMin; // <= а здесь наоборот

}

else{

if((key>=numMin+48)&&(key<=numMax+48))

num=key-48;

}

} while(!((key==13)||(key==27)));  //выход, если нажат ентер

win_1.HideWindow();

if(key==27) return 0;

return num;

}

void HelpAbout(char FileName[]) //ф-я вывода помощи из соответствующего файла

{

FILE *help_f;

window(1,1,80,25);

CWindows win1(4,5,77,20,"Допомога");

win1.ShowWindow();

if ((help_f=fopen(FileName,"r"))==NULL)  //если неудается открыть, то выводим соответственно сообщение

{

cprintf("\n\rПомилка при вiдкриттi файла допомоги %s",FileName);

cprintf("\n\rДопомога недоступна");

cprintf("\n\rНажмiть будь-яку клавiшу...");

getch();

}

else //Иначе выводим файл помощи

{

char ch;

fread(&ch,sizeof(char),1,help_f);

while(!feof(help_f))

{

if (ch=='\n') cprintf("\n\r");

else

cprintf("%c",ch);

fread(&ch,sizeof(char),1,help_f);

}

fclose(help_f);

cprintf("\n\rНажмiть будь-яку клавiшу...");

getch();

}

win1.HideWindow();

}

//***********************  Математические ф-и *********

float f(CD fd){

return sqrt(1-fd.kt*fd.kt*sin(fd.fit)*sin(fd.fit));

}

float f1(CD fd){

return fd.fit;

}

float f2(CD fd){

return fd.fit*exp(-fd.fit);

}

// Ф-и метода Симпсона

float simp(CD sd, float F(CD)=f)

{

float A=sd.fip,

B=sd.fik,

S=0.0;

sd.fit=sd.fip;

int N=int((B-A)/(2.0*sd.hi));

float E=1;

float H;

if(N==0)

{H=0;}

else

{H=(B-A)/(2.0*N);};

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

sd.fit=sd.fip;

S=F(sd);

sd.fit=sd.fik;

S=S+F(sd);

for(int i=1;i<=2*N-1;i++){

sd.fit=sd.fip+(i*H);

S=S+(3+E)*F(sd);

E=-E;

}

S=S*H/3;

return S;

}

void ResultSimps(CD rsd){

window(1,1,80,25);

CWindows win1(2,6,79,22,"Метод Сiмпсона");

win1.ShowWindow();

cprintf(" k  F(k,f) X  F(k,f) X  F(k,f) X  F(k,f) X  F(k,f) X  F(k,f)");

cprintf("\n\r----------");

rsd.kt=rsd.kp;

int xpos=1,

ypos=3;

do{

gotoxy(xpos,ypos++);

if (ypos>15) {ypos=3;xpos+=12;}

cprintf("¦%4.2f %6.4f",rsd.kt,simp(rsd));

rsd.kt=rsd.kt+rsd.h;

}while(rsd.kt<=rsd.kk);

gotoxy(xpos,ypos++);

float eps=pow(rsd.kk-rsd.kp,5)/(180*pow(2*(rsd.kk-rsd.kp)/rsd.hi,2))*1000;

cprintf("eps = %10.8f",eps);

getch();

win1.HideWindow();

}

// Ф-и метода Нютона-Котеса

float nuton(CD fd, float F(CD)=f){

float A=fd.fip,

B=fd.fik,

S=0,

H[8];

int i;

int n=7;

float h=(B-A)/(n*1.00);

H[0]=751.0/17280;H[7]=H[0]; H[1]=3577.0/17280;H[6]=H[1];

H[2]=1323.0/17280;H[5]=H[2]; H[3]=2989.0/17280;H[4]=H[3];

fd.fit=A;

for(i=0;i<=n;i++){

S=S+F(fd)*H[i];

fd.fit+=h;

}

S=S*(B-A);

return S;

}

void ResultNuton(CD rtd){

window(1,1,80,25);

CWindows win1(2,6,79,22,"Метод Нютона-Котеса");

win1.ShowWindow();

//cprintf("");

cprintf(" k  F(k,f) X  F(k,f) X  F(k,f) X  F(k,f) X  F(k,f) X  F(k,f)");

cprintf("\n\r--------------");

rtd.kt=rtd.kp;

int xpos=1,

ypos=3;

do{

gotoxy(xpos,ypos++);

if (ypos>15) {ypos=3;xpos+=12;}

cprintf("¦%4.2f %6.4f",rtd.kt,nuton(rtd));

rtd.kt=rtd.kt+rtd.h;

}while(rtd.kt<=rtd.kk);

getch();

win1.HideWindow();

}

// Ф-и метода Чебышева

float cheb(CD fd,float F(CD)=f){

float A=fd.fip,

B=fd.fik,

S=0,

Z[8],

X[8],

C[8];

int n=7;

int i;

X[1]=-0.883862; X[7]=-X[1];

X[2]=-0.529657; X[6]=-X[2];

X[3]=-0.323912; X[5]=-X[3];

X[4]=-0.000000;

for(i=1;i<=n;i++){

Z[i]=(B+A)/2.0+(B-A)*X[i]/2.0;

}

for(i=1;i<=n;i++){

fd.fit=Z[i];

S=S+F(fd);

}

S=S*(B-A)/n;

return S;

}

void ResultCheb(CD rtd){

window(1,1,80,25);

CWindows win1(2,6,79,22,"Метод Чебышева");

win1.ShowWindow();

//cprintf("");

cprintf(" k  F(k,f) X  F(k,f) X  F(k,f) X  F(k,f) X  F(k,f) X  F(k,f)");

cprintf("\n\r--------------");

rtd.kt=rtd.kp;

int xpos=1,

ypos=3;

do{

gotoxy(xpos,ypos++);

if (ypos>15) {ypos=3;xpos+=12;}

cprintf("¦%4.2f %6.4f",rtd.kt,cheb(rtd));

rtd.kt=rtd.kt+rtd.h;

}while(rtd.kt<=rtd.kk);

getch();

win1.HideWindow();

}

void Sravnenia(CD rtd){

window(1,1,80,25);

CWindows win1(2,6,79,22,"Порiвняння методiв");

win1.ShowWindow();

cprintf(" k Y(Сiмпс) Y(Нют)  Y(Чеб)  ");

cprintf("\n\r--------------------------");

rtd.kt=rtd.kp;

do{

cprintf("\n\r ¦%4.2f  %10.8f  %10.8f  %10.8f",rtd.kt,simp(rtd),nuton(rtd),cheb(rtd));

rtd.kt=rtd.kt+rtd.h;

}while(rtd.kt<=rtd.kk);

float eps=pow(rtd.kk-rtd.kp,5)/(180*pow(2*(rtd.kk-rtd.kp)/rtd.hi,2))*1000;

cprintf("\n\r eps = %4.3f",eps);

getch();

win1.HideWindow();

}

void Test(CD rtd,float FF(CD)){

window(1,1,80,25);

CWindows win1(2,6,79,22,"Тестування методiв");

win1.ShowWindow();

cprintf(" k Y(Сiмпс) Y(Нют)  Y(Чеб)  ");

cprintf("\n\r------------------------");

rtd.fik=rtd.fip;

do{

cprintf("\n\r ¦%4.2f  %10.8f  %10.8f  %10.8f",rtd.fik,simp(rtd,FF),nuton(rtd,FF),cheb(rtd,FF));

rtd.fik=rtd.fik+rtd.h;

}while(rtd.fik<=1.02);

getch();

win1.HideWindow();

}

//***********************  Главная программа  *********

void main()

{

// textbackground(3);

// clrscr();

// textcolor(14);

CD d(0.0,1.0,0,1.0,0.1); //Глобальные данные

Ramky();

VievZavd();

d.Viev();

int exit=1;

do

{

switch(menu())

{

case 1:{

switch(menu_x(3,2,15,4,2,"Про автора","Про прогаму")){

case 1:HelpAbout("int_aut.hlp");break;

case 2:HelpAbout("int_prg.hlp");break;

}break;

}

case 2:{

switch(menu_x(6,2,25,6,4,"Метод Сiмпсона","Метод Нютона-Котеса","Метод Чебишева","Порiвнян. м-дiв")){

case 1:ResultSimps(d);break;

case 2:ResultNuton(d);break;

case 3:ResultCheb(d);break;

case 4:Sravnenia(d);break;

}break;

}

case 3:{

switch(menu_x(19,2,25,4,2,"Тест1|y=S x dx","Тест2|y=Sx*exp(-x)dx")){

case 1:Test(d,f1);break;

case 2:Test(d,f2);break;

case 3:;break;

}break;

}

case 4:{

switch(menu_x(31,2,25,5,3,"Крок","Межi iнтергув.","Межi коеф. k")){

case 1:d.Change_h();;break;

case 2:d.Change_fi();break;

case 3:d.Change_k();break;

}break;

}

case 5:exit=0;break;

}

}

while (exit);

}

Лістинг бібліотеки CWindow.cpp

#include <stdio.h>

#include <conio.h>

#include <dos.h>

class CAplication{

public:

text_info TextInfo;

CAplication();

};

CAplication::CAplication(){

gettextinfo(&TextInfo);

}

class CWindows{

private:

int x1,y1,x2,y2;

int SizeMatrix; // Размер матрицы окна(к-во елементов для массива)

char CharFrame[9];

char FrameColor, // Цвет рамки

FrameBackGround, // Фон рамки

TextColorInWin, // Цвет текста в окне

TextBackGroundInWin, // Цвет фона в окне

*Caption[20];

protected:

char *MemWindowTXT;

int *MemWindowATR;

void PrintScreenWindow();

void ScreenPrintWindow();

void get_char(int *, char *);

void put_char(int,char);

public:

CWindows();

CWindows(int,int,int,int,char*);

~CWindows();

void ShowWindow();

void HideWindow();

};

CWindows::CWindows(int _x1,int _y1,int _x2,int _y2,char _c[20]=""){

x1=_x1;

y1=_y1;

x2=_x2;

y2=_y2;

SizeMatrix=(x2-x1+1)*(y2-y1+1);

CharFrame[0]='-';

CharFrame[1]='-';

CharFrame[2]='-';

CharFrame[3]='¦';

CharFrame[4]='-';

CharFrame[5]='=';

CharFrame[6]='L';

CharFrame[7]='¦';

FrameColor=15,

FrameBackGround=7,

TextColorInWin=15,

TextBackGroundInWin=7;

*Caption=_c;

}

CWindows::CWindows(void){

CWindows(21,6,60,20);

}

CWindows::~CWindows(){

delete MemWindowTXT;

delete MemWindowATR;

}

void CWindows::PrintScreenWindow(){

MemWindowATR=new int[SizeMatrix];

MemWindowTXT=new char[SizeMatrix];

if(MemWindowATR==NULL) {printf("Ошибка"); getch();}

if(MemWindowTXT==NULL) {printf("Ошибка"); getch();}

int k=0;

for(int i=y1;i<=y2;i++)

for(int j=x1;j<=x2;j++){

gotoxy(j,i);

get_char(MemWindowATR+k,MemWindowTXT+k);

++k;

}

//printf("\n%i",k);

}

void CWindows::ScreenPrintWindow(){

window(1,1,80,25);

int k=0;

for(int i=y1;i<=y2;i++)

for(int j=x1;j<=x2;j++){

gotoxy(j,i);

put_char(*(MemWindowATR+k),*(MemWindowTXT+k));

++k;

}

}

void CWindows::ShowWindow(){

window(1,1,80,25);

PrintScreenWindow();

textcolor(FrameColor);

textbackground(FrameBackGround);

gotoxy(x1,y1); cprintf("-");

for(int i=x1+1;i<=x2-1;i++)

cprintf("-");

cprintf("-");

gotoxy(x1+2,y1);cprintf("[%s]",*Caption);

for(i=y1+1;i<=y2-1;i++){

gotoxy(x1,i);

cprintf("¦ ");

}

gotoxy(x1,y2); cprintf("L");

for(i=x1+1;i<=x2-1;i++)

cprintf("=");

cprintf("-");

for(i=y1+1;i<=y2-1;i++){

gotoxy(x2-1,i);

cprintf(" ¦");

}

window(x1+2,y1+1,x2-2,y2-1);

textbackground(TextBackGroundInWin);

textcolor(TextColorInWin);

clrscr();

}

void CWindows::get_char(int *attr, char *ch){

union REGS r;

r.h.ah= 0x8;

r.h.bh= 0;

int86(0x10,&r,&r);

*attr=r.h.ah;

*ch=(char)r.h.al;

}

void CWindows::put_char(int attr,char ch){

union REGS r;

r.h.ah= 0x9;

r.h.al= ch;

r.h.bl= attr;

r.h.bh= 0;

r.x.cx= 1;

int86(0x10,&r,&r);

}

void CWindows::HideWindow(){

ScreenPrintWindow();

}



Додаток В

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

 



Література

1. Методичні вказівки до лабораторних робіт з курсу „Обчислювальні методи та застосування ЕОМ”. Частина ІІІ. Вінниця ВПІ 1992р.

2. Лященко М.Я., Головань М.С. Чисельні методи:Підручник.-К.:Либідь.

3. Волков Е.А. Численые методы: Учеб. пособие для вузов. – 2-е издание.

4. Краскевич В.Е., Зеленский К.Х. Численые методы в инжинерных расчетах. – К.: Вища школа.

5. Язык Си++: учеб. пособие. – 5-е изд. –М:. Финансы и статистика, 2001.

6. Пискунов Н. С. Дифферинциальное и интегральное исчисление для втузов, т 2: Учебное пособие для втузов. – 13-е изд.– М.: Наука, 1985.–560 с.

7. Информатика: Учебник / под ред. Проф. Н.В. Макаровой. - М.: Финансы и статистика, 1997.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: