Cod sursa(job #2136913)

Utilizator rares1012Rares Cautis rares1012 Data 20 februarie 2018 13:25:03
Problema Bool Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 2.67 kb
#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;
}