Вы находитесь на странице: 1из 75

Introduccion al lenguaje cobol

por Cesar Rodriguez


Este tutorial es gratuito, puedes distribuirlo libremente
siempre que sea en forma gratuita y en forma completa sin
alteracion alguna. La distribucion en cualquier medio de
este tutorial comercialmente queda estrictamente prohibida
sin un consentimiento por escrito del autor.

© Copyright 2003-2005, todos los derechos reservados por Rogelio


Cesar Rodriguez Cervantes

Informacion de contacto:
e-mail 1 : cesarrdz@gmail.com
e-mail 2 : cesarrdz@excite.com
Sito web: http://cesar.crbyte.com

Visita:
http://cesar.crbyte.com para mas tutoriales de C++,
lenguaje C, Base de datos relacionales, programas con
codigo fuente, etc.
http://crbyte.com para juegos de computadora que puedes
bajar gratis
CONTENIDO
Prefacio 4

Prefacio de la primera edición 5

Capitulo 1 Introduccion general 6


COBOL 6
Programación Estructurada 6
Compilador de COBOL 7
Reglas de Codificación para el Compilador
de Microsoft 7
Capitulo 2 Organización de Datos y Estructura
del Lenguaje 8
Estructura Básica de un Programa Cobol 8
Organización de los Datos 10
La División de Identificación 13
La División del Medio Ambiente 15
La División de Datos 17
La División de Procedimientos 20

Capitulo 3 Operaciones y Control de Flujo 24


Instrucción MOVE 24
Operaciones Aritméticas 28
Estatutos Condicionales y Ciclos 35
Manejo de Tablas 41

Capitulo 4 Organización de Archivos 44


Secuenciales 44
Creación de Archivos 46
Consultas 47
Agregación de Registros 48
Modificaciones al Archivo 49
Borrado de Registros 51
Altas, Bajas, Cambios y Consultas
Capitulo 5 Edicion de Reportes 54
Funciones de Edición 54
Instrucción COPY 60
Dispositivo SORT 61
Tipos de Impresión de Reportes 62

Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 2


Apéndice A Organización de Archivos Secuenciales
Indexados 71

Apéndice B Ejemplo de organización de Archivos


Relativos 73

Bibliografia 75

Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 3


Prefacio
Este material fue impreso y publicado originalmente en el
Tecnológico de Piedras Negras, Coahuila, México, en febrero
de 1993, como un proyecto de impresión y publicación de
apuntes. Debido a que actualmente esta fuera de
circulación, me he permitido rescatarlos y publicarlos en
forma electrónica.

En esta edición electrónica he corregido varios detalles


asi como tambien he incluido la sugerencia de varios
ejercicios que surgieron después impartir la clase durante
varios semestres y he tenido como notas en los margenes de
la edición impresa durante todo este tiempo.

A pesar que no he reeditado los programas de ejemplo con


una versión mas nueva de algun compilador de COBOL, espero
que esta publicación sea de utilidad como medio de
aprendizaje.

Aunque actualmente no estoy envuelto con el lenguaje, con


el cual estuve programando de tiempo completo por mas de
dos años e impartiendo la clase por otros tantos mas, sigo
creyendo que es un excelente lenguaje de programación.

Vale hacer notar que la edicion impresa solo se llamaba


Lenguaje COBOL.

Como dato curioso, la creación original de la primera


edición nacio a partir de que no consegui libros de COBOL
en aquel entonces que no hablaran de tarjetas perforadas.

Gracias

Ing. Rogelio Cesar Rodríguez Cervantes


Agosto 2002

Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 4


Prefacio de la primera edición
He tratado de incluir material del lenguaje tanto como sea
posible, la mayoría de las palabras reservadas de cobol son
mencionadas con una descripción del formato general, y
ejemplos de las opciones de mas uso. Sin embargo algunas de
estas, son vistas solo mediante ejemplos.

El lenguaje COBOL es muy extenso y poderoso, sobrevivió y


adoptó la tecnologia estructurada y ahora está haciendo
esfuerzos para adaptarse a la "nueva" tecnologia; la
Orientada a Objetos.

Ing. R. César Rodríguez Cervantes


Febrero de 1993

Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 5


Capitulo 1
Introducción general

COBOL
Abreviación de COmmon Business Oriented Languaje (Lenguaje
común orientado a aplicaciones comerciales).

Fué creado en 1959 con el propósito de que una persona que


no pertenezca al área de procesamiento de datos lo pueda
entender; el ANSI a desarrollado un COBOL estandar; esto
significa que el cobol es el mismo en diferentes tipos de
computadoras.

Programacion estructurada
Consiste en segmentar los programas en secciones
independientes o módulos.

Objetivos de la Programación Estructurada


1. Simplificar la depuración.
2. Facilitar la codificación de problemas largos y
complejos.
3. Hacer los programas mas eficientes.
4. Hacer que los programas sean mas fáciles de leer y
comprender.

Técnicas Usadas en la Programación Estructurada


El objetivo principal es reducir el numero de puntos de
entradas y salidas en un programa.
La principal técnica es reducir el uso del GO TO.
Cada sección de un programa debe manejarse independiente,
se codifica una rutina principal, cuando se necesita una
rutina una instrucción PERFORM indica que esa rutina
aparecerá en otra parte del programa.
Otra técnica es especializar las rutinas.

Enfoque TOP-DOWN (Arriba-Hacia-Abajo)


La primera serie de instrucciones representa la rutina
principal seguida por las rutinas intermedias y después las
rutinas menores. Con este enfoque no es necesario saltar de
arriba hacia abajo para seguir la lógica; esto permite el
diseño modular.

Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 6


Compilador de COBOL
El compilador que utilize para los programas de ejemplo es
el compilador de COBOL de Microsoft versión 2.0

Reglas de codificacion para el compilador de


microsoft
El compilador interpreta el código fuente en cuatro áreas
de cada linea fuente:

Area Columnas
De Numeros de Secuencia 1-6
De Indicación 7
Area A 8-11
Area B 12-72

El compilador ignora el contenido del área de numeros de


secuencia, y el contenido después de la columna 72.

1 2 3 4 5 6 7 8 11 12 72 73

Area de
Numeros de area A area B
Secuencia

^ ^
Area de Indicación Area Ignorada

Area A es reservada para los siguientes elementos:


division
section
encabezados de párrafo
descripción de archivos
indicadores de entrada (FD y SD)
numeros de nivel 01 y 77

Columna 7 comentarios empezando con un *

Area B es reservada para los nombres de archivos asociados


con los indicadores FD o SD y la clausula SELECT, numeros
de nivel 66, 88 y 02-49.

Lineas de continuación con - en la columna 7

Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 7


Capitulo 2
Organizacion de datos y estructura del
lenguaje cobol

Estructura basica de un programa cobol


Todos los programas COBOL consisten en cuatro divisiones
separadas. Cada división tiene una función especifica.

DIVISIONES
Nombre Propósito
IDENTIFICATION DIVISION Sirve para identificar el
programa a la computadora
ENVIRONMENT DIVISION Describe el equipo de cómputo
que se utilizará por un
programa especifíco
DATA DIVISION Describe los formatos de
entrada y
salida a ser procesados por
el programa. También define
Cualquier constante o área de
trabajo para procesar los
datos
PROCEDURE DIVISION Contiene las instrucciones
para leer datos de entrada,
procesarlos y crear
resultados

Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 8


Ejemplo: C0101
*-
* C0101
* Prog0101.cob
* Programa para mostrar las divisiones de cobol
* Fecha:
* Fecha Ultima Modificacion: 08/FEB/93
*-
identification division.
program-id. prog0101.
environment division.
data division.
procedure division.
inicio.
display "Este es mi primer programa en COBOL".
stop run.

Ejercicio sugerido:
Realizar un programa que contenga sus datos personales en
la Identification División, ademas los despliegue en la
pantalla.

Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 9


Organizacion de los datos
Archivo
Clasificación general de los datos que pertenecen a una
categoría especifica.

Registro
Unidad de datos dentro de un archivo que contiene
información de una naturaleza especifica.

Campo
Grupo de columnas o posiciones consecutivas reservadas para
una clase especifica de datos.

Datos agrupados
Campo que esta subdividido.

Datos elementales
Campo que no esta subdividido.

Tipos de Variables
1. alfabetico
Un campo que puede contener letras o blancos.

2. alfanumerico
Un campo que puede contener cualquier carácter válido;
puede contener combinaciones de letras, dígitos y
caracteres especiales.

3. numerico
Cualquier campo que solamente contenga dígitos y signos
"+" o "-".

Reglas para formar nombres de variables


1. 1 a 30 caracteres.
2. Solo letras, dígitos y guiones.
3. No deben comenzar o terminar con guión.
4. Sin espacios intermedios
5. Debe contener al menos una letra.
6. No puede ser una palabra reservada en COBOL.

Ejemplos validos:
FECHA-ENT, NOMBRE, IMPORTE1

Ejemplos no validos: (Son palabras reservadas)


PERFORM, ACCEPT, DISPLAY

Nota: Las palabras reservadas son aquellas que forman el


lenguaje cobol.
Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 10
Tipos de datos
1. Datos variables
Datos que son cambiados dentro de un programa.

Archivos }
Registros } Definidos por los nombres de datos
Campos }

2. Constantes
Datos que permanecen fijos dentro del programa; los datos
fijos se requieren para procesar lo que no depende de las
entradas del sistema.

Tipos de constantes
1. Constante numérica
Una constante usada en la PROCEDURE DIVISION para las
operaciones aritméticas.

2. Constante no numérica
Una constante usada en la PROCEDURE DIVISION para todas las
operaciones excepto las operaciones aritméticas.

3. Constante figurativa
Una palabra reservada COBOL.

Ejemplo:
ZERO o ZEROES o ZEROS
SPACE o SPACES

Reglas para formar constantes numéricas


1. Un máximo de 18 dígitos.
2. Un signo positivo o negativo a la izquierda del número.
3. Un punto decimal dentro de la constante. El punto
decimal sin embargo puede no ser el último carácter de
la constante.

Ejemplos validos:
+15.8
-387.58
42
.09
-.97

Ejemplos no validos:
15.+8

Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 11


Reglas para formar constante no numéricas
1. La constante debe estar entre comillas.
2. Un máximo de 120 caracteres, incluyendo espacios.
3. Cualquier carácter del conjunto de caracteres COBOL
excepto la comilla.

Ejemplo:
"código"
"ABC 123"
"1,000"
"MENSAJE"
"$100.00"

