• Lunes 23 de Diciembre de 2024, 18:20

Autor Tema:  Decimal A Binario En Abap  (Leído 8577 veces)

Blag

  • Moderador
  • ******
  • Mensajes: 697
    • Ver Perfil
    • http://atejada.blogspot.com
Decimal A Binario En Abap
« en: Sábado 11 de Junio de 2005, 00:37 »
0
Aquí está un Decimal a Binario en ABAP  B)

Código: Text
  1.  
  2. *****************************************************
  3. * Programa : Z_ATG_DUMMY                            *
  4. * Consultor ABAP : Alvaro Tejada Galindo            *
  5. * Descripción: Programa de Ejemplo de ABAP          *
  6. *****************************************************
  7.  
  8. *---Este es el nombre del programa
  9. REPORT Z_ATG_DUMMY.
  10.  
  11. *=======================================================================
  12. * Variables
  13. *=======================================================================
  14. *---Declaramos la variables para el programa
  15. *--- I es INTEGER y C es CHAR
  16. DATA: SUMA(20) TYPE C,
  17.       DIGITO TYPE I,
  18.       AUX TYPE I,
  19.       EXPO TYPE I.
  20.  
  21. DATA: DIVISION TYPE I,
  22.       RESIDUO TYPE I.
  23.  
  24. *=======================================================================
  25. * Selection screen
  26. *=======================================================================
  27. *---Declaramos el espacio en donde va a estar la interfaz del programa
  28. SELECTION-SCREEN BEGIN OF BLOCK BLOCK WITH FRAME TITLE TEXT-T01.
  29. *---Declaramos el parámetro de entrada
  30. PARAMETERS:
  31.            NUMERO TYPE I.
  32. SELECTION-SCREEN END OF BLOCK BLOCK.
  33.  
  34. *=======================================================================
  35. * Start-of-selection
  36. *=======================================================================
  37. *---Cuando se ejecuta el programa
  38. START-OF-SELECTION.
  39. *---Llamamos a la función CALCULA_BINARIO, y le pasamos como parámetro
  40. *---el número que leímos en la pantalla del programa
  41.   PERFORM CALCULA_BINARIO USING NUMERO.
  42.  
  43. *&---------------------------------------------------------------------*
  44. *&      Form  CALCULA_BINARIO
  45. *&---------------------------------------------------------------------*
  46. *       Obtiene el número binario de un decimal.
  47. *----------------------------------------------------------------------*
  48. FORM CALCULA_BINARIO USING P_DECIMAL.
  49.   SUMA = 0.
  50.   EXPO = 1.
  51. *---Mientras la variable NUMERO sea mayor igual que 1
  52.   WHILE NUMERO GE 1.
  53. *---Llamamos a la función CALCULA_RESIDUO, pasandolo 2 parámetros
  54. *---de entrada NUMERO y 2. Además, un tercer parámetro de cambio
  55. *---de variable RESIDUO
  56.     PERFORM CALCULA_RESIDUO USING NUMERO '2'
  57.                             CHANGING RESIDUO.
  58.  
  59.     DIGITO = RESIDUO.
  60. *---Dividimos NUMERO entre 2 y truncamos el resultado, es decir,
  61. *---no tomamos los decimales y lo redondeamos al entero inferior
  62.     NUMERO = TRUNC( NUMERO / '2' ).
  63.     AUX = DIGITO * EXPO.
  64.     SUMA = SUMA + AUX.
  65.     EXPO = EXPO * '10'.
  66.  
  67.   ENDWHILE.
  68.  
  69. *---Imprimos el número en binario
  70.   WRITE:/ 'El número binario es: ', SUMA.
  71. ENDFORM.
  72.  
  73. *---------------------------------------------------------------------*
  74. *       FORM CALCULA_RESIDUO                                          *
  75. *---------------------------------------------------------------------*
  76. *       Calcula el residuo de la división.                            *
  77. *---------------------------------------------------------------------*
  78. FORM CALCULA_RESIDUO USING P_DIVS P_DIVD
  79.                      CHANGING RESIDUO.
  80. *---Dividimos NUMERO entre 2 y truncamos el resultado, es decir,
  81. *---no tomamos los decimales y lo redondeamos al entero inferior
  82.   DIVISION = TRUNC( P_DIVS / P_DIVD ).
  83.   RESIDUO = P_DIVS - ( DIVISION * P_DIVD ).
  84. ENDFORM.
  85.  
  86.  

