Pagini recente » Cod sursa (job #1796544) | Cod sursa (job #2123852) | Cod sursa (job #156211) | Cod sursa (job #1867790) | Cod sursa (job #1995601)
#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;
ifstream in("bool.in");
ofstream out("bool.out");
char expr[1010];
char aux[1010];
char valOpus[200];
int lg;
int item;
void convertire(){
int lgAux = strlen(aux);
for(int i = 0; i < lgAux; i++){
if(aux[i] == ' '){
continue;
}
if(aux[i] == '(' || aux[i] == ')'){
expr[lg++] = aux[i];
}
else 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];
}
}
int factor();
int NOT();
int SAU();
int SI();
void citire(){
in.getline(aux,1001);
convertire();
}
int SAU(){
int calcul = SI();
while(expr[item] == '|'){
item++;
calcul = calcul | SI();
}
return calcul;
}
int SI(){
int calcul = NOT();
while(expr[item] == '&'){
item++;
calcul = calcul & NOT();
}
return calcul;
}
int NOT(){
int calcul = factor();
while(expr[item] == '!'){
item++;
calcul = calcul ^ factor();
}
return calcul;
}
int factor(){
int calcul = 0 ;
if(expr[item] == '('){
item++;
calcul = SAU();
item++;
}
else{
if(expr[item] == '1'){
item++;
return 1;
}
if(expr[item] == '0'){
item++;
return 0;
}
//caz in care e litera si trebuie inlocuita cu opusul
return valOpus[expr[item++]];
}
return calcul;
}
int main(){
citire();
int n;
char temp;
in >> n;
for(int i = 1; i <= n; i++){
in >> temp;
valOpus[temp] = 1 - valOpus[temp];
item = 0;
out << SAU();
}
return 0;
}