Constantes figurativas
Ejemplo:
move zeros to total.
move spaces to nombre.

Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 12


Division de identificacion
Identification division
Los párrafos deben comenzar en la columna 8, o margen A.

1. Los párrafos dentro de la IDENTIFICATION DIVISION


informan al lector de la naturaleza del programa.

2. La IDENTIFICATION DIVISION y sus párrafos no afectan la


ejecución del programa.

3. El primer elemento a codificar en un programa es:


IDENTIFICATION DIVISION.

4. El segundo elemento a codificar en un programa es:


PROGRAM-ID. Nombre-del-programa.

5. El nombre del programa puede contener letras, dígitos y


guiones solamente, puede consistir de un máximo de 30
caracteres, pero solo los 8 primeros se utilizan por la
computadora y, por lo tanto deben ser únicos.

6. Los demás párrafos e información de identificación son


opcionales.

Los párrafos que se pueden incluir son:


AUTHOR. Nombre del autor.
INSTALLATION. Instalación.
DATE-WRITTEN. Fecha de escritura del programa.
DATE-COMPILED. Fecha en que se compila el programa.
SECURITY. Medidas de seguridad al correr el programa.

Nota: Estos párrafos son tratados como comentarios.

Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 13


Ejemplo: C0102
*-
* Programa para mostrar los párrafos de la
* identification division.
* Revision: 08/FEB/93
*-
identification division.
program-id. prog0102.
author. R. CESAR RODRIGUEZ CERVANTES.
installation. Centro de Computo C.S.
date-written. 31 Agosto de 1991.
date-compiled.31 Agosto de 1991.
security. prog. para clase de identification division.
environment division.
data division.
procedure division.
inicio.
display "Este es mi segundo ".
display "programa en COBOL".
stop run.

Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 14


Division de medio ambiente
Environment division
Proporciona información concerniente al equipo a ser usado
en el programa. Los asientos de la ENVIRONMENT DIVISION
dependen de la máquina.

A diferencia de las otras divisiones de un programa COBOL


los asientos de esta división dependerán de:
1. La computadora.
2. Los dispositivos específicos usados en el programa.

La ENVIRONMENT DIVISION está compuesta por dos secciones:


CONFIGURATION SECTION, la sección de configuración.
INPUT-OUTPUT SECTION, la sección de entrada-salida.

La CONFIGURATION SECTION proporciona los datos de la


computadora en la cual se compilará y se ejecutará el
programa.

La INPUT-OUTPUT SECTION proporciona información


concerniente a los dispositivos específicos usados en el
programa.

La ENVIRONMENT DIVISION es la única división de un programa


COBOL que cambiará sustancialmente si el programa se va a
correr en computadoras diferentes.

Formato de la division de medio ambiente de microsoft cobol


La CONFIGURATION SECTION es opcional y puede contener los
sig. párrafos, deben comenzar en la columna 8, o margen A.:

SOURCE-COMPUTER. Id. de la comp.


donde se codificó prog. fuente.

OBJECT-COMPUTER. Id. de la comp.


donde se va a ejecutar el prog.

SPECIAL-NAMES.
Asigna nombres definidos por el usuario para
implementar nombres estandar, como la impresora. Este
párrafo puede ser usado para cambiar los caracteres de
edición.

Nota: SOURCE-COMPUTER y OBJECT-COMPUTER son usados como


comentarios (documentación).

Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 15


La INPUT-OUTPUT SECTION es requerida cuando el programa usa
archivos y contiene los siguientes párrafos:

File-control
Define los nombres de los archivos que van a hacer
procesados y los asocia a cada uno de ellos con un
dispositivo especifico de entrada o salida.

I-O-control
Es opcional; especifica el punto donde se establece la
operación RERUN, esto es, indica los archivos que van a
compartir el mismo espacio físico del buffer.

Ejemplo FILE-CONTROL:
FILE-CONTROL.
SELECT archivo ASSIGN TO DISK.
SELECT reporte ASSIGN TO PRINTER.

Ejemplo: C0103
*-
* Programa para mostrar los párrafos de la
* environment division.
* Revision: 08/FEB/93
*-
identification division.
program-id. prog0103.
author. R. CESAR RODRIGUEZ CERVANTES.
installation. Centro de Computo C.S.
date-written. 31 Agosto de 1991.
date-compiled.31 Agosto de 1991.
security. Prog. para clase de environment division.
environment division.
configuration section.
source-computer. PC-KLH195.
object-computer. PC-KLH195.
data division.
procedure division.
inicio.
*-
* Para desplegar varias constantes y/o variables con un
* mismo DISPLAY es necesario separarlos con un espacio.
* la coma es opcional. Lo importante es el espacio.
*-
display "Este es mi programa No: ", "3", " en COBOL".
stop run.

Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 16


Division de datos
Data division
Define y describe los campos de datos que serán usados,
creados, o producidos por el programa.
Contiene los siguientes párrafos:

File section
Define todas las áreas de datos que son parte de los
archivos de entrada o salida.

Working-storage section
Prepara la memoria para los campos que no son parte de la
entrada o salida, pero que se requieren para el proceso.
Estas incluyen constantes, áreas de trabajo, áreas de paso,
etc.

Report section
(El compilador de IBM Mainframe o Mini)
Describe los formatos específicos de los reportes que son
generados por el dispositivo Generador de Reportes. Esta
sección se usa solo para tipos específicos de proceso de
reportes y generalmente no se usa en la mayoría de los
programas de COBOL.

Linkage section
(El compilador de Microsoft)
Esta es necesaria solo si el programa es llamado desde otro
programa, y la sentencia CALL del programa que lo llama
contiene el párrafo USING. Esta sección describe los datos
que son definidos en el prog. que lo llama y son
referenciados por ambos programas.

Screen section
(El compilador de Microsoft)
Es un extensión al COBOL hecha por Microsoft para
almacenamiento y organización de datos mediante pantallas
interactivas.

Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 17


Working-storage section
La descripción de los campos de almacenamiento deben
hacerse por niveles del 01 al 49, en el nivel 77, y el
nivel 88.

El nivel 01 es el nivel de mayor jerarquía y se codifica


en el margen A.

1. Todos los campos en un nivel 02 están subordinados o son


parte del campo a nivel 01, los del nivel 03 son parte
del campo a nivel 02 y al vez parte del campo a nivel
01, etc; y se deben codificar en el margen B.

2. Todos los campos que se codifican en el mismo nivel son


independientes.

Ejemplo:
01 fecha.
02 anio...
02 mes...
02 dia...

Los datos agrupados se definen por un indicador de nivel y


terminan con un punto.

Nivel 77 (Campos no contiguos)


Algunos campos y constantes no necesitan ser parte de una
relación jerárquica en el programa. Estos campos no
necesitan ser agrupados y no necesitan ser subdivididos.

Los datos Elementales son aquellos campos que no tienen


subdivisiones posteriores y se deben describir en detalle.

Clausula PICTURE
1. Especifica el tipo de datos contenido dentro del dato
elemental
2. Indica el tamaño del campo.

Caracteres Empleados en la Clausula de PICTURE


A alfabético
X alfanumérico
9 numérico

Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 18


Ejemplo: C0104
*-
* Definicion de datos en la working-storage
* Revision: 08/FEB/93
*-
identification division.
program-id. prog0104.
author. R. CESAR RODRIGUEZ CERVANTES.
installation. Centro de Computo C.S.
date-written. 31 Agosto de 1991.
date-compiled.31 Agosto de 1991.
security. Prog. para la clase de environment division.
environment division.
configuration section.
source-computer. PC-KLH195.
object-computer. PC-KLH195.
data division.
working-storage section.
77 pag picture 99.
01 fecha.
02 anio picture 99.
02 mes picture 99.
02 dia picture 99.
01 nombre picture AAAAAAAAAAA.
01 dir picture XXXXXXXXXXXXXXXXXXXXXXX.
procedure division.
inicio.
display "**** A G E N D A ****".
display "Pagina: ".
accept pag.
display "Nombre: ".
accept nombre.
display "Direccion: ".
accept dir
display "Cumpleanios (aammdd): ".
accept fecha.
display "Naciste en: ", dia, "/", mes, "/", anio.
stop run.

Ejercicio sugerido:
Realice un programa que ingrese un nombre separándolo
por:
Nombre
Apellido paterno
Apellido materno

Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 19


Division de procedimiento
Procedure division
Contiene todas las instrucciones que serán ejecutadas por el
computador. Toda la lógica del programa está contenida
dentro de estas instrucciones.

Parrafos
La PROCEDURE DIVISION está dividida en parrafos. Cada
párrafo define una rutina independiente, o serie de
instrucciones, diseñada para efectuar una función
especifica.

Cada parrafo esta dividido en instrucciones u


oraciones. Una instrucción es, para la computadora, una
instruccion COBOL. Una Oración es una instrucción o grupo de
instrucciones dentro de un párrafo. Cada instrucción, a
menos que pruebe una condición, empieza con un verbo u
operación.

Usualmente, una instrucción termina con un punto, el cual


debe estar seguido por un espacio minimo.
Todas las instrucciones se ejecutan en el orden escrito, a
menos que una instruccion PERFORM transfiera control a otra
parte del programa.

Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 20


Ejemplo: C0105
*-
* Ejemplo de parrafos en la procedure division
* Revision: 08/02/93
*-
identification division.
program-id. prog0105.
author. R. Cesar Rodriguez Cervantes.
environment division.
data division.
working-storage section.
01 alumno.
02 a-num-ctl picture xxxxxxxxx.
02 a-nombre picture A(30).
02 a-num-mat picture 9.
01 materia.
02 m-num-mat picture 9.
02 m-nombre picture a(30).
procedure division.
titulo.
display "**** Control de Materias ****".
alumnos.
display "Numero de Control: ".
accept a-num-ctl.
display "Nombre: ".
accept a-nombre.
display "Numero de Materia: ".
accept a-num-mat.
materias.
move a-num-mat to m-num-mat.
display "Numero de Materia: ", m-num-mat.
display "Materia: ".
accept m-nombre.
fin.
stop run.

Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 21


Instrucción PERFORM simple
Permite la ejecución de una rutina especifica desde uno o
mas puntos del programa.

Formato:
PERFORM nombre-parrafo.

La instrucción PERFORM:
1. Ejecutará todas las instrucciones en el parrafo nombrado.
2. Transferirá control al siguiente paso en secuencia que
sigue a la instrucción.

