jueves, 8 de noviembre de 2007

BISECCION C

#include
#include
#include


float a; /* valor a (extremo izquierdo del intervalo) */
float b; /* valor b (extremo derecho del intervalo) */
float c; /* valor c (punto medio del intevalo) */
float fa; /* f(a) */
float fb; /* f(b) */
float fc; /* f(c) */
float ea; /* error aproximado */
float tol; /* valor de rolerancia */

float f(float x){
return (pow(x,3)-1.5) ;
}

void biseccion();

int main(){

char opc=' ';


while(opc!='n'){

clrscr();

biseccion();

printf("\n\n\t\t Correr nuevamente [s/n]= ");
fflush(stdin);
scanf("%c",&opc);
}


return 0;
}

void biseccion(){

int i=0,n;

clrscr();
printf("\n\t METODO DE BISECCION\n");
printf("\n\t Este metodo busca una raiz en un intervalo dado.");
printf("\n\t escribir el intervalo (a,b) a buscar\n\n");
printf("\t\t a= ");
scanf("%f",&a);
printf("\t\t b= ");
scanf("%f",&b);
printf("\n\t Con una tolerancia de :\n");
printf("\t\t Tolerancia = ");
scanf("%f",&tol);

fa=f(a);
fb=f(b);

if(fa*fb<0){
n=0;
clrscr();
printf("\n\n\t METODO DE BISECCION\n");
printf("\n\ti\ta\tb\tc\tf(c)\tError");
printf("\n\t------------------------------------------------");
ea = fabs((b-a)/b);

while(ea>tol)
{
c = (a+b)/2;
fc = f(c);
ea = fabs((b-a)/b);
printf("\n\t%d \t%6.4f\t%6.4f\t%6.4f\t%6.4f\t%6.4f",i+1,a,b,c,fc,ea);
if(fa*fc<0) {
b=c;
} else {
a=c;
}
i++;

} //fin del for de biseccion
printf("\n\n\t Tolerancia = %f",tol);
printf("\n\n\t Error aproximado = %f",ea);
printf("\n\n\t La raiz aproximada es x= %f",c);
}//fin del if para biseccion
else{
printf("\n\t En este intervalo no hay una raiz para la funcion");
}//fin del if principal
}

No hay comentarios: