Pagini recente » Cod sursa (job #159800) | Cod sursa (job #1759100) | Cod sursa (job #1265919) | Cod sursa (job #2659061) | Cod sursa (job #1322122)
#include <iostream>
#include <stdio.h>
#include <algorithm>
FILE *f, *g;
using namespace std;
/*
A AND ((B OR NOT C) OR ((TRUE)))
A&((B|!C)|((1)))
ABCA -> 1110
*/
int k=0;
char v2[1001],v[1001],p;
bool valori[26];
void procesare(){
int j=0, i=0;
while(j<=k){
int ok=0;
if(v[j]==' '){
j++;
ok=1;
}
if(v[j]=='('){
v2[i]='(';
j++;
i++;
ok=1;
}
if(v[j]==')'){
v2[i]=')';
j++;
i++;
ok=1;
}
if(v[j]=='A'&& v[j+1]=='N'){
v2[i]='&';
j+=3;
i++;
ok=1;
}
if(v[j]=='O' && v[j+1]=='R'){
v2[i]='|';
j+=2;
i++;
ok=1;
}
if(v[j]=='N'&& v[j+1]=='O'){
v2[i]='!';
j+=3;
i++;
ok=1;
}
if(v[j]=='T'&& v[j+1]=='R'){
v2[i]='1';
j+=4;
i++;
ok=1;
}
if(v[j]=='F'&& v[j+1]=='A'){
v2[i]='0';
j+=5;
i++;
ok=1;
}
if(ok==0){
v2[i]=v[j];
j++;
i++;
}
}
return;
}
bool expresie();
bool termen();
bool factor();
bool expresie(){
bool rez = termen();
while(v2[p] == '|'){
p++;
rez = (rez || termen());
/*
if(rez == 1 || termen() == 1){
rez=1;
}else rez=0;
*/
}
return rez;
}
bool termen(){
bool rez2 = factor();
while(v2[p] == '&'){
p++;
if(rez2 == 1 && factor() == 1){
rez2 = 1;
}else rez2 = 0;
}
return rez2;
}
bool factor(){
bool val,semn=1;
while(v2[p] == '!'){
p++;
semn=(!semn);
}
if(v2[p] == '('){
p++;
val=expresie();
p++;
if(!semn) return !val;
return val;
/*
if(semn==1){
return val;
}else return !val;
*/
}
if (!semn) return (!valori[v2[p]-'A']);
return valori[v2[p]-'A'];
}
int main()
{ int n, i;
char c;
f=fopen("bool.in","r");
g=fopen("bool.out","w");
while(c!='\n'){
c=fgetc(f);
if(c!='\n'){
v[k]=c;
k++;
}
}
procesare();
fscanf(f,"%d\n",&n);
for(i=1;i<=n;i++){
c=fgetc(f);
valori[c-'A']=!valori[c-'A'];
fprintf(g,"%d",expresie());
}
fprintf(g,"\n");
fclose(f);
fclose(g);
return 0;
}