Pagini recente » Cod sursa (job #549269) | Cod sursa (job #235257) | Cod sursa (job #2538359) | Cod sursa (job #2303965) | Cod sursa (job #2337674)
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("bool.in");
ofstream g("bool.out");
int p = 0,n,j;
char v[1005],s[1005];
int variabile[1005];
int termen();
int NOT();
int nr();
int expresie()
{
int rez = termen();
while(s[p] == '|')
{
p++;
rez = rez | termen();
}
return rez;
}
int termen()
{
int rez = NOT();
while(s[p] == '&')
{
p++;
rez = rez & NOT();
}
return rez;
}
int NOT()
{
int termen = 0,semn = 0;
while(s[p] == '!')
{
semn = 1 - semn;
p++;
}
if(s[p] == '(')
{
p++;
termen = expresie();
p++;
if(semn)
return !termen;
return termen;
}
p++;
if((s[p-1] == '1' || s[p-1] == '0'))
{
if(semn)
return !(s[p-1] - '0');
return (s[p-1] - '0');
}
if(semn)
{
return !(variabile[s[p-1] - 'A' + 1]);
}
return (variabile[s[p-1] - 'A' + 1]);
}
int main()
{
int i;
f.getline(v, 1005);
int n = strlen(v);
for(i = 0; i < n;)
{
if(v[i] == 'A' && v[i + 1] == 'N' && v[i+2] == 'D')
{
s[j++] = '&';
i += 3;
}
else if(v[i] == 'O' && v[i + 1] == 'R')
{
s[j++] = '|';
i+=2;
}
else if(v[i] == 'F' && v[i + 1] == 'A' && v[i+2] == 'L' && v[i+3] == 'S' && v[i+4] == 'E')
{
s[j++] = '0';
i += 5;
}
else if(v[i] == 'T' && v[i+1] == 'R' && v[i+2] == 'U' && v[i+3] == 'E')
{
s[j++] = '1';
i += 4;
}
else if(v[i] == 'N' && v[i+1] == 'O' && v[i+2] == 'T')
{
s[j++] = '!';
i += 3;
}
else if(v[i] == '(')
{
s[j++] = '(';
i++;
}
else if(v[i] == ')')
{
s[j++] = ')';
i++;
}
else if(v[i] >= 'A' && v[i] <= 'Z')
{
s[j++] = v[i];
i++;
}
else
{
i++;
}
}
f >> n;
for(i = 1; i <= n; i++)
{
char ch;
f >> ch;
p = 0;
variabile[ch - 'A' + 1] = 1 -variabile[ch - 'A' + 1];
g << expresie();
}
return 0;
}