Si lo ejecutamos por ejemplo con el número 30 como parámetro, nos dará el siguiente resultado:

Código: Text
  1.  
  2. Programa de Pruebas Variadas              
  3.                                          
  4. El número binario es:                11110
  5.  
  6.  

Saludos,

Blag  :smartass:

RadicalEd

  • Moderador
  • ******
  • Mensajes: 2430
  • Nacionalidad: co
    • Ver Perfil
Re: Decimal A Binario En Abap
« Respuesta #1 en: Sábado 11 de Junio de 2005, 02:42 »
0
Como hago la captura de un valor?
Como hago un switch o un if?
Para que diras...
Para hacer una desición y seleccionar entre varias funciones, a ver si hago uno pequeño y me dices si me quedo bien.
El pasado son solo recuerdos, el futuro son solo sueños

Blag

  • Moderador
  • ******
  • Mensajes: 697
    • Ver Perfil
    • http://atejada.blogspot.com
Re: Decimal A Binario En Abap
« Respuesta #2 en: Sábado 11 de Junio de 2005, 03:04 »
0
Citar
Como hago la captura de un valor?

Así:

Código: Text
  1.  
  2. *---Declaramos el espacio en donde va a estar la interfaz del programa
  3. SELECTION-SCREEN BEGIN OF BLOCK BLOCK WITH FRAME TITLE TEXT-T01.
  4. *---Declaramos el parámetro de entrada
  5. PARAMETERS:
  6.           NUMERO TYPE I.
  7. SELECT-OPTIONS:
  8.           FECHA FOR PA0001-BEGDA.
  9. SELECTION-SCREEN END OF BLOCK BLOCK.
  10.  
  11.  

NUMERO es el valor que puedes capturar (En este caso es un parámetro).
FECHA, es un rango de valores.

Para llamar a NUMERO, simplemente lo llamas como una variable cualquiera.
Para llamar a FECHA, como es un rango de valores, se divide en 2. En FECHA-LOW y FECHA-HIGH.....Por ejemplo, si FECHA, va de '01.01.2005' (FECHA-LOW) al '31.12.2005' (FECHA-HIGH).

Puedes utilizar un IN o un BETWEEN, para poder utilizarlo.

Por ejemplo:

Código: Text
  1.  
  2. SELECT BELNR
  3. INTO T_TAB
  4. FROM BKPF
  5. WHERE GJAHR IN FECHA.
  6.  
  7.  

En este caso, seleccionas de la tabla BKPF, el campo BELNR (Número de un documento contable), siempre y cuando el campo GJAHR (Ejercicio), este dentro del rango de valores de la variable FECHA.

Citar
Como hago un switch o un if?

Para hacer un IF:

Código: Text
  1.  
  2. IF NUMERO = '5'.
  3. WRITE:/ '5'.
  4. ELSE.
  5. WRITE:/ 'Otro número'.
  6. ENDIF.
  7.  
  8.  

Con WRITE, escribimos en la pantalla.

Para hacer un SWITCH.....No existe la sentencia SWITCH  :lol:

Sería así:

Código: Text
  1.  
  2. CASE NUMERO.
  3. WHEN '5'.
  4. WRITE:/ '5'.
  5. WHEN 'OTHERS'.
  6. WRITE:/ 'Otro número'.
  7. ENDCASE.
  8.  
  9.  

Citar
Para hacer una desición y seleccionar entre varias funciones, a ver si hago uno pequeño y me dices si me quedo bien.

Jejeje.....Espero con ansias tu código  B)

Saludos,

Blag  :smartass:

RadicalEd

  • Moderador
  • ******
  • Mensajes: 2430
  • Nacionalidad: co
    • Ver Perfil
Re: Decimal A Binario En Abap
« Respuesta #3 en: Sábado 11 de Junio de 2005, 17:35 »
0
Sigo sin entender lo de la captura, como hacer en VB

x = Text1.Text

osea, capturar en 'x' el valor que se entra en el Control Texto.

