Pagini recente » Cod sursa (job #2058036) | Cod sursa (job #615925) | Cod sursa (job #2712324) | Cod sursa (job #3129065) | Cod sursa (job #2140303)
#include<stdio.h>
#include<string.h>
using namespace std;
const int N=1001;
char v[N], aux[N];
int lit[30];
int p;
bool expresie(){
bool sum=termen();
if(s[p]=='|'){
p++;
sum=sum or termen();
}
return sum;
}
int termen(){
int prod=factor();
if(s[p]=='*'){
p++;
prod=prod and factor();
}
return prod;
}
int factor(){
int semn=0, val=0;
while(s[p]=='!'){
p++;
semn=1-semn;
}
if(s[p]=='('){
p++;
val=expresie();
p++;
return semn*val;
}
while(s[p]>='0' && s[p]<='9'){
val=val*10+(s[p]-'0');
p++;
}
return semn*val;
}
int main(){
FILE*fin=fopen("evaluare.in", "r");
FILE*fout=fopen("evaluare.out", "w");
int n, i, k;
char c;
c=fgetc(fin);
n=0;
while(c!='\n'){
while(c==' ')
c=fgetc(fin);
if(c=='('|| c==')'){
n++;
v[n]=c;
c=fgetc(fin);
}
i=0;
while(c>='A' && c<='Z'){
aux[i++]=c;
c=fgetc(fin);
}
aux[i] = 0;
if(i==1)
v[++n]=aux[0];
else{
if(strcmp(aux, "NOT")==0)
v[++n]='!';
if(strcmp(aux, "OR")==0)
v[++n]='|';
if(strcmp(aux, "AND")==0)
v[++n]='&';
if(strcmp(aux, "TRUE")==0)
v[++n]='1';
if(strcmp(aux, "FALSE")==0)
v[++n]='0';
}
}
fscanf(fin, "%d", &k);
fgetc(fin);
while(k>0){
c=fgetc(fin);
lit[c-'A']=1-lit[c-'A'];
k--;
}
return 0;
}