Расчет площади сложной фигуры с помощью метода имитационного моделирования - (реферат)
p>При разработке программы автор упустил возможность работы с числовыми массивами. Поэтому, можно улучшить программу переписав ряд процедур под массивы , что сделает программу менее массивной и более наглядной. Широкое возможности по улучшению программы в области разработки алгоритмов ввода различный классов функций.Приложение 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 S=i_num(b3, b2, b1, b0, c3, c2, c1, c0, x1, x2);
init();
draft_f(b3, b2, b1, b0, c3, c2, c1, c0, x1, x2, min, max, k, i, l, j);
draft_e(b3, b2, b1, b0, c3, c2, c1, c0, x1, x2, min, max, S, k, i+180, l+100, j+160, N); setcolor(2);
outtextxy(0, 340, " Press q for exit ");
} while (( getch()) ! = 'q');
}
Файл matim. c
/* Подпpогpамма содеpжит пpоцедуpы математической обpаботки функций*/ #include
#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=Fx;
} while ( x *amin=Fmin;
*amax=Fmax;
}
/*Вычисление коpней кубичного уpавнения */
int f_root(float a0, float a1, float a2, float a3, float x1, float x2, float e, float *k1, float *k2, float *k3)
{ float ku1, ku2, ku3, x, a, b;
int c=0;
x=x1;
do
{
a=a3*pow(x, 3)+a2*pow(x, 2)+a1*x+a0;
x+=e;
b=a3*pow(x, 3)+a2*pow(x, 2)+a1*x+a0;
if (a*b { c++;
switch(c) {
case 1: ku1=x;
break;
case 2: ku2=x;
break;
case 3: ku3=x;
break;
default: printf("\n Внимание ! !! \n Ошибка в matim. c (f_root). "); break;
};
}
} while (x *k1=ku1;
*k2=ku2;
*k3=ku3;
return c;
}
float fun(float a3, float a2, float a1, float a0, float x)
{
float s;
s=a3*x*x*x+a2*x*x+a1*x+a0;
return (s);
}
Файл window. c
/* Подпpогpаммы pаботы с окнами*/
#include
#include
#include
#include
#include
/*функция pисования pамки окна */
void border(int sx, int sy, int ex, int ey){
int i;
for (i=sx+1; i gotoxy(i, sy);
putch(205);
gotoxy(i, ey);
putch(205);
}
for (i=sy+1; i gotoxy(sx, i);
putch(186);
gotoxy(ex, i);
putch(186);
}
gotoxy(sx, sy); putch(201);
gotoxy(sx, ey); putch(200);
gotoxy(ex, sy); putch(187);
gotoxy(ex, ey); putch(188);
}
void talkerror(void)
{
textcolor(15);
textbackground(4);
gotoxy(1, 18);
cprintf(" ATTATETION ! DATE ERROR . Press any key to continue.... "); sound(1700); delay(100); nosound(); delay(100);
sound(1400); delay(100); nosound();
getch();
gotoxy(1, 18);
textcolor(15);
textbackground(1);
clreol();
}
void get_poly(float *bo3, float *bo2, float *bo1, float *bo0, float *co3, float *co2, float *co1, float *co0, float *xo1, float *xo2, int *No)
{
float b3, b2, b1, b0, c3, c2, c1, c0, x1, x2;
int xb1=5, yb1=4, xb2=76, yb2=22, c, k=3, k1=10, k2=50, N;
char
bc0[5], bc1[5], bc2[5], bc3[5], cc0[5], cc1[5], cc2[5], cc3[5], x1c[5], x2c[5], nc[5]; textbackground(11);
clrscr();
window(xb1, yb1, xb2, yb2);
textcolor(15);
textbackground(1);
clrscr();
do {
textcolor(15);
textbackground(1);
gotoxy(k1, k); puts("b3= ");
gotoxy(k1, k+1); puts("b2= ");
gotoxy(k1, k+2); puts("b1= ");
gotoxy(k1, k+3); puts("b0= ");
gotoxy(k2, k); puts("c3= ");
gotoxy(k2, k+1); puts("c2= ");
gotoxy(k2, k+2); puts("c1= ");
gotoxy(k2, k+3); puts("c0= ");
gotoxy(k1, k+6); puts("x1=");
gotoxy(k2, k+6); puts("x2=");
gotoxy(k1, k+10); puts("QUANTITY OF ADRESSES TO RNG ");
B3: gotoxy(k1, k); puts("b3= ");
gotoxy(k1+4, k); gets(bc3); sscanf(bc3, "%f", &b3);
if (fabs(b3)>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; }