Pagini recente » Cod sursa (job #1585819) | Cod sursa (job #1107639) | Cod sursa (job #1519003) | Cod sursa (job #1301074) | Cod sursa (job #1995583)
#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;
}