Lerne und übe ABAP – Collatz-Vermutung

Lerne und übe ABAP. In der ABAP-Übung „Collatz Conjecture“ implementierst Du ein ABAP-Programm, um die Collatz-Vermutung oder das 3x+1-Problem abzubilden. Es gibt 40 geniale ABAP Übungen auf exercism. Du kannst diese Übung entweder in Deinem SAP-System ausprobieren oder Dich kostenlos auf der Plattform anmelden und die Übung absolvieren. Du kannst Dir sogar Lösungen von anderen Nutzen ansehen und dadurch Deine Lösung vergleichen.

Aufgabenstellung

Die Collatz-Vermutung oder das 3x+1-Problem lässt sich wie folgt zusammenfassen:

Nimm eine beliebige positive ganze Zahl n. Wenn n gerade ist, teile n durch 2 und erhalte n / 2. Wenn n ungerade ist, multipliziere n mit 3 und addiere 1, um 3n + 1 zu erhalten. Wiederholen Sie den Vorgang unendlich oft. Die Vermutung besagt, dass man unabhängig davon, mit welcher Zahl man beginnt, irgendwann immer 1 erreicht.

Gib bei einer Zahl n die Anzahl der Schritte an, die erforderlich sind, um 1 zu erreichen.

Ausgehend von n = 12 würden die Schritte wie folgt aussehen:

  1. 12
  2. 6
  3. 3
  4. 10
  5. 5
  6. 16
  7. 8
  8. 4
  9. 2
  10. 1

Daraus ergeben sich 9 Schritte. Bei Eingabe n = 12 wäre der Rückgabewert also 9.

Beispiel Programmierung

CLASS zcl_collatz_conjecture DEFINITION
  PUBLIC
  FINAL
  CREATE PUBLIC .

  PUBLIC SECTION.
    METHODS ret_steps IMPORTING num          TYPE i
                      RETURNING VALUE(steps) TYPE i
                      RAISING   cx_parameter_invalid.
  PROTECTED SECTION.
  PRIVATE SECTION.

ENDCLASS.



CLASS zcl_collatz_conjecture IMPLEMENTATION.
  METHOD ret_steps.
    "Implement Solution
    IF num < 1.
      RAISE EXCEPTION TYPE cx_parameter_invalid.
    ENDIF.
    WHILE num NE 1.
      num = COND #( WHEN num MOD 2 = 0 THEN num / 2 ELSE ( num * 3 ) + 1 ).
      steps += 1.
    ENDWHILE.
  ENDMETHOD.
ENDCLASS.

Erklärung

Die Methode ret_steps ist Teil der ABAP-Klasse zcl_collatz_conjecture. Die Methode hat einen Eingabeparameter num vom Datentyp i (Integer) und gibt eine Ausgabe steps vom Datentyp i zurück. Die Methode kann auch eine Ausnahme vom Typ cx_parameter_invalid auslösen, wenn der Wert von num kleiner als 1 ist.

Die Methode implementiert eine Lösung für das Collatz-Problem. Das Collatz-Problem ist ein bekanntes mathematisches Problem, das besagt, dass für jede positive ganze Zahl die Schritte, die notwendig sind, um die Zahl 1 zu erreichen, entweder durch Halbieren oder durch Verdreifachen der Zahl und anschließendes Erhöhen um 1 erreicht werden können.

Das Verfahren führt eine Schleife aus, die so lange läuft, bis die Zahl num gleich 1 ist. Bei jedem Durchlauf der Schleife wird der Wert von num anhand einer Bedingung berechnet. Wenn num durch 2 teilbar ist, wird er durch 2 geteilt, andernfalls wird der Wert von num mit 3 multipliziert und anschließend um 1 erhöht. Zuletzt wird der Zähler steps um 1 erhöht.

Am Ende gibt die Methode die Anzahl der Schritte zurück, die benötigt wurden, um die Zahl 1 zu erreichen.

Über den Autor

Andreas Geiger

Mein Name ist Andreas Geiger und ich bin ein erfahrener Senior SAP Berater. Mit mehr als 10 Jahren Berufserfahrung habe ich mehrere SAP-Projekte erfolgreich abgeschlossen und umfangreiche Kenntnisse in verschiedenen Bereichen wie SAP FI, SAP MM und ABAP erworben. Nun möchte ich mein Wissen mit Dir teilen, um Dir einen Mehrwert zu bieten und Dich bei Deiner täglichen Arbeit mit dem SAP-System zu unterstützen.

Mehr zu ERP UP

ERP UP unterstützen

Wenn Du mit ERP UP zufrieden bist, kannst Du mich gerne unterstützen. Dabei gibt es unzählige Möglichkeiten, wie Du mich einfach und schnell unterstützen kannst. Wie Du genau ERP UP unterstützen kannst, erfährst Du hier. Vielen Dank.

Schreibe einen Kommentar