Pagini recente » Cod sursa (job #321444) | Cod sursa (job #1222840) | Cod sursa (job #1640548) | Monitorul de evaluare | Cod sursa (job #1024946)
#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;
}