
09-12-2007, 16:49
|
|
|
|
חבר מתאריך: 09.12.07
הודעות: 4
|
|
|
שאלה בC בקשר לעדיפות פעולות חשבון
שלום! יצרתי תוכנה אשר מחשבת רצף של מספרים. אך הבעיה שלי בתוכנה היא שאני לא יודע איך לתת עדיפות לכפל, חזקה, חילוק וסוגריים על חיבור וחיסור. הבנתי שהבעיה קשורה לpostfix וinfix עם הSTACK, אך לא הבנתי איך אני מתמרן את זה לטובתי ולשימושי בתוכנה הזאת.
להלן קוד התוכנה שלי, זה בעצם הבשר בעיקרון. אני צריך עזרה בשיפוצו.
קוד:
#include <stdio.h>
#define SIZE 200
int main()
{
char ch,plus='n',diving='n',subtract='n',multi='n',squa re='n',hadError='n',numLarge='n';
double num=0,sum=0;
int i,j;
char str[SIZE];
gets(str);
if(str[0]=='c' && str[1]=='a' && str[2]=='l' && str[3]=='c')
{
puts("calc");
for(i=5;str[i]!='\0';i++)
{
ch=str[i];
if(ch>='0' && ch<='9')
{
if(plus=='y')
{
num=num+ch-48;
plus='n';
}
else if(diving=='y')
{
num=num/(double)(ch-48);
diving='n';
}
else if(subtract=='y')
{
num=num-ch-48;
subtract='n';
}
else if(multi=='y')
{
num=num*(ch-48);
multi='n';
}
else if(square=='y')
{
for(j=1;j<ch;j++)
{
num=num*(num);
}
square='n';
}
else if(numLarge=='y')
num=num*10+ch-48;
else
num+=ch-48;
sum+=num;
numLarge='y';
}
else
{
numLarge='n';
if(ch=='+')
plus='y';
else if(ch=='\\')
diving='y';
else if(ch=='-')
subtract='y';
else if(ch=='*')
multi='y';
else if(ch=='^')
square='y';
else if(ch=='\n')
printf("%.1lf",sum);
else
hadError='y';
}
}
}
}
התפקשש לי קצת הסגירות פונקציה .
בעצם במקרה של calc 45+3*8-4
אני רוצה שהוא ידפיס 65.
for example:
Sample input -1
1 + 2 * 3 - 4 / 2 + 5 * 6 calc
Sample output
35
נערך לאחרונה ע"י Cguy בתאריך 09-12-2007 בשעה 17:02.
|