2015-12-03 22 views
0

我试图扩展TinyGP软件的功能集,以包含非线性函数,如sin,cos和tan。 问题是,树的打印是通过递归完成的,打印个人,然后是函数(+, - ,*,/),然后是另一个人。所以结果就像(X2 * 2.365789)。但是,sin只有一个参数sin(x)。如何更新打印方法?如何将非线性函数包含到TinyGP中?

打印方法的源代码概述如下。

int print_indiv(char []buffer, int buffercounter) { 
int a1=0, a2; 
if (buffer[buffercounter] < FSET_START) { 
    if (buffer[buffercounter] < varnumber) 
    System.out.print("X"+ (buffer[buffercounter] + 1)+ " "); 
    else 
    System.out.print(x[buffer[buffercounter]]); 
    return(++buffercounter); 
    } 
switch(buffer[buffercounter]) { 
    case ADD: System.out.print("("); 
    a1=print_indiv(buffer, ++buffercounter); 
    System.out.print(" + "); 
    break; 
    case SUB: System.out.print("("); 
    a1=print_indiv(buffer, ++buffercounter); 
    System.out.print(" - "); 
    break; 
    case MUL: System.out.print("("); 
    a1=print_indiv(buffer, ++buffercounter); 
    System.out.print(" * "); 
    break; 
    case DIV: System.out.print("("); 
    a1=print_indiv(buffer, ++buffercounter); 
    System.out.print("/"); 
    break; 
    } 
a2=print_indiv(buffer, a1); 
System.out.print(")"); 
return(a2);} 

非常感谢您的帮助!

回答

0

未经测试,但沿着这条线的东西应该工作:

/* ... */ 
switch(buffer[buffercounter]) { 
    /* .... */ 
    case SIN: System.out.print("sin("); 
    a1= ++buffercounter; 
    break; 
    /* ... */ 
    } 

a2=print_indiv(buffer, a1); 
System.out.print(")"); 
return(a2);