Ejemplo: C0106
*-
* Uso de la instruccion perform
*-
identification division.
program-id. prog0105.
author. R. Cesar Rodriguez Cervantes.
environment division.
data division.
working-storage section.
01 alumno.
02 a-num-ctl picture x(10).
02 a-nombre picture A(30).
02 a-num-mat picture 9.
01 materia.
02 m-num-mat picture 9.
02 m-nombre picture A(30).
procedure division.
inicio.
perform titulo.
perform alumnos.
perform materias.
fin.
stop run.
titulo.
display "**** Control de Materias ****".
alumnos.
display "Numero de Control: ".
accept a-num-ctl.
display "Nombre: ".
accept a-nombre.
display "Numero de Materia: ".
accept a-num-mat.
materias.
move a-num-mat to m-num-mat.
display "Numero de Materia: ", m-num-mat.
display "Materia: ".
accept a-nombre.

Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 22


Ejemplo: C0107
*-
* Uso de la instruccion perform
*-
identification division.
program-id. prog0107.
author. R. Cesar Rodriguez Cervantes.
environment division.
data division.
working-storage section.
01 cliente.
02 num-cte picture 99.
02 nombre picture A(20).
02 dir picture x(30).
02 credito picture 999999v99.
procedure division.
inicio.
perform titulo.
perform pide-cte.
display (11, 30) "Cliente Dado de Alta".
fin.
stop run.
titulo.
display (5, 20) "**** Catalogo de Clientes ****".
pide-cte.
display (6, 15)"Numero de Cliente:".
accept (6, 35) num-cte.
display (7, 15) "Nombre:".
accept (7, 35) nombre.
display (8, 15) "Direccion:".
accept (8, 35) dir.
display (9, 15) "Limite de Credito:"
accept (9, 35) credito.

Punto decimal implícito


En la siguiente línea indicamos con la "V" que el campo
tiene seis posiciones enteras y dos decimales, no hay un
punto decimal dentro del campo; solo le indicamos a la
computadora que implique su existencia en todas las
operaciones.
02 credito picture 999999v99.

Ejercicio sugerido:
Realize un programa utilizando:
01 ventas.
02 fecha.
03 anio picture 99.
03 mes picture 99.
03 dia picture 99.
02 cajero picture A(30).
02 cantidad picture 9(6)v99.
La captura de datos debe ser centrado en la pantalla

Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 23


Capitulo 3
Operaciones y control de flujo

Instruccion MOVE
MOVE campo-emisor TO campo-receptor.

Formato:
{ nombre-de-dato-1 }
MOVE { constante } TO nombre-de-dato2
{ constante figurativa }

El contenido del campo-emisor se copia en el campo-


receptor; al final de la operacion ambos campos tienen el
mismo contenido.

MOVE numerico
1) Al mover un campo entero emisor al campo receptor, el
movimiento es de izquierda a derecha. Todas las
posiciones de orden superior (las de extrema izquierda)
enteras del campo receptor seran llenadas con ceros.

2) Al mover la parte decimal del campo emisor al campo


receptor, el movimiento es de derecha a izquierda,
comenzando en el punto decimal implicito. Posiciones de
orden inferior (de extrema derecha) no llenadas se
llenan con ceros.

Ejemplo:
campo1 picture 999
campo2 picture 9(4)

campo1 campo2
1 2 3 4 5 6 7

MOVE campo1 TO campo2

campo1 campo2
1 2 3 0 1 2 3

Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 24


Ejemplo:
campo1 picture 999
campo2 picture 99

campo1 campo2
0 1 2 3 4

MOVE campo1 TO campo2

campo1 campo2
0 1 2 2 2

Ejemplo:
campo1 picture 99v99
campo2 picture 99v999

campo1 campo2
1 2 3 4 5 6 7 8 9
^ ^

MOVE campo1 TO campo2

campo1 campo2
1 2 3 4 1 2 3 4 0
^ ^

Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 25


MOVE alfanumerico
Los datos se transmiten del campo emisor al campo receptor
de izquierda a derecha. Posiciones de orden inferior del
campo receptor, que no sean llenadas, son reemplazadas con
espacios.

Ejemplo:
campo1 picture XXX
campo2 picture X(4)

campo1 campo2
A B C D E F G

MOVE campo1 TO campo2

campo1 campo2
A B C A B C

El efecto de la operación anterior hubiera sido el mismo si


se hubiera efectuado lo sig:

MOVE 'ABC' TO campo2

Ejemplo:
campo1 picture XXX
campo2 picture XX

campo1 campo2
A B C

MOVE campo1 TO campo2

campo1 campo2
A B C A B

El efecto de la operación anterior hubiera sido el mismo si


se hubiera efectuado lo sig:

MOVE 'ABC' TO campo2

Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 26


Datos en grupo
Todos los datos en grupo, aún aquellos con campos
numericos, se tratan como campos alfanumericos.

Ejemplo: C0201
* Uso de la instruccion move
*-
identification division.
program-id. prog0201.
author. R. Cesar Rodriguez Cervantes.
date-written. 08/feb/93.
date-compiled. 08/feb/93.
environment division.
data division.
working-storage section.
77 sigue pic x.
01 cliente.
02 num-cte pic 99.
02 nombre pic A(20).
02 dir pic x(20).
02 dir-ent pic x(10).
02 saldo pic 9(4).
01 cant pic 9(3).
01 precio pic 99.
01 total pic 999.
procedure division.
inicio.
perform titulo.
move space to sigue.
move 10 to precio.
move 0 to cant.
move 0 to total.
perform pide-vta.
display (11, 30) "Saldo: ", saldo.
display (15, 20) "Presiona ENTER para continuar"
accept sigue.
fin.
stop run.
titulo.
display (5, 20) "**** VENTAS ****".
pide-vta.
display (6, 15)"Numero de Cliente:".
accept (6, 35) num-cte.
display (7, 15) "Nombre:".
accept (7, 35) nombre.
display (8, 15) "Direccion:".
accept (8, 35) dir.
move dir to dir-ent.
display (10, 15) "Cantidad:".
accept (10, 35) cant.
multiply cant by precio giving total.
move total to saldo.

Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 27


Tabla de operaciones MOVE

Campo Receptor
Campo Numerico Alfabetico Alfanumerico Agrupado
Emisor
Numerico si no si si
Alfabetico no si si si
Alfanúmerico no indefinidos si si
ZEROS si no si si
SPACES no si si si
Agrupado no si si si

Operaciones aritmeticas
Instruccion ADD
Suma

Formato 1:
{variable } [variable ]
ADD {constante},[constante],...TO (variable_resultado)

Ej:
ADD 10 TO n
ADD 10,20 TO n

Formato 2:
{variable } [variable ]
ADD {constante},[constante],...GIVING (variable_resultado)

Ej:
ADD 10, 20 GIVING n
ADD 10, b, 3 GIVING n

Reglas para adición


1. Todas las constantes y las variables deben ser numericas.
2. La variable resultante, que sigue a la palabra TO o a la
palabra GIVING, debe ser una variable y no puede ser
una constante.
3. Cuando se usa el formato TO, todas las variables se
suman entre si incluyendo la variable_resultado.
4. Cuando se usa el formato GIVING, variable_resultado no
es parte de la operación ADD y solo sirve como campo
donde se coloca la suma.
5. En ningún caso se pueden especificar las palabras TO y
GIVING en la misma instrucción.

Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 28


Instruccion SUBTRACT
Resta.

Formato 1:
[variable ] [variable ]
SUBTRACT [constante],[constante] ...FROM
(variable-resultado)

Ej:
SUBTRACT 10 FROM n
SUBTRACT 10, 20, b FROM n

Formato 2:
[variable ] [variable ]
SUBTRACT [constante],... FROM [constante]
GIVING (variable-resultado)

Ej:
SUBTRACT 10 FROM b GIVING n
SUBTRACT 10, 20 FROM b GIVING n

Reglas para restar


1. Todas las constantes y las variables deben ser numericas.
2. La variable resultante, que sigue a la palabra FROM en
el formato 1 o a GIVING en el formato 2, debe ser una
variable y no puede ser una constante.
3. Al usar el formato 1 todas las variables antes del FROM
se suman entre si y la suma se resta a la variable-
resultado. El resultado quedara en la variable-
resultado, y las demas variables no se alteran.
4. Cuando se usa el formato 2: GIVING, la operacion
efectuada es la misma que en la regla 3, pero la
respuesta queda en variable_resultado que esta despues
del GIVING.

Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 29


Instruccion Multiplicacion y División

MULTIPLY (Multiplicación)

Formato 1:
{variable-1}
MULTIPLY {constante } BY (variable-2)

Ejemplo:

MULTIPLY 100 BY existencia


MULTIPLY cantidad BY precio

Formato 2:
{variable-1 } {variable-2 }
MULTIPLY {constante-1} BY {constante-2} GIVING (variable-3)

Ejemplo:

MULTIPLY 100 BY existencia GIVING n


MULTIPLY cantidad BY precio GIVING total

DIVIDE (División)

Formato 1:
{variable-1}
DIVIDE {constante } INTO (variable-2)

Ejemplo:

DIVIDE 100 INTO existencia


DIVIDE cantidad INTO precio

Formato 2:
{variable-1 } [BY ] {variable-2 }
DIVIDE {constante-1} [INTO] {constante-2}
GIVING (variable-3) [ROUNDED][REMAINDER (variable-3)]

Ejemplo:

DIVIDE 100 INTO existencia GIVING n


DIVIDE cantidad BY precio GIVING total

Opción de error en tamaño de resultado


Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 30
Formato:
{Instruccion} {Instruccion}
{Aritmetica } [ON SIZE ERROR] {Imperativa }

Ejemplo:

DIVIDE a INTO c ON SIZE ERROR PERFORM rutina-error.