Ya tengo casi la mitad, solo me falta no mas entender esta captura y listo
El pasado son solo recuerdos, el futuro son solo sueños

Blag

  • Moderador
  • ******
  • Mensajes: 697
    • Ver Perfil
    • http://atejada.blogspot.com
Re: Decimal A Binario En Abap
« Respuesta #4 en: Lunes 13 de Junio de 2005, 16:35 »
0
Citar
Sigo sin entender lo de la captura, como hacer en VB

x = Text1.Text

osea, capturar en 'x' el valor que se entra en el Control Texto.

Bueno... :lol: ....la cosa es así.....

Código: Text
  1.  
  2. *---Declaramos el espacio en donde va a estar la interfaz del programa
  3. SELECTION-SCREEN BEGIN OF BLOCK BLOCK WITH FRAME TITLE TEXT-T01.
  4. *---Declaramos el parámetro de entrada
  5. PARAMETERS:
  6.          NUMERO TYPE I.
  7. SELECT-OPTIONS:
  8.          FECHA FOR PA0001-BEGDA.
  9. SELECTION-SCREEN END OF BLOCK BLOCK.
  10.  
  11.  
 

Como ves, NUMERO es un parámetro, cuando aparece la pantalla de parámetros, y colocas por ejemplo "5" en ese campo y ejecutas el programa, entonces NUMERO vale 5. No es necesario hacer un

Código: Text
  1.  
  2. X = NUMERO.
  3.  
  4.  

Puesto que NUMERO ya tiene el valor porque es un parámetro de entrada del programa :comp:

Saludos,

Blag  :devil:

RadicalEd

  • Moderador
  • ******
  • Mensajes: 2430
  • Nacionalidad: co
    • Ver Perfil
Re: Decimal A Binario En Abap
« Respuesta #5 en: Lunes 13 de Junio de 2005, 18:16 »
0
Bueno aqui voy.
Solamente coloco desde la captura de valores, ya que todo el resto no lo entiendo.

Código: Text
  1. SELECTION-SCREEN BEGIN OF BLOCK BLOCK WITH FRAME TITLE TEXT-T01.
  2. REPORT FUNCIONES.
  3. DATA:  
  4.         iN1 TYPE I,
  5.         iN2 TYPE I,
  6.         fRES TYPE I.
  7. *CREO QUE ESTO VA PRIMERO PARA CAPTURAR EL VALOR
  8. WRITE:/'1. SUMA'.
  9. WRITE:/'2. RESTA'.
  10. WRITE:/'3. MULTIPLICACION'.
  11. WRITE:/'4. DIVISION'.
  12. WRITE:/'DIGITE OPCION: '.
  13. PARAMETERS:
  14.         iOP TYPE I.
  15. SELECTION-SCREEN END OF BLOCK BLOCK
  16. START-OF-SELECTION.
  17. CASE iOP.
  18.         WHEN '1'.
  19.             PERFORM SUMA USING iOP.
  20.         WHEN '2'.
  21.             PERFORM RESTA USING iOP.
  22.         WHEN '3'.
  23.             PERFORM MULTI USING iOP.
  24.         WHEN '4'.
  25.             PERFORM DIVI USING iOP.
  26. ENDCASE.
  27. FORM SUMA USING iOP.
  28.     fRES = iN1 + iN2.
  29.     WRITE:/'LA SUMA ES: ', fRES.
  30. ENDFORM.        
  31.  
  32. FORM RESTA USING iOP.
  33.     fRES = iN1 - iN2.
  34.     WRITE:/'LA RESTA ES: ', fRES.
  35. ENDFORM.        
  36.  
  37. FORM MULTI USING iOP.
  38.     fRES = iN1 * iN2.
  39.     WRITE:/'EL RESULTADO DE LA MULTIPLICACION ES: ', fRES.
  40. ENDFORM.        
  41.  
  42. FORM DIVI USING iOP.
  43.     fRES = iN1 / iN2.
  44.     WRITE:/EL RESULTADO DE LA DIVISION ES: ', fRES.
  45. ENDFORM.        
  46.  
  47.  
Alguna pregunta, Blag la responde con mucho gusto, jejeje
El pasado son solo recuerdos, el futuro son solo sueños

