Lerne und übe ABAP – Elyses Verzauberungen

Lerne und übe ABAP. Als angehende Magierin muss Elyse einige Grundlagen üben. Sie hat einen Stapel Karten, die sie manipulieren möchte. In der ABAP-Übung „Elyses Enchantments“ implementierst Du ein ABAP-Programm, um Elyse das Zaubern beizubringen. Dabei lernst Du wichtige Operationen auf interne Tabellen. 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

Als angehende Magierin muss Elyse einige Grundlagen üben. Sie hat einen Kartenstapel, den sie manipulieren möchte.

Um die Sache ein wenig zu vereinfachen, verwendet sie nur die Karten 1 bis 10, sodass ihr Kartenstapel durch eine interne Zahlentabelle dargestellt werden kann. Die Position einer bestimmten Karte entspricht der Tabellenzeile. Das heißt, Zeile 1 bezieht sich auf die erste Karte, Zeile 2 auf die zweite Karte usw.

Abrufen einer Karte von einem Stapel

Um eine Karte auszuwählen, gib die Karte an der Indexposition aus dem angegebenen Stapel zurück.

data(stack) = value #( ( 1 ) ( 2 ) ( 4 ) ( 1 ) ).
data(card) = get_Item( stack = stack
                       position = 3 ).   " card = 4

Eine Karte im Stapel austauschen

Führe einen Taschenspielertrick aus und tausche die Karte an der Indexposition gegen die angegebene Ersatzkarte aus. Geben Sie den angepassten Stapel zurück.

data(stack) = value #( ( 1 ) ( 2 ) ( 4 ) ( 1 ) ).
data(new_Stack) = set_Item( stack = stack
                            position = 3 
                            replacement = 6 ).   
" new_Stack = 1, 2, 6, 1

Einfügen einer Karte an der Spitze des Stapels

Füge eine neue Karte am oberen Ende des Stapels ein, damit eine Karte erscheint. Gib den angepassten Stapel zurück.

data(stack) = value #( ( 5 ) ( 9 ) ( 7 ) ( 1 ) ).
data(new_Stack) = insert_Item_at_Top( stack    = stack
                                      new_Card = 8 ).   
" new_Stack = 5, 9, 7, 1, 8

Eine Karte aus dem Stapel entfernen

Lasse eine Karte verschwinden, indem du die Karte an der angegebenen Position aus dem Stapel entfernst. Gib den angepassten Stapel zurück.

data(stack) = value #( ( 3 ) ( 2 ) ( 6 ) ( 4 ) ( 8 ) ).
data(new_Stack) = remove_Item( stack    = stack
                               position = 3 ).   
" new_Stack = 3, 2, 4, 8

Die oberste Karte vom Stapel entfernen

Lasse eine Karte verschwinden, indem du die oberste Karte vom Stapel entfernst. Gib den angepassten Stapel zurück.

data(stack) = value #( ( 3 ) ( 2 ) ( 6 ) ( 4 ) ( 8 ) ).
data(new_Stack) = remove_Item_from_Top( stack ).   
" new_Stack = 3, 2, 6, 4

Einfügen einer Karte am unteren Ende des Stapels

Füge eine neue Karte am unteren Ende des Stapels ein, damit eine Karte erscheint. Gib den angepassten Stapel zurück.

data(stack) = value #( ( 5 ) ( 9 ) ( 7 ) ( 1 ) ).
data(new_Stack) = insert_Item_at_Bottom( stack    = stack
                                         new_Card = 8 ).   
" new_Stack = 8, 5, 9, 7, 1

Eine Karte vom unteren Ende des Stapels entfernen

Lasse eine Karte verschwinden, indem du die Karte am unteren Ende des Stapels entfernst. Gib den angepassten Stapel zurück.

data(stack) = value #( ( 8 ) ( 5 ) ( 9 ) ( 7 ) ( 1 ) ).
data(new_Stack) = remove_Item_from_Top( stack ).   
" new_Stack = 5, 9, 7, 1

Überprüfen der Größe des Stapels

Rückgabe der Größe des Stapels (Anzahl der Zeilen).

data(stack) = value #( ( 3 ) ( 2 ) ( 6 ) ( 4 ) ( 8 ) ).
data(size_of_Stack) = get_Size_of_Stack( stack ).   
" size_of_Stack = 5

Beispiel Programmierung

