Pagini recente » Cod sursa (job #35620) | Cod sursa (job #2294782) | Cod sursa (job #685729) | Cod sursa (job #2682166) | Cod sursa (job #484060)
Cod sursa(job #484060)
#include <fstream>
#include <iostream>
#include <stack>
#include <string.h>
#define NMAX 100100
using namespace std;
//Variabile Globale:
char sir[NMAX];
char s2[NMAX];
char operatori[]="*+-/";
stack<char> S;
stack<int> S2;
int N;
//Prioritate:
inline int prioritate(char x,char y)
{
if(x=='+' || x=='-')
{
if(y=='+' || y=='-')
return 0;
if(y=='*' || y=='/')
return 1;
}
else if(x=='*' || x=='/')
{
if(y=='+' || y=='-')
return 0;
if(y=='*' || y=='/')
return 0;
}
return 2;
}
//Citire:
void citire()
{
fstream fin("evaluare.in",ios::in);
fin.get(sir,NMAX);
fin.close();
}
//Afisare:
void afisare()
{
fstream fout("evaluare.out",ios::out);
// fout<<s2<<"\n";
fout<<N<<" ";
fout.close();
}
//Transforma:
void polish()
{
char *p,*q;
q=s2;
p=sir;
while(*p)
{
if(isdigit(*p))
{
while(isdigit(*p))
{
*q++=*p++;
}
*q++=' ';
p--;
}
else
{
if(*p=='*' || *p=='+' || *p=='-' || *p=='/')
{
if(S.empty())
{
S.push(*p);
}
else
{
if(prioritate(S.top(),*p)==0)
{
*q++=S.top();
S.pop();
S.push(*p);
}
else if(prioritate(S.top(),*p)==1)
{
S.push(*p);
}
else
{
S.push(*p);
}
}
}
else
if(*p=='(')
{
S.push('(');
}
else
if(*p==')')
{
while(S.top()!='(')
{
*q++=S.top();
S.pop();
}
S.pop();
}
}
p++;
}
while(!S.empty())
{
*q++=S.top();
S.pop();
}
}
//Calculeaza
void calc()
{
char *p;
p=s2;
int x=0;
int A=0,B=0;
while(*p)
{
eticheta:
if(isdigit(*p))
{
while(isdigit(*p))
{
x=x*10+(*p-48);
p++;
}
S2.push(x);
x=0;
}
else
{
if(*p==' ')
{
p++;
goto eticheta;
}
else
switch(*p)
{
case('+'):
{
A=S2.top();
S2.pop();
B=S2.top();
S2.pop();
A=A+B;
S2.push(A);
p++;
break;
}
case('/'):
{
A=S2.top();
S2.pop();
B=S2.top();
S2.pop();
A=B/A;
S2.push(A);
p++;
break;
}
case('*'):
{
A=S2.top();
S2.pop();
B=S2.top();
S2.pop();
A=A*B;
S2.push(A);
p++;
break;
}
case('-'):
{
A=S2.top();
S2.pop();
B=S2.top();
S2.pop();
A=B-A;
S2.push(A);
p++;
break;
}
}
}
}
N=S2.top();
}
//Main:
int main(int arg,char* argv[])
{
citire();
polish();
calc();
afisare();
}