Cod sursa(job #1081393)

Utilizator hrazvanHarsan Razvan hrazvan Data 13 ianuarie 2014 16:37:17
Problema Bool Scor 70
Compilator c Status done
Runda Arhiva de probleme Marime 1.54 kb
#include <stdio.h>
#define LENGHT 1000
int exp ();
int variable ();
int op ();
char s[ LENGHT ], chars[ 27 ];
int p, ind = 0;

int exp(){
    int rez, oper, x;
    rez = variable ();
    while ( p < ind && s[ p ] != ')' ){
        oper = op ();
        x = variable ();
        if ( oper == 1 )    rez = rez && x;
        else  rez = rez || x;
    }
    return rez;
}
int variable (){
    int rez;
    if( s[ p ] == '(' ){
        p++;
        rez = exp();
        p++;
        while ( s[ p ] == ' ' ) p++;
        return rez;
    }
    int ind2 = 0;
    char lc;
    while ( s[ p ] >= 'A' && s[ p ] <= 'Z' ){
        ind2++;
        lc = s[ p ];
        p++;
    }
    while ( s[ p ] == ' ' ) p++;
    if ( ind2 == 1 ) return chars[ lc - 'A' ];
    if ( ind2 == 3 ) return !variable ();
    if ( ind2 == 4 ) return 1;
    return 0;
}
int op (){
    int ind2 = 0;
    while ( s[ p ] >= 'A' && s[ p ] <= 'Z' ){
        ind2++;
        p++;
    }
    p++;
    if ( ind2 == 2 ) return 2;
    return 1;
}

int main()
{
    FILE *in = fopen ( "bool.in", "r" );
    char ch;
    ch = fgetc ( in );
    while ( ch != '\n' ){
        s[ ind ] = ch;
        ind++;
        ch = fgetc ( in );
    }
    FILE *out = fopen ( "bool.out", "w" );
    int n, i;
    fscanf ( in, "%d ", &n );
    for ( i = 0; i < n; i++ ){
        ch = fgetc ( in );
        chars[ ch - 'A' ] = !chars[ ch - 'A' ];
        p = 0;
        fprintf ( out, "%d", exp () );
    }
    fclose ( in );
    fclose ( out );
    return 0;
}