Pagini recente » Cod sursa (job #2570955) | Cod sursa (job #2710197) | Cod sursa (job #348342) | Cod sursa (job #1699021) | Cod sursa (job #1817478)
#include <stdio.h>
#define lim 1000000
long long i,n;
char v[lim];
long long val[30];
long long expr();
long long term();
long long fact();
long long expr(){
long long rez=0;
rez=term();
while(v[i]=='+'||v[i]=='-'){
if(v[i]=='+'){
i++;
rez+=term();
}
else{
i++;
rez-=term();
}
}
return rez;
}
long long term(){
long long rez=0;
rez=fact();
while(v[i]=='*'){
i++;
rez*=fact();
}
return rez;
}
long long fact(){
long long rez=0;
if(v[i]=='('){
i++;
rez=expr();
i++;
}
else{
if(v[i]=='['){
i++;
rez=expr();
rez*=rez;
i++;
}
else{
if(v[i]=='+'){
i++;
rez=expr();
}
else
if(v[i]=='-'){
i++;
rez=expr()*(-1);
}
else
if(v[i]>='a'&&v[i]<='z'){
rez=val[v[i]-'a'];
i++;
}
}
}
return rez;
}
int main(){
FILE *fin,*fout;
fin=fopen("eval.in","r");
fout=fopen("eval.out","w");
long long rasp;
char ch;
fscanf(fin,"%lld",&n);
for(i=0;i<n;i++)
fscanf(fin,"%lld",&val[i]);
ch=fgetc(fin);
ch=fgetc(fin);
i=0;
while(ch!=EOF&&ch!='\n'&&ch!=' '){
i++;
v[i]=ch;
ch=fgetc(fin);
}
n=i;
i=1;
rasp=expr();
fprintf(fout,"%lld",rasp);
fclose(fin);
fclose(fout);
return 0;
}