int evaluaPolinomio( POLINOMIO ptrPol, int x ) { int res = 0; if( ptrPol ) res += ptrPol -> coef * pow( x , ptrPol -> exp ) + evaluaPolinomio( ptrPol -> ptrLiga, x ); /*while( ptrPolinomio ) { res += ptrPolinomio -> coef * (int)pow( x , ptrPolinomio -> exp ); ptrPolinomio = ptrPolinomio -> ptrLiga; }*/ return ( res ); }
int main() { POLINOMIO ptrPolinomio; int evaluacion, incognita; ptrPolinomio = NULL; capturaPolinomio( &ptrPolinomio ); incognita = leer( "\n Digite el valor de la incognita x = " ); evaluacion = evaluaPolinomio( ptrPolinomio , incognita ); imprimeResultado( evaluacion, incognita ); system( "pause" ); }
void biseccion(int opcion) { int *ptPolinomio, grado; int n; float li,ls,e,d,a,z,ex=2.7182818284; float fa,fb,pm,fx; if(opcion==DEFINE_POLINOMIO){ printf("Define el grado del polinomio:\n"); scanf("%d", &grado); ptPolinomio = definePolinomio(grado); leePolinomio(ptPolinomio, grado); } printf("Ingresa el Limite inferior : \n"); scanf("%f",&li); printf("Ingresa el Limite Superior : \n"); scanf("%f",&ls); printf("Ingresa el Error de tolerancia : \n"); scanf("%f",&e); pm=(li+ls)/2; switch(opcion) { case 1: fa=seno(li); fb=seno(ls); fx=seno(pm); break; case 2: fa=senoCuadrado(li); fb=senoCuadrado(ls); fx=senoCuadrado(pm); break; case 3: fa=exponente(li); fb=exponente(ls); fx=exponente(pm); break; case 4: fa=senoCoseno(li); fb=senoCoseno(ls); fx=senoCoseno(pm); break; case 5: fa=evaluaPolinomio(li, ptPolinomio, grado); fb=evaluaPolinomio(ls, ptPolinomio, grado); fx=evaluaPolinomio(pm, ptPolinomio, grado); break; } a=(ls-li); if(a<0){ d=(-1*a); }else{ d=a; } if (d<e){ z=0 ; }else{ z=1; } n=0; printf("\nI LI\tLS\tf(LI)\tf(LS)\tPM\tf(PM)\tf(LI)*f(PM)\t\"|LS-LI|<Error\"\n"); printf("0 %.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%f\tFalso\n",li,ls,fa,fb,pm,fx,fa*fx); while(z) { n=n+1; if ((fa*fx)>0){ li=pm; } if ((fa*fx)<0){ ls=pm; } pm=(li+ls)/2; switch(opcion) { case 1: fa=seno(li); fb=seno(ls); fx=seno(pm); break; case 2: fa=senoCuadrado(li); fb=senoCuadrado(ls); fx=senoCuadrado(pm); break; case 3: fa=exponente(li); fb=exponente(ls); fx=exponente(pm); break; case 4: fa=senoCoseno(li); fb=senoCoseno(ls); fx=senoCoseno(pm); break; case 5: fa=evaluaPolinomio(li, ptPolinomio, grado); fb=evaluaPolinomio(ls, ptPolinomio, grado); fx=evaluaPolinomio(pm, ptPolinomio, grado); break; } a=(ls-li); if(a<0){ d=(-1*a); } else d=a; if (d<e) { z=0 ; } else z=1; if (z==0){ printf("%d %.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%f\tDetener\n",n, li,ls,fa,fb,pm,fx,fa*fx); } else printf("%d %.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%f\tFalso\n",n,li,ls,fa,fb, pm,fx,fa*fx); } printf("\nLa raiz es : %.9f \n\n",pm); free(ptPolinomio); }
void falsaPosicion(int opcion) { int *ptPolinomio, grado; int n; float li,ls,e,d,z,ex=2.7182818284; float fa,fb,fp,fx; if(opcion==DEFINE_POLINOMIO){ printf("Define el grado del polinomio:\n"); scanf("%d", &grado); ptPolinomio = definePolinomio(grado); leePolinomio(ptPolinomio, grado); } printf("Ingresa el Limite inferior : \n"); scanf("%f",&li); printf("Ingresa el Limite Superior : \n"); scanf("%f",&ls); printf("Ingresa el Error de tolerancia : \n"); scanf("%f",&e); switch(opcion) { case 1: fa=seno(li); fb=seno(ls); fp=((ls*fa-li*fb)/(fa-fb)); fx=seno(fp); break; case 2: fa=senoCuadrado(li); fb=senoCuadrado(ls); fp=((ls*fa-li*fb)/(fa-fb)); fx=senoCuadrado(fp); break; case 3: fa=(pow(ex,li)*(pow(li,2)-16)); fb=(pow(ex,ls)*(pow(ls,2)-16)); fp=((ls*fa-li*fb)/(fa-fb)); fx=(pow(ex,fp)*(pow(fp,2)-16)); break; case 4: fa=senoCoseno(li); fb=senoCoseno(ls); fp=((ls*fa-li*fb)/(fa-fb)); fx=senoCoseno(fp); break; case 5: fa=evaluaPolinomio(li, ptPolinomio, grado); fb=evaluaPolinomio(ls, ptPolinomio, grado); fp=((ls*fa-li*fb)/(fa-fb)); fx=evaluaPolinomio(fp, ptPolinomio, grado); break; } if(fx<0){ d=(-1*fx); }else{ d=fx; } if (d<e) { z=0 ; } else z=1; n=0; printf("\nI LI\tLS\tf(LI)\tf(LS)\tFP\tf(FP)\tf(LI)*f(FP)\t\"|f(FP)|<Error\"\n"); printf("0 %.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%f \tFalso\n",li,ls,fa,fb,fp,fx,fa*fx); while(z) { n=n+1; if ((fa*fx)>0){ li=fp; } if ((fa*fx)<0){ ls=fp; } switch(opcion) { case 1: fa=seno(li); fb=seno(ls); fp=((ls*fa-li*fb)/(fa-fb)); fx=seno(fp); break; case 2: fa=senoCuadrado(li); fb=senoCuadrado(ls); fp=((ls*fa-li*fb)/(fa-fb)); fx=senoCuadrado(fp); break; case 3: fa=(pow(ex,li)*(pow(li,2)-16)); fb=(pow(ex,ls)*(pow(ls,2)-16)); fp=((ls*fa-li*fb)/(fa-fb)); fx=(pow(ex,fp)*(pow(fp,2)-16)); break; case 4: fa=senoCoseno(li); fb=senoCoseno(ls); fp=((ls*fa-li*fb)/(fa-fb)); fx=senoCoseno(fp); break; case 5: fa=evaluaPolinomio(li, ptPolinomio, grado); fb=evaluaPolinomio(ls, ptPolinomio, grado); fp=((ls*fa-li*fb)/(fa-fb)); fx=evaluaPolinomio(fp, ptPolinomio, grado); break; } if(fx<0){ d=(-1*fx); } else d=fx; if (d<e) { z=0 ; } else z=1; if (z==0){ printf("%d %.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%f \tDetener\n",n,li,ls,fa,fb,fp,fx,fa*fx); } else printf("%d %.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%f \tFalso\n",n,li,ls,fa,fb,fp,fx,fa*fx); } printf("\nLa raiz es : %.9f \n\n",fp); free(ptPolinomio); }