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" );
}
Exemplo n.º 3
0
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);

}
Exemplo n.º 4
0
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);
}