Pagini recente » Cod sursa (job #2857230) | Cod sursa (job #518439) | Cod sursa (job #2700150) | Cod sursa (job #528332) | Cod sursa (job #714677)
Cod sursa(job #714677)
#include <fstream>
#include <iostream>
#include <string>
using namespace std;
string sec,aux;
char poz[1001];
ofstream f2("bool.out");
bool t(char x) {
if(x=='1') return true;
else return false;
}
void rez(char x) {
for(int i=0;i<=(int)sec.size()-1;i++) {
if(poz[i]==x) {
if(sec[i]=='0') {
sec[i]='1';
} else {
sec[i]='0';
}
}
}
string r;
r=sec;
int pi,pf;
int n=1;
do {
pi=0;
pf=0;
n=1;
bool expr=false,expr2=true;
for(int i=0;i<=(int)r.size()-1;i+=n) {
if(r[i]==')') {
pf=i;
n=-1;
}
if(n==-1&&r[i]=='(') {
pi=i;
break;
}
if(r[i]=='!'&&(r[i+1]=='0'||r[i+1]=='1')) {
char c;
if(r[i+1]=='0') c='1';
else c='0';
r[i]=c;
r[i+1]=c;
}
}
expr2=true;
expr=false;
for(int i=0;i<=(int)r.size()-1;i++) cout<<r[i];
cout<<endl;
if(pf==0) pf=(int)r.size()-1;
for(int i=pi;i<=pf;i++) {
if(r[i]=='0') {
expr2=false;
} else {
if(r[i]=='|') {
if(expr2) expr=true;
expr2=true;
}
}
}
if(expr2) expr=true;
for(int i=pi;i<=pf;i++) {
if(expr) {
r[i]='1';
} else {
r[i]='0';
}
}
if(r[pi-1]=='!') {
char c;
if(r[pi]=='0') c='1';
else c='0';
for(int j=pi-1;j<=pf;j++) {
r[j]=c;
}
}
for(int i=0;i<=(int)r.size()-1;i++) cout<<r[i];
cout<<endl;
if(n!=-1) break;
} while(true);
f2<<r[0];
}
bool is_letter(char x) {
if(x>='A'&&x<='Z') return 1;
else return 0;
}
int main() {
FILE *f=fopen("bool.in","r");
char x;
do {
fscanf(f,"%c",&x);
aux.push_back(x);
} while(x!=10);
for(int i=0;i<=(int)aux.size()-1;i++) {
bool fol=false;
int o=(int)sec.size();
poz[o]=' ';
if(is_letter(aux[i])) {
if(aux.substr(i,3)=="AND") {
sec.push_back('&');
i+=2;
fol=true;
}
if(aux.substr(i,2)=="OR") {
sec.push_back('|');
i++;
fol=true;
}
if(aux.substr(i,3)=="NOT") {
i+=2;
sec.push_back('!');
fol=true;
}
if(aux.substr(i,4)=="TRUE") {
sec.push_back('1');
i+=3;
fol=true;
}
if(aux.substr(i,5)=="FALSE") {
sec.push_back('0');
i+=4;
fol=true;
}
if(!fol) {
poz[o]=aux[i];
sec.push_back('0');
}
} else {
if(aux[i]=='('||aux[i]==')') {
sec.push_back(aux[i]);
}
}
}
int k;
fscanf(f,"%d",&k);
int g=1;
while(!feof(f)) {
fscanf(f,"%c",&x);
if(g>k) break;
if(is_letter(x)) {
rez(x);
g++;
}
}
f2<<endl;
return 0;
}