Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
¿Qué es COBOL?
Es un lenguaje de programación de alto nivel desarrollado por
primera vez por el Comité CODASYL (Conference
on Data Systems Languages) en 1960. Desde entonces, la
responsabilidad por el desarrollo de nuevas normas COBOL ha
sido asumida por el American National Standards Institute
(ANSI).
Estructura de un programa
Ejemplo:
IDENTIFICATION DIVISION.
PROGRAM-ID. Programa1.
AUTHOR. Ismael.
INSTALLATION. WWW.
REMARKS. Programa de prueba.
ENVIRONMENT DIVISION.
DATA DIVISION.
PROCEDURE DIVISION.
IDENTIFICATION DIVISION.
PROGRAM-ID. Prueba.
PROCEDURE DIVISION.
Inicio.
DISPLAY "Hello world"
STOP RUN.
1. 9. Campos numéricos.
2. A. Campos alfabéticos.
3. X. Campos alfanuméricos.
4. S. Variable con signo.
5. V. Variable con punto decimal.
WORKING-STORAGE SECTION.
77 FECHA PIC 9(8).
77 FECHA-EDIT PIC ZZ/ZZ/ZZZZ.
77 IMPORTE PIC S9(8)V99.
77 IMPORTE-EDIT PIC ZZ.ZZZ.ZZZ,ZZ-.
01 ESTADO PIC 9.
88 SOLTERO VALUE 1.
88 CASADO VALUE 2.
88 DIVORCIADO VALUE 3.
01 DOMICILIO.
02 TIPO PIC XX.
02 NOMBRE PIC X(20).
02 NUMERO PIC 9(4).
Algunos ejemplos:
IDENTIFICATION DIVISION.
PROGRAM-ID. PruebaFechas.
AUTHOR. Ismael.
DATA DIVISION.
WORKING-STORAGE SECTION.
* Formato YYMMDD
01 CurrentDate.
02 CurrentYear PIC 9(4).
02 CurrentMonth PIC 99.
02 CurrentDay PIC 99.
* Formato YYDDD
01 DayOfYear.
02 YearDay PIC 9(3).
* El Tiempo en formato HHMMSSss s = S/100
01 CurrentTime.
02 CurrentHour PIC 99.
02 CurrentMinute PIC 99.
PROCEDURE DIVISION.
Inicio.
ACCEPT CurrentDate FROM DATE YYYYMMDD
ACCEPT DayOfYear FROM DAY YYYYDDD
ACCEPT CurrentTime FROM TIME
DISPLAY "La fecha es: " CurrentDay SPACE CurrentMonth
SPACE CurrentYear
DISPLAY "Día nº. " YearDay " Del año " CurrentYear
DISPLAY "Son las " CurrentHour ":" CurrentMinute
STOP RUN.
Asignación de Datos.
Cálculos Aritméticos.
Sumando.
Restando.
Multiplicando.
MULTIPLY 5 BY resultado
Dividiendo.
COMPUTE resultado = 2 + 3 * 5
COMPUTE resultado = (2 + 3) * 5
Debemos tener en cuenta que cuando hacemos varios cálculos
simultáneos hay un orden de preferencia. Primero se hacen los
operadores que hayan entre paréntesis después las
multiplicaciones y divisiones y por último las sumas y las
restas. Por ese motivo estas dos instrucciones dan un resultado
diferente.
Operadores:
IDENTIFICATION DIVISION.
PROGRAM-ID. Calcular.
AUTHOR. Ismael.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 Num1 PIC 9 VALUE ZEROS.
77 Num2 PIC 9 VALUE ZEROS.
77 Result1 PIC 9(2)V9(2) VALUE ZEROS.
77 Result2 PIC 9(2)V9(2) VALUE ZEROS.
77 Result3 PIC 9(2)V9(2) VALUE ZEROS.
77 Result4 PIC S9(2)V9(2) VALUE ZEROS.
77 Result5 PIC 9(2)V9(2) VALUE ZEROS.
PROCEDURE DIVISION.
Inicio.
DISPLAY "Dame el primer numero: "WITH NO ADVANCING
ACCEPT Num1
DISPLAY "Dame el segundo numero: "WITH NO ADVANCING
ACCEPT Num2
ADD Num1 Num2 GIVING Result3
SUBTRACT Num1 FROM Num2 GIVING Result4
MULTIPLY Num1 BY Num2 GIVING Result1
DIVIDE Num1 INTO Num2 GIVING Result2
COMPUTE Result5 = Num1 /2 * (Num2–7)
DISPLAY "Resultado de la multiplicacion es: ", Result1
DISPLAY "Resultado de la division es: ", Result2
DISPLAY "Resultado de la suma es: ", Result3
DISPLAY "Resultado de la resta es: ", Result4
DISPLAY "Resultado de la expresion es: ", Result5
STOP RUN.
Condiciones
Bloque1
Bloque2
IF variable1 < Variable2 THEN
Bloque3
Bloque4
ELSE
Bloque5
END-IF
Operadores Relacionales.
1. Paréntesis.
2. NOT.
3. AND.
4. OR.
Lista de Valores.
02 Departamento PIC X.
88 Desarrollo VALUE I,L,T.
WORKING-STORAGE SECTION.
01 Caracter PIC X.
88 Vocales VALUE "a", "e", "i", "o", "u".
88 Consonantes VALUE "b", "c", "d", "f", "g", "h".
88 Numeros VALUE "0" THRU "9".
…etc.
ACCEPT Caracter.
IF Vocales THEN
DISPLAY "El digito "Caracter "es una vocal"
ELSE
IF Consonantes THEN
DISPLAY "El digito " Caracter " es una consonante"
ELSE
IF Numeros THEN
DISPLAY "El digito " Caracter " es un numero"
ELSE
DISPLAY "El digito introducido es incorrecto"
END-IF
END-IF
END-IF
…
ACCEPT Caracter.
EVALUATE TRUE
WHEN Vocales DISPLAY "Es una vocal"
WHEN Consonantes DISPLAY "Es una consonante"
WHEN Numeros DISPLAY "Es un número"
WHEN OTHER DISPLAY "Digito incorrecto"
END-EVALUATE
…
EVALUATE Caracter
WHEN "0" Sentencias…
WHEN "1" THRU “9” Sentencias…
WHEN "a" Sentencias…
WHEN "x" Sentencias…
END-EVALUATE
Párrafos y bucles
En casi todos los programa que se pueden crear, existen tareas
que pueden o no ser objeto de repetición. A estos procesos se
les llama bucles o estructuras repetitivas.
IDENTIFICATION DIVISION.
PROGRAM-ID. Parrafos.
AUTHOR. Ismael.
* Esto es un ejemplo usando rutinas o párrafos.
PROCEDURE DIVISION.
Inicio.
DISPLAY "Este es el principio del programa"
PERFORM Rutina2
DISPLAY "Ahora voy a terminar el programa"
STOP RUN.
Rutina1.
DISPLAY "Estoy en la rutina1"
PERFORM Rutina3.
Rutina2.
DISPLAY "Ahora estoy en la rutina2"
PERFORM Rutina1.
Rutina3.
DISPLAY "Ahora estoy en la rutina3".
IDENTIFICATION DIVISION.
PROGRAM-ID. Programa4.
AUTHOR. Ismael.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 NOMBRE PIC X(12).
01 APELLIDO PIC X(12).
PROCEDURE DIVISION.
INICIO.
PERFORM PIDENOMBRE THRU PIDEAPELLIDO 3 TIMES
STOP RUN.
PIDENOMBRE.
DISPLAY "DAME TU NOMBRE:"
ACCEPT NOMBRE.
PIDEAPELLIDO.
DISPLAY "DAME TUS APELLIDOS:"
ACCEPT APELLIDO.
IDENTIFICATION DIVISION.
PROGRAM-ID. Programa4.
AUTHOR. Ismael.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 LI PIC 99 VALUE 0.
PROCEDURE DIVISION.
INICIO.
DISPLAY "PROGRAMA DE SALUDO"
PERFORM SALUDAR UNTIL LI =5
STOP RUN.
SALUDAR.
ADD 1 TO LI
DISPLAY "SALUDO Nº.: ", LI.
IDENTIFICATION DIVISION.
PROGRAM-ID. Programa4.
AUTHOR. Ismael.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 LI PIC 99 VALUE 0.
PROCEDURE DIVISION.
INICIO.
DISPLAY "PROGRAMA DE SALUDO"
PERFORM UNTIL LI =5
ADD 1 TO LI
DISPLAY "SALUDO Nº.: ", LI
END-PERFORM
STOP RUN.
Si observamos un poco, la diferencias radican en que ahora
tiene un “fin del bucle”.
IDENTIFICATION DIVISION.
PROGRAM-ID. Programa4.
AUTHOR. Ismael.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 LI PIC 99 VALUE 0.
PROCEDURE DIVISION.
INICIO.
PERFORM VARYING LI FROM 1 BY 1 UNTIL LI >5
DISPLAY "Saludo Nº.: ", LI
END-PERFORM
STOP RUN.
¿Como trabaja el VARYING?. Lo primero que hace es iniciar la
variable LI al valor que indica el FROM, pregunta por la
condición y si no se cumple realiza la sentencias que hay
dentro. A continuación aumenta el valor de LI según lo que
tenga en el BY y vuelve a preguntar por la condición…y así
sucesivamente hasta que se cumpla la condición. En este caso
realizará las sentencias con los valores 1, 2, 3, 4 y 5.
Ficheros.
Los ficheros son archivos de datos donde se almacenan los
valores que necesitemos de un programa a nivel de registro,
algo parecido como ocurre con los registros de las bases de
datos. Aunque COBOL se puede utilizar para procesar otros
tipos de archivo de datos, se utiliza generalmente sólo para
procesar registros.
…
ENVIRONMNET DIVISION.
INPUT-OUTPUT SECTION.
* Esta claúsula nos permite dar el nombre real del fichero en
el disco.
* También podemos indicar el camino, por ejemplo
“c:\ficheros\agenda.dat”
* El nombre que le asignemos en la SELECT debe coincidir con
el de la FD.
SELECT AGENDA ASSIGN TO “AGENDA.DAT”.
DATA DIVISION.
FILE SECTION.
* El nombre interno que le asignamos se llamara agenda.
FD AGENDA.
* A continuación definimos como se llama el registro y como
se estructura.
01 AGENDA-REG.
02 ORDEN PIC 9(2) VALUE ZEROS.
02 NOMBRE PIC X(15) VALUE SPACES.
02 DIRECCION PIC X(30) VALUE SPACES.
02 CODIGO-POSTAL PIC 9(4) VALUES ZEROS.
02 TELEFONO PIC 9(9) VALUES ZEROS.
Vemos como es la sintaxis de la instrucción SELECT:
identification division.
program-id. Ficheros.
author. Ismael.
environment division.
input-output section.
file-control.
select agenda assign to "agenda.dat"
organization is line sequential.
data division.
file section.
fd agenda.
01 agenda-reg.
02 orden pic 9(2).
02 nombre pic X(15).
02 direccion pic X(30).
02 codigo-postal pic 9(5).
02 telefono pic 9(9).
working-storage section.
77 fin-fichero pic 9 value 0.
procedure division.
Inicio.
open output agenda
perform 3 times
perform agregar
perform limpiar-pantalla
end-perform
perform leer-agenda
close agenda
stop run.
agregar.
display "programa de la agenda"
display "dame el orden: "with no advancing
accept orden
display "dame el nombre: "with no advancing
accept nombre
display "dame la direccion: "with no advancing
accept direccion
display "dame el codigo postal: "with no advancing
accept codigo-postal
display "dame el telefono: "with no advancing
accept telefono
write agenda-reg.
limpiar-pantalla.
* usando esta instrucción, puedo llamar a cualquier comando
del S.O.
CALL "SYSTEM" USING "clear".
leer-agenda.
move 0 to fin-fichero
close agenda
open input agenda
perform until fin-fichero=1
read agenda
at end move 1 to fin-fichero
not at end perform leer-registro
end-read
end-perform.
leer-registro.
display "orden: "orden
display "nombre: "nombre
display "direccion: “ direccion
display "codigo postal: "codigo-postal
display "telefono: "telefono.
Organización y Acceso.
CLOSE nombredelficherointerno…
READ.
as
…
file-control.
select agenda assign to "agenda.dat"
organization is indexed
access mode is sequential
record key is orden
alternate record key is nombre
alternate record key is codigo-postal
file status is estado.
…
Agregar.
…
accept telefono
write agenda-reg
invalid key display "error al guardar"
end-write.
Si nos fijamos bien hay que darle un par de datos más, propio
de los ficheros indexados, como son por ejemplo las claves
principales o alternativas, en el caso de que las hubiere. La
variable con la que trabajamos en la “file status” debemos
declararla en la “Working” como es lógico. También existiría
un pequeño cambio a la hora de escribir los registros, ya que
dependemos de una clave principal para guardar los cambios.
WRITE.
REWRITE.
DELETE.
DELETE nombreinternodelfichero
INVALID KEY instrucciones
NOT INVALID KEY instrucciones
END-DELETE
START.
Screen section.
La Screen Section es una parte de la estructura de Cobol,
encargado de realizar las ventanas o el interfaz del programa
en cuestión. Vamos a ver como funciona y a ver sus sintaxis.
Nivel
identificador
[ JUSTIFIED RIGHT ]
[ BLANK WHEN ZERO ]
[ OCCURS integer-1 TIMES ]
[ BELL | BEEP ]
[ AUTO | AUTO-SKIP | AUTOTERMINATE ]
[ UNDERLINE ]
[ OVERLINE ]
[ SECURE ]
[ REQUIRED ]
[ FULL ]
[ PROMPT ]
[ REVERSE-VIDEO ]
[ BLANK LINE | SCREEN ]
[ ERASE EOL | EOS ]
SIGN IS
TRAILING
LEADING
[ SEPARATE CHARACTER ]
LINE NUMBER IS [ PLUS ]
integer-2
identifier-2
COLUMN NUMBER IS [ PLUS ]
integer-3
identifier-3
FOREGROUND-COLOR IS
integer-4
identifier-4
[HIGHLIGHT]
[LOWLIGHT]
BACKGROUND-COLOR IS
integer-5
identifier-5
[ BLINK ]
PICTURE IS picture-string
USING identifier-6
FROM
identifier-7
literal-2
TO identifier-8
VALUE IS literal-1
Valor. Color.
0 negro
1 azul
2 gris
3 cían
4 rojo
5 naranja
6 amarillo
7 blanco
identification division.
program-id. Ventanas.
author. Ismael.
environment division.
data division.
working-storage section.
77 opcion pic x value spaces.
77 pausar pic x value spaces.
screen section.
* Pantalla inicial
01 principal.
03 line 05 col 10 VALUE "Prueba de Screen Section".
03 line 07 col 10 VALUE "Dame a una tecla y te la
muestro: ".
03 line 17 col 10 VALUE "> ".
03 pic x using opcion.
* Borra la pantalla.
01 Limpiar-pantalla.
03 blank screen.
procedure division.
Inicio.
* Mostramos la pantalla inicial y aceptamos la variable.
display principal
accept principal
* Limpiamos la pantalla
display limpiar-pantalla
display "Has pulsado la tecla "opcion
display "Pulsa cualquier letra para salir"
accept pausar with auto
stop run.
Ahora la cláusula ACCEPT podemos añadirle más opciones:
Tablas.
Una tabla es un conjunto campos contiguos, cuya longitud y
tamaño deben ser iguales, unidos todos bajo un mismo
nombre, de manera que accedemos a ellos de forma individual
a través de uno o varios índices. Vamos a hacer un ejemplo
para verlo mas claro:
…
77 lunes pic 9(04).
77 martes pic 9(04).
77 miercoles pic 9(04).
77 jueves pic 9(04).
77 viernes pic 9(04).
77 sabado pic 9(04).
77 domingo pic 9(04).
…
01 cine.
02 visitas pic 9(04) occurs 7 times.
…
move 121 to visitas(1)
move 82 to visitas(2)
move 42 to visitas(3)
move 61 to visitas(4)
move 425 to visitas(5)
move 247 to visitas(6)
move 879 to visitas(7)
01 semanas-textos.
02 texto pic x(21) value "lunmarmiejueviesabdom".
01 semanas redefines semanas-textos.
02 dias pic x(03) occurs 7 times.
Cine:
01 cine.
02 genero occurs 2 times.
03 visitas pic 9(04) occurs 7 times.
Ahora para cargar o mover datos se necesitan dos índices, uno
para la fila y otro para la columna, de manera que quedaría así:
Cine:
01 tabla.
02 trabajadores occurs 100 times.
03 nombre pic x(30).
03 nif pic x(10).
03 salario occurs 12 times.
05 bruto pic s9(08).
05 neto pic s9(08).
05 gastos occurs 10 times.
07 gasto pic s9(08).
IDENTIFICATION DIVISION.
PROGRAM-ID. PROG001.
AUTHOR ALQUIMISTA.
INSTALLATION. ALQUIMISTA DE CODIGO.
DATE-WRITTEN. 13/04/19.
DATE-COMPILED.
SECURITY. NO ES CONFIDENCIAL.
PROCEDURE DIVISION.
DISPLAY '****************************'.
DISPLAY '** PROGRAMANDO EN COBOL **'.
DISPLAY ' '.
DISPLAY ' HOLA, MUNDO!! '.
DISPLAY '****************************'.
STOP RUN.
Compilamos:
Ejecutamos:
$ ./prog001.exe
Para programar en COBOL debemos respetar la siguiente estructura:
Estructura COBOL
IDENTIFICATION DIVISION.
PROGRAM-ID. PROGRAMA.
AUTHOR AUTOR.
INSTALLATION. EMPRESA.
DATE-WRITTEN. dd/mm/yy.
DATE-COMPILED.
SECURITY. NO ES CONFIDENCIAL.
DATA DIVISION.
WORKING-STORAGE SECTION.
*> COMENTARIO
PROCEDURE DIVISION.
NOMBRE SECTION.
MAIN.
STOP "PAUSE".
STOP RUN.
IDENTIFICATION DIVISION.
PROGRAM-ID. HOLA-MUNDO.
AUTHOR ALQUIMISTA.
INSTALLATION. ALQUIMISTA.
DATE-WRITTEN. 16/04/19.
DATE-COMPILED.
SECURITY. NO ES CONFIDENCIAL.
DATA DIVISION.
WORKING-STORAGE SECTION.
PROCEDURE DIVISION.
DISPLAY '****************************'.
DISPLAY '** PROGRAMANDO EN COBOL **'.
DISPLAY ' '.
DISPLAY ' HOLA, MUNDO!! '.
DISPLAY '****************************'.
STOP RUN.
Compilar:
$ cobc -x -free prog001.cbl -o prog001.exe
Ejecutar:
$ ./prog001.exe
Imprimir en pantalla.
*> MOSTRAR EN PANTALLA
DISPLAY "HOLA, MUNDO".
IDENTIFICATION DIVISION.
PROGRAM-ID. EVALUAR.
AUTHOR ALQUIMISTA.
INSTALLATION. ALQUIMISTA.
DATE-WRITTEN. 17/04/19.
DATE-COMPILED.
SECURITY. NO ES CONFIDENCIAL.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-A PIC 9 VALUE 0.
PROCEDURE DIVISION.
MOVE 3 TO WS-A.
DISPLAY "INTRODUCE NUMERO:".
ACCEPT WS-A.
EVALUATE TRUE
WHEN WS-A = 3
DISPLAY WS-A" es igual a 3"
WHEN WS-A > 2
DISPLAY WS-A" es mayor que 2"
WHEN WS-A < 0
DISPLAY WS-A"es menor a 0"
WHEN OTHER
DISPLAY "Entrada no valida"
END-EVALUATE.
STOP RUN.
*> SUMA
COMPUTE WS-SUMA = WS-NUM-A + WS-NUM-B.
STOP RUN.
IDENTIFICATION DIVISION.
PROGRAM-ID. NOMBRE.
AUTHOR AUTOR.
INSTALLATION. ALQUIMISTA.
DATE-WRITTEN. dd/mm/yy.
DATE-COMPILED.
SECURITY. NO ES CONFIDENCIAL.
*>BLOQUE DE DATOS
DATA DIVISION.
WORKING-STORAGE SECTION.
STOP RUN.
La sintaxis es la siguiente:
BLOQUE.
*> CÓDIGO.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-DATOS-TRAB.
02 WS-NOMBRE-TRAB PIC X(50).
02 WS-APELLIDO-PAT PIC X(50).
02 WS-APELLIDO-MAT PIC X(50).
02 WS-SALARIO PIC S9(05)V99.
DATOS.
DISPLAY "[NOMINA TRABAJADORES]".
DISPLAY "INTRODUCE NOMBRE:".
ACCEPT WS-NOMBRE-TRAB.
DISPLAY "INTRODUCE APELLIDO PATERNO:".
ACCEPT WS-APELLIDO-PAT.
DISPLAY "INTRODUCE APELLIDO MATERNO:".
ACCEPT WS-APELLIDO-MAT.
DISPLAY "INTRODUCE SALARIO:".
ACCEPT WS-SALARIO.
Además podemos asignar ese nuevo valor a una variable ya definida. Así
tendremos:
Nota:
WS-DATOS-TRAB.
Es la variable que guarda todo los datos introducidos por teclado.
PERFORM BLOQUE.
Sería entonces:
PROCEDURE DIVISION.
MAIN SECTION.
PERFORM DATOS.
STOP RUN.
Programa completo:
progtrab.cbl
IDENTIFICATION DIVISION.
PROGRAM-ID. PROG-TRAB.
AUTHOR ALQUIMISTA.
INSTALLATION. ALQUIMISTA.
DATE-WRITTEN. 26/04/19.
DATE-COMPILED.
SECURITY. NO ES CONFIDENCIAL.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-DATOS-TRAB.
02 WS-NOMBRE-TRAB PIC X(50).
02 WS-APELLIDO-PAT PIC X(50).
02 WS-APELLIDO-MAT PIC X(50).
02 WS-SALARIO PIC S9(05)V99.
PROCEDURE DIVISION.
MAIN SECTION.
PERFORM DATOS.
STOP RUN.
DATOS.
DISPLAY "[NOMINA TRABAJADORES]".
DISPLAY "INTRODUCE NOMBRE:".
ACCEPT WS-NOMBRE-TRAB.
DISPLAY "INTRODUCE APELLIDO PATERNO:".
ACCEPT WS-APELLIDO-PAT.
DISPLAY "INTRODUCE APELLIDO MATERNO:".
ACCEPT WS-APELLIDO-MAT.
DISPLAY "INTRODUCE SALARIO:".
ACCEPT WS-SALARIO.
MOVE FUNCTION UPPER-CASE(WS-NOMBRE-TRAB) to
WS-NOMBRE-TRAB.
MOVE FUNCTION UPPER-CASE(WS-APELLIDO-PAT) to
WS-APELLIDO-PAT.
MOVE FUNCTION UPPER-CASE(WS-APELLIDO-MAT) to
WS-APELLIDO-MAT.
DISPLAY WS-DATOS-TRAB.
$ ./progtrab.exe
Links:
https://alquimistadecodigo.blogspot.com/2019/04/cobol-en-un-
vistazo.html
https://alquimistadecodigo.blogspot.com/2019/04/cobol-estructura.html
https://alquimistadecodigo.blogspot.com/2019/04/instalando-open-
cobol.html
Is Cobol a dead language?
Muchos consideran que los lenguajes pueden morir, pero quizás se
equivocan. Los lenguajes no mueren si existe alguien que los usa o
sigue usando. Ya sea el vetusto Fortran y/o el lenguaje C e incluso el
BASIC son lenguajes que se siguen usando en la actualidad. No es
sorpresa encontrar ofertas laborales donde solicitan programadores con
conocimiento en Cobol.
IDENTIFICATION DIVISION.
PROGRAM-ID. ESQUELETO.
AUTHOR ALQUIMISTA.
INSTALLATION. ALQUIMISTA.
DATE-WRITTEN. 06/05/19.
DATE-COMPILED.
SECURITY. NO ES CONFIDENCIAL.
DATA DIVISION.
WORKING-STORAGE SECTION.
*> COMENTARIO
PROCEDURE DIVISION.
DISPLAY 'DEBES BUSCAR...¡BUSCA!'.
STOP RUN.
Links:
https://www.quora.com/Is-Cobol-a-dead-language
¿Qué debemos hacer para aprender COBOL y no morir en el
intento?
IDENTIFICATION DIVISION.
*> AQUÍ VA INFORMACIÓN DE PROGRAMA Y EL AUTOR
STOP RUN.
*> SUMA
COMPUTE WS-RESULTADO = WS-NUM-a + WS-NUM-B.
*> RESTA
COMPUTE WS-RESULTADO = WS-NUM-a - WS-NUM-B.
*> PRODUCTO
COMPUTE WS-RESULTADO = WS-NUM-a + WS-NUM-B.
*> POTENCIACION
COMPUTE WS-RESULTADO = WS-NUM-a ** WS-NUM-B.
*> LONGITUD DE UNA CADENA
COMPUTE WS-LONGITUD = FUNCTION LENGTH(WS-CADENA).
calculos.cbl
IDENTIFICATION DIVISION.
PROGRAM-ID. MIPROGRAMA.
AUTHOR ALQUIMISTA DE CODIGO.
INSTALLATION. ALQUIMISTA DE CODIGO.
DATE-WRITTEN. 23/06/19.
DATE-COMPILED.
SECURITY. NO ES CONFIDENCIAL.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-NUM-A PICTURE 9(5).
01 WS-NUM-B PICTURE 9(5).
01 WS-VOLUMEN PICTURE 9(9).
01 WS-AREA PICTURE 9(9).
STOP RUN.
$ ./test.exe
IF-ELSE
Si condición entonces en COBOL. En cualquier lenguaje deprgramación
existen sentencias que se cumplen si cumplen alguna condición
previamente definida. Imaginemos un escenario donde el usuario
introduce un nombre (cadena ó STRING) en el programa.En COBOL,
ACCEPT se usa para introducir datos.
*> STORAGE
DATA DIVISION.
WORKING-STORAGE SECTION.
*> DEFINIR UNA VARIABLE 'STRING'
01 WS-NOMBRE PICTURE X(10).
Programa completo:
condicional.cbl
IDENTIFICATION DIVISION.
PROGRAM-ID. TEST6.
AUTHOR ALQUIMISTA DE CÓDIGO.
INSTALLATION. ALQUIMISTA DE CÓDIGO.
DATE-WRITTEN. 25/06/19.
DATE-COMPILED.
SECURITY. NO ES CONFIDENCIAL.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-NOMBRE PICTURE X(10).
STOP RUN.