Как включить нелинейные функции в TinyGP?

Я пытаюсь расширить набор функций программного обеспечения TinyGP, включив в него нелинейные функции, такие как sin, cos и tan. Проблема в том, что печать дерева выполняется с помощью рекурсии, печати человека, затем функции (+, -, *, /), а затем другого человека. Таким образом, результат примерно такой (X2 * 2.365789). Но грех принимает только один параметр, грех (х). Как можно обновить метод печати?

Исходный код метода печати приведен ниже.

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);}

Большое спасибо за вашу помощь!

1 ответ

Не проверено, но что-то в этом направлении должно работать:

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

a2=print_indiv( buffer, a1 ); 
System.out.print( ")"); 
return( a2);
Другие вопросы по тегам