Ejemplo: C0202
*-
* Operaciones aritmeticas con las instrucciones
* saca prom. general de alumnos menos un por ciento
* segun las faltas del grupo.
* Revision: 08/feb/93
*-
identification division.
program-id. prog0202.
author. R. Cesar Rodriguez Cervantes.
date-written. sep/91.
date-compiled. 08/feb/93.
environment division.
data division.
working-storage section.
77 prom-gral pic 999v99.
77 num-al pic 99.
77 sigue pic x.
01 calif pic 9(3)v99.
01 faltas pic 9(2).
01 menos pic 9(3)v9(2).
01 alumno.
02 a-num-ctl pic x(10).
02 a-nombre pic A(25).
02 a-calif pic 999v9(2).
procedure division.
inicio.
move 0 to prom-gral, num-al, faltas.
move 0 to calif.
move "S" to sigue.
perform titulo.
perform alumnos.
perform promedio.
display " ".
display "Presiona ENTER para continuar".
accept sigue.
fin.
stop run.
titulo.
display "**** Control de Materias ****".
alumnos.
add 1 to num-al.
display "Numero de Control: ".
Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 31
accept a-num-ctl.
display "Nombre: ".
accept a-nombre.
display "Calificacion: ".
accept a-calif.
add a-calif to calif.
display "Otro Alumno? (S/N): ".
accept sigue.
if sigue = "S" or sigue = "s"
go to alumnos.
promedio.
Display "Numero de Faltas (por grupo): ".
accept faltas.
multiply faltas by 0.1 giving menos.
divide num-al into calif giving prom-gral.
subtract menos from prom-gral.
Display "Promedio General: ", prom-gral.
Display "Por ciento menos por faltas: " menos.

Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 32


Instrucción COMPUTE
La instrucción COMPUTE usa simbolos aritmeticos en lugar de
instrucciones aritmeticas.

Formato:
{constante }
COMPUTE (variable) [ROUNDED] = {expresion-aritmetica}
{variable }
[ON SIZE ERROR] (instruccion-imperativa)]

Ej:
COMPUTE impuesto = 0.10 * total
COMPUTE a ROUNDED = b * c / d
COMPUTE neto = total - 0.10 * total

EJEMPLO: C0203
*-
* Operaciones aritmeticas usando el COMPUTE.
* Igual al prog0202, solo que ahora con el compute
* y variables de formato.
* Saca prom. general de alumnos menos un por ciento
* segun las faltas del grupo.
* Revision: 09/feb/93
*-
identification division.
program-id. prog0203.
author. R. Cesar Rodriguez Cervantes.
date-written. 09/feb/93.
date-compiled. 08/feb/93.
environment division.
data division.
working-storage section.
77 prom-gral pic 999v99.
77 num-al pic 99.
77 sigue pic x.
01 calif pic 9(3)v99.
01 faltas pic 9(2).
01 menos pic 9(3)v9(2).
01 alumno.
02 a-num-ctl pic x(10).
02 a-nombre pic A(25).
02 a-calif pic 999v9(2).
01 desp-3-2 pic ZZ9.9Z.

Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 33


procedure division.
inicio.
move 0 to prom-gral, num-al, faltas, calif.
move "S" to sigue.
perform titulo.
perform alumnos.
perform promedio.
display " ".
display "Presiona ENTER para continuar".
accept sigue.
fin.
stop run.
titulo.
display "**** Control de Materias ****".
alumnos.
compute num-al = num-al + 1.
display "Numero de Control: ".
accept a-num-ctl.
display "Nombre: ".
accept a-nombre.
display "Calificacion: ".
accept a-calif.
compute calif = calif + a-calif.
display "Otro Alumno? (S/N): ".
accept sigue.
if sigue = "S" or sigue = "s"
go to alumnos.
promedio.
Display "Numero de Faltas (por grupo): ".
accept faltas.
compute menos = faltas * 0.1.
compute prom-gral = calif / num-al.
compute prom-gral = prom-gral - menos.
move prom-gral to desp-3-2.
Display "Promedio General: ", desp-3-2.
compute menos = menos * 100.
move menos to desp-3-2.
Display "Por ciento menos, debido a faltas: %" desp-3-2.

Ejercicio sugerido
a)Capture la siguiente información mientras el asi lo desee
01 venta.
02 numart
02 cantidad
02 precio
b) Calcule la venta total y el impuesto del total
c) Despliegue la venta totaly el impuesto

Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 34


Estatutos condicionales

Instrucción condicional IF
Es una instrucción que efectua una operación dependiendo de
la presencia de una condición.

Formato basico:
IF (condición)
instruccion(es) imperativa(s)
ELSE
instruccion(es) imperativa(s).

Palabras y signos que se pueden usar dentro de una


condicion
Instruccion signo significado
AND Y
OR O
NOT No
IS ZERO =0 Igual a cero
IS NOT ZERO <>0 Diferente de cero
IS NUMERIC Numerico
IS ALPHABETC Alfabetico
IS POSITIVE >0 Positivo
IS NEGATIVE <0 Negativo
IS GREATER THAN > Mayor que
IS LESS THAN < Menor que
IS EQUAL TO = Igual a
IS NOT EQUAL TO <> Diferente

Nota: El NOT se usa en medio del IS y la otra palabra para


negar una condición.

Ejemplo 1:
IF A > 10
DISPLAY "A es mayor a 10". <- El punto

Ejemplo 2:
IF variable IS POSITIVE
COMPUTE A = A / variable
ELSE
DISPLAY "ERROR: Divison entre cero". <- El punto

Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 35


Instruccion IF anidada

Ejemplo 3:
IF A > B
IF B > C
DISPLAY "A es mayor que B y que C"
ELSE
NEXT SENTENCE
ELSE
PERFORM rutina-pregunta. <- punto

EJEMPLO: C0204
*-
* EJ: del IF anidado.
* Simulacion de un reloj checador de la empresa
* GRUÑON S.A., al checar, la puerta se abre
* automaticamente.
* Nota: ningun empleado seria capaz de llegar
* mas de una hora tarde (bajo riesgo de
* tener una terminacion involuntaria)
*-
identification division.
program-id. prog0204.
author. R. Cesar Rodriguez Cervantes.
date-written. 09/feb/93.
date-compiled. 09/feb/93.
environment division.
data division.
working-storage section.
01 num-ctl pic x(10).
01 cr pic x.
01 tiempo.
02 hora pic 99.
02 min pic 99.
02 seg pic 99.
01 entrada.
02 e-hora pic 99.
02 e-min pic 99.
procedure division.
inicio.
display "Reloj Checador ", erase.
perform lee-tiempo.
display "Hora: " hora " Min: " min.
perform checa.

Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 36


checa.
move space to cr.
display "Numero de Control: "
accept num-ctl.
display "Hora de entrada? en formato (HHMM) Ej. 0810".
accept entrada.
if e-hora = hora
if e-min > 15
display "Retirate a terminar de dormir!!!"
display "SE TE DESCONTARAN DOS DIAS!"

display "por eso estamos como estamos."


else
next sentence
else
if e-hora < hora
display "BIENVENIDO! EXCELENTE TRABAJADOR!!!"
display "recuerda que el tiempo extra no se paga"
else
display "BUENOS DIAS, JEFE!!!".
display " ".
display "Continuar (S/N): ".
accept cr.
if cr = "S" or "s"
go to checa
else
stop run.
* Nota: El STOP RUN puede ir en cualquier parte
lee-tiempo.
accept tiempo from time.
if hora > 12
compute hora = hora - 12.

Ejercicio sugerido
Realice un programa que lea un numero y diga si el numero
leido es par o impar.

Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 37


Instrucción PERFORM

Formato:
PERFORM (nombre-de-parrafo-1) [THRU (nombre-de-parrafo-n)]
VARYING (variable-1)
{variable-2} {variable-3}
FROM {entero-1 } BY {entero-2 }
UNTIL (condicion)

Ejemplo 1:
PERFORM ciclo until otra-vez = "N" OR otra-vez = "n".

Ejemplo 2:
PERFORM llena-tabla VARYING i FROM 1 BY 1 UNTIL i = 10.

Ejemplo 3:
PERFORM rutina-1 THRU rutina-3.

Ejemplo 4:
PERFORM rutina 5 TIMES.

Ejemplo: C0205
*-
* Ejemplo: perform ... thru ... until
*-
identification division.
program-id. prog0205.
author. R. Cesar Rodriguez Cervantes.
environment division.
data division.
working-storage section.
77 al-prom pic 9999.
77 sigue pic x.
77 cr pic x.
01 alumno.
02 a-num-ctl pic x(10).
02 a-nombre pic A(25).
02 a-calif pic 999.
01 nom-mat pic x(20).
procedure division.
inicio.
move 0 to al-prom.
move "S" to sigue.
perform titulo.
perform lee-alumno thru fin-lee-alumno until sigue = "N"
or sigue = "n".
fin.
stop run.
titulo.
display erase.
display (5, 10) "**** Control de Materias ****".
lee-alumno.
Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 38
display (7, 15) "Numero de Control: " erase.
accept (7, 35) a-num-ctl.
if a-num-ctl < 0
perform mensaje
go to lee-alumno.
lee-nombre.
display (8, 15) "Nombre: ".
accept (8, 35) a-nombre.
if a-nombre = spaces
perform mensaje
go to lee-nombre.
materias.
move 0 to al-prom.
perform lee-materias thru fin-lee-materias 4 times.
compute al-prom = al-prom / 4.
display (12, 15) "Promedio del Alumno: ", al-prom.
fin-lee-alumno.
display (14, 15) "Otro Alumno? (S/N): ".
accept (14, 35) sigue.
lee-materias.
display (9, 15) "Materia: " erase.
accept (9, 35) nom-mat.
if nom-mat = spaces
perform mensaje
go to lee-materias.
calif-mat.
display (10, 15) "Calificacion: ".
accept (10, 35) a-calif.
if a-calif < 0
perform mensaje
go to calif-mat.
add a-calif to al-prom.
fin-lee-materias.
exit.
mensaje.
move space to cr.
display (24, 1) "Dato Erroneo, Ingrese de nuevo. RETORNO
continuar".
accept cr.
display (24, 1) erase.

Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 39


Ejemplo: C0206
*-
* Ej: Perform ... varying ..
*-
identification division.
program-id. prog0206.
author. R. Cesar Rodriguez Cervantes.
environment division.
data division.
working-storage section.
77 i pic 99 value 0.
01 numero pic 99 value 0.
procedure division.
inicio.
perform pregunta.
display "20 Numeros pares o impares. "
display "----------------------------"
perform display-numeros varying i from 1 by 1 until i = 20.
fin.
stop run.
pregunta.
display "Numero : " erase.
accept numero.
display-numeros.
add 2 to numero.
display i, ".-", numero.

Ejercicio sugerido
Hacer el ejemplo anterior utilizando cada opcion del
perform visto hasta ahorita (incluyendo uno con if... goto)

Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 40


Manejo de tablas

Clausula OCCURS
Sirve para indicar la ocurrencia repetitiva de elementos
que tienen el mismo formato.

