Cod sursa(job #1989754)

Utilizator DruffbaumPopescu Vlad Druffbaum Data 8 iunie 2017 19:40:32
Problema Evaluarea unei expresii Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.22 kb
#include <cstdio>

FILE *fin;
char first;

int expr();

int fact() {
  int val = 0;
  if ('0' <= first && first <= '9') {
    while ('0' <= first && first <= '9') {
      val = 10 * val + first - '0';
      first = fgetc(fin);
    }
  } else if (first == '+' || first == '-') {
    if (first == '+') {
      first = fgetc(fin);
      val = fact();
    } else {
      first = fgetc(fin);
      val = -fact();
    }
  } else if (first == '(') {
    first = fgetc(fin);
    val = expr();
    first = fgetc(fin);
  }
  return val;
}

int term() {
  int val = fact();
  if (first == '*' || first == '/') {
    if (first == '*') {
      first = fgetc(fin);
      val *= fact();
    } else {
      first = fgetc(fin);
      val /= fact();
    }
  }
  return val;
}

int expr() {
  int val = term();
  while (first == '+' || first == '-') {
    if (first == '+') {
      first = fgetc(fin);
      val += term();
    } else {
      first = fgetc(fin);
      val -= term();
    }
  }
  return val;
}

int main() {
  fin = fopen("evaluare.in", "r");
  first = fgetc(fin);
  FILE *fout = fopen("evaluare.out", "w");
  fprintf(fout, "%d\n", expr());
  fclose(fin);
  fclose(fout);
  return 0;
}