hola estoy haciendo un programa k t ecalcula la raiz dandole un intervalo, con bucles y alo e conseguido y ahora la tengo k hacer cn funciones.os pongo el de bucles:
#include<stdio.h>
#include<math.h>
void main (){
double x1,x2,y1,y2,um,x3,y3;
int u,cont;
printf("Introducir menor punto del intervalo \n");
scanf("%lf",&x1);
printf("Introducir segundo punto del intervalo \n");
scanf("%lf",&x2);
if((x1==x2)||(x1>x2)) {
printf("\n ERROR:intervalo erroneo \n");
return;
}
printf("\n Introduzca Exponente Umbral\n");
scanf("%d",&u);
y1=sin(x1);
y2=sin(x2);
if (u<=0) {
printf("\n Error:Exponente erroneo \n");
return;
}
um=pow10(-u);
printf("\n El Umbral es: %1.0E\n", um);
if ( ((y1<0) && (y2>0)) || ((y1>0) && (y2<0)) ) {
cont=0;
do {
x3= ((x1+x2)/2);
y3= sin(x3);
if (((y3>0) && (y1<0)) || ((y3<0) && (y1>0)) ) {
x2=x3;}
else
x1=x3;
if(y3<0)
y3=-y3;
cont++;
}
while(y3>=um);
printf("\n La raiz es x=%1.20lf\n",x3);
printf("\n El numero de iteraciones es= %d\n",cont);
}
else
printf("\n Error:Intervalo erroneo \n");
return;
}
este funciona ahora el k he echo cn funciones(tengo k hacerlo cn recursividad):
#include<stdio.h>
#include<math.h>
double calcula_funcion(double);
double biseccion(double,double);
double um;
void main()
{
double x1,x2,um,raiz;
int u;
printf("Introducir menor punto del intervalo: ");
scanf("%lf",&x1);
printf("Introducir segundo punto del intervalo: ");
scanf("%lf",&x2);
if((x1==x2)||(x1>x2)){
printf("\n ERROR:intervalo erroneo \n");
return;
}
printf("\n Introduzca Exponente Umbral\n");
scanf("%d",&u);
if (u<=0) {
printf("\n Error:Exponente erroneo \n");
return ;
}
um=pow10(-u);
printf("\n El Umbral es: %1.0E\n",um); */
raiz=biseccion(x1,x2);
if(raiz==0){
printf("error");
}
else
printf("la raiz es:%1.20lf",raiz);
}
double calcula_funcion(double a)
{
double devolver;
devolver=sin(a);
return(devolver);
}
double biseccion(double x1,double x2)
{
double y1,y2,x3,y3,resultado;
y1=calcula_funcion(x1);
y2=calcula_funcion(x2);
if ( y1*y2>0 ){
return (x1);
}
if( y1*y2<0 ) {
x3=((x1+x2)/2);
y3=calcula_funcion(x3);
}
if (((y3>0) && (y1<0)) || ((y3<0) && (y1>0)) ) {
x2=x3;
}
else
x1=x3;
if(y3<0){
y3=-y3;
}
if(y3<um){
biseccion(x1,x2);
}
else
return(x3);
}
no consigo k la variable umbral este tambien en la funcion de biseccion.como lo hago??????k esta mal???????una ayudita please.