Optimizacion de codigo?

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • Rodolfo Montiel Rivera
    Member
    • oct
    • 92

    #1

    Optimizacion de codigo?

    Saludos Aqui practicando algo de recursividad a mis viejos tiempos con C jajaja bueno pues realice un reacomodo de mayor a menor de una serie de 5 numeros claro esto podria ser loco pero pues era para entretenerme ok, ahora creen que se podria hacer mas chiquito mi codigo algo asi como optimizarlo u otra manera de hacerlo ?

    *&---------------------------------------------------------------------*
    *& Report ZDUMMY_RMR60 *
    *& *
    *&---------------------------------------------------------------------*
    *& *
    *& *
    *&---------------------------------------------------------------------*

    REPORT zdummy_rmr60.

    DATA: BEGIN OF itab_almacen OCCURS 0,
    r_num TYPE n,
    END OF itab_almacen.

    DATA: r_temp LIKE itab_almacen-r_num,
    r_temp2 LIKE itab_almacen-r_num.

    DATA: r_cont TYPE n VALUE 1.

    DATA: r_nomcampo(6) TYPE c.

    DATA: r_tabix LIKE sy-tabix.

    FIELD-SYMBOLS <fs_valor> TYPE ANY.

    SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-t00.

    PARAMETERS: r_num1 TYPE n,
    r_num2 TYPE n,
    r_num3 TYPE n,
    r_num4 TYPE n,
    r_num5 TYPE n.

    SELECTION-SCREEN END OF BLOCK b1.

    AT USER-COMMAND.

    CASE sy-ucomm.

    WHEN '/&PROC'.

    PERFORM reordenar_numero.

    PERFORM imprimir.

    WHEN 'BACK'.

    LEAVE TO SCREEN 0.

    ENDCASE.

    START-OF-SELECTION.

    SET TITLEBAR 'STANDARD'.
    SET PF-STATUS 'MENU'.

    PERFORM llenar_tabla.

    PERFORM imprimir.

    END-OF-SELECTION.

    *&---------------------------------------------------------------------*
    *& Form llenar_tabla
    *&---------------------------------------------------------------------*
    FORM llenar_tabla .

    DO 5 TIMES.

    CONCATENATE: 'r_num' r_cont INTO r_nomcampo.

    ASSIGN (r_nomcampo) TO <fs_valor>.

    MOVE: <fs_valor> TO itab_almacen-r_num.

    APPEND itab_almacen.

    r_cont = r_cont + 1.

    ENDDO.

    ENDFORM. " llenar_tabla

    *&---------------------------------------------------------------------*
    *& Form reordenar_numero
    *&---------------------------------------------------------------------*
    FORM reordenar_numero .

    LOOP AT itab_almacen.

    r_temp = itab_almacen-r_num.

    r_tabix = sy-tabix + 1.

    READ TABLE itab_almacen INDEX r_tabix.

    IF r_temp LT itab_almacen-r_num.

    r_temp2 = itab_almacen-r_num.

    MOVE: r_temp TO itab_almacen-r_num.

    MODIFY itab_almacen INDEX r_tabix.

    r_tabix = sy-tabix - 1.

    READ TABLE itab_almacen INDEX r_tabix.

    itab_almacen-r_num = r_temp2.

    MODIFY itab_almacen.

    PERFORM reordenar_numero.

    ENDIF.

    ENDLOOP.

    ENDFORM. " reordenar_numero

    *&---------------------------------------------------------------------*
    *& Form imprimir
    *&---------------------------------------------------------------------*
    FORM imprimir .

    r_cont = 1.

    LOOP AT itab_almacen.

    WRITE: / 'Lugar : ', r_cont, '-->', itab_almacen-r_num.

    r_cont = r_cont + 1.

    ENDLOOP.

    ENDFORM. " imprimir
    01010000
    01001010
    10011000
    10100001

    De Byte a Beat.
  • zonanet
    Senior Member
    • mar
    • 195

    #2
    No se si es lo que busques pero yo lo haría así

    FORM reordenar_numero .

    SORT itab_almacen DESCENDING .

    ENDFORM. " reordenar_numero

    Comentario

    • Rodolfo Montiel Rivera
      Member
      • oct
      • 92

      #3
      Originalmente publicado por zonanet
      No se si es lo que busques pero yo lo haría así

      FORM reordenar_numero .

      SORT itab_almacen DESCENDING .

      ENDFORM. " reordenar_numero
      mmm nop jajaja conozco el sort lo que queria era hacerlo mismo pero usando recursividad es solo un tipo de practica para ejercitar la mente XD .

      Gracias de todas formas!!!
      01010000
      01001010
      10011000
      10100001

      De Byte a Beat.

      Comentario

      • mcarrasco
        Member
        • jul
        • 71

        #4
        Interesante...

        Hola amigo, oye primera vez que veo un post de recursividad aqui. Muchos algoritmos salen mas rapido por ahi...

        Con referencia al codigo que colocaste, veo que haces un loop, y dentro del loop haces la llamada recursiva.

        Un loop es un recorrido iterativo. no deberias mezclar algoritmos iterativos con recursivos. Yo si uso recursividad n o uso while, do, loop, etc... de hecho, la declaracion de variables en las funciones recursivas no se estila (con excepcion de auxiliares).

        Si quieres te recomiendo SCHEME o PROLOG. que son lenguajes totalmente recursivos.

        Saludos...

        Atte. Marcos Carrasco...

        Comentario

        Trabajando...