Cod sursa(job #362701)

Utilizator mihaionlyMihai Jiplea mihaionly Data 10 noiembrie 2009 18:58:39
Problema Bool Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <fstream>
#include <string>
using namespace std;
ifstream f("bool.in");
ofstream g("bool.out");
#define Lmax 1001
bool val[27];
int nr;
char s[Lmax],*p;
bool eval();
bool factor();
bool termen();
void read()
 {
 char *a;
 f.getline(s,Lmax);
 while((a=strstr(s,"AND")))
  {
  strcpy(a,a+2);
  a[0]='a';
  }
 while((a=strstr(s,"OR")))
  {
  strcpy(a,a+1);
  a[0]='o';
  }
 while((a=strstr(s,"NOT")))
  {
  strcpy(a,a+2);
  a[0]='!';
  }
 while((a=strstr(s," ")))
  {
  strcpy(a,a+1);
  }
 }
bool eval()
 {
 bool ok=factor();
 while(*p=='a')
  {
  p++;
  ok=ok&factor();
  }
 return ok;
 }
bool factor()
 {
 bool ok=termen();
 while(*p=='o')
  {
  p++;
  ok=ok|termen();
  }
 return ok;
 }
bool termen()
 {
 bool ok=false,nott=false;
 if(*p=='!')
  { 
  p++;
  nott=true;
  }
 if(*p=='(')
  {
  p++;
  ok=eval();
  p++;
  }
 else
  {
  ok=val[*p-'A'];
  p++;
  }
 if(nott)
  ok=!ok;
 return ok;
 }
int main()
 {
 char c;
 read();
 f>>nr;
 while(nr--)
  {
  f>>c;
  if(val[c-'A'])
   val[c-'A']=false;
  else
   val[c-'A']=true;
  p=s;
  g<<eval();
  }
 return 0;
 }