-Se usa en la DATA DIVISION


-Para accesar los elementos se usan indices en la PROCEDURE
DIVISION.

Formato:
(numero-de-nivel) (variable) OCCURS (entero) TIMES.

Ej 1: (en la DATA DIVISION)


01 lista.
02 mes OCCURS 12 TIMES PIC A(10).
.
.
.(en la PROCEDURE DIVISION)

MOVE mes(12) TO navidad.


IF mes_ingresado = mes(i) ...

Ejemplo 2:
01 arreglo.
02 materias OCCURS 10 TIMES.
03 materia PIC X(10).
03 numero-de-unidades PIC 99.
.
.
.
IF materia(2) = "COBOL"
MOVE 7 to numero-de-unidades(2).

Ejemplo: C0207
*-
* Ejemplo: OCCURS
*-
IDENTIFICATION DIVISION.
PROGRAM-ID. PROG0207.
DATE-WRITTEN. 9/FEB/93.
DATE-COMPILED.9/FEB/93.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. IBM-PC.
OBJECT-COMPUTER. IBM-PC.
DATA DIVISION.
WORKING-STORAGE SECTION.

Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 41


77 OTRAVENTA PIC X VALUE SPACE.
77 PELICULAW PIC X(20) VALUE SPACES.
01 ENCONTRADA PIC 9 VALUE 0.
01 INV PIC 99 VALUE 5.
01 I PIC 99.
01 TABLA.
02 TABL OCCURS 5 TIMES.
03 PELICULA PIC X(20).
03 CANT PIC 9(2).
03 IMPORTE PIC 9(9).
PROCEDURE DIVISION.
INICIO.
PERFORM LLENA-TABLA VARYING I FROM 1 BY 1 UNTIL I > INV.
PERFORM PROCESO UNTIL OTRAVENTA = "N" OR
OTRAVENTA = "n".
STOP RUN.
LLENA-TABLA.
DISPLAY "Nombre de la Pelicula? ".
ACCEPT PELICULA(I).
DISPLAY "Cantidad de Peliculas?".
ACCEPT CANT(I).
DISPLAY "Importe ".
ACCEPT IMPORTE(I).
PROCESO.
DISPLAY (1, 1) " " ERASE.
DISPLAY "** C.H.A.F.A. V.I.D.E.O. **".
DISPLAY "Nombre de la Pelicula: ".
ACCEPT PELICULAW.
MOVE 0 TO ENCONTRADA.
PERFORM BUSCA VARYING I FROM 1 BY 1
UNTIL ENCONTRADA NOT = 0 OR I > INV.
IF ENCONTRADA = 0
DISPLAY "No se encuentra esa pelicula"
ELSE
IF CANT(ENCONTRADA) = 0
DISPLAY PELICULA(ENCONTRADA) " Todas Rentadas!"
ELSE
DISPLAY "Cantidad a pagar: "
DISPLAY IMPORTE(ENCONTRADA).
DISPLAY "OTRA VENTA (S/N): ".
ACCEPT OTRAVENTA.
BUSCA.
IF PELICULAW = PELICULA( I )
MOVE I TO ENCONTRADA.

Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 42


Especificaciones para la clausula OCCURS
Un OCCURS solo puede definirse en los niveles 02 al 49.
Esto implica que un elemento especificado con una clausula
OCCURS debe ser parte de un registro. No puede ser un
elemento independiente por lo tanto no esta permitido en
los niveles 01, 77 y 88.

Ejercicios sugeridos

1. Modifique el programa anterior para agregar validación a


los datos de entrada

2. Realizar un programa que:


a) leea 10 numeros y los almacene en una tabla
b) ordenarlos de menor a mayor
C) desplegar la tabla ordenada

Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 43


Capitulo 4

organizacion de archivos secuenciales


En la organizacion secuencial los registros son almacenados
en el archivo en el orden en el cual son escritos.
Al agregar registros se debe hacer al final del archivo.
Los registros solo pueden ser leidos en el orden en que
fueron escritos.

Este tipo de organización es eficiente sólo cuando hay un


gran numero de registros y cuando la mayoría o todos se
requieren para el proceso.

La información acerca de la organización de archivos


secuenciales y la forma de acceso es especificada en la
ENVIRONMENT DIVISION de un programa.

La información a cerca de las caracteristicas fisicas del


archivo es especificada en la DATA DIVISION.

Ejemplo: C0301
*-
* Archivos secuenciales
* Crea y agrega registros
*-
identification division.
program-id. prog0301.
author. R. Cesar Rodriguez Cervantes.
environment division.
input-output section.
file-control.
select materias assign to disk organization is sequential.
data division.
file section.
fd materias
label records are standard
value of file-id is "materias.dat"
data record is reg-mat.
01 reg-mat.
02 num-mat pic 99.
02 desc pic x(20).
working-storage section.
77 sigue pic x.
procedure division.
inicio.
perform abre-archivos.
perform agrega-mat until sigue = "N" or sigue = "n".
perform cierra-archivos.

Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 44


fin.
stop run.
abre-archivos.
open output materias.
agrega-mat.
display "No. de Materia: ", erase.
accept num-mat.
display "Nombre : ".
accept desc.
perform escribe-mat.
display "Otra Materia (s/n): ".
accept sigue.
escribe-mat.
write reg-mat.
cierra-archivos.
close materias.

Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 45


Ejemplo: C0302
* ORGANIZACION DE ARCHIVOS SECUENCIALES
* Leer en un archivo secuencial (consultas a)
identification division.
program-id. prog0302.
author. R. Cesar Rodriguez Cervantes.
environment division.
input-output section.
file-control.
select materias assign to disk organization is sequential.
data division.
file section.
fd materias
label records are standard
value of file-id is "materias.dat"
data record is reg-mat.
01 reg-mat.
02 num-mat pic 99.
02 desc pic x(20).
working-storage section.
77 sw-fin pic 9 value 0.
procedure division.
inicio.
perform abre-archivos.
perform lee-mat.
perform despliega-mat until sw-fin = 1.
perform cierra-archivos.
fin.
stop run.
abre-archivos.
open input materias.
lee-mat.
read materias at end move 1 to sw-fin.
despliega-mat.
display "No. de Materia: ", num-mat.
display "Nombre : ", desc.
perform lee-mat.
cierra-archivos.
close materias.

Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 46


Ejemplo: C0303
*-
* ORGANIZACION DE ARCHIVOS SECUENCIALES
* Agregar en un archivo secuencial (Al final)
*-
identification division.
program-id. prog0303.
author. R. Cesar Rodriguez Cervantes.
environment division.
input-output section.
file-control.
select materias assign to disk organization is sequential.
data division.
file section.
fd materias
label records are standard
value of file-id is "materias.dat"
data record is reg-mat.
01 reg-mat.
02 num-mat pic 99.
02 desc pic x(20).
working-storage section.
77 sw-fin pic 9 value 0.
77 sigue pic x.
procedure division.

inicio.
perform abre-archivos.
perform agrega-mat until sigue = "N" or sigue = "n".
perform cierra-archivos.
fin.
stop run.
abre-archivos.
open extend materias.
agrega-mat.
display "No. de Materia: ", erase.
accept num-mat.
display "Nombre : ".
accept desc.
perform escribe-mat.
display "Otra Materia (s/n): ".
accept sigue.
escribe-mat.
write reg-mat.
cierra-archivos.
close materias.

Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 47


Ejemplo: C0304
*-
* ORGANIZACION DE ARCHIVOS SECUENCIALES
* Modificaciones a los registros existentes
* (Cambios)
*-
identification division.
program-id. prog0304.
author. R. Cesar Rodriguez Cervantes.
environment division.
input-output section.
file-control.
select materias assign to disk organization is sequential.
data division.
file section.
fd materias
label records are standard
value of file-id is "materias.dat"
data record is reg-mat.
01 reg-mat.
02 num-mat pic 99.
02 desc pic x(20).
working-storage section.
77 sw-fin pic 9 value 0.
77 cambia pic x value space.
procedure division.
inicio.
perform abre-archivos.
perform lee-mat.
perform despliega-mat until sw-fin = 1.
perform cierra-archivos.
fin.
stop run.
abre-archivos.
open i-o materias.
lee-mat.
read materias at end move 1 to sw-fin.
despliega-mat.
display "No. de Materia: ", num-mat.
display "Nombre : ", desc.
display "Modificar (S/N): ".
accept cambia.
if cambia = "S" or cambia = "s"
display "No. de Materia: "
accept num-mat
display "Nombre : "
accept desc
perform cambia-mat.
perform lee-mat.
cambia-mat.
rewrite reg-mat.
cierra-archivos.
close materias.

Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 48


Ejemplo: C0305
*-
* ORGANIZACION DE ARCHIVOS SECUENCIALES
* Borra registros
* 1.- Utilzando un archivo temporal se escriben
* los registros que no se deseen borrar.
* 2.- Se borra el archivo original.
* 3.- Se pasan los registros del temporal al
* original.
* 4.- Y... estan borrados!.
*-
identification division.
program-id. prog0305.
author. R. Cesar Rodriguez Cervantes.
environment division.
input-output section.
file-control.
select materias assign to disk organization is sequential.
select matpaso assign to disk organization is sequential.
data division.
file section.
fd materias
label records are standard
value of file-id is "materias.dat"
data record is reg-mat.
01 reg-mat.
02 num-mat pic 99.
02 desc pic x(20).
fd matpaso
label records are standard
value of file-id is "mat-paso.dat"
data record is reg-paso.
01 reg-paso.
02 p-num-mat pic 99.
02 p-desc pic x(20).
working-storage section.
77 sw-fin pic 9 value 0.
77 borra pic x value space.
procedure division.
inicio.
perform abre-archivos.
perform lee-mat.
perform despliega-mat until sw-fin = 1.
perform cierra-archivos.
move 0 to sw-fin.
perform abre-arch2.
perform lee-matpaso.
perform llena-materias until sw-fin = 1.
perform cierra-archivos.
fin.
stop run.

Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 49


abre-archivos.
open i-o materias.
open output matpaso.
lee-mat.
read materias at end move 1 to sw-fin.
despliega-mat.
display "No. de Materia: ", num-mat.
display "Nombre : ", desc.
display "Desea Borrarlo (S/N): ".
accept borra.
if borra = "N" or borra = "n"
move num-mat to p-num-mat
move desc to p-desc
perform escribe-matpaso.
perform lee-mat.
escribe-matpaso.
write reg-paso.
abre-arch2.
open output materias.
open input matpaso.
lee-matpaso.
read matpaso at end move 1 to sw-fin.
llena-materias.
move p-num-mat to num-mat
move p-desc to desc
perform escribe-materias.
perform lee-matpaso.
escribe-materias.
write reg-mat.
cierra-archivos.
close materias.
close matpaso.

