Cod sursa(job #1806653)

Utilizator croi01Henry Croitor Jr. croi01 Data 15 noiembrie 2016 16:39:13
Problema Bool Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.29 kb
#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;
}