Blag

  • Moderador
  • ******
  • Mensajes: 697
    • Ver Perfil
    • http://atejada.blogspot.com
Re: Decimal A Binario En Abap
« Respuesta #6 en: Lunes 13 de Junio de 2005, 21:57 »
0
Citar
Alguna pregunta, Blag la responde con mucho gusto, jejeje

Que bien RadicalEd  :kicking:  Solo tuviste un par de errores  :lol:  Aquí está el programa corregido  :comp:

Código: Text
  1.  
  2. *****************************************************
  3. * Programa : Z_ATG_DUMMY                            *
  4. * Consultor ABAP : Alvaro Tejada Galindo            *
  5. * Descripción: Programa de Ejemplo de ABAP          *
  6. *****************************************************
  7.  
  8. REPORT Z_ATG_DUMMY.
  9.  
  10. DATA: FRES TYPE I.
  11.  
  12. SELECTION-SCREEN BEGIN OF BLOCK BLOCK.
  13. PARAMETERS:
  14.        IN1 TYPE I,
  15.        IN2 TYPE I,
  16.        IOP TYPE I.
  17. SELECTION-SCREEN END OF BLOCK BLOCK.
  18.  
  19. START-OF-SELECTION.
  20.   CASE IOP.
  21.     WHEN '1'.
  22.       PERFORM SUMA USING IOP.
  23.     WHEN '2'.
  24.       PERFORM RESTA USING IOP.
  25.     WHEN '3'.
  26.       PERFORM MULTI USING IOP.
  27.     WHEN '4'.
  28.       PERFORM DIVI USING IOP.
  29.   ENDCASE.
  30.  
  31. *---------------------------------------------------------------------*
  32. *       FORM SUMA                                                     *
  33. *---------------------------------------------------------------------*
  34. *       ........                                                      *
  35. *---------------------------------------------------------------------*
  36. FORM SUMA USING IOP.
  37.   FRES = IN1 + IN2.
  38.   WRITE:/'LA SUMA ES: ', FRES.
  39. ENDFORM.
  40.  
  41. *---------------------------------------------------------------------*
  42. *       FORM RESTA                                                    *
  43. *---------------------------------------------------------------------*
  44. *       ........                                                      *
  45. *---------------------------------------------------------------------*
  46. FORM RESTA USING IOP.
  47.   FRES = IN1 - IN2.
  48.   WRITE:/'LA RESTA ES: ', FRES.
  49. ENDFORM.
  50.  
  51. *---------------------------------------------------------------------*
  52. *       FORM MULTI                                                    *
  53. *---------------------------------------------------------------------*
  54. *       ........                                                      *
  55. *---------------------------------------------------------------------*
  56. FORM MULTI USING IOP.
  57.   FRES = IN1 * IN2.
  58.   WRITE:/'EL RESULTADO DE LA MULTIPLICACION ES: ', FRES.
  59. ENDFORM.
  60.  
  61. *---------------------------------------------------------------------*
  62. *       FORM DIVI                                                     *
  63. *---------------------------------------------------------------------*
  64. *       ........                                                      *
  65. *---------------------------------------------------------------------*
  66. FORM DIVI USING IOP.
  67.   FRES = IN1 / IN2.
  68.   WRITE:/'EL RESULTADO DE LA DIVISION ES: ', FRES.
  69. ENDFORM.
  70.  
  71.  

Aquí está optimizado a como debería de ser  B)  Sería mejor utilizar RadioButtons para poder seleccionar la operación a realizar  :rolleyes:

