pls check it for me

Discussion in 'C' started by vipul15singh, Mar 6, 2010.

  1. vipul15singh

    vipul15singh New Member

    Joined:
    Feb 22, 2010
    Messages:
    6
    Likes Received:
    0
    Trophy Points:
    0
    there is a exponential program, it has some problem in result {if x=1 and n=5 the answer must be 2.7016}
    pls tell me the problem and solution also

    Code:
    #include<stdio.h>
    #include<conio.h>
    float expo(float,float,int,float);
    float term(float,float,float);
    main()
    {
     int n;
     float e=0.0,t=1.0,x;
     static float s=1.0;
     clrscr();
     printf("\nenter variable & no ofterms:=");
     scanf("%f%d",&x,&n);
     e=expo(x,t,n,s);
     printf("\nsum=%f",e);
     getch();
     return;
    }
    float expo(float x,float t,int n,float s)
    {
     float c=1.0,e=0;
     if(t<n)
     {
      e=term(x,t,c);
      s=s+e;
      expo(x,t+1.0,n,s);
     }
      return(s);
    }
    float term(float x,float t,float c)
    {
     if(t>=1)
     {
      c=c*(x/t);
      term(x,t-1,c);
     }
      return(c);
    }
     
    Last edited by a moderator: Mar 6, 2010
  2. virxen

    virxen Active Member

    Joined:
    Nov 24, 2009
    Messages:
    387
    Likes Received:
    90
    Trophy Points:
    28

    check the result again.i think it must be 2.7083

    i made 2 corrections and also i changed how scanf gets its data.

    Code:
    #include<stdio.h>
    #include<conio.h>
    float expo(float,float,int,float);
    float term(float,float,float);
    int main()
    {
     int n;
     float e=0.0,t=1.0,x;
     static float s=1.0;
     //clrscr();
     [COLOR="Red"]printf("\nenter variable:");
     scanf("%f",&x);
      printf("\nenter no of terms:");
     scanf("%d",&n);[/COLOR]
     e=expo(x,t,n,s);
     printf("\nsum=%f",e);
     getch();
     return 0;
    }
    float expo(float x,float t,int n,float s){
     float c=1.0,e=0;
     if(t<n){
      e=term(x,t,c);
      s=s+e;
      t++;
      [COLOR=Red]s=expo(x,t,n,s);[/COLOR]
     }
      return(s);
    }
    float term(float x,float t,float c)
    {
     if(t>=1){
      c=c*(x/t);
      [COLOR=Red]c=term(x,t-1,c);[/COLOR]
     }
      return(c);
    }
    
    
    
    
     
    shabbir likes this.
  3. vipul15singh

    vipul15singh New Member

    Joined:
    Feb 22, 2010
    Messages:
    6
    Likes Received:
    0
    Trophy Points:
    0
    thanks virxen, i m very happy to get sol.,pls tell me whats the actual problem in prog at (vipul.fifteen@yahoo.com)
    once again thanks
     
  4. virxen

    virxen Active Member

    Joined:
    Nov 24, 2009
    Messages:
    387
    Likes Received:
    90
    Trophy Points:
    28
    a better solution is this

    Code:
    #include<stdio.h>
    #include<conio.h>
    float expo(float,float,int,float);
    float term(float,float,float);
    int main()
    {
     int n;
     float e=0.0,t=1.0,x;
     static float s=1.0;
     //clrscr();
     printf("\nenter variable:");
     scanf("%f",&x);
      printf("\nenter no of terms:");
     scanf("%d",&n);
     e=expo(x,t,n,s);
     printf("\nsum=%f",e);
     getch();
     return 0;
    }
    float expo(float x,float t,int n,float s){
     float c=1.0,e=0;
     if(t<n){
      e=term(x,t,c);
      s=s+e;
      t++;
      [COLOR=Red]return expo(x,t,n,s);[/COLOR]
     }
      return(s);
    }
    float term(float x,float t,float c)
    {
     if(t>=1){
      c=c*(x/t);
      [COLOR=Red]return term(x,t-1,c);[/COLOR]
     }
      return(c);
    }
    
    

    the error is that when you have a recursive function like above
    you must keep a sequential line between its calls and not to break it.

    for instance(each one calls its previous )

    4!=3!*4=(2!*3)*4=( (1!*1*2)*3 )*4=((0!*1*2)*3)*4

    without the return i added here you always return c as the result which is not
    changing.

    for more on this check this link
    http://www.java2s.com/Tutorial/C/0160__Function/Recursion.htm
     

Share This Page

  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice