Pagini recente » Cod sursa (job #3306856) | Monitorul de evaluare | Monitorul de evaluare | Statistici Teodora Stereciu (teostereciu) | Cod sursa (job #2444118)
#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;
}