Starter Programmer help please. I'm using RECURSION
Apr 23, 2013 at 2:33pm UTC
The point of my code is to evaluate a mathematical expression that's already formed in a Binary Search Tree. : ((6+5)-3)*(2/1)=?
I've read other forums and they usually use cout, cin and << >> but I'm still in the learning process so this is basically primitive coding.
Anyway, The recursion is already correct (I think). My problem is how to return char* or should I say an element which has 2 or more digits.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
typedef struct cell{
char elem[max];
struct cell *left;
struct cell *right;
}celltype, *node;
node A;
char * evaluate(node *A) //passed as evaluation(&A);
{
char *c=(char *)malloc(sizeof (char ),max);
char *d=(char *)malloc(sizeof (char ),max);
strcpy(c,(*A)->elem);
d=0;
if ((*A)->left!=NULL)
c=evaluate(&((*A)->left));
if ((*A)->right!=NULL)
d=evaluate(&((*A)->right));
if (strcmp((*A)->elem,”+”)==0)* c=*c + *d;
if (strcmp((*A)->elem,”-“)==0) *c=*d - *c;
if (strcmp((*A)->elem,”*”)==0) *c=*c + *d;
if (strcmp((*A)->elem,”/”)==0) *c=*d / *c;
if (strcmp((*A)->elem,”=”)==0)
{
(*A)->right=(node)malloc(sizeof (celltype));
(*A)->right->left=NULL;
(*A)->right->right=NULL;
(*A)->right->elem=*c;
}
return c;
}
and the reason that I'm using char is because the operators are also elements in different nodes.
The code above is actually the result when I remembered that you can't return 2-digit char.
The code below is before I remembered that. It works when all results are 1 digit numbers.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
typedef struct cell{
char elem;
struct cell *left;
struct cell *right;
}celltype, *node;
node A;
char evaluate(node *A) //passed as “evaluation(&A);” in main
{
char c,d;
c=(*A)->elem;
d=0;
if ((*A)->left!=NULL)
c=evaluate(&((*A)->left));
if ((*A)->right!=NULL)
d=evaluate(&((*A)->right));
if ((*A)->elem==0) c=c+d;
if ((*A)->elem==0) c=d-c;
if ((*A)->elem==0) c=c+d;
if ((*A)->elem==0) c=d/c;
if ((*A)->elem==0)
{
(*A)->right=(node)malloc(sizeof (celltype));
(*A)->right->left=NULL;
(*A)->right->right=NULL;
(*A)->right->elem=c;
}
return c;
}
Last edited on Apr 23, 2013 at 2:55pm UTC
Apr 23, 2013 at 7:02pm UTC
Pass them by reference or their addresses. In this way, you can do something like the following:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
#include <iostream>
using namespace std;
void change_chars(char &, char &);
int main()
{
char a = 'C' ;
char b = 'E' ;
cout << "char a: " << a << "\nchar b:" << b << endl;
change_chars(a, b);
cout << "--[ After change_chars() ]--" << endl;
cout << "char a: " << a << "\nchar b: " << b << endl;
cin.get();
return 0;
}
void change_chars(char & f, char & g)
{
f = 'A' ;
g = 'B' ;
}
Topic archived. No new replies allowed.