我正在尝试扩展TinyGP软件的函数集,以包括非线性函数,如sin、cos和tan。问题是,树的打印是通过递归完成的,打印一个个体,然后打印函数(+,-,*,/),然后打印另一个个体。因此,结果类似于(X2 * 2.365789)。但是,sin只有一个参数sin(x)。如何更新打印方法?
打印方法的源代码概述如下。
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);}
非常感谢你的帮助!
发布于 2015-12-18 06:01:32
没有经过测试,但下面的代码应该可以工作:
/* ... */
switch(buffer[buffercounter]) {
/* .... */
case SIN: System.out.print( "sin(");
a1= ++buffercounter;
break;
/* ... */
}
a2=print_indiv( buffer, a1 );
System.out.print( ")");
return( a2);
https://stackoverflow.com/questions/34078416
复制相似问题