Вот алгоритм для вычисления арифметического выражения с использованием рекурсии :
- Найти операнд1
- t1 = Eval (операнд1)
- Найти операнд2
- t2 = Eval (операнд2)
- Применить оператор к t1 и t2
Предположения:
Введите:
Пример массива токенов: {"(", "9", "+", "(", "50", "-", "25", ")", ")"}
Я пытался реализовать алгоритм, но моя программа не запускается (выходное состояние -1 - единственное сообщение, которое я получаю). Почему это происходит?
int apply(char op, int a, int b) {
if (op == '+'){
printf("%d %c %d\n", a,op,b);
return a + b;
}
else if (op == '-'){
printf("%d %c %d\n", a,op,b);
return a - b;
}
else if(op == '/'){
printf("%d %c %d\n", a,op,b);
return a / b;
}
else if(op == '*'){
printf("%d %c %d\n", a,op,b);
return a * b;
}
}
int eval_tokens(char** expression, int num_tokens)
{
// implement me
int index;
int opIndex = find_operator(expression, num_tokens); //find index of operator
int count1=0,count2=0,term1,term2,i,j;
if(*expression[0] == '(')
i = 1;
else
i = 0;
while(i <= opIndex){
i++;
count1++;
}
term1 = eval_tokens(expression+1,count1);
j = opIndex+1;
while(j < num_tokens){
count2++;
j++;
}
term2 = eval_tokens(expression+opIndex+1,count2); //expression+opIndex+1 points to index after opIndex
return apply(*expression[opIndex], term1, term2);
}
int main(void) {
char*expression[] = {"(", "(", "5", "+", "3", ")", "-", "(", "2", "+", "1", ")", ")"};
printf("result = %d\n", eval_tokens(expression, 13));
return 0;
}