Pagini recente » Cod sursa (job #2727929) | Cod sursa (job #1832167) | Cod sursa (job #137279) | Cod sursa (job #1169210) | Cod sursa (job #1669310)
#include <iostream>
#include <fstream>
#include <cstring>
#include <cmath>
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
struct arb
{
char info;
int val;
arb *st,*dr;
arb()
{
this->st=NULL;
this->dr=NULL;
}
};
arb *rad;
int n,i,v[30];
char c,s[100];
inline void urm()
{
c=s[i++];
}
void exp(arb *&r);
void termen(arb *&r);
void factor(arb *&r);
void exp(arb *&r)
{
arb *p;
termen(r);
p=r;
while(c=='+' || c=='-')
{
r=new arb;
r->info=c;
r->st=p;
termen(r->dr);
p=r;
}
}
void termen(arb *&r)
{
arb *p;
factor(r);
p=r;
while(c=='*' || c=='/')
{
r=new arb;
r->info=c;
r->st=p;
factor(r->dr);
p=r;
}
}
void factor(arb *&r)
{
int nr=0;
if(i<n)
urm();
if(c=='(')
exp(r),urm();
else
{
while(c<='9' && c>='0')
{
nr=nr*10+c-'0';
urm();
}
r=new arb;
r->val=nr;
}
}
int sdr(arb *r)
{
if(r->st!=NULL)
{
int a,b;
a=sdr(r->st),b=sdr(r->dr);
switch(r->info)
{
case '+':
return a+b;
case '-':
return a-b;
case '*':
return a*b;
case '/':
return a/b;
}
}
else
return r->val;
}
int main()
{
f.getline(s,100);
n=strlen(s);
exp(rad);
g<<sdr(rad);
}