Pagini recente » Cod sursa (job #3122387) | Cod sursa (job #1985945) | Cod sursa (job #162644) | Cod sursa (job #4162) | Cod sursa (job #1724618)
#include<stdlib.h>
#include<stdio.h>
#include<fstream>
#include<string.h>
#include<vector>
#include<iostream>
#include<algorithm>
using namespace std;
char v[100], sc[110], vec[10000],temp[10000];
int l, i, n, k, ok, nr, p, val[200],len,x,le;
void clrprt()
{
l = strlen(vec) - 1;
for (i = 0; i <= l - 2; i++)
if (vec[i] == '('&&vec[i + 2] == ')')
{
vec[i] = vec[i + 1];
strcpy(vec + i + 1, vec + i + 3);
}
}
void solveec()
{
l = strlen(vec) - 1;
for (i = 0; i <= l-1; i++)
if (vec[i] == '&'&&(vec[i+1]=='0'||vec[i+1]=='1')&&(vec[i-1]=='0'||vec[i-1]=='1'))
{
vec[i - 1] = (vec[i + 1] - '0'&&vec[i-1]-'0')+'0';
strcpy(vec + i, vec + i + 2);
l = strlen(vec) - 1;
}
else
if (vec[i] == '|' && (vec[i + 1] == '0' || vec[i + 1] == '1') && (vec[i - 1] == '0' || vec[i - 1] == '1'))
{
vec[i - 1] = (vec[i + 1] - '0'||vec[i - 1] - '0') + '0';
strcpy(vec + i, vec + i + 2);
l = strlen(vec) - 1;
}
}
void clrnotaddval()
{
l = strlen(vec) - 1;
for (i = 0; i <= l; i++)
if (vec[i] == '!'&& vec[i + 1] != '(')
{
if (val[vec[i + 1]] == 1)
vec[i] = '0';
else
vec[i] = '1';
strcpy(vec + i + 1, vec + i + 2);
}
else
if (isalpha(vec[i]))
{
if (val[vec[i]] == 1)
vec[i] = '1';
else
vec[i] = '0';
}
}
int main()
{
ifstream f("bool.in");
ofstream g("bool.out");
memset(val, 0, sizeof(val));
i = 0;
do
{
f >> v;
if (strlen(v) == 1)
vec[i++] = v[0];
else
{
if (strcmp("AND", v) == 0)
vec[i++] = '&';
else
if (strcmp("TRUE", v) == 0)
vec[i++] = '1';
else
if (strcmp("FALSE", v) == 0)
vec[i++] = '0';
else
if (strcmp("OR", v) == 0)
vec[i++] = '|';
else
if (strcmp("NOT", v) == 0)
vec[i++] = '!';
else
{
strcpy(vec + i, v);
i += strlen(v);
}
}
} while (!isdigit(v[0]));
p = 1;
do
{
n = n + p*(vec[strlen(vec) - 1] - '0');
p = p * 10;
vec[strlen(vec) - 1] = '\0';
} while (isdigit(vec[strlen(vec) - 1]));
l = strlen(vec) - 1;
le = l;
for (i = 0; i <= l - 4; i++)
if (vec[i] == 'T'&& vec[i + 1] == 'R'&& vec[i + 2] == 'U'&& vec[i + 3] == 'E')
{
strcpy(vec + i, vec + i + 3);
vec[i] = '1';
}
else
if (vec[i] == 'F'&& vec[i + 1] == 'A'&& vec[i + 2] == 'L'&& vec[i + 3] == 'S'&& vec[i + 4] == 'E')
{
strcpy(vec + i, vec + i + 4);
vec[i] = '0';
}
else
if (vec[i] == 'N'&& vec[i + 1] == 'O'&& vec[i + 2] == 'T')
{
strcpy(vec + i, vec + i + 2);
vec[i] = '!';
}
for (k = 0; k <= le; k++)
temp[k] = vec[k];
f >> sc;
len = strlen(sc) - 1;
for (k = 0; k <= len; k++)
{
for (x = 0; x <= le; x++)
vec[x] = temp[x];
val[sc[k]] = !val[sc[k]];
do
{
clrprt();
clrnotaddval();
solveec();
} while (strlen(vec) != 1);
g << vec;
}
return 0;
}