Quantcast
Channel: SCN: Message List - ABAP Development
Viewing all articles
Browse latest Browse all 10425

Re: ABAP linear/nonlinear programming.

$
0
0
TYPES: BEGIN OF ty_values,        count   TYPE i,        value1  TYPE i,        multi1  TYPE i,        value2  TYPE i,        multi2  TYPE i,        value3  TYPE i,        multi3  TYPE i,        result  TYPE i,        balance TYPE i,       END OF ty_values.
PARAMETERS: p_1 TYPE i DEFAULT 51,            p_2 TYPE i DEFAULT 82,            p_3 TYPE i DEFAULT 143,            p_4 TYPE i DEFAULT 1007.
DATA: lt_tab TYPE TABLE OF ty_values,      wa_tab TYPE ty_values,      lv_max_comb_1 TYPE i,      lv_max_comb_2 TYPE i,      lv_max_comb_3 TYPE i,      lv_max_comb   TYPE i,      lv_count      TYPE i,      lv_count1     TYPE i,      lv_count2     TYPE i,      lv_count3     TYPE i,      lv_result     TYPE i,      lv_balance    TYPE i,      lv_next       TYPE i.
START-OF-SELECTION.  lv_count  = 0.  lv_next   = 1.  lv_count1 = 0.  lv_count2 = 0.  lv_count3 = 0.  DO.    CLEAR: lv_result, lv_balance.    lv_result =   p_1 * lv_count1                + p_2 * lv_count2                + p_3 * lv_count3.    lv_balance = p_4 - lv_result.    IF lv_balance < 0.      IF lv_next = 4.        EXIT.      ELSE.        lv_next = lv_next + 1.        CASE lv_next.          WHEN 2.            lv_count2 = lv_count2 + 1.            lv_count1 = 0.          WHEN 3.            lv_count3 = lv_count3 + 1.            lv_count2 = 0.            lv_count1 = 0.        ENDCASE.        CONTINUE.      ENDIF.    ELSE.      wa_tab-count  = lv_count.      wa_tab-value1 = p_1.      wa_tab-value2 = p_2.      wa_tab-value3 = p_3.      wa_tab-multi1 = lv_count1.      wa_tab-multi2 = lv_count2.      wa_tab-multi3 = lv_count3.      wa_tab-result  = lv_result.      wa_tab-balance = lv_balance.      APPEND wa_tab TO lt_tab.      CLEAR wa_tab.      lv_count  = lv_count  + 1.      lv_count1 = lv_count1 + 1.    ENDIF.  ENDDO.  SORT lt_tab BY balance.  lv_count = 0.  LOOP AT lt_tab INTO wa_tab.    lv_count = lv_count + 1.    WRITE: / 'Combination ', lv_count, ': ',       p_1, ' x ', wa_tab-multi1, ' + ',       p_2, ' x ', wa_tab-multi2, ' + ',       p_3, ' x ', wa_tab-multi3, ' = ', wa_tab-result,       ' Balance: ', wa_tab-balance.  ENDLOOP.

Viewing all articles
Browse latest Browse all 10425

Trending Articles