Cod sursa(job #1814957)

Utilizator ShutterflyFilip A Shutterfly Data 24 noiembrie 2016 18:11:52
Problema Evaluarea unei expresii Scor 10
Compilator c Status done
Runda Arhiva educationala Marime 1.51 kb
#include <stdio.h>

//GLOBALS DIVISION//
char MemoryBlock;

//PROTOTYPE DIVISION//
int Express();
int Chunk();
int Particle();

//PROCEDURES DIVISION//
int Express() {
    int Sum = Chunk();
    while (MemoryBlock == '+' || MemoryBlock == '-') {
        if (MemoryBlock == '+') {
            scanf("%c", MemoryBlock);
            Sum += Chunk();
        }
        if (MemoryBlock == '-') {
            scanf("%c", MemoryBlock);
            Sum -= Chunk();
        }
    }
    return Sum;
}

int Chunk() {
    int Prod = Particle();
    while (MemoryBlock == '*' || MemoryBlock == '/') {
        if (MemoryBlock == '*') {
            scanf("%c", MemoryBlock);
            Prod *= Particle();
        }
        if (MemoryBlock == '/') {
            scanf("%c", MemoryBlock);
            Prod /= Particle();
        }
    }
    return Prod;
}

int Particle() {
    int Number = 0, Sign = 1;
    while (MemoryBlock == '-') {
        scanf("%c", MemoryBlock);
        Sign = -Sign;
    }

    if (MemoryBlock == '(') {
        scanf("%c", MemoryBlock);
        Number = Express();
        scanf("%c", MemoryBlock);
        return Sign * Number;
    }

    while (MemoryBlock >= '0' && MemoryBlock <= '9') {
        Number = Number * 10 + MemoryBlock - '0';
        scanf("%c", MemoryBlock);
    }
    return Sign * Number;
}

int main() {
    freopen("evaluare.in", "r", stdin);
    freopen("evaluare.out", "w", stdout);
    scanf("%c", MemoryBlock);
    printf("%d",Express());
}