Cod sursa(job #2789108)

Utilizator Victor2006Nicola Victor-Teodor Victor2006 Data 26 octombrie 2021 21:26:00
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.36 kb
#include <stdio.h>
#include <ctype.h>
#define N 100000
#define NCH 127

char exp[N];
int poz;

int adunare();
int produs();
int factor();

int adunare() {
    int sum;
    sum = produs();
    while ( exp[poz] == '+' || exp[poz] == '-' ) {
        switch( exp[poz] ) {
        case '+':
            poz ++;
            sum += produs();
            break;
        case '-':
            poz ++;
            sum -= produs();
            break;
        }
    }
    return sum;
}

int produs() {
    int prod;
    prod = factor();
    while ( exp[poz] == '*' || exp[poz] == '/' ) {
        switch( exp[poz] ) {
        case '*':
            poz ++;
            prod *= factor();
            break;
        case '/':
            poz ++;
            prod /= factor();
            break;
        }
    }
    return prod;
}

int factor() {
    int nr;
    if ( exp[poz] == '(' ) {
        poz ++;
        nr = adunare();
        poz ++;
        return nr;
    }
    nr = 0;
    while ( isdigit( exp[poz] ) ) {
        nr = nr * 10 + exp[poz] - '0';
        poz ++;
    }
    return nr;
}

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

    fin = fopen( "evaluare.in", "r" );
    fgets( exp, N, fin );
    fclose( fin );

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