Cod sursa(job #1276801)

Utilizator LegionHagiu Stefan Legion Data 26 noiembrie 2014 20:48:33
Problema Bool Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.38 kb
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
bool litere[40];
int n;
string s;
bool rez(int&i);
bool datermen(int&i)
{
	bool raspuns;
	bool invers = false;
	if (s[i] == 'N'&&s[i + 1] == 'O')
	{
		i += 4;
		invers = true;
	}
	if (s[i] == '(')
	{
		i++;
		raspuns = rez(i);
	}
	else if (s[i] == 'T'&&s[i + 1] == 'R')
	{
		i += 4;
		raspuns = true;
	}
	else if (s[i] == 'F'&&s[i + 1] == 'A')
	{
		i += 5;
		raspuns = false;
	}
	else if (s[i] >= 'A'&&s[i] <= 'Z' && (s[i + 1]<'A' || s[i + 1]>'Z'))
	{
		raspuns = litere[s[i] - 65];
		i++;
	}
	if (s[i] == ' '){ i++; }
	if (invers)
	{
		return !raspuns;
	}
	else
	{
		return raspuns;
	}
}
bool termen(int& i)
{
	bool raspuns = true;
	raspuns=datermen(i);
	while (s[i] == 'O'&&s[i + 1] == 'R')
	{
		i += 3;
		if (raspuns)
			raspuns=datermen(i);
		else
			datermen(i);
	}
	return raspuns;
}
bool rez(int& i)
{
	bool raspuns = false;
	raspuns=termen(i);
	while (s[i] == 'A'&&s[i + 1] == 'N')
	{
		i += 4;
		if (!raspuns)
		{
			raspuns = termen(i);
		}
		else
		{
			termen(i);
		}
	}
	return raspuns;
}
int main()
{
	ifstream in("bool.in");
	ofstream out("bool.out");
	int f, i, j;
	char c;
	getline(in, s);
	n = s.size();
	in >> f;
	for (i = 1; i <= f; i++)
	{
		j = 0;
		in >> c;
		litere[c - 65] = !litere[c - 65];
		out << rez(j);
	}
}