Ejercicio sugerido:
Implementar con archivos secuenciales los programas ejemplo
siguientes:

C0106- Uso de la intstruccion perform, pag


C0107- Uso de la intstruccion perform, pag
C0201- Uso de la intstruccion move, pag
C0203- Operaciones aritméticas usando el compute, pag
C0205- Perform... thru... until, pag
C0207- Occurs, pag

Se sugiere un programa para altas, bajas, consultas y


cambios por cada ejemplo.

Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 50


Ejemplo: C0306
*-
* Archivos secuenciales
* Ejemplo:
* ABCC al archivo ventas.dat
* Utilizando un menu
* Esta implementacion de Altas, Bajas, Cambios
* y Consultas, es algo... ABCC con secuenciales!
*
* DESCRIPCION:
* Se utiliza una variable de mas en cada
* registro para indicarnos el estado actual del
* registro.
* Llamada EDO-REG si contiene espacios indica
* activo, asterisco que esta borrado (baja logica!)
*
* Normalmente los archivos secuenciales se
* utilizan para procesamiento por lotes o para
* procesos donde la informacion es poca o no muy
* variante.
* En este caso la utilizacion de archivos indexados seria,
* creo, lo mas optimo.
*-
identification division.
program-id. prog0306.
author. R. Cesar Rodriguez Cervantes.
environment division.
input-output section.
file-control.
select ventas assign to disk organization is sequential.
data division.
file section.
fd ventas
label records are standard
value of file-id is "ventas.dat"
data record is reg-venta.
01 reg-venta.
02 edo-reg pic x.
02 num-caja pic 99.
02 nombre pic x(20).
02 venta-dia pic 9(6)v99.
working-storage section.
77 sw-fin pic 9 value 0.
77 op pic 9 value 9.
77 num-busca pic 99 value 0.
77 sigue pic x value space.
procedure division.
inicio.
perform condicion-archivo.
perform menu until op = 0.
fin.
stop run.
menu.

Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 51


display " M E N U VENTAS ", erase.
display "-----------------------------".
display " [1] Agregar "
display " [2] Consultar "
display " [3] Modificar "
display " [4] Borrar "
display " [0] Fin "
display " "
display " Opcion: "
accept op.
if op < 0 and op > 4
display "Opcion NO implementada [RETORNO] Continuar "
move space to sigue
accept sigue
go to menu.
if op = 1
perform agregar.
if op = 2
perform consultar.
if op = 3
perform modificar.
if op = 4
perform borrar.
agregar.
display "*** AGREGAR *** ", erase.
open extend ventas.
move spaces to sigue.
perform venta thru ex-venta until sigue = "N"
or sigue = "n".
close ventas.
consultar.
display "*** CONSULTAR ***", erase.
open input ventas.
perform consulta.
close ventas.
consulta.
display "Numero de Caja: ", erase.
accept num-busca.
move 0 to sw-fin.
perform lee-ventas.
if sw-fin = 1
display "Numero No Existe en el Archivo"
else
perform despliega-reg.
venta.
display "Numero de Caja: ".
accept num-caja.
display "Nombre Encargado: ".
accept nombre.
display "Venta: ".
accept venta-dia.
move space to edo-reg.
escribe-venta.
write reg-venta.
Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 52
ex-venta.
display "Otra Venta (S/N): "
accept sigue.
lee-ventas.
read ventas at end move 1 to sw-fin.
if sw-fin not = 1
if edo-reg = "*"
go to lee-ventas
else
next sentence
if num-busca not = num-caja
go to lee-ventas.
despliega-reg.
display "Nombre Encargado: ", nombre.
display "Venta: ", venta-dia.
borrar.
display "*** BORRAR ****", erase.
open i-o ventas.
perform consulta.
if num-busca = num-caja
display "Desea Borrarlo (S/N) "
accept sigue
if sigue = "S" or sigue = "s"
move "*" to edo-reg
perform rescribe-venta.
close ventas.
modificar.
display "*** MODIFICAR ***", erase.
open i-o ventas.
perform consulta.
if num-busca = num-caja
display "Nombre Encargado: "
accept nombre
display "Venta: "
accept venta-dia
perform rescribe-venta.
close ventas.
rescribe-venta.
rewrite reg-venta.
condicion-archivo.
display "Existe Archivo (S/N): ".
accept sigue.
if sigue = "N" or sigue = "n"
display "Crearlo (S/N): "
accept sigue
if sigue = "S" or sigue = "s"
open output ventas
close ventas
else
display "Programa Abortado "
stop run.
move space to sigue.

Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 53


Capitulo 5
Edicion de reportes
Funciones de edicion
1. Supresión de ceros a la izquierda.
2. Impresión de puntos decimales donde se necesita
alineación decimal.
3. Impresión de signos de moneda y comas.
4. Impresión de asteriscos para protección de cheques.
5. Impresión de signos de + o de - para reflejar el
valor positivo o negativo de un campo.
6. Impresión de espacios o ceros como separadores dentro de
un campo.

Las primeras cinco solo se aplican a campos numericos.


Toda edicion se efectua al mover un campo de un dato
elemental a un dato de reporte.

Simbolo Significado
X Campo alfanumerico
9 Campo numerico
A Campo alfabetico
V Punto decimal supuesto, campos numericos
S Signo de operacion, campos numericos

Los Siguentes simbolos son solo de edicion


Simbolo Significado
Z Caracter de supresion de ceros
. Punto decimal
+ Signo positivo
- Signo negativo
$ Signo de moneda
, Coma
* Simbolo de proteccion de cheques
B Separador de campos (Inserccion de espacios)
0 Caracter de inserccion de ceros

Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 54


Ejemplo: C0401
*-
* Leer en un archivo secuencial
* consultas en pantalla usando caracteres de edicion
*-
identification division.
program-id. prog0401.
author. R. Cesar Rodriguez Cervantes.
date-written. 11/feb/93.
date-compiled.11/feb/93.
environment division.
input-output section.
file-control.
select materias assign to disk organization is sequential.
data division.
file section.
fd materias
label records are standard
value of file-id is "materias.dat"
data record is reg-mat.
01 reg-mat.
02 num-mat pic 99.
02 desc pic x(20).
working-storage section.
77 sw-fin pic 9 value 0.
77 cont-ln pic 99 value 0.
77 w-fecha pic 9(6) value 0.
77 w-hora pic 9(6) value 0.
77 cr pic x value space.
01 raya pic x(79) value all "-".
01 titulo.
02 filler pic xx value spaces.
02 t-fecha pic 99b99b99.
02 filler pic x(9) value spaces.
02 filler pic x(42) value
"Materias disponibles para cursos de verano".
02 filler pic x(9) value spaces.
02 t-hora pic 99b99b99.
01 encabezado.
02 filler pic x(6) value "Numero".
02 filler pic x(14) value spaces.
02 filler pic x(6) value "Nombre".
01 disp-forma.
02 filler pic x(4) value spaces.
02 d-num-mat pic z9.
02 filler pic x(6) value spaces.
02 d-desc pic x(20) value spaces.
procedure division.
inicio.
perform abre-archivos.
perform lee-tiempo.
perform enca.
perform lee-mat.
perform despliega-mat until sw-fin = 1.
perform pausa.
perform cierra-archivos.
fin.
stop run.
abre-archivos.
open input materias.
lee-mat.
Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 55
read materias at end move 1 to sw-fin.
despliega-mat.
move num-mat to d-num-mat.
move desc to d-desc.
if cont-ln = 23 or cont-ln > 23
perform pausa
perform enca.
display disp-forma.
add 1 to cont-ln.
perform lee-mat.
cierra-archivos.
close materias.
enca.
display (1, 1) titulo, erase.
display " ".
display encabezado.
display raya.
move 4 to cont-ln.
lee-tiempo.
accept w-fecha from date.
accept w-hora from time.
move w-fecha to t-fecha.
move w-hora to t-hora.
inspect t-fecha replacing all " " by "/".
inspect t-hora replacing all " " by ":".
pausa.
display "Presiona RETORNO para continuar"
accept cr

La palabra reservada FILLER


Especifica una area no utilizada, a la cual no se puede
tener acceso. Nos sirve para designar un campo de datos no
significativo.

Campo emisor Dato de reporte


Picture Contenido Picture Impresion
9(6) 123456 $ZZZ,ZZZ.99 $123,456.00
9999V99 0012v34 $Z,ZZZ.99 12.34
9(5)V99 00001v23 $**,***.99 $*****1.23
S9(6) 012345- +Z(6) - 12345
S9(6) 012345+ -Z(6) - 12345
S9999V99 1234v56+ +Z(4).99 +1234.56
S999 123- ZZZ- 123-
9(6) 123456 99BBBB9999 12 3456

Ejemplo: C0402
* consultas en impresora
*-
identification division.
program-id. prog0402.
author. R. Cesar Rodriguez Cervantes.
date-written. 11/feb/93.
date-compiled.11/feb/93.
environment division.
input-output section.

Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 56


file-control.
select materias assign to disk organization is sequential.
select reporte assign to printer.
data division.
file section.
fd materias
label records are standard
value of file-id is "materias.dat"
data record is reg-mat.
01 reg-mat.
02 num-mat pic 99.
02 desc pic x(20).
fd reporte
label records are omitted
data record is linea.
01 linea pic x(80).
working-storage section.
77 sw-fin pic 9 value 0.
77 cont-ln pic 99 value 0.
77 w-fecha pic 9(6) value 0.
77 w-hora pic 9(6) value 0.
77 cr pic x value space.
01 raya pic x(79) value all "-".
01 titulo.
02 filler pic xx value spaces.
02 t-fecha pic 99b99b99.
02 filler pic x(9) value spaces.
02 filler pic x(42) value
"Materias disponibles para cursos de verano".
02 filler pic x(9) value spaces.
02 t-hora pic 99b99b99.
01 encabezado.
02 filler pic x(6) value "Numero".
02 filler pic x(14) value spaces.
02 filler pic x(6) value "Nombre".
01 disp-forma.
02 filler pic x(4) value spaces.
02 d-num-mat pic z9.
02 filler pic x(6) value spaces.
02 d-desc pic x(20) value spaces.
procedure division.
inicio.
perform abre-archivos.
perform lee-tiempo.
perform enca.
perform lee-mat.
perform despliega-mat until sw-fin = 1.
perform cierra-archivos.
fin.
stop run.
abre-archivos.
open input materias.
open output reporte.
lee-mat.
read materias at end move 1 to sw-fin.
despliega-mat.
move num-mat to d-num-mat.
move desc to d-desc.
if cont-ln = 53 or cont-ln > 53
perform enca.
move disp-forma to linea.

Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 57


