Lerne und übe ABAP – Darts

Verbessere Deine ABAP-Kenntnisse mit der Übung „Darts“. In dieser Übung entwickelst Du eine Funktion, die die Anzahl der Punkte berechnet, die in einem einzigen Dartwurf erzielt wurden. Auf der Plattform „Exercism“ findest Du 40 herausfordernde ABAP-Übungen, die Du entweder in Deinem SAP-System oder kostenlos auf der Plattform absolvieren kannst. Du hast sogar die Möglichkeit, die Lösungen anderer Benutzer anzusehen und mit Deinen eigenen Lösungen zu vergleichen, um Deine Fähigkeiten zu verbessern.

Aufgabenstellung

Schreibe eine Funktion, die die erzielten Punkte in einem einzigen Wurf eines Dartspiels zurückgibt.

Darts ist ein Spiel, bei dem die Spieler Dartpfeile auf ein Ziel werfen.

In unserer speziellen Spielvariante gibt es für das Ziel 4 verschiedene Punktzahlen, je nachdem, wo der Dartpfeil landet:

  • Wenn der Pfeil außerhalb der Zielscheibe landet, erhält der Spieler keine Punkte (0 Punkte).
  • Wenn der Pfeil im äußeren Kreis der Zielscheibe landet, erhält der Spieler 1 Punkt.
  • Landet der Pfeil im mittleren Kreis der Zielscheibe, erhält der Spieler 5 Punkte.
  • Landet der Pfeil im inneren Kreis der Zielscheibe, erhält der Spieler 10 Punkte.

Der äußere Kreis hat einen Radius von 10 Einheiten (dies entspricht dem Gesamtradius der Zielscheibe), der mittlere Kreis einen Radius von 5 Einheiten und der innere Kreis einen Radius von 1. Natürlich sind sie alle auf denselben Punkt zentriert (d.h. die Kreise sind konzentrisch), der durch die Koordinaten (0, 0) definiert ist.

Schreibe eine Funktion, die bei einem Punkt in der Zielscheibe (definiert durch die reellen kartesischen Koordinaten x und y) den korrekten Betrag zurückgibt, den ein Wurfpfeil, der in diesem Punkt landet, verdient.

Beispiel Programmierung

CLASS zcl_darts DEFINITION
  PUBLIC
  FINAL
  CREATE PUBLIC .

  PUBLIC SECTION.
    METHODS score
      IMPORTING
        x             TYPE f
        y             TYPE f
      RETURNING
        VALUE(result) TYPE i.
  PROTECTED SECTION.
  PRIVATE SECTION.

ENDCLASS.


CLASS zcl_darts IMPLEMENTATION.
  METHOD score.
    " add solution here
    result = COND #( let d = sqrt( x ** 2 + y ** 2 ) in
                     WHEN d > 10 THEN 0 
                     WHEN d > 5 THEN 1
                     WHEN d > 1 THEN 5
                     ELSE 10 ).
  ENDMETHOD.

ENDCLASS.

Erklärung

Die Methode score der Klasse zcl_darts ist eine öffentliche Methode, die als Eingabe die Koordinaten (x, y) des Treffers auf dem Dartbrett erwartet und als Ausgabe die erzielten Punkte zurückgibt.

Innerhalb der Methode wird eine Bedingung (COND-Statement) verwendet, um die erzielten Punkte in Abhängigkeit von der Entfernung des Darttreffers vom Mittelpunkt des Dartbretts zu berechnen. Zuerst wird der Abstand d berechnet, indem die quadratische Summe der x- und y-Koordinaten gebildet und daraus die Quadratwurzel gezogen wird.

Anschließend werden mehrere WHEN-Bedingungen überprüft, um die erzielten Punkte zu berechnen. Wenn der Abstand d größer als 10 ist, werden keine Punkte vergeben (0 Punkte). Wenn der Abstand zwischen 5 und 10 liegt, gibt es 1 Punkt. Liegt der Abstand zwischen 1 und 5, werden 5 Punkte vergeben. In allen anderen Fällen, d.h. wenn der Abstand kleiner oder gleich 1 ist, werden 10 Punkte vergeben.

Das Ergebnis wird dann als Rückgabewert der Methode definiert.

Ü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