RosettaCodeData/Task/List-comprehensions/ABAP/list-comprehensions.abap
2015-11-18 06:14:39 +00:00

47 lines
1.5 KiB
ABAP

CLASS lcl_pythagorean_triplet DEFINITION CREATE PUBLIC.
PUBLIC SECTION.
TYPES: BEGIN OF ty_triplet,
x TYPE i,
y TYPE i,
z TYPE i,
END OF ty_triplet,
tty_triplets TYPE STANDARD TABLE OF ty_triplet WITH NON-UNIQUE EMPTY KEY.
CLASS-METHODS:
get_triplets
IMPORTING
n TYPE i
RETURNING
VALUE(r_triplets) TYPE tty_triplets.
PRIVATE SECTION.
CLASS-METHODS:
_is_pythagorean
IMPORTING
i_triplet TYPE ty_triplet
RETURNING
VALUE(r_is_pythagorean) TYPE abap_bool.
ENDCLASS.
CLASS lcl_pythagorean_triplet IMPLEMENTATION.
METHOD get_triplets.
DATA(triplets) = VALUE tty_triplets( FOR x = 1 THEN x + 1 WHILE x <= n
FOR y = x THEN y + 1 WHILE y <= n
FOR z = y THEN z + 1 WHILE z <= n
( x = x y = y z = z ) ).
LOOP AT triplets ASSIGNING FIELD-SYMBOL(<triplet>).
IF _is_pythagorean( <triplet> ) = abap_true.
INSERT <triplet> INTO TABLE r_triplets.
ENDIF.
ENDLOOP.
ENDMETHOD.
METHOD _is_pythagorean.
r_is_pythagorean = COND #( WHEN i_triplet-x * i_triplet-x + i_triplet-y * i_triplet-y = i_triplet-z * i_triplet-z THEN abap_true
ELSE abap_false ).
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
cl_demo_output=>display( lcl_pythagorean_triplet=>get_triplets( n = 20 ) ).