Cod sursa(job #1314829)

Utilizator andrei_diaconu11Andrei C. Diaconu andrei_diaconu11 Data 12 ianuarie 2015 14:14:10
Problema Evaluarea unei expresii Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 1.05 kb
#include <stdio.h>
#include <stdlib.h>

/**
expr -> term ( ('+'|'-')term )*
term -> fact ( ('*'|'/')fact )*
fact -> int | '('expr')'
**/

FILE *fi;
char first;
int expr();
int term();
int fact();
int INT();

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

int expr(){
  int a;
  char semn;
  a=term();
  while(first=='+' || first=='-'){
    semn=first;
    first=fgetc(fi);
    if(semn=='+')
      a=a+term();
    else
      a=a-term();
  }
  return a;
}

int term(){
  int a;
  char semn;
  a=fact();
  while(first=='*' || first=='/'){
    semn=first;
    first=fgetc(fi);
    if(semn=='*')
      a=a*fact();
    else
      a=a/fact();
  }
  return a;
}

int fact(){
  int a;
  a=0;
  if(first=='('){
    first=fgetc(fi);
    a=expr();
    first=fgetc(fi);
  }
  else if('0'<=first && first<='9')
    a=INT();
  return a;
}

int INT(){
  int a=0;
  while('0'<=first && first<='9'){
    a=a*10+first-'0';
    first=fgetc(fi);
  }
  return a;
}