2015-12-03 25 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);