Pagini recente » Cod sursa (job #3158556) | Cod sursa (job #1349662) | Cod sursa (job #139046) | Cod sursa (job #971959) | Cod sursa (job #1393332)
#include <stdio.h>
#include <string.h>
using namespace std;
FILE*f=fopen("bool.in","r"),*g=fopen("bool.out","w");
int n, k, p[1020], t;
char s[1020], ch;
void modificare()
{
for(int i = 0; i < n; i++)
{
if(s[i] == ch)
{
if(p[i] == 1)
p[i] = 0;
else if(p[i] == 0)
p[i] = 1;
}
}
}
int expresie();
int factor();
int termen();
int paranteze();
void afisare(char a[])
{
fprintf(g,"%s\n",a);
}
int main()
{
fgets(s,1010,f);
n = strlen(s) - 1;
for(int i = 0; i < n; i++)
{
if(s[i] == 'T' && s[i+1] == 'R')
{
char t[1020];
strcpy(t, s + i + 4);
strcpy(s + i + 1, t);
s[i] = '1';
p[i] = 1;
n -= 3;
}
if(s[i] == 'F' && s[i+1] == 'A')
{
char t[1020];
strcpy(t, s + i + 5);
strcpy(s + i + 1, t);
s[i] = '0';
n -= 4;
}
if(s[i] == 'A' && s[i+1] == 'N')
{
char t[1020];
strcpy(t, s + i + 3);
strcpy(s + i + 1, t);
s[i] = '&';
n -= 2;
}
if(s[i] == 'O' && s[i+1] == 'R')
{
char t[1020];
strcpy(t, s + i + 2);
strcpy(s + i + 1, t);
s[i] = '|';
n -= 1;
}
if(s[i] == 'N' && s[i+1] == 'O')
{
char t[1020];
strcpy(t, s + i + 3);
strcpy(s + i + 1, t);
s[i] = '~';
n -= 2;
}
if(s[i] == ' ')
{
char t[1020];
strcpy(t, s + i + 1);
strcpy(s + i, t);
n--;
i--;
}
}
fscanf(f,"%d\n",&t);
for(int i = 1; i <= t; i++)
{
k = 0;
fscanf(f,"%c", &ch);
modificare();
int sol = expresie();
fprintf(g,"%d",sol);
}
return 0;
}
int expresie()
{
int r = termen();
while(s[k] == '|')
{
k++;
r |= termen();
}
return r;
}
int termen()
{
int r = factor();
while(s[k] == '&')
{
k++;
r &= factor();
}
return r;
}
int factor()
{
int r = paranteze();
while(s[k] == '~')
{
k++;
r = ~paranteze();
}
return r;
}
int paranteze()
{
int r = 0;
if(s[k] == '(')
{
k++;
r = expresie();
k++;
}
else if(s[k] >= 'A' && s[k] <= 'Z')
{
r = p[k];
k++;
}
return r;
}