Go4Expert (http://www.go4expert.com/)
-   C (http://www.go4expert.com/forums/c/)
-   -   pls check it for me (http://www.go4expert.com/forums/pls-check-t21224/)

 vipul15singh 6Mar2010 18:09

pls check it for me

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);
}

 virxen 7Mar2010 21:37

Re: pls check it for me

Quote:
 Originally Posted by vipul15singh (Post 65233) 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 #include 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=1)  {   c=c*(x/t);   term(x,t-1,c);  }   return(c); }

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();
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++;
s=expo(x,t,n,s);
}
return(s);
}
float term(float x,float t,float c)
{
if(t>=1){
c=c*(x/t);
c=term(x,t-1,c);
}
return(c);
}

 vipul15singh 8Mar2010 00:27

Re: pls check it for me

Quote:
 Originally Posted by virxen (Post 65278) 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 #include 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=1){   c=c*(x/t);   c=term(x,t-1,c);  }   return(c); }
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

 virxen 8Mar2010 01:12

Re: pls check it for me

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++;
return expo(x,t,n,s);
}
return(s);
}
float term(float x,float t,float c)
{
if(t>=1){
c=c*(x/t);
return term(x,t-1,c);
}
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/016.../Recursion.htm

 All times are GMT +5.5. The time now is 17:11.