Pagini recente » Cod sursa (job #1996356) | Cod sursa (job #2037113) | Cod sursa (job #2307238) | Cod sursa (job #3001940) | Cod sursa (job #1806653)
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <cstring>
#include <ctype.h>
#include <algorithm>
#include <iostream>
#include <fstream>
using namespace std;
int p = 0;
char s[100001];
int litere[26] = {0};
int termen(void);
int factor(void);
int expresie(void);
int expresie()
{
int sum = factor();
while(s[p] == '|' || s[p] == '&')
{
if(s[p] == '|')
{
p++;
sum|=factor();
}
else
{
p++;
sum&=factor();
}
}
return sum;
}
int factor()
{
int rez;
int semn = 0;
if(s[p] == '(')
{
p++;
rez = expresie();
p++;
return rez;
}
if(s[p] >= 'A' && s[p] <= 'Z')
{
rez = litere[s[p] - 'A'];
}
else if(s[p] == '!')
{
p++;
int a = expresie();
if(a == 1)
{
rez = 0;
}
else
{
rez = 1;
}
}
return rez;
}
int main()
{
char vals[101];
ifstream fp ("bool.in");
getline(fp,s);
getline(fp,n);
getline(fp,vals);
int j = 0;
int i;
int len = strlen(s);
for(i = 0;i< len-1;i++)
{
if(s[i] == 'A' && s[i+1] == 'N')
{
s[j] = '&';
i+=2;
j++;
}
else if (s[i] == 'N' && s[i+1] == 'O')
{
s[j] = '!';
i+=2;
j++;
}
else if (s[i] == 'T' && s[i+1] == 'R')
{
s[j] = '1';
i+=3;
j++;
}
else if(s[i] == 'F' && s[i+1] == 'A')
{
s[j] = '0';
i+=4;
j++;
}
else if(s[i] == 'O' && s[i+1] == 'R')
{
s[j] = '|';
i+=1;
j++;
}
else if(s[i] != ' ')
{
s[j] = s[i];
j++;
}
}
s[j+1] = '.';
fp.close();
fp = fopen("bool.out","w");
for(i = 0;i<strlen(vals)-1;i++)
{
if(litere[s[i-('a' - 'A')] == 1])
{
litere[s[i-('a' - 'A')] = 0;
}
else
{
litere[s[i-('a' - 'A')] = 1;
}
int a = expresie();
printf("%i",a);
fprintf(fp,"%i",a);
}
fp.close();
return 0;
}