Pagini recente » Cod sursa (job #283358) | Cod sursa (job #2145842) | Cod sursa (job #1475671) | Cod sursa (job #2486719) | Cod sursa (job #312920)
Cod sursa(job #312920)
#include <fstream.h>
#include <string.h>
#include <stdlib.h>
#define MaxN 200009
char s[MaxN],a[MaxN][11],semn[MaxN];
int n,nr;
long st[MaxN];
void cit()
{
ifstream fin("evaluare.in");
fin.get(s,MaxN,'\n');
fin.close();
n=strlen(s);
}
void postfix()
{
int i=0,j,nrs=1;
char aux[15];
semn[0]='#';
while(i<n)
{
if((s[i]=='*' || s[i]=='/') && s[i]!=semn[nrs-1])
{
semn[nrs]=s[i];
nrs++;
i++;
}
else
if(((s[i]=='*' || s[i]=='/') && (semn[nrs-1]=='*' || semn[nrs-1]=='/')) || ((s[i]=='+' || s[i]=='-') && (semn[nrs-1]=='+' || semn[nrs-1]=='-' || semn[nrs-1]=='*' || semn[nrs-1]=='/')))
{
while(((s[i]=='*' || s[i]=='/') && (semn[nrs-1]=='*' || semn[nrs-1]=='/')) || ((s[i]=='+' || s[i]=='-') && (semn[nrs-1]=='+' || semn[nrs-1]=='-' || semn[nrs-1]=='*' || semn[nrs-1]=='/')))
{
nrs=nrs-1;
a[nr][0]=semn[nrs];
a[nr][1]='\0';
nrs--;
nr++;
}
semn[nrs]=s[i];
nrs++;
i++;
}
else
if((s[i]=='+' || s[i]=='-') && (semn[nrs-1]=='#' || semn[nrs-1]=='('))
{
semn[nrs]=s[i];
nrs++;
i++;
}
else
if(s[i]=='(')
{
semn[nrs]=s[i];
nrs++;
i++;
}
else
if(s[i]==')')
{
nrs=nrs-1;
while(semn[nrs]!='(')
{
a[nr][0]=semn[nrs];
a[nr][1]='\0';
nr++;
nrs--;
}
i++;
}
else
{
j=i;
while(s[i]>='0' && s[i]<='9' && i<n)
i++;
strncpy(aux,s+j,i-j);
aux[i-j]='\0';
strcpy(a[nr],aux);
nr++;
}
}
//nrs--;
while(nrs>=0)
{
a[nr][0]=semn[nrs];
a[nr][1]='\0';
nrs--;
nr++;
}
}
void eval()
{
int N=0,i;
long aux;
for(i=0;i<=nr;i++)
{
if(a[i][0]<='9' && a[i][0]>='0')
{
aux=atol(a[i]);
N++;
st[N]=aux;
}
else
{
switch(a[i][0]){
case '+':
aux=st[N]+st[N-1];
N--;
st[N]=aux;
break;
case '-':
aux=st[N-1]-st[N];
N--;
st[N]=aux;
break;
case '*':
aux=st[N-1]*st[N];
N--;
st[N]=aux;
break;
case '/':
aux=st[N-1]/st[N];
N--;
st[N]=aux;
break;
}
}
}
}
void afis()
{
int i;
ofstream fout("evaluare.out");
fout<<st[1];
fout.close();
}
int main()
{
cit();
postfix();
eval();
afis();
return 0;
}