write linea.
add 1 to cont-ln.
perform lee-mat.
cierra-archivos.
close materias.
close reporte.
enca.
move titulo to linea.
write linea after advancing page.
move spaces to linea.
write linea.
move encabezado to linea.
write linea.
move raya to linea.
write linea.
move 4 to cont-ln.
lee-tiempo.
accept w-fecha from date.
accept w-hora from time.
move w-fecha to t-fecha.
inspect w-t t-fecha replacing all " " by "/".
inspect t-hora replacing all " " by ":".

Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 58


Ejemplo: C0403
*-
* consultas en impresora
* Impresion de cheques
*-
identification division.
program-id. prog0403.
author. R. Cesar Rodriguez Cervantes.
date-written. 11/feb/93.
date-compiled.11/feb/93.
environment division.
input-output section.
file-control.
select reporte assign to printer.
data division.
file section.
fd reporte
label records are omitted
data record is linea.
01 linea pic x(80).
working-storage section.
77 sw-fin pic 9 value 0.
77 opcion pic x value space.
77 folio pic 9(3) value 0.
01 datos.
02 nombre pic x(30) value spaces.
02 importe pic 9(6)v99 value 0.
02 en-letra pic x(20) value spaces.
01 enca-1.
02 filler pic xx value spaces.
02 e-folio pic ZZ9.
02 filler pic x(37) value spaces.
02 filler pic x(12) value "TRANSA-BANCO".
01 enca-2.
02 filler pic x(24) value
" PAGUESE ESTE CHEQUE A:".
01 detalle-1.
02 filler pic x(2) value spaces.
02 d-nombre pic x(30) value space.
02 filler pic x(10) value spaces.
02 d-importe pic $***,***.99.
01 detalle-2.
02 filler pic xx value spaces.
02 d2-letra pic x(20) value spaces.
02 filler pic x(40) value all "_".
procedure division.
inicio.
perform abre-archivos.
perform pregunta.
perform cierra-archivos.
fin.
stop run.
abre-archivos.
open output reporte.
pregunta.
add 1 to folio.
move folio to e-folio.
display (10, 3) e-folio, erase.
display (10, 42) "TRANSA-BANCO".
display (12, 3) "PAGUESE ESTE CHEQUE A:".
accept (13, 3) nombre.
Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 59
display (13, 42) "IMPORTE:$".
accept (13, 52) importe.
display (15, 3) "Cantidad en letra:".
accept (16, 3) en-letra.
display (20, 3) "Imprimir el cheque? (S/N):".
accept (20, 30) opcion.
if opcion = "S" or opcion = "s"
move importe to d-importe
move nombre to d-nombre
move en-letra to d2-letra
perform imprime-cheque.
display (22, 3) "Otro Cheque? (S/N):".
accept (22, 30) opcion.
if opcion = "S" or opcion = "s"
move 0 to importe
move spaces to nombre, en-letra
go to pregunta.
imprime-cheque.
write linea from enca-1 after 4 lines.
* write linea after advancing page.
move spaces to linea.
write linea.
write linea from enca-2
write linea from detalle-1.
move spaces to linea.
write linea.
write linea from detalle-2.
cierra-archivos.
close reporte.

Instruccion COPY
Permite incluir codigo fuente pre-escrito en el programa.

Formato:
COPY (nombre-de-archivo)
[REPLACING palabra-1 BY palabra-2 palabra-3 BY palabra-4...]

Ejemplo:
Si tenemos como codigo de biblioteca los sig.:
01 archivo.
02 A pic 99.
02 B pic 9(5).
02 C occurs 10 times pic XX.

Pero necesitamos hacer algunos cambios, usariamos:


01 nomina copy archivo replacing a by imp,
b by codigo.

quedaria como sigue:


01 archivo.
02 imp pic 99.
02 codigo pic 9(5).
02 C occurs 10 times pic XX.

Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 60


El copy incluyendo la opcion replacing no altera las
funciones en la biblioteca, solo cambia las
especificaciones dentro del programa que esta llamando.

El copy se puede usar en:

ENVIRONMENT DIVISION
dentro de la CONFIGURATION-SECTION:
SOURCE-COMPUTER. COPY (archivo).
OBJECT-COMPUTER. COPY (archivo).
SPECIAL-NAMES. COPY (archivo).

dentro de la INPUT-OUTPUT SECTION.


FILE-CONTROL. COPY (archivo).
I-O-CONTROL. COPY (archivo)

DATA DIVISION
dentro de la FILE SECTION:
FD nombre-archivo COPY (archivo).

dentro de las descripciones de archivo


01 nombre-de-datos COPY (archivo)

PROCEDURE DIVISION
nombre-de-parrafo. COPY (archivo).

Dispositivo SORT
Ordenamiento de registros de un archivo.

FORMATO:
SORT (nombre-archivo-a-ordenar)
{ DESCENDING}
ON { ASCENDING } KEY (variable-1)
[ { DESCENDING} ]
[ ON { ASCENDING } KEY (variable-1) ] ...
{ USING archivo-2 GIVING archivo-3 }

Opciones del SORT.


1. ASCENDING del menor al mayor
2. DESCENDING del mayor al menor

Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 61


Tipos de impresión de reportes
Impresión de detalle: Contiene información de cada registro
específico.

Impresión en grupo: Contiene información que resume


registros especificos.

Ejemplo:
Teniendo la sig. información en un archivo ordenado
se quiere un reporte donde agrupe la información por
departamento.

Archivo VENTAS
Departamento :Calzado
Cliente :Juan Perez
Importe compra :100.00

Departamento :Calzado
Cliente :Victor Lopez
Importe compra :850.00

Departamento : Deportes
Clientes :Maria Gutierrez
Importe compra :45.00

Utilizando el tipo de impresión de grupo la información


quedaría como sigue:

Departamento: Calzado
Cliente Importe compra
Juan Perez 100.00
Victor Lopez 850.00

Departamento: Deportes
Clientes Importe compra
Maria Gutierrez 45.55

Nota: A este tipo de reportes comunmente se le llama


reporte de CORTES.

Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 62


Ejemplo: C0404
*-
* Archivos secuenciales
* Ejemplo:
* Altas al archivo ventas.dat
* Unida 4: formateo de reportes
*-
identification division.
program-id. prog0411.
author. R. Cesar Rodriguez Cervantes.
environment division.
input-output section.
file-control.
select sorteo assign to disk organization is sequential.
data division.
file section.
fd sorteo
label records are standard
value of file-id is "sorteo.dat"
data record is reg-sorteo.
01 reg-sorteo.
02 edo-reg pic x.
02 boleta pic 99.
02 fecha pic 9(6).
02 num-caja pic 99.
02 descuento pic 9(3).
working-storage section.
77 sw-fin pic 9 value 0.
77 op pic 9 value 9.
77 num-busca pic 99 value 0.
77 sigue pic x value space.
procedure division.
inicio.
perform condicion-archivo
perform agregar.
fin.
stop run.
agregar.
display "*** AGREGAR *** ", erase.
open extend sorteo.
move spaces to sigue.
perform venta thru ex-venta until sigue = "N"
or sigue = "n".
close sorteo.
venta.
display "Fecha (MMDDAA) : ".
accept fecha.
display "Numero de Boleta: ".
accept boleta.
display "Numero de Caja : ".
accept num-caja.
display "Descuento: ".
accept descuento.
move space to edo-reg.
escribe-venta.
write reg-sorteo.
ex-venta.
display "Otra Venta (S/N): "
accept sigue.
condicion-archivo.
display "Existe Archivo (S/N): ".
Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 63
accept sigue.
if sigue = "N" or sigue = "n"
display "Crearlo (S/N): "
accept sigue
if sigue = "S" or sigue = "s"
open output sorteo
close sorteo
else
display "Programa Abortado "
stop run.
move space to sigue.

Ejemplo: C0405
*-
* enca04.cob
* Encabezados de formato comunes
* Formato de reportes. unidad 4.
*-
01 raya pic x(79) value all "-".
01 titulos.
02 filler pic xx value spaces.
02 t-fecha pic 99b99b99.
02 filler pic x(25) value spaces.
02 filler pic x(9) value "CONSULTAS".
02 filler pic x(20) value spaces.
02 t-hora pic 99b99b99.
01 encabezado.
02 filler pic x(6) value "BOLETA".
02 filler pic xx value spaces.
02 filler pic x(6) value "CAJA #".
02 filler pic x(2) value spaces.
02 filler pic x(10) value "DESCUENTO".
02 filler pic x(2) value spaces.
02 filler pic x(5) value "FECHA".
01 disp-forma.
02 filler pic xx value spaces.
02 d-boleta pic z9.
02 filler pic x(6) value spaces.
02 d-num-caja pic z9.
02 filler pic x(6) value spaces.
02 d-descuento pic ZZ9.
02 filler pic x(7) value spaces.
02 d-fecha.
03 f-mm pic 99 value 0.
03 filler pic x value "/".
03 f-dd pic 99 value 0.
03 filler pic x value "/".
03 f-aa pic 99 value 0.

Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 64