Código: Text
  1.  
  2. *****************************************************
  3. * Programa : Z_ATG_DUMMY                            *
  4. * Consultor ABAP : Alvaro Tejada Galindo            *
  5. * Descripción: Programa de Ejemplo de ABAP          *
  6. *****************************************************
  7.  
  8. REPORT Z_ATG_DUMMY.
  9.  
  10. DATA: FRES TYPE I.
  11.  
  12. SELECTION-SCREEN BEGIN OF BLOCK BLOCK.
  13. PARAMETERS:
  14.        IN1 TYPE I,
  15.        IN2 TYPE I,
  16.        SUMA RADIOBUTTON GROUP OPER,
  17.        RESTA RADIOBUTTON GROUP OPER,
  18.        MULTI RADIOBUTTON GROUP OPER,
  19.        DIVI RADIOBUTTON GROUP OPER.
  20. SELECTION-SCREEN END OF BLOCK BLOCK.
  21.  
  22. START-OF-SELECTION.
  23.     IF SUMA EQ 'X'.
  24.       PERFORM SUMA USING IN1 IN2.
  25.     ELSEIF RESTA EQ 'X'.
  26.       PERFORM RESTA USING IN1 IN2.
  27.     ELSEIF MULTI EQ 'X'.
  28.       PERFORM MULTI USING IN1 IN2.
  29.     ELSEIF DIVI EQ 'X'.
  30.       PERFORM DIVI USING IN1 IN2.
  31.     ENDIF.
  32.  
  33. *---------------------------------------------------------------------*
  34. *       FORM SUMA                                                     *
  35. *---------------------------------------------------------------------*
  36. *       SUMA 2 VALORES                                                *
  37. *---------------------------------------------------------------------*
  38. FORM SUMA USING IN1 IN2.
  39.   FRES = IN1 + IN2.
  40.   WRITE:/'LA SUMA ES: ', FRES.
  41. ENDFORM.
  42.  
  43. *---------------------------------------------------------------------*
  44. *       FORM RESTA                                                    *
  45. *---------------------------------------------------------------------*
  46. *       RESTA 2 VALORES                                               *
  47. *---------------------------------------------------------------------*
  48. FORM RESTA USING IN1 IN2.
  49.   FRES = IN1 - IN2.
  50.   WRITE:/'LA RESTA ES: ', FRES.
  51. ENDFORM.
  52.  
  53. *-----------------[B]----------------------------------------------------*
  54. *       FORM MULTI                                                    *
  55. *---------------------------------------------------------------------*
  56. *       MULTIPLICA 2 VALORES                                          *
  57. *---------------------------------------------------------------------*
  58. FORM MULTI USING IN1 IN2.
  59.   FRES = IN1 * IN2.
  60.   WRITE:/'EL RESULTADO DE LA MULTIPLICACION ES: ', FRES.
  61. ENDFORM.
  62.  
  63. *---------------------------------------------------------------------*
  64. *       FORM DIVI                                                     *
  65. *---------------------------------------------------------------------*
  66. *       DIVIDE 2 VALORES                                              *
  67. *---------------------------------------------------------------------*
  68. FORM DIVI USING IN1 IN2.
  69.   FRES = IN1 / IN2.
  70.   WRITE:/'EL RESULTADO DE LA DIVISION ES: ', FRES.
  71. ENDFORM.
  72.  
  73.  

Realmente quiero felicitarte....aprenderías ABAP muy rapidamente  :lightsabre:

Saludos,

Blag  :smartass:

RadicalEd

  • Moderador
  • ******
  • Mensajes: 2430
  • Nacionalidad: co
    • Ver Perfil
