Pagini recente » Cod sursa (job #2823626) | Cod sursa (job #1647676) | Cod sursa (job #977265) | Cod sursa (job #644505) | Cod sursa (job #2324819)
#include <bits/stdc++.h>
using namespace std;
ifstream in("bool.in");
ofstream out("bool.out");
char sirinit[2000],sirlit[2000],s[2000];
int vval[1000],p,l,n;
void transformare_sirinit()
{
int n = strlen(sirinit);
int p = 0,it = -1;
while (p < n)
{
if (isalpha(sirinit[p]))
{
if (isalpha(sirinit[p + 1]))
{
if (sirinit[p + 1] == 'O')
{
s[++it] = '!';
p += 3;
}
else if (sirinit[p + 1] == 'R' && sirinit[p] == 'O')
{
s[++it] = '|';
p += 2;
}
else if (sirinit[p + 1] == 'A')
{
s[++it] = '0';
p += 5;
}
else if (sirinit[p + 1] == 'R' && sirinit[p] == 'T')
{
s[++it] = '1';
p += 4;
}
else if (sirinit[p + 1] == 'N')
{
s[++it] = '&';
p += 3;
}
}
else
s[++it] = sirinit[p++];
}
else if (sirinit[p] == ' ') ++p;
else
s[++it] = sirinit[p++];
}
l = it;
}
bool expresie();
bool termen();
bool factor();
bool expresie()
{
bool val = termen();
while (s[p] == '|')
{
++p;
val = (val || termen());
}
return val;
}
bool termen()
{
bool val = factor();
while (s[p] == '&')
{
++p;
val = (val && factor());
}
return val;
}
bool factor()
{
bool val = false,semn = true;
while (s[p] == '!')
{
++p;
semn = (!semn);
}
if (s[p] == '(')
{
++p;
val = expresie();
++p;
return semn ? val : (!val);
}
if (isalpha(s[p]))
{
val = vval[s[p]];
++p;
}
return semn ? val : (!val);
}
int main()
{
in.getline(sirinit,2000);
in>>n;
in.get();
in.getline(sirlit,2000);
transformare_sirinit();
int lung = strlen(sirlit);
for (int i = 0; i < lung; ++i)
{
if (vval[sirlit[i]] == true) vval[sirlit[i]] = false;
else vval[sirlit[i]] = true;
p = 0;
out<<expresie();
}
return 0;
}