Pagini recente » Cod sursa (job #267931) | Cod sursa (job #1180950) | Cod sursa (job #2743108) | Cod sursa (job #1670548) | Cod sursa (job #1572889)
#include <fstream>
#include <cstring>
using namespace std;
ifstream cin("bool.in");
ofstream cout("bool.out");
const int MAX = 1005, MAXI = 105;
char s[MAX], a[MAXI], *p;
int n, var[26];
int expresie();
int termen();
int factor();
int main()
{
cin.get(s, MAX);
cin>>n;
cin.get();
cin.getline(a, MAXI);
int poz = 0, bune = 0;
for(poz = 0; s[poz]; ++poz)
{
if(s[poz] == 'N' and s[poz+1] == 'O')
{
s[bune++] = '!';
poz += 2;
continue;
}
if(s[poz] == 'A' and s[poz+1] == 'N')
{
s[bune++] = '&';
poz += 2;
continue;
}
if(s[poz] == 'O' and s[poz+1] == 'R')
{
s[bune++] = '|';
poz += 1;
continue;
}
if(s[poz] == 'T' and s[poz+1] == 'R')
{
s[bune++] = '1';
poz += 3;
continue;
}
if(s[poz] == 'F' and s[poz+1] == 'A')
{
s[bune++] = '0';
poz += 4;
continue;
}
///if(s[poz] == ' ') continue;
s[bune++] = s[poz];
}
s[bune] = NULL;
for(int i=0; a[i]; ++i)
{
var[ a[i]-'A' ] = ! var[ a[i]-'A' ];
p = s;
cout<<expresie();
}
return 0;
}
int expresie()
{
int ans = termen();
while(*p == '|')
{
p++;
ans = ans or termen();
}
return ans;
}
int termen()
{
int ans = factor();
while(*p == '&')
{
p++;
ans = ans and factor();
}
return ans;
}
int factor()
{
int ans;
bool semn = true;
if(*p == '!')
{
p++;
semn = false;
}
if(*p == '(')
{
p++;
ans = expresie();
p++;
return ans and semn;
}
if(*p == '0' or *p == '1') {p++; return (*(p-1) - '0') and semn;}
ans = var[*p - 'A'];
p++;
return ans and semn;
}