Cod sursa(job #2444118)

Utilizator paulm238Madaras Paul paulm238 Data 30 iulie 2019 13:12:53
Problema Evaluarea unei expresii Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.94 kb
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream in("evaluare.in");
ofstream out("evaluare.out");
int i,n=100000,x,prioritate[10],l,z=1;
char  v[100000],p,fp[100000];

void push(char stiva[],int k,char nr,char fp[], int &z)
{
    if(stiva[k-1]!='(' && k!=0)
    {
        int p,m;
        p=nr;
        m=stiva[k-1];;
        if(prioritate[p-39]>=prioritate[m-39])
        {
            fp[z]=stiva[k-1];
            z++;
            stiva[k-1]=nr;
        }
        else
        {
            stiva[k]=nr;
            k++;
        }
    }
    else
    {
        stiva[k]=nr;
        k++;
    }
}
void push1(char stiva[],int &k,char nr)
{
    stiva[k]=nr;
    k++;
}
void push2(char stiva[],int k, char fp[], int &z)
{
    int i=k-1;
    while(stiva[i]!='(')
    {
        fp[z]=stiva[i];
        z++;
        i--;
        k--;
    }
    k=k-2;
}

int main()
{
    p='(';
    l=p;
    prioritate[l-39]=0;
    p=')';
    l=p;
    prioritate[l-39]=0;
    p='*';
    l=p;
    prioritate[l-39]=1;
    p='/';
    l=p;
    prioritate[l-39]=1;
    p='+';
    l=p;
    prioritate[l-39]=2;
    p='-';
    l=p;
    prioritate[l-39]=2;
    in.get(v,100000);
    x=strlen(v);
    char stiva[n];
    int k=0;
    for(i=0; i<=x; i++)
    {
        if(v[i]=='(')
            push1(stiva,k,v[i]);
        else if(v[i]==')')
            push2(stiva,k,fp,z);
        else if(v[i]=='*' || v[i]=='+' || v[i]=='/' || v[i]=='-')
            push(stiva,k,v[i],fp,z);
        else if(v[i]!='*' && v[i]!='+' && v[i]!='/' && v[i]!='-' && v[i]!=')' && v[i]!='(')
        {
            fp[z]=v[i];
            z++;
        }
    }

    if(k!=0)
    {
        cout<<z;
        for(i=k-1; i>=0; i--)
        {
            cout<<k;
            fp[z]=stiva[i];
            z++;
        }
        k=0;
    }
    for(i=1; i<=z-1; i++)
        out<<fp[i];
    return 0;
}