Documentos de Académico
Documentos de Profesional
Documentos de Cultura
TP 330 2020-1
TP 330 2020-1
CÓDIGO: 330
NUMERO DE ORIGINALES: 1
FIRMA DEL ESTUDIANTE: Juan Miguel Briceño Paredes
UTILICE ESTA MISMA PÁGINA COMO CARÁTULA DE SU TRABAJO
PRÁCTICO
RESULTADOS DE CORRECCIÓN:
OBJ. Nº 5
0:NL 1:L
3. INTRODUCCIÓN.............................................................................................................................3
4. DESARROLLO TEÓRICO.......................................................................................................................5
Normas de Codificación......................................................................................................................5
ENVIRONMENT DIVISION...................................................................................................................7
DATA DIVISION...................................................................................................................................8
PROCEDURE DIVISION........................................................................................................................8
Párrafos y bucles.............................................................................................................................8
Párrafos o Rutinas.............................................................................................................................................9
PERFORM…THRU...............................................................................................................................................9
PERFORM…TIMES............................................................................................................................................10
PERFORM…UNTIL............................................................................................................................................10
PERFORM…VARYING.......................................................................................................................................11
Ficheros:...........................................................................................................................................12
2. RESUMEN
3. INTRODUCCIÓN
Fue en 1959 cuando se gestó este lenguaje, y a partir de ahí tuvo una gran
evolución en la que se han ido añadiendo diversas funciones. Los responsables
de esta creación fueron CODASYL, una entidad integrada por los fabricantes de
ordenadores, usuarios y el Departamento de Defensa de Estados Unidos.
Actualmente hay desafíos recientes como Java y Visual Basic y Python, que están
demostrando ser serios competidores.
El ordenador ejecuta instrucciones del programa, uno tras otro en secuencia hasta
que alcanza el final del programa, a menos que alguna instrucción en el programa
Veamos un ejemplo práctico muy simple para hacernos una pequeña idea de lo
que es un programa.
El punto es algo muy a tener en cuenta en COBOL ya que nos indica el final de
una línea y determinan todas las secciones, divisiones y párrafos. Un simple punto
que se nos olvide, daría muchos errores al compilar y tendríamos muchos dolores
de cabeza hasta dar con el problema.
Ejemplo:
IDENTIFICATION DIVISION.
PROGRAM-ID. Programa1.
AUTHOR. Ismael.
INSTALLATION. WWW.
REMARKS. Programa de prueba.
ENVIRONMENT DIVISION.
DATA DIVISION.
Es donde definiremos los datos que vayamos a utilizar en nuestro programa. Existen
Otras secciones dentro de la DATA DIVISION que las veremos más adelante.
PROCEDURE DIVISION.
Algunos compiladores COBOL requieren que todas las divisiones deben estar
presente en un programa, mientras que otros sólo requieren mínimo de la
IDENTIFICATION DIVISION y la PROCEDURE DIVISION. Yo estoy haciendo estos
pequeños apuntes con el compilador OpenCobol bajo linux.
Este ejemplo del programa “hola mundo” que encontraremos en casi todos los
manuales y tutoriales que existen, es perfectamente válido cuando se compila con el
compilador OpenCobol:
IDENTIFICATION DIVISION.
PROGRAM-ID. Prueba.
PROCEDURE DIVISION.
Inicio.
DISPLAY "Hello world"
STOP RUN.
Párrafos y bucles
En casi todos los programas que se pueden crear, existen tareas que pueden o no
repetitivas.
Por ejemplo, podemos tener un proceso que nos pida dos números unas 10 veces y
proceso, lo que hacemos es hacer un bucle y que lo haga 10 veces, pero en realidad
finalizar el programa. Las rutinas es una forma de alterar ese orden, es decir, le
damos el control a un párrafo y ejecuta todas las instrucciones que haya en éste.
Veamos un ejemplo:
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".
último desde la rutina1 llamamos al párrafo rutina 3. Una vez terminado estas rutinas,
el programa vuelve a su orden normal, es decir, realiza las sentencias que le faltaban
del párrafo Inicio, terminando así con la ejecución del programa. También hay que
decir, que hacer párrafos estructura un poco mejor el programa y puede resultar un
IDENTIFICATION DIVISION.
PROGRAM-ID. Programa.
AUTHOR. Ismael.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 NOMBRE PIC X(12).
01 APELLIDO PIC X(12).
PROCEDURE DIVISION.
INICIO.
PERFORM PIDENOMBRE THRU PIDEAPELLIDO
STOP RUN.
PIDENOMBRE.
DISPLAY "DAME TU NOMBRE:"
ACCEPT NOMBRE.
PIDEAPELLIDO.
DISPLAY "DAME TUS APELLIDOS:"
ACCEPT APELLIDO.
PERFORM…UNTIL. Este tipo de sentencia sirve para realizar un párrafo hasta que
se cumpla la condición. Veamos un ejemplo:
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.
Si observamos un poco, la diferencias radican en que ahora tiene un “fin del bucle”.
Este proceso lo que haces es mostrar un saludo 5 veces. Para eso lo que hemos
utilizado es una variable (LI) para contar el número de veces que saludamos. A
¿Porque hacemos esto? Este tipo de procesos repetitivos lo que primero que hace es
cumpla la condición. Con este tipo de bucle nos ahorraríamos algunas instrucciones,
sentencias que hay dentro. A continuación aumenta el valor de LI según lo que tenga
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
decir, de forma secuencial pasando por los registros anteriores para ir a uno
específico.
determinado sin tener que pasar por cualquiera de los registros anteriores.
Algunas organizaciones son más versátiles que otras, por ejemplo, un archivo con
una organización indexada puede tener acceso a sus registros de forma secuencial o
de forma directa, pero los registros en un archivo con una organización secuencial
pueden agregar y leer y son un poco más engorrosos para poder actualizar, modificar
o borrar un registro.
Se usa el término archivo o fichero para almacenar todos aquellos valores que
necesitemos en un programa.
Todos los campos juntos es lo que forma registro, es decir, la fila entera, que
resulta que es toda la información que tenemos de una sola persona u objeto.
secuencial en cobol:
OPEN, CLOSE, READ, WRITE . Vamos a ir viéndolos poco a poco y como funcionan.
Antes de trabajar con un fichero, hay que asegurarse de abrirlo correctamente para
acceder a los datos que pueda contener para trabajar con ellos. Existen 3 formas de
abrir un fichero:
agregar más registros a los ya existentes. Cuando se abre de esta forma, el puntero
requisito fundamental es que el fichero exista, si no fuera asi la instrucción OPEN nos
mostraría un error.
debidamente todos los ficheros que hayamos utilizado, ya que puede grabarse los
Una vez que tengamos un fichero abierto, toca usar una instrucción para leer cada
memoria una copia del registro que está leyendo para trabajar con él.
INTO. Esto se utiliza para usar una variable en donde almacenar el registro. Al
AT END. Este instrucción es la que nos indica cuando ha llegado al final del
fichero, es decir, cuando haya terminado de leer todos los registros que haya en
el fichero.
Esta instrucción sirve para grabar los datos en el fichero que usamos como
almacenamiento de datos.
FROM. Esto sirve para realizar una copia en una variable del registro que
y luego los leeremos y visualizaremos sus datos para ir viendo cómo funciona:
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.
tipos de organizaciones;
Indexado. Organización basada en uno o varios índices, es decir, por una o varias
Organización Indexada. Este tipo de archivos o ficheros son los más utilizados en
Random. Permite el acceso de forma directa, sin necesidad de pasar por los
registros anteriores.
Cuando utilizamos los ficheros indexados, existen varios parámetros extras que
decir, pasará por todos los registros anteriores para consultar uno específico.
directamente al registro que vayamos a consultar sin necesidad de pasar por los
anteriores.
programa.
consultar. Se pueden hacer hasta 254 claves de este tipo en un sólo archivo.
Este tipo de claves se suele utilizar para realizar consultas por otro campo que no
sea la clave principal, por ejemplo, por fechas o por nombre…etc. Por defecto si
no se dice nada, son claves que no pueden duplicarse y son únicas por registro.
Si queremos una clave alternativa que se pudiera repetir hay que indicarle la
El código de error con el que trabajaremos será el “35”. Este número se guarda en la
exista.
¿Qué cosas podemos hacer con los archivos indexados? Pues básicamente
podemos hacer OPEN, READ, WRITE y con estos tipos de archivos podemos hacer
REWRITE, DELETE y START gracias a los índices para identificar a cada registro.
Antes de trabajar con un fichero, hay que asegurarse de abrirlo correctamente para
acceder a los datos que pueda contener para trabajar con ellos. Existen 4 formas de
abrir un fichero:
Hay que tener cuidado con esto, ya que crea un nuevo fichero cada vez que lo
registros.
debidamente todos los ficheros que hayamos utilizado, ya que puede grabarse los
READ.
Hay que tener en cuenta que la lectura en este tipo de archivos se debe hacer en
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
hora de escribir los registros, ya que dependemos de una clave principal para guardar
los cambios.
Ahora dependemos del valor de uno o varios índices para poder leer un registro.
KEY IS. Se debe indicar el campo que utilizamos como índice para la consulta.
válida.
WRITE.
WRITE registro FROM variable
INVALID KEY instrucciones
NOT INVALID KEY instrucciones
END-WRITE
FROM. Esto sirve para realizar una copia en una variable del registro que
fichero.
REWRITE.
REWRITE registro FROM variable
INVALID KEY instrucciones
NOT INVALID KEY instrucciones
END-REWRITE
FROM. Esto sirve para realizar una copia en una variable del registro que
fichero.
DELETE.
DELETE nombreinternodelfichero
INVALID KEY instrucciones
NOT INVALID KEY instrucciones
END-DELETE
fichero.
NOT INVALID KEY. Realiza las instrucciones que aquí se exponen cuando no
ocurre error alguno al grabar los datos en el archivo. Hay que tener en cuenta
que para usar esta instrucción hay que hacer un READ antes, como ocurre con
la START.
START.
20.000 registros y sólo queremos visualizar a partir del registro 8000. Si lo hiciéramos
de la forma que sabemos hasta ahora, pasaríamos por los 7999 registros que se
encuentran antes y sería un poco engorroso y lento. Para esto sirve la START, se
posiciona en el registro que queramos sin pasar por los anteriores para hacer una
IS =. Igual a..
Cuando utilizamos esta sentencia, éste no lee, sólo coloca el “cursor” en el registro