Ejemplo: C0406
*-
*
* Archivos secuenciales
* Ejemplo:
* C al archivo ventas.dat
* Unida 4: formateo de reportes
*
*-
identification division.
program-id. prog0412.
author. R. Cesar Rodriguez Cervantes.
environment division.
input-output section.
file-control.
select sorteo assign to disk organization is sequential.
data division.
file section.
fd sorteo
label records are standard
value of file-id is "sorteo.dat"
data record is reg-sorteo.
01 reg-sorteo.
02 edo-reg pic x.
02 boleta pic 99.
02 fecha.
03 mm pic 99.
03 dd pic 99.
03 aa pic 99.
02 num-caja pic 99.
02 descuento pic 9(3).
working-storage section.
77 sw-fin pic 9 value 0.
77 cont-ln pic 99 value 0.
77 w-fecha pic 9(6) value 0.
77 w-hora pic 9(6) value 0.
copy enca04.cob.
procedure division.
inicio.
perform lee-tiempo.
open input sorteo.
perform lee-sorteo.
display titulos, erase.
display " ".
display encabezado.
display raya.
perform consulta until sw-fin = 1.
close sorteo.
fin.
stop run.
consulta.
add 1 to cont-ln.
move boleta to d-boleta.
move num-caja to d-num-caja.
move mm to f-mm.
move dd to f-dd.
move aa to f-aa.
move descuento to d-descuento.
if cont-ln > 23
display erase
move 0 to cont-ln
Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 65
else
display disp-forma.
perform lee-sorteo.
lee-sorteo.
read sorteo at end move 1 to sw-fin.
if sw-fin not = 1
if edo-reg = "*"
go to lee-sorteo.
lee-tiempo.
accept w-fecha from date.
accept w-hora from time.
move w-fecha to t-fecha.
move w-hora to t-hora.
inspect t-fecha replacing all " " by "/".
inspect t-hora replacing all " " by ":".

Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 66


Ejemplo: C0407
*-
*
* Ejemplo:
* Uso de cortes usando archivo sorteo.dat
* en pantalla
* Unida 4: formateo de reportes
*
*-
identification division.
program-id. prog0414.
author. R. Cesar Rodriguez Cervantes.
environment division.
input-output section.
file-control.
select sorteo assign to disk organization is sequential.
data division.
file section.
fd sorteo
label records are standard
value of file-id is "sorteo.dat"
data record is reg-sorteo.
01 reg-sorteo.
02 edo-reg pic x.
02 boleta pic 99.
02 fecha.
03 mm pic 99.
03 dd pic 99.
03 aa pic 99.
02 num-caja pic 99.
02 descuento pic 9(3).
working-storage section.
77 sw-fin pic 9 value 0.
77 cont-ln pic 99 value 0.
77 w-fecha pic 9(6) value 0.
77 w-hora pic 9(6) value 0.
77 fecha-c.
copy enca04.cob.
procedure division.
inicio.
perform lee-tiempo.
open input sorteo.
perform lee-sorteo.
move fecha to fecha-c.
perform encabezado.
perform consulta until sw-fin = 1.
close sorteo.
fin.
stop run.
consulta.
add 1 to cont-ln.
move boleta to d-boleta.
move num-caja to d-num-caja.
move mm to f-mm.
move dd to f-dd.
move aa to f-aa.
move descuento to d-descuento.
if cont-ln > 23
display erase
perform encabezado
move 0 to cont-ln
Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 67
else
display disp-forma.
perform lee-sorteo.
lee-sorteo.
read sorteo at end move 1 to sw-fin.
if sw-fin not = 1
if edo-reg = "*"
go to lee-sorteo.
lee-tiempo.
accept w-fecha from date.
accept w-hora from time.
move w-fecha to t-fecha.
move w-hora to t-hora.
inspect t-fecha replacing all " " by "/".
inspect t-hora replacing all " " by ":".
encabezado.
display titulos, erase.
display " ".
display encabezado.
display raya.

Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 68


Ejemplo: C0408
*-
* Ejemplo:
* Cortes a impresora usando el archivo sorteo.dat
* Unida 4: formateo de reportes
*-
identification division.
program-id. prog0415.
author. R. Cesar Rodriguez Cervantes.
environment division.
input-output section.
file-control.
select sorteo assign to disk organization is sequential.
select reporte assign to printer.
data division.
file section.
fd sorteo
label records are standard
value of file-id is "sorteo.dat"
data record is reg-sorteo.
01 reg-sorteo.
02 edo-reg pic x.
02 boleta pic 99.
02 fecha.
03 mm pic 99.
03 dd pic 99.
03 aa pic 99.
02 num-caja pic 99.
02 descuento pic 9(3).
fd reporte
label records are omitted
data record is linea.
01 linea pic x(80).
working-storage section.
77 sw-fin pic 9 value 0.
77 cont-ln pic 99 value 0.
77 w-fecha pic 9(6) value 0.
77 w-hora pic 9(6) value 0.
77 fecha-c pic 9(6) value 0.
copy enca04.cob.
01 disp-fecha.
02 filler pic x(20) value spaces.
02 filler pic x(19) value "Fecha Corte: A ".
02 disp-dia pic z9.
02 filler pic x(4) value " de ".
02 disp-mes pic x(10) value spaces.
02 filler pic x(6) value " de 19".
02 disp-anio pic z9.
procedure division.
inicio.
perform lee-tiempo.
perform abre-archivos.
perform lee-sorteo.
move fecha to fecha-c.
perform encabezados.
perform consulta until sw-fin = 1.
perform cierra-archivos.

Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 69


fin.
stop run.
consulta.
add 1 to cont-ln.
move boleta to d-boleta.
move num-caja to d-num-caja.
move mm to f-mm.
move dd to f-dd.
move aa to f-aa.
move descuento to d-descuento.
if fecha not = fecha-c
move fecha to fecha-c
perform encabezados
move 0 to cont-ln.
if cont-ln > 54
write line after advancing page.
perform lee-sorteo.
lee-sorteo.
read sorteo at end move 1 to sw-fin.
if sw-fin not = 1
if edo-reg = "*"
go to lee-sorteo.
lee-tiempo.
accept w-fecha from date.
accept w-hora from time.
move w-fecha to t-fecha.
move w-hora to t-hora.
inspect t-fecha replacing all " " by "/".
inspect t-hora replacing all " " by ":".
abre-archivos.
open input sorteo.
open output reporte.
cierra-archivos.
close sorteo, reporte.
encabezados.
write linea from titulos.
move spaces to linea.
write linea.
write linea from encabezado.
write linea from raya.
move spaces to linea.

Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 70


Apéndice A

Organizacion de archivos secuencial


indexada (ISAM)

Indexed Sequential Acces Method


Siguíendo esta organización cuando la información se
registra en el disco se mantiene un indice o tabla de
referencia.
Este indice se refiere a un campo de llave o clave dentro
de cada registro del archivo asociado con la dirección
correspondiente de ese registro.

Formato:
SELECT (nombre-de-archivo) ASSIGN TO (dispositivo)
[ORGANIZATION IS INDEXED]
ACCESS MODE IS RANDOM
RECORD KEY IS (nombre-de-datos)

Formato: WRITE
WRITE (nombre-de-registro)
[INVALID KEY (instrucciones imperativas)]

Formato: READ
READ (nombre-de-archivo)
[INVALID KEY (instrucciones imperativas)]

Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 71


Ejemplo: C0501
*
* ORGANIZACION DE ARCHIVOS INDEXADOS
* Altas en un archivo indexado
*
identification division.
program-id. prog0601.
author. R. Cesar Rodriguez Cervantes.
environment division.
input-output section.
file-control.
select materia assign to disk
organization is indexed
access mode is random
relative key is num-mat.
data division.
file section.
fd materia
label records standard
value of file-id is "Imateria.dat"
data record is reg-mat.
01 reg-mat.
02 num-mat pic x(15).
02 desc pic x(30).
working-storage section.
77 sigue pic x.
procedure division.
inicio.
perform abre-archivos.
move 1 to num-mat.
perform agrega-mat thru ex-agrega until num-mat = 0.
perform cierra-archivos.
fin.
stop run.
abre-archivos.
open output materia.
agrega-mat.
display "Materia: (0 fin)", erase.
accept num-mat.
if num-mat = "0"
go to ex-agrega.
display "Descripcion: ".
accept desc.
perform escribe-mat.
ex-agrega.
exit.
escribe-mat.
write reg-mat invalid key perform mensaje.
cierra-archivos.
close materia.
mensaje.
display "Error: Numero de Materia ya Existe".

Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 72


Apéndice B
Ejemplo de organizacion de archivos
relativos
Ejemplo: C0601
*
* ORGANIZACION DE ARCHIVOS RELATIVOS
* Altas en un archivo relativo
*
identification division.
program-id. prog0501.
author. R. Cesar Rodriguez Cervantes.
environment division.
input-output section.
file-control.
select materia assign to disk
organization is relative
access mode is random
relative key is num-reg.
data division.
file section.
fd materia
label records are standard
value of file-id is "materia.dat"
data record is reg-mat.
01 reg-mat.
02 num-mat pic 99.
02 desc pic x(20).
working-storage section.
77 sigue pic x.
77 num-reg pic 99 value 0.
procedure division.
inicio.
perform abre-archivos.
move 1 to num-mat.
perform agrega-mat thru ex-agrega until num-mat = 0.
perform cierra-archivos.
fin.
stop run.
abre-archivos.
open output materia.
agrega-mat.
display "No. de Materia: (0 fin)", erase.
accept num-mat.
if num-mat = 0
go to ex-agrega.
display "Nombre : ".
accept desc.
move num-mat to num-reg.
perform escribe-mat.
ex-agrega.
exit.
escribe-mat.
write reg-mat invalid key perform mensaje.
cierra-archivos.
close materia.

Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 73


mensaje.
display "Error: Numero de Materia ya Existe".

Ejemplo: C0602
*
* ORGANIZACION DE ARCHIVOS RELATIVOS
* Consulta en un archivo relativo
*
identification division.
program-id. prog0502.
author. R. Cesar Rodriguez Cervantes.
environment division.
input-output section.
file-control.
select materia assign to disk
organization is relative
access mode is random
relative key is num-reg.
data division.
file section.
fd materia
label records are standard
value of file-id is "materia.dat"
data record is reg-mat.
01 reg-mat.
02 num-mat pic 99.
02 desc pic x(20).
working-storage section.
77 sigue pic x.
77 num-reg pic 99 value 0.
procedure division.
inicio.
perform abre-archivos.
move 1 to num-mat.
perform cons-mat thru ex-cons until num-mat = 0.
perform cierra-archivos.
fin.
stop run.
abre-archivos.
open input materia.
cons-mat.
display "No. de Materia: (0 fin)", erase.
accept num-mat.
if num-mat = 0
go to ex-cons.
perform lee-mat.
display "Nombre : " desc.
ex-cons.
exit.
lee-mat.
read materia invalid key perform mensaje.
cierra-archivos.
close materia.
mensaje.
display "Error: Numero de Materia NO Existe".

Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 74


Bibliografia
Programacion Estructurada con COBOL, Nancy Stern, Mexico,
Compañia Edit. Cotinental S.A. de C.F., 1985

Introduccion al lenguaje cobol Rogelio Cesar Rodriguez Cervantes 75

Вам также может понравиться