Pagini recente » Cod sursa (job #23326) | Cod sursa (job #353385) | Cod sursa (job #2050754) | Cod sursa (job #2364856) | Cod sursa (job #1757543)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("apel.in");
ofstream fout("apel.out");
typedef long long int var;
char s[255], *p = s;
string sa,S[28];
int V[28][12],v[28],po;
int tr(const char &a){
return a - 'a' + 1;
}
int Tr(const char &A){
return A - 'A' + 1;
}
var Imultire(int l);
var Numar(int l);
var Adunare(int l){
var x = Imultire(l);
while(S[l][po] == '+' || S[l][po] == '-'){
if(S[l][po] == '+')
po++, x += Imultire(l);
else
po++, x -= Imultire(l);
}
return x;
}
var Imultire(int l){
var x = Numar(l);
while(S[l][po] == '*' ){
if(S[l][po] == '*')
po++, x *= Numar(l);
}
return x;
}
var Numar(int l){
var x = 0;
if(S[l][po] == '('){
po++;
x = Adunare(l);
po++;
}
for(;isdigit(S[l][po]);po++)
x = x * 10 + S[l][po] - '0';
if(S[l][po] <= 'z' && S[l][po] >= 'a')
x = V[l][tr(S[l][po])],po++;
return x;
}
var Recurs(){
int n = 0,l = Tr(*p);
for(int i = 1; i <= 10; i++)
V[l][i] = 0;
while(*p != ')'){
*p++;
if(isdigit(*p)){
n++;
for(;isdigit(*p);*p++)
V[l][n] = V[l][n]*10 + *p - '0';
}
if(*p <= 'z' && *p >= 'a')
n++ , V[l][n] = v[tr(*p)];
if(*p <= 'Z' && *p >= 'A')
n++ , V[l][n] = Recurs();
}
*p++;
po = 2 * n + 3;
return Adunare(l);
}
int main()
{
ios :: sync_with_stdio(false);
fin.tie(NULL);
fin >> s;
do{
sa.clear();
fin >> sa;
for(int i = 2; isdigit(sa[i]); i++)
v[tr(sa[0])] = v[tr(sa[0])] * 10 + sa[i] - '0';
}while(sa[0] <= 'z' && sa[0] >= 'a');
do{
S[Tr(sa[0])] = sa;
} while(fin >> sa);
int n = 0,l = Tr(s[0]);
while(*p != ')'){
*p++;
if(isdigit(*p)){
n++;
for(;isdigit(*p);*p++)
V[l][n] = V[l][n]*10 + *p - '0';
}
if(*p <= 'z' && *p >= 'a')
n++ , V[l][n] = v[tr(*p)];
if(*p <= 'Z' && *p >= 'A')
n++ , V[l][n] = Recurs();
}
po = 2 * n + 3;
fout << Adunare(l);
return 0;
}