Cod sursa(job #1250553)

Utilizator fluture.godlikeGafton Mihnea Alexandru fluture.godlike Data 28 octombrie 2014 12:31:57
Problema Evaluarea unei expresii Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 5.04 kb
#include <stdio.h>
#include <string.h>
FILE *fin, *fout;
int *elemente, p1=0, p2 = 1, temp;
char *operatori, ch = 'r';
bool inmultire, impartire;
int main()
{
    fin = fopen("evaluare.in", "r");
    fout = fopen("evaluare.out", "w");
    elemente = new int[10000];
    operatori = new char[10000];
    operatori[0] = '(';
    while (fscanf(fin, "%c", &ch) != EOF)
    {
             if(ch >= '0' && ch <= '9')
             {
                   if(temp)
                   {
                           temp*=10;
                           temp+=(int)(ch-'0');
                   }
                   else
                   {
                       temp = (int)(ch - '0');
                   }
             }
             else
             {
                 if(temp)
                 {
                         elemente[p1] = temp;
                         temp = 0;
                         p1++;
                         if(inmultire == 1)
                         {
                                      p1--;p2--;
                                      elemente[p1-1] = elemente[p1-1]*elemente[p1];
                                      inmultire = 0;
                         }
                         if(impartire == 1)
                         {
                                      p1--;p2--;
                                      elemente[p1-1] = elemente[p1-1]/elemente[p1];
                                      impartire = 0;
                         } 
                 }
                     if(ch == '+')
                     {
                           operatori[p2] = '+';
                           p2++;
                           if(operatori[p2-2] == '+')
                           {
                                              p1--;
                                              elemente[p1-1] = elemente[p1-1] + elemente[p1];
                                              p2--;
                                              operatori[p2] = operatori[p2+1];
                           }
                           if(operatori[p2-2] == '-')
                           {
                                              p1--;
                                              elemente[p1-1] = elemente[p1-1] - elemente[p1];
                                              p2--;
                                              operatori[p2] = operatori[p2+1];
                           }
                     }
                     if(ch == '-')
                     {
                           operatori[p2] = '-';
                           p2++;p1--;
                           if(operatori[p2-2] == '+')
                           {
                                              p1--;
                                              elemente[p1-1] = elemente[p1-1] + elemente[p1];
                           }
                           if(operatori[p2-2] == '-')
                           {
                                              p1--;
                                              elemente[p1-1] = elemente[p1-1] - elemente[p1];
                           }
                           p2--;
                           operatori[p2] = operatori[p2+1];
                     }
                     if(ch == '*')
                     {
                           inmultire = 1;
                           operatori[p2] = '*';
                           p2++;
                     }
                     if(ch == '/')
                     {
                           impartire = 1;
                           operatori[p2] = '/';
                           p2++;
                     }
                     if(ch == '(')
                     {
                           operatori[p2] = '(';
                           p2++;
                     }
                     if(ch == ')')
                     {
                           operatori[p2] = ')';
                           p2++;
                           p1--;
                           if(operatori[p2-2] == '+') elemente[p1-1] = elemente[p1-1] + elemente[p1];
                           if(operatori[p2-2] == '-') elemente[p1-1] = elemente[p1-1] - elemente[p1];
                           p2-=3;
                     }
                 
             }
    }
    if(temp)
    {
            elemente[p1] = temp;
            temp = 0;
            p1++;
            if(inmultire == 1)
            {
                         p1--;p2--;
                         elemente[p1-1] = elemente[p1-1]*elemente[p1];
                         inmultire = 0;
            }
            if(impartire == 1)
            {
                         p1--;p2--;
                         elemente[p1-1] = elemente[p1-1]/elemente[p1];
                         impartire = 0;
            } 
    }
    operatori[p2] = ')';
    p2++;
    p1--;
    if(operatori[p2-2] == '+') elemente[p1-1] = elemente[p1-1] + elemente[p1];
    if(operatori[p2-2] == '-') elemente[p1-1] = elemente[p1-1] - elemente[p1];
    p2-=3;
    fprintf(fout, "%d", elemente[0]);
    return 0;
}