Re: Decimal A Binario En Abap
« Respuesta #7 en: Lunes 13 de Junio de 2005, 22:39 »
0
A ver pongame uno.

 :D Pero no tan dificil :(
El pasado son solo recuerdos, el futuro son solo sueños

Blag

  • Moderador
  • ******
  • Mensajes: 697
    • Ver Perfil
    • http://atejada.blogspot.com
Re: Decimal A Binario En Abap
« Respuesta #8 en: Martes 14 de Junio de 2005, 17:51 »
0
Citar
A ver pongame uno.
 :D Pero no tan dificil  :(

Bueno....el ABAP no está pensado para este tipo de programas  :lol:  pero no importa, todo sea por aprender  :hola:

A ver.....puedes hacer un programa que calcule el factorial de un número  :comp:

Por ejemplo:

Código: Text
  1.  
  2. Ingreso: 5.
  3. Resultado: 120.
  4.  
  5.  

Saludos,

Blag  :smartass:

RadicalEd

  • Moderador
  • ******
  • Mensajes: 2430
  • Nacionalidad: co
    • Ver Perfil
Re: Decimal A Binario En Abap
« Respuesta #9 en: Martes 14 de Junio de 2005, 18:06 »
0
Pregunta???
Como creo un TextBox?
Como hago un ciclo?
El pasado son solo recuerdos, el futuro son solo sueños

Blag

  • Moderador
  • ******
  • Mensajes: 697
    • Ver Perfil
    • http://atejada.blogspot.com
Re: Decimal A Binario En Abap
« Respuesta #10 en: Martes 14 de Junio de 2005, 19:26 »
0
Así:

Código: Text
  1.  
  2. SELECTION-SCREEN BEGIN OF BLOCK BLOCK.
  3. PARAMETERS:
  4.      NUMERO  TYPE I,
  5. SELECTION-SCREEN END OF BLOCK BLOCK.
  6.  
  7.  

Saludos,

Blag  :devil:

RadicalEd

  • Moderador
  • ******
  • Mensajes: 2430
  • Nacionalidad: co
    • Ver Perfil
Re: Decimal A Binario En Abap
« Respuesta #11 en: Martes 14 de Junio de 2005, 20:03 »
0
Cual de las 2 preguntas es???.
Mira he hecho esto:

Código: Text
  1. REPORT FACTORIAL.
  2. DATA: FACT TYPE I,
  3.       ICICLO TYPE I.
  4. SELECTION-SCREEN BEGIN OF BLOCK BLOCK.
  5. PARAMETERS:
  6.       XCAPT TYPE I.
  7. SELECTION-SCREEN END OF BLOCK BLOCK.
  8. START-OF-SELECTION.
  9. FACT = 1.
  10. WHILE XCAPT GE 1.
  11. FOR ICICLO = 1 TO XCAPT.
  12.   FACT = ICICLO * FACT.
  13. ENDFOR
  14. PERFORM FACTORIAL USING FACT.
  15. ENDWHILE
  16. FOR FACTORIAL USING FACT.
  17.  WHILE:/'EL FACTORIAL DE: ',XCAPT,' ES: ',FACT.
  18. ENDFORM
  19.  
El pasado son solo recuerdos, el futuro son solo sueños

Blag

  • Moderador
  • ******
  • Mensajes: 697
    • Ver Perfil
    • http://atejada.blogspot.com
Re: Decimal A Binario En Abap
« Respuesta #12 en: Martes 14 de Junio de 2005, 21:24 »
0
Bueno.....no está mal  :hola:  pero en ABAP, no existe el FOR  :blink:

 :o  Me acabo de dar cuenta de que me preguntaste por los ciclos  :lol: , puedes utilizar....

Código: Text
  1.  
  2. DO N TIMES.
  3. ENDDO.
  4.  
  5. WHILE.
  6. ENDWHILE.
  7.  
  8.  

Aquí está el programa resuelto  :comp:

Código: Text
  1.  
  2. *****************************************************
  3. * Programa : Z_ATG_DUMMY                            *
  4. * Consultor ABAP : Alvaro Tejada Galindo            *
  5. * Descripción: Programa de Ejemplo de ABAP          *
  6. *****************************************************
  7.  
  8. REPORT Z_ATG_DUMMY.
  9.  
  10. DATA: FACT TYPE I,
  11.       ICICLO TYPE I.
  12.  
  13. SELECTION-SCREEN BEGIN OF BLOCK BLOCK.
  14. PARAMETERS:
  15.      XCAPT TYPE I.
  16. SELECTION-SCREEN END OF BLOCK BLOCK.
  17.  
  18. START-OF-SELECTION.
  19.   FACT = 1.
  20.  
  21.   DO XCAPT TIMES.
  22.     ICICLO = ICICLO + 1.
  23.     FACT = ICICLO * FACT.
  24.   ENDDO.
  25.   PERFORM FACTORIAL USING FACT.
  26.  
  27. *---------------------------------------------------------------------*
  28. *       FORM FACTORIAL                                                *
  29. *---------------------------------------------------------------------*
  30. *       Obtiene el factorial                                          *
  31. *---------------------------------------------------------------------*
  32. FORM FACTORIAL USING FACT.
  33.   WRITE:/'EL FACTORIAL DE: ',XCAPT,' ES: ',FACT.
  34. ENDFORM.
  35.  
  36.  

Saludos,

Blag  :smartass: