Pagini recente » Cod sursa (job #2921253) | Cod sursa (job #1853085) | Cod sursa (job #2867890) | Cod sursa (job #2102983) | Cod sursa (job #1572787)
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
ifstream fi("bool.in");
ofstream fo("bool.out");
bool expresie();
bool termen();
bool factor();
bool bucata();
string s;
int p, vector[200];//tot vectorul o sa fie 0 initial ._.
char aux[2000];
int main()
{
getline(fi, s);
int n, i, k = 0;
n = s.length();
for (i = 1; i <= 26; i++)
vector[i] = 1;
for (i = 0; i < n; i++)
{
if (s[i] == 'A' && s[i + 1] == 'N')
{
aux[k++] = '&';
i += 2;
}
else if (s[i] == 'O' && s[i + 1] == 'R')
{
aux[k++] = '|';
i++;
}
else if (s[i] == 'N' && s[i + 1] == 'O')
{
aux[k++] = '!';
i += 2;
}
else if (s[i] == 'T' && s[i+1] == 'R')
aux[k++] = '1';
else if (s[i] == 'F' && s[i+1] == 'A')
aux[k++] = '0';
else if (s[i] != ' ')
aux[k++] = s[i];
}
int numar;
fi >> numar;
for (i = 1; i <= numar; i++)
{
char b;
fi >> b;
if (vector[b - 'A'] == 0)
vector[b - 'A'] = 1;
else vector[b - 'A'] = 0;
fo << expresie();
p = 0;
}
return 0;
}
bool expresie()
{
bool s = termen();
int d;
while (aux[p] == '|')
{
p++;
s = s||termen();
}
return s;
}
bool termen()
{
bool q = factor();
int d;
while (aux[p] == '&')
{
p++;
q=q&&factor();
}
return q;
}
bool factor()
{
bool q;
int d;
while (aux[p] == '!')
{
p++;
q=!factor();
return q;
}
bool val;
if (aux[p] == '('){
p++;
val = expresie();
p++;
return val;
}
val = vector[aux[p] - 'A'];
return val;
}