Аргумент "n-1" вызова подпрограммы дает синтаксическую ошибку - PullRequest
0 голосов
/ 18 сентября 2018

Я хочу запрограммировать решатель Ханойской башни в ABAP.

Вот мой текущий код:

FORM SOLVE USING s1 TYPE c
             s2 TYPE c
             s3 TYPE c
             n  TYPE i.

  IF n = 1.

    "move disc from tower X to tower Y"
    WRITE:/ text-001, text-002, s1, text-003, text-002, s3.

  ELSE.

    PERFORM solve USING s1 s3 s2 n-1. "Here's my problem, n-1 doesn't work"

    PERFORM solve USING s1 s2 s3 1.

    PERFORM solve USING s2 s1 s3 n-1.

  ENDIF.

ENDFORM. 

Моя проблема:

Если я выбрал параметр USING, например n-1, SAP распознает его как (не существующую) структуру и выдаст мне ошибку.

Есть ли способ сделать это в любом случае?

Большое спасибо.

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Вот мое решение. Это работает довольно хорошо. Спасибо всем за полезные советы.

*&---------------------------------------------------------------------*
*& Report  ZS_SANDBOX_TOH
*&
*&---------------------------------------------------------------------*
*& 
*& Datum: 19.09.2018
*& Beschreibung: Lösungsprogramm für das Türme von Hanoi - Problem
*&---------------------------------------------------------------------*

REPORT ZS_SANDBOX_TOH.

PARAMETERS: p_discs TYPE i.

CLASS myclass DEFINITION.

  PUBLIC SECTION.

    CLASS-METHODS solve IMPORTING s1 TYPE c
                                  s2 TYPE c
                                  s3 TYPE c
                                  n1 TYPE i.

ENDCLASS.

CLASS myclass IMPLEMENTATION.

METHOD solve.

  IF n1 = 1.

    WRITE:/ 'Lege Scheibe von Turm ', s1, ' auf Turm ', s3.

  ELSE.

    solve( s1 = s1
           s2 = s3
           s3 = s2
           n1 = n1 - 1 ).

    solve( s1 = s1
           s2 = s2
           s3 = s3
           n1 = 1 ).

    solve( s1 = s2
           s2 = s1
           s3 = s3
           n1 = n1 - 1 ).

  ENDIF.

ENDMETHOD.

ENDCLASS.

START-OF-SELECTION.

CALL METHOD myclass=>solve( s1 = 'A'
                            s2 = 'B'
                            s3 = 'C'
                            n1 = p_discs ).
0 голосов
/ 18 сентября 2018

Вам нужно добавить пробел между оператором. Так что вам нужно набрать как n - 1. С другой стороны, старая версия ABAP не поддерживает встроенный операнд в качестве параметра функции / выполнения. Если вы получили ошибку, сначала присвойте результат новой переменной, а затем передайте ее в качестве параметра.

...