Pagini recente » Cod sursa (job #2937995) | Cod sursa (job #2531919) | Cod sursa (job #2615151) | Cod sursa (job #1907842) | Cod sursa (job #603114)
Cod sursa(job #603114)
#include<fstream>
using namespace std;
char s[100002],cp[100002];
ofstream g("evaluare.out");
long termens(int k)
{int nr=0,nr1=0;
while(s[k]<='9' && s[k]>='0') k--;
k++;
while(s[k]<='9' && s[k]>='0') { nr=nr*10+s[k]-'0'; k++; }
return nr;
}
long termend(int k)
{int nr=0;
while(s[k]<='9' && s[k]>='0') { nr=nr*10+s[k]-'0'; k++; }
return nr;
}
long eval(int pozs,int pozd)
{long rez1,rez2,i,is=0,id=0; char aux[10];
for(i=pozs;i<pozd;i++)
if(s[i]=='*' || s[i]=='/')
{
rez1=termens(i-1);
for(is=i-1;is>=0 && s[is]<='9' && s[is]>='0';is--);
rez2=termend(i+1);
for(id=i+1;id<strlen(s) && s[id]<='9' && s[id]>='0';id++);
aux[0]=0;
if(s[i]=='*')ltoa(rez1*rez2,aux,10);
if(s[i]=='/')ltoa(rez1/rez2,aux,10);
cp[0]=0;
strcpy(cp,s+id);
(s+is+1)[0]=0;
strcpy(s+is+1,aux);
strcat(s,cp);
pozd=pozd-(id-is)+strlen(aux)+1;
i=is;
if(i<0)i=0;
}
//adunare
for(i=pozs;i<pozd;i++)
if(s[i]=='+' || s[i]=='-')
{
rez1=termens(i-1);
for(is=i-1;is>=0 && s[is]<='9' && s[is]>='0';is--);
rez2=termend(i+1);
for(id=i+1;id<strlen(s) && s[id]<='9' && s[id]>='0';id++);
aux[0]=0;
if(s[i]=='+')ltoa(rez1+rez2,aux,10);
if(s[i]=='-')ltoa(rez1-rez2,aux,10);
cp[0]=0;
strcpy(cp,s+id);
(s+is+1)[0]=0;
strcpy(s+is+1,aux);
strcat(s,cp);
pozd=pozd-(id-is)+strlen(aux)+1;
i=is;
if(i<0)i=0;
}
return atol(s);
}
void par()
{ int pozs,pozd,ps,i,k=0;
for(i=0;i<strlen(s);i++)
if(s[i]=='(') k++;
while(k)
{
for(i=0;i<strlen(s);i++) if(s[i]=='(')pozs=i;
strcpy( s+pozs ,s+pozs+1 ); ps=pozs;
for(pozd=pozs; s[pozd]!=')' ;pozd++);
strcpy( s+pozd ,s+pozd+1 );
pozs=ps;
eval( pozs ,pozd-1);
k--;
}
g<<eval(0,strlen(s));
}
int main()
{
ifstream f("evaluare.in");
f.getline(s,1001);
par();
f.close();g.close();
return 0;}