Pagini recente » Cod sursa (job #1684361) | Cod sursa (job #1095854) | Cod sursa (job #2294416) | Cod sursa (job #694892) | Cod sursa (job #2136913)
#include <stdio.h>
#include <stdlib.h>
char cuv[6];
char v[1000];
char val[26];
int k=0;
char v1[4]={'T','R','U','E'};
char v2[5]={'F','A','L','S','E'};
char v3[3]={'N','O','T'};
char v4[3]={'A','N','D'};
char v5[2]={'O','R'};
int expresie();
int factor();
int expresie(){
int sum=factor();
while(v[k]=='&' || v[k]=='|'){
if(v[k]=='&'){
k++;
sum=sum&factor();
}
else {
k++;
sum=sum|factor();
}
}
return sum;
}
int factor(){
int val,semn=1;
while(v[k]=='!')
{
semn*=-1;
k++;
}
if(v[k]=='(')
{
k++;
val=expresie();
k++;
if(semn==1)
return val;
else return !val;
}
if(v[k]=='t'){
if(semn==1)
return 1;
return 0;
}
else if(v[k]=='f')
{
if(semn==1)
return 0;
return 1;
}
if(v[k]>='A' && v[k]<='Z'){
return val[v[k]-'A']
}
}
int vcuv(){
int i,x=1;
for(i=0;i<4;i++){
if(cuv[i]!=v1[i])
x=0;
}
if(x==1)
return 1;
x=1;
for(i=0;i<5;i++){
if(cuv[i]!=v2[i])
x=0;
}
if(x==1)
return 2;
x=1;
for(i=0;i<3;i++){
if(cuv[i]!=v3[i])
x=0;
}
if(x==1)
return 3;
x=1;
for(i=0;i<3;i++){
if(cuv[i]!=v4[i])
x=0;
}
if(x==1)
return 4;
x=1;
for(i=0;i<2;i++){
if(cuv[i]!=v5[i])
x=0;
}
if(x==1)
return 5;
return 0;
}
int main()
{
int len=0,q=0,r;
char c;
FILE*fi,*fo;
fi=fopen("bool.in","r");
fo=fopen("bool.out","w");
c=fgetc(fi);
while(c!=EOF){
while(c>='A' && c<='Z'){
cuv[len]=c;
len++;
c=fgetc(fi);
}
if(len!=0)
{
r=vcuv();
if(r==1)
{
v[q]='t';
q++;
}
else if(r==2)
{
v[q]='f';
q++;
}
else if(r==3)
{
v[q]='!';
q++;
}
else if(r==4){
v[q]='&';
q++;
}
else if(r==5)
{
v[q]='|';
q++;
}
else {
v[q]=cuv[0];
q++;
}
}
if(c!=' ')
{
v[q]=c;
q++;
}
len=0;
c=fgetc(fi);
}
fclose(fi);
fclose(fo);
return 0;
}