Как считать арифметическое выражение, например: '10 + 2-4 / 2 ' - PullRequest
0 голосов
/ 06 мая 2019

У меня небольшая проблема с моей программой.Мне нужно сложить арифметическое выражение, например: 10 + 2 + 1/2, используя только рекурсию.

Я написал что-то вроде этого:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>

int calculate(const char* expr, float *result);
int calculate_rec(const char* expr, float *result, int i, char sg, int number);

int main(void){
  char expression[201]={0};
  char *expr=expression;
  float result;
  float *res=&result;
  printf("enter operation: ");
  fgets(expr, 201, stdin);
  fflush(stdin);

  calculate(expr, res);
  printf("%.2f", result);

  return 0;
}

int calculate(const char* expr, float *result){
   if(expr==NULL) return 0;
   calculate_rec(expr, result, 0, 0, 0);

  return 1;
}

int calculate_rec(const char* expr, float *result, int i, char sg, int number){
  if(isdigit(*(expr+i))) number=number*10+*(expr+i)-'0';
  else{
    switch(sg){
     case '+': *result += number;
     break;
     case '-': *result -= number;
     break;
     case '*': *result *= number;
     break;
     case '/': if(number==0) return 0;
        *result /= number;
     break;
    }
     number = 0;
     sg = *(expr + i);
   }
  if (*(expr + i)=='\0') return 1;
  return calculate_rec(expr, result, i + 1, sg, number);
}

Эта программа работает хорошо, но пропускаетпервое число в данной строке, из строки: 10 + 1 + 2/2, результат равен 1,5 и должен быть 6,5.

1 Ответ

0 голосов
/ 06 мая 2019

рекурсивно просматривать список и выполнять операции умножения и деления, и замените левое значение на ноль, оператор на плюс, а правое значение на значение. Затем снова рекурсивно перемещайтесь по списку и выполняйте операции сложения и вычитания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...