¿Cómo implementar una estructura de control if else en COBOL?
La programación en COBOL te brinda una oportunidad única para adquirir habilidades que pueden transformarse en un empleo estable y de larga duración. Con este conocimiento, te sumerges en el mundo de la lógica y las decisiones, reflejado en la estructura if else. Aquí te explicaremos cómo crear un programa sencillo que utilice esta estructura de control, paso a paso.
¿Cómo se inicia el programa base en COBOL?
Accede a tu emulador y dirígete a la carpeta SRC en platzi.
Copia el contenido del programa de ejemplo "hola" a un nuevo programa llamado cree if else.
Actualiza el nombre del programa a it else y elimina cualquier comando de display innecesario.
¿Cómo definir las constantes necesarias?
Dentro de la sección de datos del programa, es crucial establecer las constantes que se utilizarán durante la ejecución:
Dirígete a la sección Data Division, específicamente dentro de Working Storage Section.
Define tus constantes a partir de la fila número 12:
05 WSC-A PIC9VALUE7.05 WSC-B PIC9VALUE9.
Aquí, WSC-A y WSC-B son constantes con un valor predeterminado de 7 y 9, respectivamente.
¿Cómo se estructura el if else en COBOL?
Ahora, vamos a definir la lógica dentro de Procedure Division:
Realiza un llamado al párrafo 010-IF desde la columna número 12:
PERFORM 010-IF.
Crea el párrafo 010-IF:
010-IF.IF WSC-A < WSC-B THENDISPLAY"El valor de " WSC-A " es menor que " WSC-B
ELSEDISPLAY"El valor de " WSC-A " es mayor que " WSC-B.
Define el párrafo final 020-FIN:
020-FIN.STOPRUN.
¿Cómo compilar y ejecutar tu código COBOL?
Para verificar que tu programa funcione correctamente:
Salva tu código y teclea F3 para ir a la carpeta JCLs.
Realiza un submit del JCL para compilar el programa, asegurándote de que el nombre coincida con el de tu código.
Ejecuta el JCL EXEC IF para comprobar que la ejecución es exitosa.
¿Qué modificaciones permiten observar cambios en el if else?
A fin de entender cómo funciona el flujo de control:
Cambia el valor de WSC-B a 5.
Compila nuevamente y observa cómo el flujo del programa se dirige ahora a la otra rama del else, mostrando que "El valor de 7 es mayor que 5".
Reto para el aprendizaje
Te animo a experimentar cambiando los valores de las constantes y definiciones de texto en cada display. Esto te permitirá ver cómo cada ejecución refleja el camino lógico definido por tus condiciones. ¡Continúa explorando y codificando, y prepárate para el próximo módulo sobre la estructura de control perform!
Aporte, quisiera tu observación en el código, es que estoy haciendo muchos IF como puede agruparlos en uno sola lineal de código, si se puede
Es correcto tu manejo de IF´s, aunque es complejo para leer, peor no te preocupes, existe mucho código ya en la industria que tiene un anidamiento de IF´s bárbaro; esto es algo por lo cual hicieron la revisión para pasar de COBOL-74 a COBOL-85, ya que en programas escritos en COBOL-74, el manejo de los IF se podía hacer muy extenuante.
Yo solo variaría en tu código para dividirlo en párrafos o módulos más fáciles de leer:
IDENTIFICATION DIVISION.
PROGRAM-ID. IFELSE.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WSC-CONSTANTES.
05 WSC-A PIC 9 VALUE 2.
05 WSC-B PIC 9 VALUE 4.
05 WSC-C PIC 9 VALUE 6.
05 WSC-D PIC 9 VALUE 8.
05 WSC-E PIC 9 VALUE 3.
05 WSC-F PIC 9 VALUE 5.
PROCEDURE DIVISION.
PERFORM 010-IF-1
PERFORM 011-IF-2
PERFORM 012-IF-3
PERFORM 020-FIN.
010-IF-1.
IF WSC-A < WSC-B
DISPLAY 'EL VALOR DE ' WSC-A ' ES MENOR QUE ' WSC-B
ELSE
DISPLAY 'EL VALOR DE ' WSC-A ' ES MAYOR QUE ' WSC-B.
011-IF-2.
IF WSC-C < WSC-D
DISPLAY 'EL VALOR DE ' WSC-C ' ES MENOR QUE ' WSC-D
ELSE
DISPLAY 'EL VALOR DE ' WSC-C ' ES MAYOR QUE ' WSC-D.
012-IF-3.
IF WSC-E < WSC-F
DISPLAY 'EL VALOR DE ' WSC-E ' ES MENOR QUE ' WSC-F
ELSE
DISPLAY 'EL VALOR DE ' WSC-E ' ES MAYOR QUE ' WSC-F.
020-FIN.
STOP RUN.
Saludos, déjame saber como te esta yendo y como te sientes en este aprendizaje 😀
Saludos, Profe tengo un problema con el reto:
También note que al guerdarlo salir y volverlo a abrir me aparece esto
Saludos
Hola Benjamín, como te va? 😄
Descuida, ese mensaje de revedit1.backup not reused es informativo, donde te indica que no se esta respaldando en automatico el contenido del archivo.
Y tomando el tema, que problema tienes con el reto? No veo las imagenes relacionadas 😊
Saludos, sigo pendiente
Saludos!, Perdone jejeme olvide poner la imagen, mientras hacia el reto que dejo al final de la clase me tope con 0013 lo cual es un error porque solo estaria bien si fuera 0000 o 0004, En cambio en el otro me sale 0000, bueno aca le dejjo la imagen lo de arriba de la pregunta era para que vea si hubiera algun error en mi codigo, aqui esta el error:
Primero en config me sale 0013:
En cambio en EXECIF me da un 0000:
Saludos! 😄😄
¿También se puede usar <= y >=?
Hola Wuture! ¿Qué tal te va?
Como el compilador de este emulador esta sobre mvs, la versión de cobol que soporta es cobol-74, entonces solo podemos tener un operador a la vez (<, > o =).
Saludos, coméntame como te esta yendo, estare feliz de leerte!
Ejemplo de if else usando WSS-SWITCHES
Usar niveles 88 (condiciones de nivel) para controlar el flujo. Es una forma elegante de hacer que el código se lea como lenguaje natural, en lugar de comparar valores crudos.
Aquí tienes el IF usando tu WSS-SWITCHES:
IF WSS-FIN
DISPLAY"Proceso terminado"ELSEDISPLAY"Proceso en curso"END-IF.
¿Ves cómo el IF WSS-FIN es mucho más legible que preguntar IF WSS-SWITCHES = '0'?
Hola, profe. Tengo esta duda: ¿El numero que asignamos al "PERFORM" del Procedure Division de que depende? ¿depende del numero de pasos que hagamos o hay algun estándar?
Hola Rodolfo, como estas?
Que buena pregunta, esto depende del programador, y es conveniente colocar una numeración que a ti y a otros programadores les resulte sencillo de identificar.
En la industria no existe un estándar, pero es mejor colocar la numeración conforme vas codificando los PERFORM.
Saludos.
Excelente saberlo, en ese caso será mejor que yo sea ordenado así como nos a enseñado. Muchas gracias.
¿Hay alguna manera de pasar el carrete de ventanas hacia atrás? con F9 hacia adelante, sabes si hay otro atajo o si se puede configurar para ir hacia atrás?
puedes teclear en la línea de comandos: swap list
y te despliega todas las ventanas que tienes abiertas:
REVIEW active logical screen list IEW FRONT END -------------
5COMMAND ===>
SESSION/NAME DDNAME VOLUME DATA SET NAME
===> 5 SCRN5 **MENU**
4 SCRN4 **MENU**
3 SCRN3 **MENU**
2 SCRN2 **MENU**
1 SCRN **MENU**
también puedes ponerle un nombre a la pantalla en la que estas trabajando, así no te perderás:
para poner nombre, teclea igual en la linea de comandos: scrname xxx donde xxx es el nombre que tu elijas, queno exceda 8 caracteres de longitud.
Yo lo hice y así me quedo:
REVIEW active logical screen list IEW FRONT END ---------
2COMMAND ===>
SESSION/NAME DDNAME VOLUME DATA SET NAME
===> 2 cobol **MENU**
4 SCRN4 **MENU**
3 SCRN3 **MENU**
1 sanchez **MENU**
5 carlos **MENU**
Saludos.
¿Hay alguna manera de ingresar datos mediante teclado por este entorno o toco debe ser estrictamente definido para que pueda ejecutarse?
cuando trabajamos cobol-batch (procesamiento por lotes) que es de lo que trata este curso, es por datos definidos en el entorno.
La parte cobol-cics (que es transaccionalidad) aqui es donde ingresamos los datos, y estos son almacenados en base de datos o son enviados a otro u otros programas mediante interfaces, para que el procesamiento de la información devuelva el resultado esperado. este tipo de programación en cobol no lo vemos en este curso
como ejemplos: cobol-cics, se utiliza cuando vas al cajero, a retirar dinero de tu cuenta, estas ingresando los datos y mantienes una "conversación con el cajero automático"
cobol-batch, es cuando en tu empresa o tu escuela, te depositan tu sueldo o tu beca, aquí de manera calendarizada se efectua esta operación, previamente los datos pre existentes en el sistema.
Saludos.
Por que en el primer SUB sale 0004 y en el segundo SUB 0000, el primer valor no indica ningun tipo de error??
Hay algun tipo de catalogo de errores??
He tenido problemas en las ultimas clases y al parecer es que hay diferencias entre la tecla espaciadora y desplazarse adelante con la flecha del teclado, pues mi código visualmente esta bien, todo corresponde a las columnas y filas donde empieza y termina tal cual lo llevaba el profe, pero me sigue resultando el error, pero al copiar el del profe linea por linea ese si resulto bien.
Creo que este detalle que estoy mencionando no se ha tratado claramente por parte del profe.
Tengo una pregunta, podrías decirnos que codes cuando hacemos el sub son exitosos? el 0000, el 0004,... hay más? a mi en el sub del fichero que subí me dio 0013 por ejemplo.
Cómo estás Carmen?😃
Los únicos códigos de retorno válidos son 000 y 004, cualquier código de retorno diferente a estos, es un error.
Para verificar que ha sucedido en tu jcl, me regalas la salida completa que se encuentra en el spool🙂