Pagini recente » Cod sursa (job #2658022) | Cod sursa (job #2584164) | Cod sursa (job #2269608) | Cod sursa (job #2527269) | Cod sursa (job #1025000)
#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 intors(int i){
int a=0;
while(i>0){
a=a*10+i%10;
i/=10;
}
return a;
}
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]=nre;
}
if(sir[i]==')'){
rez=paranteza(par[aux],nre);
rez=intors(rez);
nre=par[aux];
aux--;
if(rez==0) expresie[nre]=0+'0';
else{
if(aux==-1) nre=-1;
else
nre--;
while(rez>0){
nre++;
expresie[nre]=rez%10+'0';
rez/=10;
}
}
}
}
return nre;
}
void afisare(){
ofstream g("evaluare.out");
int a;
a=parcurgere();
for(int i=0;i<=a;i++)
g<<expresie[i];
g.close();
}
int main()
{
citire();
afisare();
return 0;
}