/* METODO DE BISECCION */ #include #include #include #include double fun(double); void main(void) { double a, b, c, tol, h, prod_fun; int i, bandera=0; char corre = 's'; clrscr(); printf("\n\t T A B U L A C I O N "); while (corre == 's') { clrscr(); printf("\n\t Dame el valor inicial de la tabulaci¢n: "); scanf("%lf", &a); printf("\n\t Dame el valor del espaciamiento: "); scanf("%lf", &h); printf("\n\t x \t y"); for (i = 0; i < 10; i++) { printf("\n\t % lf \t\t % lf ", a+i*h, fun(a+i*h)); } printf("\n\t Deseas tabular otra vez (s/n) "); corre = tolower(getche()); } do { clrscr(); printf("\n\t Dame el valor del limite inferior a = "); scanf("%lf", &a); printf("\n\t Dame el valor del limite superior b = "); scanf("%lf", &b); }while( ( fun(a) * fun(b) ) > 0 || a > b); printf("\n\t Dame el valor de la tolerancia tol = "); scanf("%lf", &tol); clrscr(); printf("\n\n\t\t P A R A M E T R O S"); printf("\n\t Intervalo inicial *** ( %lf, %lf ) *** ", a , b); printf("\n\t Tolerancia = %lf", tol); printf("\n\n i a c b "); printf("f(a) f(c) f(b) f(a)*f(b)"); i = 0; prod_fun = fun(a) * fun(b); do { i++; c = ( a + b ) / 2; printf("\n %2d % 2.5lf % 2.5lf % 2.5lf ", i, a, c, b); printf("% 3.5lf % 3.5lf % 3.5lf ", fun(a), fun(c), fun(b)); printf("% 3.5lf", fun(a)*fun(b)); if( (fun(c) * fun(a)) > 0 ) { a = c; } else { b = c; } if( (i%5) == 0) { if( fabs(prod_fun) < fabs(fun(a)*fun(b)) ) { bandera = 1; } } }while( fabs( fun(c) ) > tol && bandera == 0); if(bandera) { printf("\n\n\t\t FUNCIàN CON UNA SINGULARIDAD"); } else { printf("\n\n\t La raiz es %lf ", c); getch(); } getch(); } double fun(double R) { double X; R=(pow(2.71828,-0.005*X))*cos(sqrt(200-(0.01*pow(X,2)*0.05)))-0.01; return (R); }