*****************************************************
* Programa : Z_ATG_DUMMY *
* Consultor ABAP : Alvaro Tejada Galindo *
* Descripción: Programa de Ejemplo de ABAP *
*****************************************************
*---Este es el nombre del programa
REPORT Z_ATG_DUMMY.
*=======================================================================
* Variables
*=======================================================================
*---Declaramos la variables para el programa
*--- I es INTEGER y C es CHAR
DATA: SUMA(20) TYPE C,
DIGITO TYPE I,
AUX TYPE I,
EXPO TYPE I.
DATA: DIVISION TYPE I,
RESIDUO TYPE I.
*=======================================================================
* Selection screen
*=======================================================================
*---Declaramos el espacio en donde va a estar la interfaz del programa
SELECTION-SCREEN BEGIN OF BLOCK BLOCK WITH FRAME TITLE TEXT-T01.
*---Declaramos el parámetro de entrada
PARAMETERS:
NUMERO TYPE I.
SELECTION-SCREEN END OF BLOCK BLOCK.
*=======================================================================
* Start-of-selection
*=======================================================================
*---Cuando se ejecuta el programa
START-OF-SELECTION.
*---Llamamos a la función CALCULA_BINARIO, y le pasamos como parámetro
*---el número que leímos en la pantalla del programa
PERFORM CALCULA_BINARIO USING NUMERO.
*&---------------------------------------------------------------------*
*& Form CALCULA_BINARIO
*&---------------------------------------------------------------------*
* Obtiene el número binario de un decimal.
*----------------------------------------------------------------------*
FORM CALCULA_BINARIO USING P_DECIMAL.
SUMA = 0.
EXPO = 1.
*---Mientras la variable NUMERO sea mayor igual que 1
WHILE NUMERO GE 1.
*---Llamamos a la función CALCULA_RESIDUO, pasandolo 2 parámetros
*---de entrada NUMERO y 2. Además, un tercer parámetro de cambio
*---de variable RESIDUO
PERFORM CALCULA_RESIDUO USING NUMERO '2'
CHANGING RESIDUO.
DIGITO = RESIDUO.
*---Dividimos NUMERO entre 2 y truncamos el resultado, es decir,
*---no tomamos los decimales y lo redondeamos al entero inferior
NUMERO = TRUNC( NUMERO / '2' ).
AUX = DIGITO * EXPO.
SUMA = SUMA + AUX.
EXPO = EXPO * '10'.
ENDWHILE.
*---Imprimos el número en binario
WRITE:/ 'El número binario es: ', SUMA.
ENDFORM.
*---------------------------------------------------------------------*
* FORM CALCULA_RESIDUO *
*---------------------------------------------------------------------*
* Calcula el residuo de la división. *
*---------------------------------------------------------------------*
FORM CALCULA_RESIDUO USING P_DIVS P_DIVD
CHANGING RESIDUO.
*---Dividimos NUMERO entre 2 y truncamos el resultado, es decir,
*---no tomamos los decimales y lo redondeamos al entero inferior
DIVISION = TRUNC( P_DIVS / P_DIVD ).
RESIDUO = P_DIVS - ( DIVISION * P_DIVD ).
ENDFORM.