2. cvicenie strom
tak niekto prve cviko
Code [Select]
// strom.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <stdio.h>
//operacie
enum { ADD,SUB,MUL,DIV,NEG,VALUE};
//strom
struct ExpTree {
int op;
union {
struct { ExpTree* expL;ExpTree* expR;} opnds;
struct { ExpTree* exp;} opnd;
int val;
};
};
//vytvorenie stromu pre vyraz -3*(2+4)
ExpTree *MakeSample(){
ExpTree *v3,*v2,*v4,*n1,*n2,*n3;
v3=new ExpTree;v3->op=VALUE;v3->val=3;
v2=new ExpTree;v2->op=VALUE;v2->val=2;
v4=new ExpTree;v4->op=VALUE;v4->val=4;
n1=new ExpTree;n1->op=NEG;n1->opnd.exp=v3;
n2=new ExpTree;n2->op=ADD;n2->opnds.expL=v2;n2->opnds.expR=v4;
n3=new ExpTree;
n3->op=MUL;
n3->opnds.expL=n1;
n3->opnds.expR=n2;
return n3;
}
//vyhodnocovacia funkcia
int eval(ExpTree* exp){
int h1,h2;
switch(exp->op){
case VALUE: return(exp->val);
break;
case NEG:
h1=eval(exp->opnd.exp);
return(-h1);
break;
case MUL:
h1=eval(exp->opnds.expL);
h2=eval(exp->opnds.expR);
return(h1*h2);
break;
case ADD:
h1=eval(exp->opnds.expL);
h2=eval(exp->opnds.expR);
return(h1+h2);
break;
}
//tu sa nema nikdy dostat
return(0);
}
int main()
{
ExpTree* expr;
expr=MakeSample();
printf("%d\n",eval(expr));
getchar();
return 0;
}
tak niekto prve cviko