Cod sursa(job #2790897)

Utilizator Remus.RughinisRemus Rughinis Remus.Rughinis Data 29 octombrie 2021 19:02:48
Problema Evaluarea unei expresii Scor 60
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.1 kb
#include <stdio.h>
#include <stdlib.h>
#define MAXLENGTH 1000

int s[MAXLENGTH],si;

int adunare();

int factor(){
  int r = 0;
  if(s[si] == '('){
    si++;
    r = adunare();
    si++;
  } else
    while(s[si] >= '0' && s[si] <= '9'){
      r *= 10;
      r += s[si] - '0';
      si ++;
    }

  return r;
}

int inmultire(){
  int t,r;
  char semn;
  r = factor();

  while(s[si] == '*' || s[si] == '/'){
    semn = s[si];
    si++;

    t = factor();

    if(semn == '*')
      r *= t;
    else
      r /= t;
  }

  return r;
}

int adunare(){
  int t,r;
  char semn;
  r = inmultire();

  while(s[si] == '+' || s[si] == '-'){
    semn = s[si];
    si++;

    t = inmultire();

    if(semn == '+')
      r += t;
    else
      r -= t;
  }

  return r;
}

int main(){
  FILE *fin, *fout;

  fin = fopen("evaluare.in","r");
  si = 0;
  s[0] = fgetc(fin);

  while(s[si] != '\n'){
    si++;
    s[si] = fgetc(fin);
  }
  si = 0;

  fclose(fin);

  fout = fopen("evaluare.out","w");
  fprintf(fout,"%d\n",adunare());
  fclose(fout);
  return 0;
}