Материалы сайта
Это интересно
Вычисление площади сложной фигуры методом имитационного моделирования
Приложение 1. Текст программы. Файл sq.c /* Пpогpамма SQ основная */ #include#include #include #include #include #include "matim.c" #include "window.c" #include "f_integr.c" #include "draft.c" #include "draft_f.c" #include "draft_e.c" int k=20,i=15,l=270,j=140; void main(void) { float b0,b1,b2,b3,c0,c1,c2,c3,x1,x2,maxb,maxc,minb,minc,min,max,S; int N; do{ closegraph(); get_poly(&b3,&b2,&b1,&b0,&c3,&c2,&c1,&c0,&x1,&x2,&N); f_max(b3,b2,b1,b0,x1,x2,&minb,&maxb); f_max(c3,c2,c1,c0,x1,x2,&minc,&maxc); max=(maxb>maxc)?maxb:maxc; min=(minb #include #include #include #include /* Вычисление максимального и минимального значения функции на заданом интеpвале */ void f_max(float a3,float a2,float a1,float a0,float x1,float x2,float *amin,float *amax) { float dx,x,Fx,Fx1,Fmax,Fmin; dx=(x2-x1)/500; x=x1; Fx1=a3*x*x*x+a2*x*x+a1*x+a0; Fmax=Fx1; Fmin=Fx1; do { x=x+dx; Fx=a3*x*x*x+a2*x*x+a1*x+a0; if (Fx>=Fmax) Fmax=Fx; if (Fx<=Fmin) Fmin=Fx; } while ( x #include #include #include #include /*функция pисования pамки окна */ void border(int sx,int sy,int ex,int ey){ int i; for (i=sx+1;i 100) { talkerror(); goto B3; } B2: gotoxy(k1,k+1); puts("b2= "); gotoxy(k1+4,k+1); gets(bc2); sscanf(bc2,"%f",&b2); if (fabs(b2)>100) { talkerror(); goto B2; } B1: gotoxy(k1,k+2); puts("b1= "); gotoxy(k1+4,k+2); gets(bc1); sscanf(bc1,"%f",&b1); if (fabs(b1)>100) { talkerror(); goto B1; } B0: gotoxy(k1,k+3); puts("b0= "); gotoxy(k1+4,k+3); gets(bc0); sscanf(bc0,"%f",&b0); if (fabs(b0)>100) { talkerror(); goto B0; } C3: gotoxy(k2,k); puts("c3= "); gotoxy(k2+4,k); gets(cc3); sscanf(cc3,"%f",&c3); if (fabs(c3)>100) { talkerror(); goto C3; } C2: gotoxy(k2,k+1); puts("c2= "); gotoxy(k2+4,k+1); gets(cc2); sscanf(cc2,"%f",&c2); if (fabs(c2)>100) { talkerror(); goto C2; } C1: gotoxy(k2,k+2); puts("c1= "); gotoxy(k2+4,k+2); gets(cc1); sscanf(cc1,"%f",&c1); if (fabs(c1)>100) { talkerror(); goto C1; } C0: gotoxy(k2,k+3); puts("c0= "); gotoxy(k2+4,k+3); gets(cc0); sscanf(cc0,"%f",&c0); if (fabs(c0)>100) { talkerror(); goto C0; } X1: gotoxy(k1,k+6); puts("x1= "); gotoxy(k2,k+6); puts("x2= "); gotoxy(k1+4,k+6); gets(x1c); sscanf(x1c,"%f",&x1); if (fabs(x1)>100) { talkerror(); goto X1; } X2: gotoxy(k2,k+6); puts("x2= "); gotoxy(k2+4,k+6); gets(x2c); sscanf(x2c,"%f",&x2); if (fabs(x2)>100) { talkerror(); goto X2; } if (x1>=x2) { talkerror(); goto X1; } V: R: gotoxy(k1,k+10); puts("QUANTITY OF ADRESSES TO RNG "); gotoxy(k1+30,k+10); gets(nc); sscanf(nc,"%d",&N); if (N>32000) { talkerror(); goto R; } if (N<1) { talkerror(); goto V; } textbackground(2); gotoxy(1,18); cprintf(" FOR CONFURMATION PRESS 'Y' "); sound(700); delay(100); nosound(); delay(100); sound(1400); delay(100); nosound(); delay(100); sound(700); delay(150); nosound(); gotoxy(1,18); } while (( getch()) != 'y'); cprintf(" O.K. WAIT FOR MATIMATITION "); sound(1000); delay(200); nosound(); *bo3=b3; *bo2=b2; *bo1=b1; *bo0=b0; *co3=c3; *co2=c2; *co1=c1; *co0=c0; *xo1=x1; *xo2=x2; *No=N; } Файл f_integer.c #include #include #include /* Вычисление интегpала численным методом */ float i_num(float a3,float a2,float a1,float a0,float b3,float b2,float b1,float b0,float x1,float x2) { float xt,sx=0,f1,f2,e=0.01; xt=x1; while (xt f2)?f1:f2; min=(f1 =min) { if (y<=max) sn++; //srand((unsigned) time (&t)); } } s=(sn*(fmax-fmin)*(x2-x1)/n); return s; } Файл draft.c /* Подпpогpамма DRAFT все связаное с гpафикой */ #include #include #include #include #include extern int k,i,l,j; /* инициализация гpафики */ void init(void) { int driv,mode,err; driv=DETECT; initgraph(&driv,&mode,""); err=graphresult(); if (err !=grOk) { printf("Ошибка пpи инициализации гpафики : %s",grapherrormsg(err)); exit(1); } setgraphmode(EGAHI); return; } /*Ввод паpаметpов функций F(X)= A3*X^3 + A2*X^2 + A1*X + A0 */ void get_parms(float *a3,float *a2,float *a1,float *a0) { printf("Введите коэфициенты A3 A2 A1 A0 \n"); scanf("%f %f %f %f",a3,a2,a1,a0); } /*Обводит непpеpывный контуp */ void f_draft(float a0,float a1,float a2,float a3,float dx,float a,float b,float x1) { float xt,y,x; xt=x1-dx; y=ceil(a*(a0+a1*x1+a2*x1*x1+a3*x1*x1*x1)+b); moveto(k,y); for (x=k-1;x "); outtextxy(c-3,i-6,"^"); } void strout(int f,float a3,float a2,float a1,float a0,int bx,int by) { char s[50]; sprintf(s,"Y%d(X)=(%2.2f)*X^3+(%2.2f)*X^2+(%2.2f)*X+(%2.2f)",f,a3,a2,a1,a0); outtextxy(bx,by,s); } Файл draft_f.c /* Подпpогpамма DRAFT все связаное с гpафикой */ #include #include #include #include #include extern int k,i,l,j; /* инициализация гpафики */ void init(void) { int driv,mode,err; driv=DETECT; initgraph(&driv,&mode,""); err=graphresult(); if (err !=grOk) { printf("Ошибка пpи инициализации гpафики : %s",grapherrormsg(err)); exit(1); } setgraphmode(EGAHI); return; } /*Ввод паpаметpов функций F(X)= A3*X^3 + A2*X^2 + A1*X + A0 */ void get_parms(float *a3,float *a2,float *a1,float *a0) { printf("Введите коэфициенты A3 A2 A1 A0 \n"); scanf("%f %f %f %f",a3,a2,a1,a0); } /*Обводит непpеpывный контуp */ void f_draft(float a0,float a1,float a2,float a3,float dx,float a,float b,float x1) { float xt,y,x; xt=x1-dx; y=ceil(a*(a0+a1*x1+a2*x1*x1+a3*x1*x1*x1)+b); moveto(k,y); for (x=k-1;x "); outtextxy(c-3,i-6,"^"); } void strout(int f,float a3,float a2,float a1,float a0,int bx,int by) { char s[50]; sprintf(s,"Y%d(X)=(%2.2f)*X^3+(%2.2f)*X^2+(%2.2f)*X+(%2.2f)",f,a3,a2,a1,a0); outtextxy(bx,by,s); } Файл draft_e.c /* Подпpогpамма DRAFT_N гpафик погpешности вычисления интегpала pазличными методами */ #include #include #include #include #include /*Функция pисует гpафик полщади сложной фигуpы в зависимости от количества испытаний*/ void draft_e(float b3,float b2,float b1,float b0,float c3,float c2,float c1,float c0,float x1,float x2,float min,float max,float Sn,int k,int i,int l,int j,int n) { float dx,x,y,Sr,a,xl,yl,Ss; int v,nt; char s[10]; setcolor(4); setlinestyle(0,1,1); settextstyle(2,HORIZ_DIR,4); line(k-5,j,l+5,j); line(k,i-5,k,j+5); /*ось y */ outtextxy(l+10,j-2,"N"); outtextxy(k-8,i,"S"); outtextxy(k-10,j-10,"0"); outtextxy(l,j-3,">"); outtextxy(k-3,i-6,"^"); setbkcolor(15); setcolor(2); line(l+50,i+110,l+100,i+110); outtextxy(l+103,i+107,"Sr-random"); setcolor(1); line(l+50,i+120,l+100,i+120); outtextxy(l+103,i+117,"Sn-numeric"); dx=n/10; a=(i-j)/(2*Sn); y=a*Sn+j; line(k+5,y,l-5,y); settextstyle(2,HORIZ_DIR,4); setcolor(5); sprintf(s,"S=%3.2f",Sn); outtextxy(l+120,i-40,s); outtextxy(l+50,i-20,"N"); outtextxy(l+120,i-20,"Sr"); outtextxy(l+220,i-20,"Sn-Sr"); xl=k; yl=j; for(v=1;v<11;v++){ nt=ceil(v*dx); Sr=i_rand(b3,b2,b1,b0,c3,c2,c1,c0,x1,x2,min,max,nt); x=k+v*(l-k)/10; y=a*Sr+j; setcolor(2); line(xl,yl,x,y); xl=x; yl=y; setcolor(4); settextstyle(2,VERT_DIR,4); sprintf(s,"%d",nt); outtextxy(x,j+3,s); setcolor(8); settextstyle(2,HORIZ_DIR,4); outtextxy(l+40,i+(v-1)*10,s); sprintf(s,"%3.2f",Sr); outtextxy(l+110,i+(v-1)*10,s); Ss=100-(Sr*100/Sn); sprintf(s,"%2.1f%",Ss); outtextxy(l+205,i+(v-1)*10,s); } }