Cod sursa(job #1995583)

Utilizator ruxandramateiMatei Ruxandra ruxandramatei Data 28 iunie 2017 15:38:21
Problema Bool Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.85 kb
#include <iostream>
#include <fstream>
#include <string.h>

using namespace std;

ifstream in("bool.in");
ofstream out("bool.out");

char expr[1010], * item;
char aux[1010];
char valOpus[200];
int lg;

void convertire(){
  int lgAux = strlen(aux);
  for(int i = 0; i < lgAux; i++){
    if(aux[i] == ' '){
      continue;
    }
    if(aux[i] == 'T' && aux[i + 1] == 'R'){
      i += 3;
      expr[lg++] = '1';
    }
    else if(aux[i] == 'F' && aux[i + 1] == 'A'){
      i += 4;
      expr[lg++] = '0';
    }
    else if(aux[i] == 'N' && aux[i + 1] == 'O'){
      i += 2;
      expr[lg++] = '1';// ca sa il faci binar A^A = F , A ^ F = A
      expr[lg++] = '!';
    }
    else if(aux[i] == 'A' && aux[i + 1] == 'N'){
      i += 2;
      expr[lg++] = '&';
    }
    else if(aux[i] == 'O' && aux[i + 1] == 'R'){
      i ++;
      expr[lg++] = '|';
    }
    else
      expr[lg++] = aux[i];
  }
}

bool factor();
bool NOT();
bool SAU();
bool SI();


void citire(){
  in.getline(aux,1001);
  convertire();
}

bool SAU(){
  bool calcul = SI();
  while(* item == '|'){
    item++;
    calcul = calcul || SI();
  }
  return calcul;
}

bool SI(){
  bool calcul = NOT();
  while(* item == '&'){
    item++;
    calcul = calcul & NOT();
  }
  return calcul;
}

bool NOT(){
  bool calcul = factor();
  while(* item == '!'){
    item++;
    calcul = calcul ^ factor();
  }
  return calcul;
}

bool factor(){
  bool calcul ;
  if(* item == '('){
    item++;
    calcul = SAU();
    item++;
  }
  else{
    if(* item == '1'){
      item ++;
      return 1;
    }
    if(* item == '0'){
      item++;
      return 0;
    }
    return valOpus[* item];//caz in care e litera si trebuie  inlocuita cu opusul
  }
}

int main(){
  citire();
  int n;
  char temp;
  in >> n;
  for(int i = 1; i <= n; i++){
    in >> temp;
    valOpus[temp] = 1 - valOpus[temp];
    item = expr;
    out << SAU();
  }
  return 0;
}