Pagini recente » Cod sursa (job #399721) | Cod sursa (job #3126520) | Cod sursa (job #301484) | Cod sursa (job #1938432) | Cod sursa (job #3193438)
#include <bits/stdc++.h>
#include <cctype>
#define inf 1000000000
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");
char sir[1005];
int pos;
string s;
map<char, bool> mp;
void atribuire()
{
int i = 0;
int len = strlen(sir);
while(i < len)
{
if(sir[i] == 'T' && sir[i+1] == 'R')
{
s.push_back('1');
i+=4;
}
else if(sir[i] == 'F' && sir[i+1] == 'A')
{
s.push_back('0');
i+=5;
}
else if(sir[i] == 'N' && sir[i+1] == 'O')
{
s.push_back('!');
i+=3;
}
else if(sir[i] == 'A' && sir[i+1] == 'N')
{
s.push_back('&');
i+=3;
}
else if(sir[i] == 'O' && sir[i+1] == 'R')
{
s.push_back('|');
i+=2;
}
else if(strchr("()", sir[i]))
{
s.push_back(sir[i]);
i++;
}
else if(sir[i]>='A' && sir[i]<='Z')
{
s.push_back(sir[i]);
i++;
}
else if(sir[i] == ' ')
{
i++;
}
}
}
bool OR();
bool AND();
bool EXP();
bool OR()
{
bool r = AND();
while(s[pos] == '|')
{
pos++;
bool t = AND();
r = (r || t);
}
return r;
}
bool AND()
{
bool r = EXP();
while(s[pos] == '&')
{
pos++;
bool t = EXP();
r = (r && t);
}
return r;
}
bool EXP()
{
bool r = 0;
if(s[pos] == '(')
{
pos++;
r = OR();
pos++;
}
else if(s[pos] == '!')
{
pos++;
r = !EXP();
}
else
{
if(s[pos] == '1' || s[pos] == '0')
{
r = s[pos] - '0';
}
else
{
r = mp[s[pos]];
}
pos++;
}
return r;
}
int main()
{
for(int i = 'A'; i <= 'Z'; i++) mp[i] = 0;
mp['1'] = 1;
mp['0'] = 0;
char litere[101];
fin.getline(sir, 1001);
int n;
fin >> n;
fin.get();
fin.getline(litere, 101);
atribuire();
int len = strlen(litere);
for(int i = 0; i < len; i++)
{
pos = 0;
mp[litere[i]] = !mp[litere[i]];
cout << mp['A'] << mp['B'] << mp['C'] << mp['D']<<endl;
fout << OR();
}
/* fout << add(); */
}