CLASS zcl_elyses_enchantments DEFINITION
  PUBLIC
  FINAL
  CREATE PUBLIC .

  PUBLIC SECTION.

    TYPES ty_stack TYPE STANDARD TABLE OF i WITH EMPTY KEY.

    "! Get card at position
    METHODS get_item
      IMPORTING stack         TYPE ty_stack
                position      TYPE i
      RETURNING VALUE(result) TYPE i.

    "! Replace card at position
    METHODS set_item
      IMPORTING stack         TYPE ty_stack
                position      TYPE i
                replacement   TYPE i
      RETURNING VALUE(result) TYPE ty_stack.

    "Add card to stack
    METHODS insert_item_at_top
      IMPORTING stack         TYPE ty_stack
                new_card      TYPE i
      RETURNING VALUE(result) TYPE ty_stack.

    "! Remove card at position
    METHODS remove_item
      IMPORTING stack         TYPE ty_stack
                position      TYPE i
      RETURNING VALUE(result) TYPE ty_stack.

    "! Remove top card (last row)
    METHODS remove_item_from_top
      IMPORTING stack         TYPE ty_stack
      RETURNING VALUE(result) TYPE ty_stack.

    "! Add card to bottom of stack (first row)
    METHODS insert_item_at_bottom
      IMPORTING stack         TYPE ty_stack
                new_card      TYPE i
      RETURNING VALUE(result) TYPE ty_stack.

    "! Remove bottom card (delete first row)
    METHODS remove_item_from_bottom
      IMPORTING stack         TYPE ty_stack
      RETURNING VALUE(result) TYPE ty_stack.

    "! Count cards
    METHODS get_size_of_stack
      IMPORTING stack         TYPE ty_stack
      RETURNING VALUE(result) TYPE i.

  PROTECTED SECTION.
  PRIVATE SECTION.
ENDCLASS.



CLASS zcl_elyses_enchantments IMPLEMENTATION.

  METHOD get_item.
    "Implement solution here
    result = stack[ position ].
  ENDMETHOD.


  METHOD set_item.
    "Implement solution here
    result = stack.
    result[ position ] = replacement.
  ENDMETHOD.


  METHOD insert_item_at_top.
    "Implement solution here
    result = stack.
    INSERT new_card INTO TABLE result.
  ENDMETHOD.


  METHOD get_size_of_stack.
    "Implement solution here
    result = lines( stack ).
  ENDMETHOD.


  METHOD insert_item_at_bottom.
    "Implement solution here
    INSERT new_card INTO TABLE result.
    INSERT LINES OF stack INTO TABLE result.
  ENDMETHOD.


  METHOD remove_item.
    "Implement solution here
    result = stack.
    DELETE result INDEX position.
  ENDMETHOD.


  METHOD remove_item_from_bottom.
    "Implement solution here
    result = stack.
    DELETE result INDEX 1.
  ENDMETHOD.


  METHOD remove_item_from_top.
    "Implement solution here
    result = stack.
    DELETE result INDEX lines( stack ).
  ENDMETHOD.

ENDCLASS.

Erklärung

Die Klasse zcl_elyses_enchantments ist eine ABAP-Klasse, die Methoden zur Verwaltung eines Kartenstapels bereitstellt. Der Typ ty_stack ist als Standardtabelle mit leerem Schlüssel und ganzen Zahlen (Typ „i“) definiert.

Die Methode get_item gibt die Karte an der angegebenen Position zurück. Der Stack und die gewünschte Position werden als Eingabeparameter übergeben.

Die Methode set_item ersetzt die Karte an der angegebenen Position. Als Eingabeparameter werden der Stack, die gewünschte Position und die Ersatzkarte übergeben.

Die Methode insert_item_at_top fügt eine Karte oben in den Stapel ein. Als Eingabeparameter werden der Stapel und die neue Karte übergeben.

Die Methode get_size_of_stack zählt die Anzahl der Karten im Stapel und gibt sie zurück. Als Eingabeparameter wird der Kartenstapel übergeben.

Die Methode insert_item_at_bottom fügt eine Karte am unteren Ende des Stapels (erste Zeile) ein. Als Eingabeparameter werden der Stack und die neue Karte übergeben.

Die Methode remove_item entfernt die Karte an der angegebenen Position. Als Eingabeparameter werden der Stapel und die gewünschte Position übergeben.

Die Methode remove_item_from_bottom entfernt die unterste Karte (erste Zeile) aus dem Stapel. Als Eingabeparameter wird der Stack übergeben.

Die Methode remove_item_from_top entfernt die oberste Karte (letzte Zeile) vom Stapel. Als Eingabeparameter wird der Stack übergeben.

Ü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