Anonymous user
Power set: Difference between revisions
no edit summary
No edit summary |
No edit summary |
||
Line 39:
report z_powerset.
class set definition.
public section.
methods:
constructor
importing
i_elements type stringtab optional,
add_element
importing
i_element type string
returning
value(r_set) type stringtab,
contains_element
importing
i_element type string
returning
value(r_contains) type abap_bool,
get_size
returning
value(r_size) type int4,
is_equal
importing
i_set type ref to set
returning
value(r_is_equal) type abap_bool,
value(r_elements) type stringtab,
stringify
private section.
data elements type stringtab.
endclass.
class set implementation.
method constructor.
loop at i_elements assigning field-symbol(<element>).
if not line_exists( elements[ table_line = <element> ] ).
append <element> to elements.
endif.
endloop.
endmethod.
method add_element.
if not line_exists( elements[ table_line = i_element ] ).
append i_element to elements.
endif.
endmethod.
method contains_element.
if line_exists( elements[ table_line = i_element ] ).
r_contains = abap_true.
endif.
endmethod.
method get_size.
r_size = lines( elements ).
endmethod.
method is_equal.
r_is_equal = abap_true.
loop at elements assigning field-symbol(<element>).
if not i_set->contains_element( <element> ).
r_is_equal = abap_false.
return.
endif.
endloop.
if not i_set->get_size( ) = me->get_size( ).
r_is_equal = abap_false.
endif.
endmethod.
method get_elements.
r_elements = elements.
endmethod.
method stringify.
r_string = cond string(
when elements is initial
then `∅`
when elements = value stringtab( ( `∅` ) )
then `{ ∅ }`
else reduce string(
init result = `{ `
index = 1
for element in elements
next result = cond string(
when index = lines( elements )
then cond string(
when element = ``
then result && `∅` && ` }`
when strlen( element ) = 1 and element <> `∅`
then result && element && ` }`
else result && `{` && element && `} }` )
else cond string(
when element = ``
then result && `∅` && `, `
when strlen( element ) = 1 and element <> `∅`
then result && element && `, `
else result && `{` && element && `}, ` ) )
index = index + 1 ) ).
endmethod.
endclass.
start-of-selection.
data(result_set) = new set( ).
data(set1) = new set( ).
data(set2) = new set( value stringtab( ( `∅` ) ) ).
data(set3) = new set( value stringtab( ( `1` ) ( `2` ) ( `3` ) ( `3` ) ( `4` ) ( `4` ) ( `4` ) ) ).
write `𝑷( ` && set1->stringify( ) && ` ) ->`.
perform calculate_powerset using set1
changing result_set.
write result_set->stringify( ).
new-line.
write `𝑷( ` && set2->stringify( ) && ` ) ->`.
perform calculate_powerset using set2
changing result_set.
write result_set->stringify( ).
new-line.
write `𝑷( ` && set3->stringify( ) && ` ) ->`.
perform calculate_powerset using set3
changing result_set.
write result_set->stringify( ).
new-line.
form calculate_powerset using set type ref to set
changing powerset type ref to set.
data(powerset_elements) = cond stringtab(
when set->contains_element( `∅` )
then value stringtab( ( `` ) ( `∅` ) )
else value stringtab( ( `` ) ) ).
loop at set->get_elements( ) assigning field-symbol(<element>).
do lines( powerset_elements ) times.
if powerset_elements[ sy-index ] <> `∅`.
append powerset_elements[ sy-index ] && <element> to powerset_elements.
else.
append <element> to powerset_elements.
endif.
enddo.
endloop.
powerset = new set( powerset_elements ).
endform.
</lang>
Line 82 ⟶ 222:
<pre>
</pre>
|