Cod sursa(job #2140303)

Utilizator herbertoHerbert Mohanu herberto Data 23 februarie 2018 11:13:21
Problema Bool Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.38 kb
#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;
}