Pagini recente » Cod sursa (job #759403) | Cod sursa (job #2126024) | Cod sursa (job #70344) | Cod sursa (job #527220) | Cod sursa (job #1184457)
#include<iostream>
#include<fstream>
#include<cctype>
#include<cstdlib>
#include<cstring>
#define dim 100003
using namespace std;
ifstream f("polon.in");
ofstream g("polon.out");
int x,i,j,aux,varf1,varf2,stiv1,stiv2;
char op[dim],ch[dim],ch2[]={"+-*/()"};
char* c,oper[dim],polon[dim];
int expresie[dim],nr[dim],v[dim];
bool ok;
int main()
{
f>>ch;
c=strtok(ch,ch2);
while (c != NULL)
{
v[++varf1]=atoi(c);
c=strtok(NULL,ch2);
}
f.close();
ifstream f("polon.in");
f>>ch;
for (i=0;i<strlen(ch);i++)
{
if (ch[i]=='+' || ch[i]=='-' || ch[i]=='*' || ch[i]=='/' || ch[i]=='(' || ch[i]==')')
{
op[++varf2]=ch[i];
ok=false;
}
else
{
if (ok==false)
varf2++;
ok=true;
}
}
varf1=0;
for (i=1;i<=varf2;i++)
if (op[i]==NULL)
{
nr[i]=v[++varf1];
}
for (i=1;i<=varf2;i++)
{
if (op[i]!=NULL)
{
if (op[i]=='*' || op[i]=='/')
{
if (oper[stiv2]=='*' || oper[stiv2]=='/')
{
polon[++stiv1]=oper[stiv2];
oper[stiv2]=op[i];
}
else
{
oper[++stiv2]=op[i];
}
}
else if (op[i]=='(')
{
oper[++stiv2]=op[i];
}
else if (op[i]=='+' || op[i]=='-')
{
while (oper[stiv2]!='(' && stiv2>0 && (oper[stiv2]=='*' || oper[stiv2]=='/'))
{
polon[++stiv1]=oper[stiv2];
stiv2--;
}
oper[++stiv2]=op[i];
}
else if (op[i]==')' )
{
while (oper[stiv2]!='(' && stiv2>0)
{
if (oper[stiv2]!=NULL)
{
polon[++stiv1]=oper[stiv2];
stiv2--;
}
}
stiv2--;
}
}
else
{
expresie[++stiv1]=nr[i];
}
}
while (stiv2>0)
{
polon[++stiv1]=oper[stiv2];
stiv2--;
}
/*for (i=1;i<=stiv1;i++)
cout<<polon[i]<<' ';
cout<<'\n';
for (i=1;i<=stiv1;i++)
cout<<expresie[i]<<' ';
cout<<'\n';*/
for (i=1;i<=stiv1;i++)
{
ok=false;
if (polon[i]=='+')
{
expresie[i]=expresie[i-2]+expresie[i-1];
ok=true;
}
else if (polon[i]=='-')
{
expresie[i]=expresie[i-2]-expresie[i-1];
ok=true;
}
else if (polon[i]=='*')
{
expresie[i]=expresie[i-2]*expresie[i-1];
ok=true;
}
else if (polon[i]=='/')
{
expresie[i]=expresie[i-2]/expresie[i-1];
ok=true;
}
if (i>3 && ok)
{
expresie[i-1]=expresie[i-3];
}
}
/*for (i=1;i<=stiv1;i++)
cout<<polon[i]<<' ';
cout<<'\n';
for (i=1;i<=stiv1;i++)
cout<<expresie[i]<<' ';*/
g<<expresie[stiv1];
f.close();g.close();
return 0;
}