Pagini recente » Cod sursa (job #2170994) | Cod sursa (job #2867846) | Cod sursa (job #1120726) | Cod sursa (job #740036) | Cod sursa (job #1324238)
#include <iostream>
#include <fstream>
using namespace std;
char s[1001];
int nrc, p;
bool lit[28];
ifstream in("bool.in");
ofstream out("bool.out");
int expresie();
int termen();
int factor();
int factor()
{
int semn = 0;
if ( s[p] == '!' )
{
p++;
semn = 1;
}
int val=lit[ s[p] -'A' + 1 ];
if ( s[p] == '1' )
{
p++;
if ( semn == 1 )
return 0;
return 1;
}
if ( s[p] == '0' )
{
p++;
if ( semn == 1 )
return 1;
return 0;
}
if ( semn == 1 )
val = !val;
if ( val == true )
return 1;
return 0;
}
int termen()
{
int val = factor();
if ( s[p] == '&' )
{
p++;
if ( val == factor() )
return 1;
return 0;
}
return val;
}
int expresie()
{
int val = termen();
if ( s[p] == '|' )
{
p++;
if ( val == 1 )
return 1;
if ( termen() == 1 )
return 1;
return 0;
}
return val;
}
int main()
{
char x;
int n, i;
x = in.get();
while ( x != '\n' )
{
s[nrc] = x;
x = in.get();
if ( s[nrc] == 'A' && x == 'N' )
{
s[nrc] = '&';
in.get();
x = in.get();
}
if ( s[nrc] == 'O' && x == 'R' )
{
s[nrc] = '|';
x = in.get();
}
if ( s[nrc] == 'N' && x == 'O' )
{
s[nrc] = '!';
in.get(); // trec de T
x = in.get();
}
if ( s[nrc] == 'T' && x == 'R' )
{
s[nrc] = '1';
in.get(); // trece de U
in.get(); // trece de E
x = in.get();
}
if ( s[nrc] == 'F' && x == 'A' )
{
s[nrc] = '0';
in.get(); // trec de L
in.get(); // trec de S
in.get(); // trec de E
x = in.get();
}
nrc++;
if ( x == ' ' )
x = in.get();
}
in >> n;
in.get();
for ( i = 1; i <= n; i++ )
{
x = in.get();
if ( lit[x - 'A' + 1] == false )
lit[x - 'A' + 1] = true;
else lit[x - 'A' + 1] = false;
p = 0;
out << expresie();
}
return 0;
}