Cod sursa(job #3367485)

Utilizator maria.bertolonMaria Bertolon maria.bertolon Data 8 octombrie 2026 10:56:37
Problema Evaluarea unei expresii Scor 100
Compilator c-64 Status done
Runda Arhiva educationala Marime 1 kb
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

#define MAXN 100000

char v[MAXN];
int p;

int eval();

int factor(){
  int nr;

  //printf( "factor %d\n", p );

  if( v[p] == '(' ){
    p++;
    nr = eval();
    p++;
  }else{
    nr = 0;
    while( isdigit( v[p] ) )
      nr = nr * 10 + v[p++] - '0';
  }

  return nr;
}

int termen(){
  int nr;

  //printf( "termen %d\n", p );

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

  return nr;
}

int eval(){
  int nr;

  //printf( "eval %d\n", p );

  nr = termen();
  while( v[p] == '+' || v[p] == '-' ){
    if( v[p++] == '+' )
      nr += termen();
    else
      nr -= termen();
  }

  return nr;
}

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

  fin = fopen( "evaluare.in", "r" );
  n = 0;
  while( ( c = fgetc( fin ) ) != '\n' )
    v[n++] = c;
  fclose( fin );

  fout = fopen( "evaluare.out", "w" );
  fprintf( fout, "%d\n", eval() );
  fclose( fout );

  return 0;
}