Pagini recente » Cod sursa (job #968113) | Cod sursa (job #226404) | Cod sursa (job #2717241) | Cod sursa (job #1675908) | Cod sursa (job #2791580)
#include <stdio.h>
#include <stdlib.h>
#define MAXX 1000
char v[MAXX];
char s[256];
int cnt;
FILE *fin,*fout;
int getString(){
int i;
char c, a;
i = 0;
c = fgetc(fin);
a = 0;
while(c != '\n' && a != '\n'){
if(c != ' '){
if(c == ')' || c == '('){
v [i] = c;
i ++;
}else{
a = fgetc(fin);
if(a == ' ' || a == ')' || a == '(' || a == '\n'){
v[i] = c;
i ++;
if(a == ')' || a == '('){
v[i] = a;
i ++;
}
}else{
if (c == 'N'){
v [i] = '!';
i ++;
fgetc (fin);
}
else if (c == 'A'){
v [i] = '&';
i++;
fgetc (fin);
}
else if (c == 'O'){
v [i] = '|';
i ++;
}
else if (c == 'T'){
v [i] = 1;
i ++;
fgetc (fin);
fgetc (fin);
}
else if (c == 'F'){
v [i] = 0;
i ++;
fgetc (fin);
fgetc (fin);
fgetc (fin);
}
}
}
}
if(a != '\n'){
c = fgetc (fin);
}
}
return i;
}
int Or ();
int factor (){
int fact;
if(v [cnt] == '('){
cnt ++;
fact = Or ();
cnt ++;
}else{
fact = 0;
if(v [cnt] == 0 || v [cnt] == 1){
fact = v [cnt];
}else{
fact = s [v [cnt]];
}
cnt ++;
}
return fact;
}
int Not (){
int fact, x;
x = 0;
if(v [cnt] == '!'){
x = 1;
}
while (v [cnt] == '!'){
cnt ++;
fact = 1 - factor ();
}
if (x == 0){
fact = factor ();
}
return fact;
}
int And(){
int fact;
fact = Not();
while (v [cnt] == '&'){
cnt ++;
fact *= Not ();
}
return fact;
}
int Or (){
int fact, x;
fact = And();
while (v [cnt] == '|'){
cnt ++;
x = And();
if (x + fact >= 1){
fact = 1;
}
}
return fact;
}
int main(){
int n, m, i;
char a;
fin = fopen("bool.in","r");
fout = fopen("bool.out","w");
n = getString();
fscanf(fin, "%d ", &m);
for(i = 0; i < m; i ++){
a = fgetc (fin);
s [a] = 1 - s [a];
cnt = 0;
fprintf (fout, "%d", Or ());
}
return 0;
}