Cod sursa(job #2791569)

Utilizator albertaizicAizic Albert albertaizic Data 30 octombrie 2021 19:00:35
Problema Evaluarea unei expresii Scor 100
Compilator c-64 Status done
Runda Arhiva educationala Marime 1 kb
#include <stdio.h>
#define MAX 100001

char v[MAX];
int I;
int adunare();

int factor(){
  int nr;

  if(v[I]=='('){
    I++;
    nr=adunare();
    I++;
  }else{
    nr=0;
    while(v[I]>='0' && v[I]<='9'){
      nr=nr*10+(v[I]-'0');
      I++;
    }
  }

  return nr;
}
int inmultire(){
  int rez;

  rez=factor();
  while(v[I]=='*' || v[I]=='/'){
    if(v[I]=='*'){
      I++;
      rez*=factor();
    }else{
      I++;
      rez/=factor();
    }
  }

  return rez;
}
int adunare(){
  int rez;

  rez=inmultire();
  while(v[I]=='+' || v[I]=='-'){
    if(v[I]=='+'){
      I++;
      rez+=inmultire();
    }else{
      I++;
      rez-=inmultire();
    }
  }

  return rez;
}
int main(){
    FILE *fin, *fout;
    fin=fopen("evaluare.in","r");
    fout=fopen("evaluare.out","w");
    do{
      v[I]=fgetc(fin);
      I++;
    }while(v[I-1]!='\n');

    I=0;
    fprintf(fout, "%d\n", adunare());

    fclose(fin);
    fclose(fout);
    return 0;
}