Cod sursa(job #1024946)

Utilizator GiorgiGasca Giorgiana Giorgi Data 9 noiembrie 2013 12:45:24
Problema Evaluarea unei expresii Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 2.26 kb
#include <iostream>
#include<fstream>
#include<cstring>

using namespace std;

char sir[100000];
char expresie[100000];

void citire(){
    ifstream f("evaluare.in");
    f>>sir;
    f.close();
}

int paranteza(int inceput, int sfarsit){
    int i,nr1=0,nr2=0,nr3=0,j;
    char op;
    i=inceput+1;
    while(expresie[i]>='0'&&expresie[i]<='9'){
            nr1=nr1*10+expresie[i]-'0';
            i++;
    }
    while(i<sfarsit){
        op=expresie[i];
        nr2=0;
        i++;
        while(i<sfarsit&&expresie[i]>='0'&&expresie[i]<='9'){
            nr2=nr2*10+expresie[i]-'0';
            i++;
        }
        if(op=='+'||op=='-'){
            if(expresie[i]=='*'||expresie[i]=='/'){
                j=i;
                nr3=0;
                i++;
                while(i<sfarsit&&expresie[i]>='0'&&expresie[i]<='9'){
                    nr3=nr3*10+expresie[i]-'0';
                    i++;
                }
                if(expresie[j]=='*') nr2=nr2*nr3;
                else nr2=nr2/nr3;
            }
        }
        else{
            if(op=='*') nr1=nr1*nr2;
            else nr1=nr1/nr2;
        }
        if(op=='+') nr1=nr1+nr2;
        if(op=='-') nr1=nr1-nr2;

    }
    return nr1;
}


int parcurgere(){
    int i,aux=0,nre=0,rez,aux1,par[100];
    par[aux]=0;
    expresie[0]='(';
    aux1=strlen(sir);
    sir[aux1+1]='\0';
    sir[aux1]=')';
    for(i=0;i<aux1+1;i++){
        nre++;
        expresie[nre]=sir[i];
        if(sir[i]=='('){
            aux++;
            par[aux]=i+1;
        }
        if(sir[i]==')'){
            rez=paranteza(par[aux],nre);
            nre=par[aux];
            aux--;
            if(rez==0) expresie[nre]=0+'0';
            else{
                if(i==aux1-1) nre=-1;
                else
                    nre--;
                while(rez>0){
                    nre++;
                    expresie[nre]=rez%10+'0';
                    rez/=10;
                }
            }
            aux=0;
        }
    }
    return nre;
}

void afisare(){
    ofstream g("evaluare.out");
    int a;
    a=parcurgere();
    for(int i=a;i>=0;i--)
        g<<expresie[i];
    g.close();
}

int main()
{
    citire();
    afisare();
    return 0;
}