Pagini recente » Cod sursa (job #1704505) | Cod sursa (job #1487188) | Cod sursa (job #2423823) | Cod sursa (job #1422109) | Cod sursa (job #559182)
Cod sursa(job #559182)
#include <fstream.h>
#include <cstring>
char c[100003],cNormalizat[100003],coada[100003],cPolonez[100003];
int n,k,nr[100003],nNormalizat,lungimeCoada,lungimePolonez,lungimeExpresie,expresie[100003];
ifstream fi("evaluare.in");
ofstream fo("evaluare.out");
void citire(){
fi.get(c,100002,'\n');
fi.close();
}
void normalizare(){
int a,b,i;
k=0;
for(i=1;i<=n;i++)
if(c[i]>='0' && c[i]<='9'){
k++;
a=c[i]-'0';
b=a;
i++;
while(c[i]>='0' && c[i]<='9' && i<=n){
a=c[i]-'0';
b=b*10+a;
i++;
}
nr[k]=b;
}
nNormalizat=0;
k=0;
for(i=1;i<=n;i++){
nNormalizat++;
if(c[i]>='0' && c[i]<='9'){
while(c[i]>='0' && c[i]<='9'){
i++;
}
i--;
cNormalizat[nNormalizat]='n';
}
else cNormalizat[nNormalizat]=c[i];
}
lungimeCoada=0;
lungimePolonez=0;
for(i=1;i<=nNormalizat;i++){
if(cNormalizat[i]==')'){
while(coada[lungimeCoada]!='('){
lungimePolonez++;
cPolonez[lungimePolonez]=coada[lungimeCoada];
lungimeCoada--;
}
lungimeCoada--;
}
else if(cNormalizat[i]=='n'){
lungimePolonez++;
cPolonez[lungimePolonez]=cNormalizat[i];
}
else {
if((cNormalizat[i]=='+' || cNormalizat[i]=='-')&& (coada[lungimeCoada]=='*' || coada[lungimeCoada]=='/')){
while(coada[lungimeCoada]=='*' || coada[lungimeCoada]=='/'){
lungimePolonez++;
cPolonez[lungimePolonez]=coada[lungimeCoada];
lungimeCoada--;
}
lungimeCoada++;
coada[lungimeCoada]=cNormalizat[i];
}
else{
lungimeCoada++;
coada[lungimeCoada]=cNormalizat[i];
}
}
}
while(lungimeCoada!=0){
lungimePolonez++;
cPolonez[lungimePolonez]=coada[lungimeCoada];
lungimeCoada--;
}
k=0;
for(i=1;i<=lungimePolonez;i++){
if(cPolonez[i]=='n'){
k++;
lungimeExpresie++;
expresie[lungimeExpresie]=nr[k];
}
else if(cPolonez[i]=='*'){
expresie[lungimeExpresie-1]*=expresie[lungimeExpresie];
lungimeExpresie--;
}
else if(cPolonez[i]=='/'){
expresie[lungimeExpresie-1]/=expresie[lungimeExpresie];
lungimeExpresie--;
}
else if(cPolonez[i]=='+'){
expresie[lungimeExpresie-1]+=expresie[lungimeExpresie];
lungimeExpresie--;
}
else if(cPolonez[i]=='-'){
expresie[lungimeExpresie-1]-=expresie[lungimeExpresie];
lungimeExpresie--;
}
}
}
void rezolvare(){
int i;
n=strlen(c);
for(i=n;i>=1;i--)
c[i]=c[i-1];
c[n+1]='\0';
normalizare();
}
void afisare(){
fo<<expresie[1]<<'\n';
fo.close();
}
int main(){
citire();
rezolvare();
afisare();
return 0;
}