Pagini recente » Cod sursa (job #961820) | Cod sursa (job #915721) | Cod sursa (job #1571537) | Cod sursa (job #2300221) | Cod sursa (job #2950311)
#include <iostream>
#include <fstream>
using namespace std;
#define NMAX 1004
char a[NMAX], schimb[101];
bool t[30];
bool calc_or();
bool calc_and();
bool factor();
int p = 0;
bool calc_or() {
bool rez = calc_and();
while(a[p] == '|') {
p++;
rez = (calc_and() || rez);
}
return rez;
}
bool calc_and() {
bool rez = factor();
while(a[p] == '&') {
p++;
rez = (factor() && rez);
}
return rez;
}
bool factor() {
bool semn = true;
bool val;
while(a[p] == '!') {
semn = (!semn);
p++;
}
if(a[p] == '(') {
p++;
val = calc_or();
p++;
if(semn == false) {
val = (!val);
}
return val;
}
if(a[p] == '0')
val = false;
else if(a[p] == '1')
val = true;
else if(a[p] >= 'A' && a[p] <= 'Z')
val = t[a[p] - 'A'];
if(semn == false) {
val = (!val);
}
p++;
return val;
}
void transforma()
{
int i = 0, m = 0;
while (a[i] != '\0')
{
if (a[i] == 'T' && a[i+1] == 'R')
{
a[m++] = '1';
i += 4;
}
else if (a[i] == 'F' && a[i+1] == 'A')
{
a[m++] = '0';
i += 5;
}
else if (a[i] == 'N' && a[i+1] == 'O')
{
a[m++] = '!';
i += 3;
}
else if (a[i] == 'A' && a[i+1] == 'N')
{
a[m++] = '&';
i += 3;
}
else if (a[i] == 'O' && a[i+1] == 'R')
{
a[m++] = '|';
i += 2;
}
else if (a[i] != ' ')
{
a[m++] = a[i++];
}
else///daca e spatiu
{
i++;
}
}
a[m] = '\0';
}
int main() {
ifstream fin("bool.in");
ofstream fout("bool.out");
/*int nc = 0;
char ch;
char ant;
fin.get(ch);
a[nc++] = ch;
ant = ch;
fin.get(ch);
while(ch != '\n') {
if(ch != ' ') {
if('A' <= ch && ch <= 'Z') {
if(ch == 'D') {
if(ant == 'N') { //suntem intr-o structura de tip &
a[nc - 2] = '&';
nc = nc - 1;
} else {
a[nc++] = ch;
}
} else if(ch == 'R') {
if(ant == 'O') {
a[nc - 1] = '|';
nc = nc;
} else {
a[nc++] = ch;
}
} else if(ch == 'T') {
if(ant == 'O') {
a[nc - 2] = '!';
nc = nc - 1;
} else {
a[nc++] = ch;
}
} else if(ch == 'E') {
if(ant == 'U') {
a[nc - 3] = '1';
nc = nc - 2;
} else if(ant == 'S') {
a[nc - 3] = '0';
nc = nc - 2;
} else {
a[nc++] = ch;
}
} else {
a[nc++] = ch;
}
} else {
a[nc++] = ch;
}
}
ant = ch;
fin.get(ch);
}*/
/*for(int i = 0; i < nc; i++) {
fout << a[i];
}
fout << "\n";
*/
fin.getline(a, NMAX+1);
transforma();
int n;
fin >> n;
fin >> schimb;
//fin.get(ch);//am citit \n
for(int i = 0; i < n; i++) {
//fin.get(ch);
t[schimb[i]-'A'] = (!t[schimb[i]-'A']);
p = 0;
fout << calc_or();
}
fin.close();
fout.close();
return 0;
}