Смекни!
smekni.com

Розвязок інтеграла метоном Нютона Котеса та Сімсона (стр. 6 из 6)

{

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("&bsol;n&bsol;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("&bsol;n&bsol;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("&bsol;n&bsol;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("&bsol;n&bsol;r--------------------------");

rtd.kt=rtd.kp;

do{

cprintf("&bsol;n&bsol;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("&bsol;n&bsol;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("&bsol;n&bsol;r------------------------");

rtd.fik=rtd.fip;

do{

cprintf("&bsol;n&bsol;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;

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

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("&bsol;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.