fatemeh.h
شنبه 21 فروردین 1389, 23:07 عصر
این تابعی که من نوشتم قراره حاصل یک عبارت ریاضی رشته ای رو حساب کنه که توش عملگرهای + * ( ) و اعداد 0 تا 99 وجود دارن ولی الگوریتمش مشکل داره و این کارو نمیکنه
ممنون میشم کمکم کنید
int f(char s[],int x,int y)/*x o y ebteda va entehaie reshteyi and ke baiad
f e un hesab she ino gozashtam ta az substr(i,j) estefade nakonam*/
{
int l=strlen(s);
int k;
if(l==1) return s[0]-48;
else
{
for(int i=0;i<l;i++)
{
if((s[i])=='(')//age khune i om "(" bud
{
for(int j=i;j<l;j++)/*hala migarde basteie un parantez ro
peida mikone ta hasele beineshuno hesab kone*/
{
if(s[i]==')') int k=j;// age khune i om ")" bud
}
s[i]= f(s,i+1,k-1);
for(int j=i+1;j<l;j++) s[j]=s[j+(k-j-1)];/*khuneharo be
andaze fasele beine 2parantez+1 mikeshe aghab va hasel ham
tu khune paranteze aval zakhire mishe*/
l=l-(k-i);//meghdre ghablo az tul ham kam mikone
}
else if(s[i]=='*'&&s[i+1]!='(')//age khune i om "*" bud
{
s[i-1]=s[i-1]*s[i+1];//hasel a*b ro tu khune a zakhire mikone
for(int j=i;j<l;j++) s[j]=s[j+2];//2khune hamro mikeshe aghab
l=l-2;
}
else if(s[i]=='+')//age khune i om "+" bud
{
s[i-1]= f(s,0,i-1)+f(s,i+1,l);/*hasele a+b ro tu khune a
zakhire mikone*/
for(int j=i;j<l;j++)
s[j]=s[j+2];
l=l-2;
}
}
}
}
ممنون میشم کمکم کنید
int f(char s[],int x,int y)/*x o y ebteda va entehaie reshteyi and ke baiad
f e un hesab she ino gozashtam ta az substr(i,j) estefade nakonam*/
{
int l=strlen(s);
int k;
if(l==1) return s[0]-48;
else
{
for(int i=0;i<l;i++)
{
if((s[i])=='(')//age khune i om "(" bud
{
for(int j=i;j<l;j++)/*hala migarde basteie un parantez ro
peida mikone ta hasele beineshuno hesab kone*/
{
if(s[i]==')') int k=j;// age khune i om ")" bud
}
s[i]= f(s,i+1,k-1);
for(int j=i+1;j<l;j++) s[j]=s[j+(k-j-1)];/*khuneharo be
andaze fasele beine 2parantez+1 mikeshe aghab va hasel ham
tu khune paranteze aval zakhire mishe*/
l=l-(k-i);//meghdre ghablo az tul ham kam mikone
}
else if(s[i]=='*'&&s[i+1]!='(')//age khune i om "*" bud
{
s[i-1]=s[i-1]*s[i+1];//hasel a*b ro tu khune a zakhire mikone
for(int j=i;j<l;j++) s[j]=s[j+2];//2khune hamro mikeshe aghab
l=l-2;
}
else if(s[i]=='+')//age khune i om "+" bud
{
s[i-1]= f(s,0,i-1)+f(s,i+1,l);/*hasele a+b ro tu khune a
zakhire mikone*/
for(int j=i;j<l;j++)
s[j]=s[j+2];
l=l-2;
}
}
}
}