Está en la página 1de 43

Lenguajes Orientados a Sistemas de Gestión

1. Introducción. Uso Del Edit _________________________________________ 2


2. Cargar Edit ______________________________________________________ 2
3. Salir Del Edit _____________________________________________________ 3
4. Operaciones Básicas Con Edit ______________________________________ 4
4.1. Introducir/Borrar Texto _______________________________________________ 4
4.2 Mover Cursor _______________________________________________________ 4
4.3 Operaciones Con Bloques De Texto_____________________________________ 5
4.3.1. Copiar Un Bloque De Texto ________________________________________________ 5
4.3.2. Mover Un Bloque De Texto ________________________________________________ 5
4.3.3. Borrar Un Bloque De Texto ________________________________________________ 6

4.4. Buscar y Sustituir ___________________________________________________ 6

5. Introducción al RM/COBOL-85 ______________________________________ 7


6. Compilación _____________________________________________________ 7
7. Ejecución _______________________________________________________ 9
8. Ejercicios _______________________________________________________ 9

Manual de Prácticas Página - 1 - septiembre de 2009


Lenguajes Orientados a Sistemas de Gestión

1. INTRODUCCIÓN. USO DEL EDIT


EDIT es la herramienta por excelencia para la gestión de ficheros de texto en el DOS 5.0 y
superiores. EDIT es un editor de pantalla completa, lo que significa que se puede ver todo el
texto en la pantalla y desplazarse por él usando las teclas de cursor. Aunque no es un editor
preparado para la escritura de un programa fuente escrito en COBOL (no controla los
márgenes), si está capacitado para generar ficheros fuentes sin inclusión de caracteres
extraños que provoquen errores de compilación.

2. CARGAR EDIT
Como cualquier orden EDIT se ejecuta desde la línea de comandos. La sintaxis de la orden
es la siguiente:
EDIT [nombre de fichero] [/H]
Ejemplo 1: No se introduce ningún nombre de fichero
EDIT Se carga el EDIT, aparece la figura siguiente, con un mensaje que le pide si quiere ver
la ayuda sobre EDIT. Esta ayuda está formada por pantallas de texto que le explican
como trabaja EDIT. Si desea entrar en la ayuda pulse INTRO, en caso contrario pulse
ESC.

Ejemplo 2: Se introduce como parámetro un fichero que ya existe.


EDIT a:\programas\prog-1.cbl Al ejecutar esta orden aparecerá una pantalla en la que se
puede visualizar las primeras líneas de código del programa prog-1.cbl.

Manual de Prácticas Página - 2 - septiembre de 2009


Lenguajes Orientados a Sistemas de Gestión

Puede utilizar las flechas de cursor para moverse a través del texto y las teclas RePag y
AvPag para retroceder y avanzar una página completa. En la esquina inferior derecha se
visualizan varios números que indican la fila y la columna donde está situado el cursor. En la
parte superior se muestra el nombre del fichero que se está editando.
Ejemplo 3: Se introduce como parámetro un fichero que no existe.
EDIT a:\programas\prog-2.cbl: Al ejecutar esta orden aparecerá una pantalla en blanco.
Pero el fichero ya tiene asignado un nombre.

3. SALIR DEL EDIT


Una vez finalizado su trabajo con EDIT tendrá que regresar al DOS. Para salir del EDIT
bastará con pulsar la combinación del teclas: ALT + A Activa el Menú Archivo.
L Si en el fichero se ha efectuado algún cambio aparecerá la siguiente figura

Manual de Prácticas Página - 3 - septiembre de 2009


Lenguajes Orientados a Sistemas de Gestión

Si Graba el fichero con los nuevos cambios.


No Regresa al DOS sin grabar las modificaciones, respetando el fichero original.
Cancelar Devuelve al usuario al programa EDIT para que pueda seguir trabajando.
Ayuda Muestra la ayuda.
Para activar una de las cuatro opciones el usuario pulsará la primera letra de cada una de
las opciones, excepto para Cancelar que se utiliza la tecla ESC.

4. OPERACIONES BÁSICAS CON EDIT

4.1. INTRODUCIR/BORRAR TEXTO


Para introducir texto en un documento, simplemente tiene que situar el cursor en el lugar del
documento donde desea colocar el texto y empezar a escribir. En la figura 3 se muestran las
teclas de ayuda para la introducción del texto y en al figura 4 las que permiten borrar texto.
INSERTAR TEXTO

Tecla Descripción
INS Cambia entre inserción y sustitución
INTRO Inserta línea en blanco debajo del cursor
CTRL-N Inserta línea en blanco encima del cursor
CTRL-P Permite insertar códigos de control

BORRAR TEXTO

Tecla Descripción
Retroceso Borra el carácter a la izquierda del cursor
Supr Borra el carácter encima del cursor
CTRL-T Borra la palabra donde está el cursor
CTRL-Q,Y Borra desde el cursor hasta fin de línea
CTRL-Y Borra la línea donde está el cursor
SHIFT-TAB Borra espacios en blancos al principio

4.2 MOVER CURSOR


MOVER CURSOR

Manual de Prácticas Página - 4 - septiembre de 2009


Lenguajes Orientados a Sistemas de Gestión

Tecla Descripción
Cursor Arriba Mueve el cursor una línea arriba
Cursor Abajo Mueve el cursor una línea abajo
Cursor Derecha Mueve el cursor un carácter a la derecha
Cursor Izquierda Mueve el cursor un carácter a la izquierda
CTRL Cursor Derecha Mueve el cursor una palabra a la derecha
CTRL Cursor Izda Mueve el cursor una palabra a la izquierda
Inicio Mueve el cursor al principio de la página
Fin Mueve el cursor al final de la página
CTRL Intro Mueve el cursor al principio de la línea siguiente
CTRL Inicio Mueve el cursor al principio del fichero
CTRL Fin Mueve el cursor al final del fichero

4.3 OPERACIONES CON BLOQUES DE TEXTO


El funcionamiento general de todas las operaciones con bloques es siempre el mismo:
1. Se selecciona un determinado bloque de texto.
2. Se ejecuta una acción, que se realizará sobre el bloque previamente seleccionado.
Para seleccionar un bloque se utiliza la tecla Shift en combinación con cualquiera de las
teclas de movimiento del cursor. Primero tiene que situar el cursor en uno de los extremos
del bloque que quiere seleccionar. Luego pulsar la tecla Shift y, mientras la mantiene
presionada, usar las teclas de movimiento del cursor para llegar hasta el otro extremo del
bloque. Por último soltar la tecla Shift.
Las acciones que se pueden ejecutar son las siguientes:

4.3.1. COPIAR UN BLOQUE DE TEXTO


1. Se selecciona el bloque de texto a copiar.
2. Transferir el bloque desde el documento al Portapapeles, pulsando Ctrl-Ins.
3. Situar el cursor en el lugar donde se quiere colocar el texto y copiar el contenido del
Portapapeles al documento, pulsando la tecla Shift-Ins.

4.3.2. MOVER UN BLOQUE DE TEXTO


1. Se selecciona el bloque de texto a mover.
2. Transferir el bloque desde el documento al Portapapeles, y borrar el bloque del
documento con Shift-Supr.

Manual de Prácticas Página - 5 - septiembre de 2009


Lenguajes Orientados a Sistemas de Gestión

3. Situar el cursor en el lugar donde se quiere colocar el texto y copiar el contenido del
Portapapeles al documento, pulsando la tecla Shift-Ins.

4.3.3. BORRAR UN BLOQUE DE TEXTO


1. Se selecciona el bloque de texto a borrar.
2. Pulsar la tecla Supr.

4.4. BUSCAR Y SUSTITUIR


Para buscar una cadena de caracteres en el texto cargado con EDIT tiene que pulsar las
teclas Ctrl-Q, F. Inmediatamente aparecerá la caja de diálogo mostrada en la figura.

En el recuadro de texto se ha de introducir la cadena de caracteres que se quiere buscar.


Por defecto, en el recuadro de texto aparece la palabra donde está situado el cursor. El
usuario puede aceptar este valor por defecto o pulsar Intro para escribir su propia cadena de
caracteres.
Se pueden controlar otros aspectos como:
1. Mayúsculas/Minúsculas. Indica si se tiene en cuenta o no la diferencia entre
mayúsculas y minúsculas. Si no está activada, no se distingue entre mayúsculas y
minúsculas.
2. Palabra Completa. Sirve para indicar que se quiere buscar únicamente palabras
separadas, completas. Si no está activada, al introducir una palabra se encontrarán
todas las palabras donde ésta aparezca como subcadena.
Cuando se activa el proceso de búsqueda y se encuentra una ocurrencia de la cadena de
caracteres especificada, el cursor se situará sobre la zona de texto donde se ha encontrado
la palabra, resaltándola. Si se quiere repetir la búsqueda, se tiene que pulsar la tecla F3.

Manual de Prácticas Página - 6 - septiembre de 2009


Lenguajes Orientados a Sistemas de Gestión

Para sustituir una cadena de caracteres por otra en el texto cargado con EDIT tiene que
pulsar las teclas Ctrl-Q, A.
Inmediatamente aparecerá la caja de diálogo mostrada en la figura.

En el recuadro de texto se ha de introducir la cadena de caracteres que se quiere buscar, y


la cadena de caracteres que reemplazará a la cadena buscada. Si se elige Buscar y
Verificar cada vez que se encuentre la palabra que se desea cambiar se le pedirá al usuario
que confirme el cambio. Por el contrario, si se elige Cambiar todo, se cambiará
automáticamente todas las palabras sin pedirle confirmación al usuario.
El proceso de búsqueda y el de sustitución comienza a partir de la posición del cursor,
llegando hasta el final del texto y comenzando desde el principio del texto hasta alcanzar
otra vez la posición del cursor.

5. INTRODUCCIÓN AL RM/COBOL-85
Un programa fuente RM/COBOL-85 se compila en un solo paso. Las acciones que ejecuta
el compilador sobre el programa fuente son las siguientes:
1. Verifica si la sintaxis es correcta.
2. Crea un programa objeto que se puede ejecutar con el sistema de ejecución
RM/COBOL-85.

6. COMPILACIÓN
Un programa escrito en RM/COBOL-85 se compila desde el símbolo del sistema operativo
C:>. La orden para compilar es la siguiente:
RMCOBOL nombre-programa [opciones]

Manual de Prácticas Página - 7 - septiembre de 2009


Lenguajes Orientados a Sistemas de Gestión

Si no se especifica la extensión en el nombre del programa, el compilador asume la


extensión CBL. El fichero resultante de la compilación tendrá el mismo nombre base que el
programa y la extensión COB.

Ejemplo 1:
RMCOBOL prog-1 Compila el programa prog-1, si no hay errores, el programa objeto
resultante será prog-1.cob.
Cuando el programa fuente no se encuentra en el directorio de trabajo, se tiene que
especificar su ruta de acceso.
Ejemplo 2:
RMCOBOL a:\practicas\prog-2 Compila el programa prog-2 que se encuentra en la unidad
A, dentro del directorio practicas.
A continuación se muestran las opciones más usuales que podemos utilizar:
Opciones Significado
L[=ruta] Crea un fichero en el disco conteniendo un listado del programa fuente
junto con los mensajes de error que se puedan producirse. Si no se
especifica la ruta de acceso, el fichero se crea en el directorio de trabajo.
O[=ruta] Especifica la ruta de acceso para ubicar el programa objeto.
P Escribe por la impresora una copia del programa fuente junto con los
mensajes de error que se puedan producirse.
Ejemplo 3:
RMCOBOL prog-3 P, L Compila el programa prog-3, genera un listado por impresora junto
con los errores que puedan producirse y crea en el disco el fichero
prog-3.lst que contiene el mismo listado anterior. El programa
objeto resultante será prog-3.cob.
Los errores de sintaxis se clasifican en tres categorías: I o información. W o aviso y E o
ejecución. En el listado un símbolo $ se corresponde con cada mensaje de error para indicar
el lugar donde se produce o se aplica.

Ejemplo 4:
43 00031 003800 WRITE REG-IMP FROM CABECERA.
$ $

**** 1) 0263: E Identifier is not defined. (scan supressed).


**** 2) 0005: I Scan resumed.

Manual de Prácticas Página - 8 - septiembre de 2009


Lenguajes Orientados a Sistemas de Gestión

En el ejemplo, el primer símbolo significa donde se ha producido el error 1 (E Identificador


no definido) y el segundo símbolo $ indica donde se aplica la información dada por el
mensaje 2 (I se reanuda la verificación de la sintaxis).
Un programa que no tiene errores E no podrá ejecutarse hasta que los errores sean
corregidos, mientras que si los errores son I o W el programa puede ejecutarse, pero la
solución es incorrecta.
Cuando la compilación de un programa da lugar a errores, éstos se corrigen utilizando el
editor y a continuación se vuelve a compilar de nuevo.

7. EJECUCIÓN
Una vez que el programa se ha compilado y no tiene errores puede ser ejecutado. La orden
para ejecutar es la siguiente:
RUNCOBOL nombre-programa [opciones]
Si no se especifica la extensión en el nombre del programa, el compilador asume la
extensión COB.
Ejemplo 5:
RUNCOBOL prog-1 Ejecuta el programa prog-1.cob.
Cuando el programa objeto no se encuentra en el directorio de trabajo, se tiene que
especificar su ruta de acceso.
Ejemplo 6:
RUNCOBOL a:\practicas\prog-2 Ejecuta el programa prog-2.cob que se encuentra en la
unidad A, dentro del directorio practicas.
A continuación se muestran las opciones más usuales que podemos utilizar:
Opciones Significado
K Suprime el logotipo.

8. EJERCICIOS
Ejercicio 1.
Objetivo: Muestra campos de edición.
IDENTIFICATION DIVISION.
PROGRAM-ID. EJER-1.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
CURRENCY SIGN IS 'T'

Manual de Prácticas Página - 9 - septiembre de 2009


Lenguajes Orientados a Sistemas de Gestión

DECIMAL-POINT IS COMMA.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 CAMPO PIC S9(5)V99 VALUE +1234,56.
77 EDIC-1 PIC -ZZZZ9,99.
77 EDIC-2 PIC TZZZZ9,99.
77 EDIC-3 PIC -ZZZZ9,99.
77 EDIC-4 PIC ZZZZZ.
77 EDIC-5 PIC ZZ.ZZ9,99.
77 EDIC-6 PIC T****9,99.
77 EDIC-7 PIC -*****,99.
77 EDIC-8 PIC -----9,99.
77 EDIC-9 PIC +++++9,99.
PROCEDURE DIVISION.
INICIO.
DISPLAY SPACES ERASE.
DISPLAY "EJEMPLO DE USO DE CAMPOS DE EDICION"
LINE 6, POSITION 01.
MOVE CAMPO TO EDIC-1.
DISPLAY "PIC -ZZZZ9,99 " EDIC-1.
MOVE CAMPO TO EDIC-2.
DISPLAY "PIC TZZZZ9,99 " EDIC-2.
MOVE CAMPO TO EDIC-3.
DISPLAY "PIC -ZZZZ9,99 " EDIC-3.
MOVE CAMPO TO EDIC-4.
DISPLAY "PIC ZZZZZ " EDIC-4.
MOVE CAMPO TO EDIC-5.
DISPLAY "PIC ZZ.ZZ9,99 " EDIC-5.
MOVE CAMPO TO EDIC-6.
DISPLAY "PIC T****9,99 " EDIC-6.
MOVE CAMPO TO EDIC-7.
DISPLAY "PIC -*****,99 " EDIC-7.
MOVE CAMPO TO EDIC-8.
DISPLAY "PIC -----9,99 " EDIC-8.
MOVE CAMPO TO EDIC-9.
DISPLAY "PIC +++++9,99 " EDIC-9.
STOP RUN.
Ejercicio 2.
Objetivo: Muestra campos de edición.
IDENTIFICATION DIVISION.
PROGRAM-ID. EJER-2.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 CAMPO1 PIC X(24).
77 EDIC-1 PIC X(24).
77 EDIC-2 PIC X(10)BBBX(14).
77 EDIC-3 PIC X(6).

Manual de Prácticas Página - 10 - septiembre de 2009


Lenguajes Orientados a Sistemas de Gestión

77 EDIC-4 PIC AAABBA(12).


PROCEDURE DIVISION.
INICIO.
DISPLAY SPACES ERASE.
DISPLAY "EJEMPLO DE USO DE CAMPOS DE EDICION"
LINE 6, POSITION 01.
DISPLAY "Introduzca una cadena de caracteres: "
NO ADVANCING.
ACCEPT CAMPO1 PROMPT "-".
MOVE CAMPO1 TO EDIC-1.
DISPLAY "PIC X(24) : " EDIC-1.
MOVE CAMPO1 TO EDIC-2.
DISPLAY "PIC X(10)BBBX(14) : " EDIC-2.
MOVE CAMPO1 TO EDIC-3.
DISPLAY "PIC X(6) : " EDIC-3.
MOVE CAMPO1 TO EDIC-4.
DISPLAY "PIC AAABBA(12) : " EDIC-4.
STOP RUN.
Ejercicio 3.
Objetivo: Muestra la sentencia ACCEPT.
IDENTIFICATION DIVISION.
PROGRAM-ID. EJER-3.
AUTHOR. L.O.S.G
INSTALLATION. L.P.S.I.
DATE-WRITTEN. 25-Enero-1994.
DATE-COMPILED. 25-Enero-1994.
REMARKS. Programa de prueba para ACCEPT.
SECURITY. No tiene.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. Ordenador.
OBJECT-COMPUTER. Ordenador.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 CAMPO PIC X(24).
PROCEDURE DIVISION.
INICIO.
DISPLAY SPACES ERASE.
DISPLAY "EJEMPLO DE USO SENTENCIA ACCEPT"
LINE 6, POSITION 01.
DISPLAY "Introduzca una cadena de caracteres: "
NO ADVANCING.
ACCEPT CAMPO PROMPT "-".
ACCEPT CAMPO LINE 10 POSITION 38 PROMPT "-" NO BEEP.
ACCEPT CAMPO LINE 11 POSITION 38 PROMPT "*".
ACCEPT CAMPO LINE 12 POSITION 38 PROMPT "/" UPDATE.
ACCEPT CAMPO LINE 13 POSITION 38 PROMPT "#" ECHO.

Manual de Prácticas Página - 11 - septiembre de 2009


Lenguajes Orientados a Sistemas de Gestión

ACCEPT CAMPO LINE 14 POSITION 38 PROMPT "!" TAB.


ACCEPT CAMPO LINE 15 POSITION 38 PROMPT "=" LOW.
STOP RUN.
Ejercicio 4.
Objetivo: Programa de prueba verbo ACCEPT
IDENTIFICATION DIVISION.
PROGRAM-ID. EJER-4.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 FECHA.
02 AA PIC 99.
02 MM PIC 99.
02 DD PIC 99.
77 DIA PIC 9(5).
77 TIEMPO PIC 9(8).
77 DIA-DE-SEMANA PIC 9.
PROCEDURE DIVISION.
INICIO.
DISPLAY SPACES ERASE.
DISPLAY "EJEMPLO FECHA USO SENTENCIA ACCEPT"
LINE 6, POSITION 01.
ACCEPT FECHA FROM DATE.
DISPLAY FECHA LINE 10, POSITION 01.
DISPLAY DD LINE 11, POSITION 01.
DISPLAY MM LINE 12, POSITION 01.
DISPLAY AA LINE 13, POSITION 01.
ACCEPT DIA FROM DAY.
DISPLAY DIA LINE 14, POSITION 01.
ACCEPT TIEMPO FROM TIME.
DISPLAY TIEMPO LINE 15, POSITION 01.
ACCEPT DIA-DE-SEMANA FROM DAY-OF-WEEK.
DISPLAY DIA-DE-SEMANA LINE 16, POSITION 01.
STOP RUN.

Ejercicio 5.
Objetivo: Muestra movimientos de tipo Numerico.
IDENTIFICATION DIVISION.
PROGRAM-ID. EJER-5
DATA DIVISION.
WORKING-STORAGE SECTION.
77 CAMPOA PIC 9999 VALUE 1234.
77 CAMPOB PIC 9(4) VALUE 3987.
77 CAMPOC PIC 999V99 VALUE 456.73.
77 CAMPOD PIC 9(5)V9 VALUE 83945.1.
77 CAMPOE PIC 9V9 VALUE 3.5.
77 CAMPOF PIC 9(4)V9(3) VALUE 1345.782.

Manual de Prácticas Página - 12 - septiembre de 2009


Lenguajes Orientados a Sistemas de Gestión

77 CAMPOG PIC 9,999.99.


77 CAMPOH PIC 99V9.
77 CAMPOI PIC 99V99 VALUE 20.45.
PROCEDURE DIVISION.
PROGRAMA.
DISPLAY SPACES ERASE.
DISPLAY SPACES.
DISPLAY SPACES
DISPLAY CAMPOA CONVERT " ", CAMPOB CONVERT " "
CAMPOC CONVERT " ", CAMPOD CONVERT " "
CAMPOE CONVERT " ", CAMPOF CONVERT " "
CAMPOG " ", CAMPOH CONVERT " "
CAMPOI CONVERT.
MOVE CAMPOA TO CAMPOB.
MOVE CAMPOC TO CAMPOD CAMPOE CAMPOF
MOVE 6450.7 TO CAMPOG.
MOVE 0 TO CAMPOH
MOVE ZERO TO CAMPOI
DISPLAY CAMPOA CONVERT " ", CAMPOB CONVERT " "
CAMPOC CONVERT " ", CAMPOD CONVERT " "
CAMPOE CONVERT " ", CAMPOF CONVERT " "
CAMPOG " ", CAMPOH CONVERT " "
CAMPOI CONVERT.
STOP RUN.
Ejercicio 6.
Objetivo: Muestra movimientos de tipo NO NUMERICO.
IDENTIFICATION DIVISION.
PROGRAM-ID. EJER-6.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 CAMPOA PIC A(4) VALUE 'LEON'.
77 CAMPOB PIC A(9) VALUE 'SALAMANCA'.
77 CAMPOC PIC X(8).
77 CAMPOD PIC X(5).
77 CAMPOE PIC X(12).
77 CAMPOF PIC X(12) JUSTIFIED RIGHT.
77 CAMPOG PIC A(6) VALUE 'REGION'.
PROCEDURE DIVISION.
PROGRAMA.
DISPLAY SPACES ERASE.
DISPLAY CAMPOA LINE 10 POSITION 10 REVERSE.
DISPLAY CAMPOB LINE 11 POSITION 10 REVERSE.
DISPLAY CAMPOC LINE 12 POSITION 10 REVERSE.
DISPLAY CAMPOD LINE 13 POSITION 10 REVERSE.
DISPLAY CAMPOE LINE 14 POSITION 10 REVERSE.
DISPLAY CAMPOF LINE 15 POSITION 10 REVERSE.
DISPLAY CAMPOG LINE 16 POSITION 10 REVERSE.

Manual de Prácticas Página - 13 - septiembre de 2009


Lenguajes Orientados a Sistemas de Gestión

MOVE CAMPOA TO CAMPOB.


MOVE 'ALFABETO' TO CAMPOC, CAMPOD, CAMPOE, CAMPOF.
MOVE SPACES TO CAMPOG.
DISPLAY CAMPOA LINE 10 POSITION 30 REVERSE.
DISPLAY CAMPOB LINE 11 POSITION 30 REVERSE.
DISPLAY CAMPOC LINE 12 POSITION 30 REVERSE.
DISPLAY CAMPOD LINE 13 POSITION 30 REVERSE.
DISPLAY CAMPOE LINE 14 POSITION 30 REVERSE.
DISPLAY CAMPOF LINE 15 POSITION 30 REVERSE.
DISPLAY CAMPOG LINE 16 POSITION 30 REVERSE.
STOP RUN.
Ejercicio 7.
Objetivo: Muestra el verbo MOVE CORRESPONDING.
IDENTIFICATION DIVISION.
PROGRAM-ID. EJER-7.
DATA DIVISION.
WORKING-STORAGE SECTION.

01 DATOS-PERSONALES.
02 CODIGO PIC 9999 VALUE 1234.
02 APELLIDOS PIC A(35) VALUE 'GARCIA GARCIA'.
02 NUM-HIJOS PIC 99 VALUE 3.
02 SUELDO PIC 9(6) VALUE 120000.
01 VISUALIZAR.
02 FILLER PIC X(5).
02 CODIGO PIC 9999.
02 FILLER PIC X(5).
02 APELLIDOS PIC A(35).
02 FILLER PIC X(10).
02 NUM-HIJOS PIC Z9.
02 FILLER PIC X(10).
02 SUELDO PIC 999,999.
PROCEDURE DIVISION.
PROGRAMA.
DISPLAY SPACES ERASE.
DISPLAY SPACES.
DISPLAY SPACES.
DISPLAY DATOS-PERSONALES.
MOVE CORRESPONDING DATOS-PERSONALES TO VISUALIZAR.
DISPLAY VISUALIZAR.
STOP RUN.
Ejercicio 8.
Objetivo: Muestra verbos aritméticos
IDENTIFICATION DIVISION.
PROGRAM-ID. EJER-8.
DATA DIVISION.

Manual de Prácticas Página - 14 - septiembre de 2009


Lenguajes Orientados a Sistemas de Gestión

WORKING-STORAGE SECTION.
77 CAMPOA PIC 99V9 VALUE 12.5.
77 CAMPOB PIC 999V99 VALUE 463.20.
77 CAMPOC PIC 99 VALUE 35.
77 CAMPOD PIC 9999 VALUE 57.
77 CAMPOE PIC 9 VALUE 4.
77 CAMPOF PIC 9999V9 VALUE 126.4.
77 CAMPOG PIC 99V9 VALUE 89.5.
77 CAMPOH PIC 99V9.
PROCEDURE DIVISION.
SUMA.
DISPLAY SPACES ERASE.
DISPLAY SPACES.
DISPLAY SPACES.
DISPLAY CAMPOA CONVERT " ", CAMPOB CONVERT " "
CAMPOC CONVERT " ", CAMPOD CONVERT " "
CAMPOE CONVERT " ", CAMPOF CONVERT " "
CAMPOG CONVERT " ", CAMPOH CONVERT.
ADD CAMPOA TO CAMPOB.
ADD 100, CAMPOA, 125.7, CAMPOC TO CAMPOB.
ADD CAMPOA, CAMPOE, -9, TO CAMPOB, CAMPOG.
ADD CAMPOA, 250, CAMPOC GIVING CAMPOD.
ADD CAMPOA, 1400.28 GIVING CAMPOH, CAMPOF ROUNDED.
DISPLAY CAMPOA CONVERT " ", CAMPOB CONVERT " "
CAMPOC CONVERT " ", CAMPOD CONVERT " "
CAMPOE CONVERT " ", CAMPOF CONVERT " "
CAMPOG CONVERT " ", CAMPOH CONVERT.
ADD CAMPOA, 1400.28 GIVING CAMPOH ON SIZE ERROR
MOVE 10.0 TO CAMPOH.
DISPLAY CAMPOA CONVERT " ", CAMPOB CONVERT " "
CAMPOC CONVERT " ", CAMPOD CONVERT " "
CAMPOE CONVERT " ", CAMPOF CONVERT " "
CAMPOG CONVERT " ", CAMPOH CONVERT .
STOP RUN.
Ejercicio 9.
Objetivo: Muestra verbos aritméticos.
IDENTIFICATION DIVISION.
PROGRAM-ID. EJER-9.
AUTHOR. L.O.S.G.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. Ordenador.
OBJECT-COMPUTER. Ordenador.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
DATA DIVISION.
WORKING-STORAGE SECTION.

Manual de Prácticas Página - 15 - septiembre de 2009


Lenguajes Orientados a Sistemas de Gestión

77 CAMPO1 PIC S999V99 VALUE 100,00.


77 CAMPO2 PIC S999V99 VALUE 200,00.
77 CAMPO3 PIC S99V99 VALUE 2,00.
PROCEDURE DIVISION.
INICIO.
DISPLAY SPACES ERASE.
DISPLAY "CAMPO 1" LINE 05 POSITION 20.
DISPLAY "CAMPO 2" LINE 05 POSITION 40.
DISPLAY "CAMPO 3" LINE 05 POSITION 60.
DIVIDE 5 INTO CAMPO1.
DIVIDE CAMPO1 INTO CAMPO2.
DIVIDE CAMPO1 INTO CAMPO2 GIVING CAMPO3.
DIVIDE CAMPO1 BY CAMPO2 GIVING CAMPO3.
DISPLAY CAMPO1 LINE 10 POSITION 20 CONVERT.
DISPLAY CAMPO2 LINE 10 POSITION 40 CONVERT.
DISPLAY CAMPO3 LINE 10 POSITION 60 CONVERT.
DIVIDE 7 INTO 25 GIVING CAMPO2 REMAINDER CAMPO3.
DIVIDE 1000 BY CAMPO1 GIVING CAMPO2
REMAINDER CAMPO3.
COMPUTE CAMPO1 = CAMPO2 + CAMPO3.
COMPUTE CAMPO1 = 5 ** 4
DISPLAY CAMPO1 LINE 14 POSITION 20 CONVERT.
DISPLAY CAMPO2 LINE 14 POSITION 40 CONVERT.
DISPLAY CAMPO3 LINE 14 POSITION 60 CONVERT.
STOP RUN.
Ejercicio 10.
Enunciado: Se introduce por teclado una secuencia de informaciones,
cada una de ellas compuesta por un nombre y seis números enteros
positivos correspondientes al nombre de un alumno y las calificaciones
que ha obtenido en sus seis asignaturas. La secuencia termina al
introducir el nombre FIN, o cuando el número de alumnos introducido
sea mayor que 10.
Se desea un programa que visualice un listado de calificaciones en el
que ha de figurar el nombre del alumno seguido de su nota media.
Finalmente se imprimirá la nota media del grupo.
Ejemplo de datos de ENTRADA:
JUAN ALVAREZ GUTIÉRREZ 5 8 7 6 6 8
.........................................................
MARÍA LÓPEZ LÓPEZ 7 7 8 9 6 6
FIN
Ejemplo de datos de SALIDA:
LISTADO DE CALIFICACIONES
------------------------------------------------
Nombre del Alumno Nota Media
JUAN ALVAREZ GUTIÉRREZ 6.6

Manual de Prácticas Página - 16 - septiembre de 2009


Lenguajes Orientados a Sistemas de Gestión

........................................
........................................
MARÍA LÓPEZ LÓPEZ 7.1
Nota Media de Grupo: 6.8
Solución:
IDENTIFICATION DIVISION.
PROGRAM-ID. EJER-10.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 VARIABLES.
02 NOMBREALUMNO PIC X(20).
02 NOTA PIC 99.
02 NDEALUMNO PIC 99 VALUE 0.
02 SUMANOTAS PIC 99 VALUE 0.
02 MEDIAALUMNO PIC 99V99 VALUE 0.
02 SUMAGRUPO PIC 999V99 VALUE 0.
02 MEDIAGRUPO PIC 99V99 VALUE 0.
02 I PIC 9.
02 LINEA PIC 99.
PROCEDURE DIVISION.
PROGRAMA.
PERFORM P-PROGRAMA.
PERFORM DATOS UNTIL NOMBREALUMNO = "FIN"
OR NDEEALUMNO = 10.
PERFORM F-PROGRAMA.
STOP RUN.
DATOS.
PERFORM P-DATOS.
PERFORM NOTAS UNTIL I > 6.
PERFORM F-DATOS.
NOTAS.
PERFORM P-NOTAS.
IF NOTA > 10 ACCEPT NOTA ECHO.
PERFORM F-NOTAS.
P-PROGRAMA.
DISPLAY SPACES ERASE.
MOVE 10 TO LINEA.
DISPLAY "LISTADO DE CALIFICACIONES"
LINE 05 POSITION 50.
DISPLAY "-------------------------"
LINE 06 POSITION 50.
DISPLAY "Nombre del Alumno Media"
LINE 07 POSITION 50.
DISPLAY "----------------- -----"
LINE 08 POSITION 50.
DISPLAY "Introduzca Nombre: " LINE 05 POSITION 01.
ACCEPT NOMBREALUMNO PROMPT "-" LINE 05 POSITION 20.

Manual de Prácticas Página - 17 - septiembre de 2009


Lenguajes Orientados a Sistemas de Gestión

P-DATOS.
ADD 1 TO NDEALUMNO.
MOVE 0 TO MEDIAALUMNO.
MOVE 0 TO SUMANOTAS.
ADD 1 TO LINEA.
MOVE 1 TO I.
P-NOTAS.
DISPLAY "Escriba Nota ", I ": " NO ADVANCING.
ACCEPT NOTA ECHO.
F-NOTAS.
ADD NOTA TO SUMANOTAS.
ADD 1 TO I.
F-DATOS.
DIVIDE SUMANOTAS BY 6 GIVING MEDIAALUMNO.
ADD MEDIAALUMNO TO SUMAGRUPO.
DISPLAY NOMBREALUMNO LINE LINEA, POSITION 50
DISPLAY MEDIAALUMNO LINE LINEA POSITION 71 CONVERT.
DISPLAY "Introduzca Nombre: " LINE 05 POSITION 01.
ACCEPT NOMBREALUMNO PROMPT "-" LINE 05 POSITION 20.
F-PROGRAMA.
DIVIDE SUMAGRUPO BY NDEALUMNO GIVING MEDIAGRUPO.
DISPLAY "Nota Media del Grupo: " LINE 22 POSITION 40.
DISPLAY MEDIAGRUPO CONVERT LINE 22 POSITION 71.
Ejercicio 11.
Objetivo: Uso de PERFORM.
IDENTIFICATION DIVISION.
PROGRAM-ID. EJER-11.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 VALOR PIC 99 VALUE 0.
PROCEDURE DIVISION.
PROGRAMA.
DISPLAY SPACES ERASE.
DISPLAY SPACES.
DISPLAY SPACES.
PERFORM CONTAR.
STOP RUN.
CONTAR.
DISPLAY VALOR.
ADD 1 TO VALOR.
IF VALOR < 10 PERFORM CONTAR.
Ejercicio 12.
Objetivo: Uso de PERFORM.
IDENTIFICATION DIVISION.
PROGRAM-ID. EJER-12.
DATA DIVISION.

Manual de Prácticas Página - 18 - septiembre de 2009


Lenguajes Orientados a Sistemas de Gestión

WORKING-STORAGE SECTION.
77 VALOR PIC 99 VALUE 0.
PROCEDURE DIVISION.
PROGRAMA.
DISPLAY SPACES ERASE.
DISPLAY SPACES.
DISPLAY SPACES.
PERFORM CONTAR THRU FIN-CONTAR.
STOP RUN.
CONTAR.
DISPLAY VALOR.
ADD 1 TO VALOR.
IF VALOR < 10 PERFORM CONTAR.
FIN-CONTAR.
EXIT.
Ejercicio 13.
Objetivo: Uso de PERFORM.
IDENTIFICATION DIVISION.
PROGRAM-ID. EJER-13.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 VALOR PIC 99 VALUE 0.
PROCEDURE DIVISION.
PROGRAMA.
DISPLAY SPACES ERASE.
DISPLAY SPACES.
DISPLAY SPACES.
PERFORM CONTAR 10 TIMES.
STOP RUN.
CONTAR.
DISPLAY VALOR.
ADD 1 TO VALOR.
Ejercicio 14.
Objetivo: Uso de PERFORM.
IDENTIFICATION DIVISION.
PROGRAM-ID. EJER-14.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 VALOR PIC 99 VALUE 0.
PROCEDURE DIVISION.
PROGRAMA.
DISPLAY SPACES ERASE.
DISPLAY SPACES.
DISPLAY SPACES.
PERFORM 10 TIMES
DISPLAY VALOR

Manual de Prácticas Página - 19 - septiembre de 2009


Lenguajes Orientados a Sistemas de Gestión

ADD 1 TO VALOR
END-PERFORM.
STOP RUN.
Ejercicio 15.
Objetivo: Uso de PERFORM.
IDENTIFICATION DIVISION.
PROGRAM-ID. EJER-15.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 VALOR PIC 9999.
PROCEDURE DIVISION.
PROGRAMA.
DISPLAY SPACES ERASE.
DISPLAY SPACES.
DISPLAY SPACES.
MOVE 5 TO VALOR.
PERFORM MULTIPLOS-DE-5 THRU FIN-MULTIPLOS-DE-5
UNTIL VALOR > 100.
STOP RUN.
MULTIPLOS-DE-5.
DISPLAY VALOR.
ADD 5 TO VALOR.
FIN-MULTIPLOS-DE-5.
EXIT.
Ejercicio 16.
Objetivo: Uso de PERFORM.
IDENTIFICATION DIVISION.
PROGRAM-ID. EJER-16.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 VALOR PIC 9999.
PROCEDURE DIVISION.
PROGRAMA.
DISPLAY SPACES ERASE.
DISPLAY SPACES.
DISPLAY SPACES.
MOVE 5 TO VALOR.
PERFORM UNTIL VALOR > 100
DISPLAY VALOR
ADD 5 TO VALOR
END-PERFORM.
STOP RUN.
Ejercicio 17.
Objetivo: Uso de PERFORM.
IDENTIFICATION DIVISION.

Manual de Prácticas Página - 20 - septiembre de 2009


Lenguajes Orientados a Sistemas de Gestión

PROGRAM-ID. EJER-17.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 VALOR PIC 9999.
PROCEDURE DIVISION.
PROGRAMA.
DISPLAY SPACES ERASE.
DISPLAY SPACES.
DISPLAY SPACES.
MOVE 5 TO VALOR.
PERFORM WITH TEST BEFORE UNTIL VALOR > 3
DISPLAY VALOR
ADD 5 TO VALOR
END-PERFORM.
STOP RUN.
Ejercicio 18.
Objetivo: Uso de PERFORM.
IDENTIFICATION DIVISION.
PROGRAM-ID. EJER-18.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 VALOR PIC 9999.
PROCEDURE DIVISION.
PROGRAMA.
DISPLAY SPACES ERASE.
DISPLAY SPACES.
DISPLAY SPACES.
DISPLAY SPACES.
DISPLAY SPACES.
MOVE 5 TO VALOR.
PERFORM WITH TEST AFTER UNTIL VALOR > 3
DISPLAY VALOR
ADD 5 TO VALOR
END-PERFORM.
STOP RUN.
Ejercicio 19.
Objetivo: Uso de PERFORM.
IDENTIFICATION DIVISION.
PROGRAM-ID. EJER-19.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 VALOR PIC 9999.
PROCEDURE DIVISION.
PROGRAMA.
DISPLAY SPACES ERASE.
DISPLAY SPACES.

Manual de Prácticas Página - 21 - septiembre de 2009


Lenguajes Orientados a Sistemas de Gestión

DISPLAY SPACES.
PERFORM MULTIPLOS-DE-5 VARYING VALOR FROM 5 BY 5
UNTIL VALOR > 100.
STOP RUN.
MULTIPLOS-DE-5.
DISPLAY VALOR.
Ejercicio 20.
Enunciado: Escribir un programa que dibuje en pantalla siguiente
figura:

1: ********************
2: ********************
3: ********************
4: ********************
5: ********************
6: ********************
7: ********************
8: ********************
Solución 1:
IDENTIFICATION DIVISION.
PROGRAM-ID. EJER-20.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 FILAS PIC 99.
77 COLUMNAS PIC 99.
PROCEDURE DIVISION.
PROGRAMA.
PERFORM P-PROGRAMA.
PERFORM DIBUJAR-FILAS UNTIL FILAS > 8.
STOP RUN.
DIBUJAR-FILAS.
PERFORM P-DIBUJAR-FILAS.
PERFORM DIBUJAR-COLS UNTIL COLUMNAS > 20.
PERFORM F-DIBUJAR-FILAS.
P-PROGRAMA.
DISPLAY SPACES ERASE.
DISPLAY SPACES.
DISPLAY SPACES.
DISPLAY SPACES.
DISPLAY SPACES.
MOVE 1 TO FILAS.
P-DIBUJAR-FILAS.
MOVE 1 TO COLUMNAS.
DISPLAY FILAS ": " NO ADVANCING.
DIBUJAR-COLS.
DISPLAY "*" NO ADVANCING.
ADD 1 TO COLUMNAS.

Manual de Prácticas Página - 22 - septiembre de 2009


Lenguajes Orientados a Sistemas de Gestión

F-DIBUJAR-FILAS.
ADD 1 TO FILAS.
Solución 2:
IDENTIFICATION DIVISION.
PROGRAM-ID. EJER-20.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 FILAS PIC 99.
77 COLUMNAS PIC 99.
PROCEDURE DIVISION.
PROGRAMA.
DISPLAY SPACES ERASE.
DISPLAY SPACES.
DISPLAY SPACES.
DISPLAY SPACES.
DISPLAY SPACES.
PERFORM VARYING FILAS FROM 1 BY 1 UNTIL FILAS > 8
DISPLAY FILAS ": " NO ADVANCING
PERFORM VARYING COLUMNAS FROM 1 BY 1 UNTIL
COLUMNAS > 20
DISPLAY "*" NO ADVANCING
END-PERFORM
END-PERFORM.
STOP RUN.

Ejercicio 21:
Enunciado: Programa que lee las calificaciones de un alumno en 10
asignaturas, las almacena en un vector calcula e imprime su media.
Solución 1:
IDENTIFICATION DIVISION.
PROGRAM-ID. EJER-21.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 TABLA.
02 NOTAS OCCURS 10 TIMES PIC 99V99.
01 VARIABLES.
02 SUMA PIC 999V99 VALUE 0.
02 MEDIA PIC 99V99.
02 I PIC 99.
02 SALIDA PIC Z9.99.
PROCEDURE DIVISION.
PROGRAMA.
PERFORM P-PROGRAMA.
PERFORM CREAR-TABLA UNTIL I > 10.
PERFORM I-PROGRAMA.
PERFORM CALCULAR-MEDIA UNTIL I > 10.

Manual de Prácticas Página - 23 - septiembre de 2009


Lenguajes Orientados a Sistemas de Gestión

PERFORM F-PROGRAMA.
STOP RUN.
P-PROGRAMA.
DISPLAY SPACE ERASE.
MOVE 1 TO I.
CREAR-TABLA.
DISPLAY "NOTA Nº ", I " " NO ADVANCING.
ACCEPT NOTAS(I).
ADD 1 TO I.
I-PROGRAMA.
MOVE 0 TO SUMA.
MOVE 1 TO I.
CALCULAR-MEDIA.
ADD NOTAS(I) TO SUMA.
ADD 1 TO I.
F-PROGRAMA.
DIVIDE SUMA BY 10 GIVING MEDIA.
MOVE MEDIA TO SALIDA.
DISPLAY "NOTA MEDIA: " SALIDA.
Solución 2:
IDENTIFICATION DIVISION.
PROGRAM-ID. EJER-21.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 TABLA.
02 NOTAS OCCURS 10 TIMES PIC 99V99.
01 VARIABLES.
02 SUMA PIC 999V99 VALUE 0.
02 MEDIA PIC 99V99.
02 I PIC 99.
02 SALIDA PIC Z9.99.
PROCEDURE DIVISION.
PROGRAMA.
PERFORM P-PROGRAMA.
PERFORM CREAR-TABLA VARYING I FROM 1 BY 1
UNTIL I > 10.
PERFORM I-PROGRAMA.
PERFORM CALCULAR-MEDIA VARYING I FROM 1 BY 1
UNTIL I > 10.
PERFORM F-PROGRAMA.
STOP RUN.
P-PROGRAMA.
DISPLAY SPACE ERASE.
CREAR-TABLA.
DISPLAY "NOTA Nº ", I " " NO ADVANCING.
ACCEPT NOTAS(I).
I-PROGRAMA.

Manual de Prácticas Página - 24 - septiembre de 2009


Lenguajes Orientados a Sistemas de Gestión

MOVE 0 TO SUMA.
CALCULAR-MEDIA.
ADD NOTAS(I) TO SUMA.
F-PROGRAMA.
DIVIDE SUMA BY 10 GIVING MEDIA.
MOVE MEDIA TO SALIDA.
DISPLAY "NOTA MEDIA: " SALIDA.
Solución 3:
IDENTIFICATION DIVISION.
PROGRAM-ID. EJER-21.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 VARIABLES.
02 SUMA PIC 999V99 VALUE 0.
02 MEDIA PIC 99V99.
02 I PIC 99.
02 SALIDA PIC Z9.99.
02 TABLA OCCURS 10 TIMES.
03 NOTAS PIC 99V99.
PROCEDURE DIVISION.
INICIO.
DISPLAY SPACE ERASE.
PERFORM VARYING I FROM 1 BY 1 UNTIL I > 10
DISPLAY "NOTA Nº ", I " " NO ADVANCING
ACCEPT NOTAS(I)
END-PERFORM.
MOVE 0 TO SUMA.
PERFORM VARYING I FROM 1 BY 1 UNTIL I > 10
ADD NOTAS(I) TO SUMA
END-PERFORM.
DIVIDE SUMA BY 10 GIVING MEDIA.
MOVE MEDIA TO SALIDA.
DISPLAY "NOTA MEDIA: " SALIDA.
STOP RUN.
Ejercicio 22:
Enunciado: El dueño de dos tiendas de artículos deportivos, recibe
mensualmente de cada una de las tiendas un fichero con la estructura
siguiente:
Nombre del campo Longitud Tipo
N-ARTICULO 5 Numérico
GANANCIAS 10 Numérico
Dichos ficheros se encuentran ordenados por el campo N-ARTICULO en
sentido ascendente, y podemos asegurar que en cada uno de ellos, no
existen dos registros que contengan el mismo valor en dicho campo.

Manual de Prácticas Página - 25 - septiembre de 2009


Lenguajes Orientados a Sistemas de Gestión

Se desea obtener un fichero con la misma estructura, ordenado por el


mismo campo que contenga los registros de ambos. En el caso de que un
mismo artículo aparezca en los dos ficheros, se deberá copiar en el
fichero de salida sólo una vez y en el campo de GANANCIAS, se
reflejará la suma de las ganancias obtenida en cada una de las
tiendas.
Solución 1:
IDENTIFICATION DIVISION.
PROGRAM-ID. EJER-22.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT ENTRADA1 ASSIGN TO DISK "TIENDA1.DAT"
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL.
SELECT ENTRADA2 ASSIGN TO DISK "TIENDA2.DAT"
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL.
SELECT SALIDA ASSIGN TO DISK "SALIDA.DAT"
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD ENTRADA1
LABEL RECORD IS STANDARD
DATA RECORD IS REG-ENTRADA1.
01 REG-ENTRADA1.
02 N-ARTICULO PIC 9(5).
02 GANANCIAS PIC 9(10).
FD ENTRADA2
LABEL RECORD IS STANDARD
DATA RECORD IS REG-ENTRADA2.
01 REG-ENTRADA2.
02 N-ARTICULO PIC 9(5).
02 GANANCIAS PIC 9(10).
FD SALIDA
LABEL RECORD IS STANDARD
DATA RECORD IS REG-SALIDA.
01 REG-SALIDA.
02 N-ARTICULO PIC 9(5).
02 GANANCIAS PIC 9(12).
WORKING-STORAGE SECTION.
77 F-FICHERO-1 PIC XX VALUE "NO".
77 F-FICHERO-2 PIC XX VALUE "NO".
77 C-ENTRADA1 PIC 9(5).
77 C-ENTRADA2 PIC 9(5).
77 TOTAL PIC 9(12) VALUE ZEROES.

Manual de Prácticas Página - 26 - septiembre de 2009


Lenguajes Orientados a Sistemas de Gestión

PROCEDURE DIVISION.
PROGRAMA.
* Nivel 1 del árbol prográmatico
PERFORM P-PROGRAMA.
PERFORM MEZCLAR UNTIL F-FICHERO-1 = "SI"
OR F-FICHERO-2 = "SI".
PERFORM TERMINAR-FICH-1 UNTIL F-FICHERO-1 = "SI".
PERFORM TERMINAR-FICH-2 UNTIL F-FICHERO-2 = "SI".
PERFORM F-PROGRAMA.
STOP RUN.
* Nivel 2 del árbol programático
MEZCLAR.
IF C-ENTRADA1 = C-ENTRADA2
PERFORM IGUAL
ELSE
PERFORM DISTINTO
END-IF.
* Nivel 3 del árbol programático.
DISTINTO.
IF C-ENTRADA1 < C-ENTRADA2
WRITE REG-SALIDA FROM REG-ENTRADA1
PERFORM LEER-FICHERO-1
ELSE
WRITE REG-SALIDA FROM REG-ENTRADA2
PERFORM LEER-FICHERO-2
END-IF.
* Nodos del árbol programático y subrutinas.
P-PROGRAMA.
OPEN INPUT ENTRADA1.
OPEN INPUT ENTRADA2.
OPEN OUTPUT SALIDA.
PERFORM LEER-FICHERO-1.
PERFORM LEER-FICHERO-2.
IGUAL.
ADD GANANCIAS OF REG-ENTRADA1
GANANCIAS OF REG-ENTRADA2 GIVING TOTAL.
MOVE TOTAL TO GANANCIAS OF REG-SALIDA.
MOVE C-ENTRADA1 TO N-ARTICULO OF REG-SALIDA.
WRITE REG-SALIDA.
PERFORM LEER-FICHERO-1.
PERFORM LEER-FICHERO-2.
TERMINAR-FICH-1.
WRITE REG-SALIDA FROM REG-ENTRADA1.
PERFORM LEER-FICHERO-1.
TERMINAR-FICH-2.
WRITE REG-SALIDA FROM REG-ENTRADA2.
PERFORM LEER-FICHERO-2.
F-PROGRAMA.

Manual de Prácticas Página - 27 - septiembre de 2009


Lenguajes Orientados a Sistemas de Gestión

CLOSE ENTRADA1.
CLOSE ENTRADA2.
CLOSE SALIDA.
LEER-FICHERO-1.
READ ENTRADA1 AT END MOVE "SI" TO F-FICHERO-1.
IF F-FICHERO-1 = "NO"
MOVE N-ARTICULO OF REG-ENTRADA1 TO C-ENTRADA1
END-IF.
LEER-FICHERO-2.
READ ENTRADA2 AT END MOVE "SI" TO F-FICHERO-2.
IF F-FICHERO-2 = "NO"
MOVE N-ARTICULO OF REG-ENTRADA2 TO C-ENTRADA2
END-IF.
Solución 2:
IDENTIFICATION DIVISION.
PROGRAM-ID. EJER-22.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT ENTRADA1 ASSIGN TO DISK "TIENDA1.DAT"
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL.
SELECT ENTRADA2 ASSIGN TO DISK "TIENDA2.DAT"
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL.
SELECT SALIDA ASSIGN TO DISK "SALIDA.DAT"
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD ENTRADA1
LABEL RECORD IS STANDARD
DATA RECORD IS REG-ENTRADA1.
01 REG-ENTRADA1.
02 N-ARTICULO1 PIC 9(5).
02 GANANCIAS1 PIC 9(10).
FD ENTRADA2
LABEL RECORD IS STANDARD
DATA RECORD IS REG-ENTRADA2.
01 REG-ENTRADA2.
02 N-ARTICULO2 PIC 9(5).
02 GANANCIAS2 PIC 9(10).
FD SALIDA
LABEL RECORD IS STANDARD
DATA RECORD IS REG-SALIDA.
01 REG-SALIDA.
02 N-ARTICULO PIC 9(5).

Manual de Prácticas Página - 28 - septiembre de 2009


Lenguajes Orientados a Sistemas de Gestión

02 GANANCIAS PIC 9(12).


PROCEDURE DIVISION.
PROGRAMA.
* Nivel 1 del árbol prográmatico
PERFORM P-PROGRAMA.
PERFORM MEZCLAR UNTIL N-ARTICULO1 = HIGH-VALUE
AND N-ARTICULO2 = HIGH-VALUE.
PERFORM F-PROGRAMA.
STOP RUN.
* Nivel 2 del árbol programático
MEZCLAR.
IF N-ARTICULO1 = N-ARTICULO2
PERFORM IGUAL
ELSE
PERFORM DISTINTO
END-IF.
* Nivel 3 del árbol programático.
DISTINTO.
IF N-ARTICULO1 < N-ARTICULO2
WRITE REG-SALIDA FROM REG-ENTRADA1
PERFORM LEER-FICHERO-1
ELSE
WRITE REG-SALIDA FROM REG-ENTRADA2
PERFORM LEER-FICHERO-2
END-IF.
* Nodos del árbol programático y subrutinas.
P-PROGRAMA.
OPEN INPUT ENTRADA1.
OPEN INPUT ENTRADA2.
OPEN OUTPUT SALIDA.
PERFORM LEER-FICHERO-1.
PERFORM LEER-FICHERO-2.
IGUAL.
ADD GANANCIAS1 GANANCIAS2 GIVING GANANCIAS.
MOVE N-ARTICULO1 TO N-ARTICULO.
WRITE REG-SALIDA.
PERFORM LEER-FICHERO-1.
PERFORM LEER-FICHERO-2.
F-PROGRAMA.
CLOSE ENTRADA1.
CLOSE ENTRADA2.
CLOSE SALIDA.
LEER-FICHERO-1.
READ ENTRADA1 AT END MOVE HIGH-VALUE TO N-ARTICULO1.
LEER-FICHERO-2.
READ ENTRADA2 AT END MOVE HIGH-VALUE TO N-ARTICULO2.
Ejercicio 23.

Manual de Prácticas Página - 29 - septiembre de 2009


Lenguajes Orientados a Sistemas de Gestión

Enunciado: El entrenador de ciclismo de un colegio, desea obtener la


suma de los tiempos realizados por cada uno de sus muchachos en las
etapas que se desarrollaron durante el curso escolar. Para ello desea
realizar un programa que le permite introducir el nombre y los tiempos
(en minutos) de los 20 muchachos en las 5 etapas. Ha decidido lo
siguiente: Los tiempos los almacenan en una matriz TIEMPO de 20 filas
(una por cada ciclista) y cinco columnas (una por cada etapa). Sin
embargo los nombres de los ciclistas los carga en un vector
alfanumérico CICLISTAS de 20 elementos (uno por cada ciclista).
El programa además de cargar en memoria la información anteriormente
señalada, visualizará por pantalla la siguiente información para cada
uno de los ciclistas, la suma de tiempos vendrá expresada en horas y
minutos:
Nombre Tiem1 Tiem2 Tiem3 Tiem4 Tiem5 Suma de Tiempos
Solución:
IDENTIFICATION DIVISION.
PROGRAM-ID. EJER-23.
DATA DIVISION.
WORKING-STORAGE SECTION.
* Declaración de la tabla donde se almacenan los tiempos
01 TABLA-TIEMPOS.
02 CICLISTA OCCURS 20 TIMES.
03 ETAPAS OCCURS 5 TIMES.
04 TIEMPOS PIC 9(4).
01 TABLA-CICLISTAS.
02 NOMBRE OCCURS 20 TIMES.
03 NOMBRE-CICLISTA PIC X(20).
* Declaración de las variables
77 I PIC 99.
77 J PIC 9.
77 SUMA PIC 99999.
77 MINUTOS PIC 9999.
77 HORAS PIC 9999.
PROCEDURE DIVISION.
PROGRAMA.
PERFORM P-PROGRAMA.
PERFORM ENTRAR-DATOS UNTIL I > 20.
PERFORM I-PROGRAMA.
PERFORM VISUALIZAR-DATOS UNTIL I > 20.
STOP RUN.
ENTRAR-DATOS.
PERFORM P-ENTRAR-DATOS.
PERFORM ENTRAR-TIEMPOS UNTIL J > 5.
PERFORM F-ENTRAR-DATOS.
VISUALIZAR-DATOS.
PERFORM P-VISUALIZAR-DATOS.

Manual de Prácticas Página - 30 - septiembre de 2009


Lenguajes Orientados a Sistemas de Gestión

PERFORM VISUALIZAR-TIEMPOS UNTIL J > 5.


PERFORM F-VISUALIZAR-DATOS.
P-PROGRAMA.
MOVE 1 TO I.
P-ENTRAR-DATOS.
ACCEPT NOMBRE-CICLISTA(I).
MOVE 1 TO J.
ENTRAR-TIEMPOS.
ACCEPT TIEMPOS(I, J).
ADD 1 TO J.
F-ENTRAR-DATOS.
ADD 1 TO I.
I-PROGRAMA.
MOVE 1 TO I.
P-VISUALIZAR-DATOS.
DISPLAY NOMBRE-CICLISTA(I) NO ADVANCING.
MOVE 0 TO SUMA.
MOVE 1 TO J.
VISUALIZAR-TIEMPOS.
ADD TIEMPOS(I, J) TO SUMA.
DISPLAY TIEMPOS(I, J) NO ADVANCING.
DISPLAY " " NO ADVANCING.
ADD 1 TO J.
F-VISUALIZAR-DATOS.
DIVIDE SUMA BY 60 GIVING HORAS REMAINDER MINUTOS.
DISPLAY HORAS NO ADVANCING.
DISPLAY "Horas" NO ADVANCING.
DISPLAY MINUTOS NO ADVANCING.
DISPLAY "Minutos".
ADD 1 TO I.
Ejercicio 24:
Enunciado: La oficina de asesoría de un condado mantiene un archivo de
propietarios con el siguiente formato:
Número de Lote Código de 9 dígitos
Nombre del propietario 16 caracteres alfanuméricos
Valor catastral del piso 8 dígitos, incluyendo 2 decimales
Dicho fichero se encuentra ordenado ascendentemente por el Número de
Lote.
Todos los meses se genera un fichero con actualizaciones. Los
registros de este fichero tienen el siguiente formato:
Número de Lote Código de 9 dígitos

Manual de Prácticas Página - 31 - septiembre de 2009


Lenguajes Orientados a Sistemas de Gestión

Código 1 = Cambio de nombre de propietario


2 = Cambio del valor catastral del piso
3 = Cambio de nombre de propietario y del valor
catastral del piso.
4 = Aumento del valor catastral del piso
5 = Venta del piso

Nombre del nuevo 16 caracteres alfanuméricos


propietario
Nueva tasación del 8 dígitos, incluyendo 2 decimales
piso
Dicho fichero:
a.- Se encuentra ordenado ascendentemente por el Número de
Lote.
b.- Está depurado con respecto al Número de Lote, es decir, no
existe un registro con Numero de Lote distinto de los
existentes en el fichero de propietarios.
c.- Está depurado en cuanto al Código, es decir, no existe
ningún registro con código distinto de 1, 2, 3, 4 o 5.
El fichero anterior ha sido generado de la forma siguiente:
1.- Si un registro contiene Código = 1, sólo aparecerá información en
el campo del nombre del nuevo propietario.
2.- Si un registro contiene Código = 2 o Código = 4, sólo contiene
información en el campo de la nueva tasación del piso.
3.- Si un registro contiene Código = 3, contendrá información en los
dos campos.
4.- Si un registro contiene Código = 5, no contiene ninguna
información.
Por ejemplo:
Fichero de Propietarios

Número de Lote Nombre de Propietario Tasación del Piso


--------------------------------------------------------------
000150000 PEPE RUIZ 10872.00
000180000 ANA GARCÍA 256237.00
000290000 LUIS ALBA 162116.00
000350000 JOSÉ NÚÑEZ 762276.00
000720000 JUAN MARTÍN 99998.00
001050000 PEDRO GONZÁLEZ 820600.00

Manual de Prácticas Página - 32 - septiembre de 2009


Lenguajes Orientados a Sistemas de Gestión

001120000 JULIA SANTOS 959999.00


Fichero de Actualizaciones
Número de Lote Código Nombre de Propietario Nueva tasación
----------------------------------------------------------------
000180000 1 ANDRÉS MARTÍN
000290000 2 300000.00
000350000 4 100000.00
000720000 3 ROSA MARTOS 100000.00
001050000 5

Con estos dos ficheros se desea obtener el informe impreso siguiente:

Número Propietario Valor Nuevo Nueva Cancelado


de Lote Catastral Propietario Tasación
===================================================================
00015000 PEPE RUIZ $ 10872.00
00018000 ANA GARCÍA $256237.00 ANDRÉS MARTÍN
00029000 LUIS ALBA $162116.00 $300000.00
00035000 JOSÉ NÚÑEZ $762276.00 $862276.00
00072000 JUAN MARTÍN $ 99998.00 ROSA MARTOS $100000.00
00105000 PEDRO GONZÁLEZ $820600.00 ***
00112000 JULIA SANTOS $959999.00

Donde se mostrará la información de todos los registros del fichero de


propietarios. Las tres primeras columnas del informe representan la
información contenida en el fichero de propietarios. La 4ª columna
sólo se rellena, si para el registro en cuestión, existe un registro
en el fichero de actualizaciones con código 1 o 3. La 5ª columna sólo
se rellena, si para el registro que se está listando tiene un registro
en el fichero de actualizaciones con código 2, 3 o 4, si el código es
4 se mostrará la suma de los valores de Valor Catastral y
Nueva tasación. La 6ª columna contendrá *** para aquellos registros
que contenga un código 5 en el fichero de actualizaciones.
Solución:
Para la comprobación de los resultados del programa se necesitan los
datos, los siguientes programas generan los ficheros PROPIETARIOS.DAT
y ACTUALIZAR. DAT.
IDENTIFICATION DIVISION.
PROGRAM-ID. EJER-24.
REMARKS. Fichero Secuencial. Creación de Propietarios.DAT.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT PROPIETARIOS ASSIGN TO DISK "PROPIETARIOS.DAT"
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL.
DATA DIVISION.

Manual de Prácticas Página - 33 - septiembre de 2009


Lenguajes Orientados a Sistemas de Gestión

FILE SECTION.
FD PROPIETARIOS
LABEL RECORD IS STANDARD
DATA RECORD IS R-PROPIETARIOS.
01 R-PROPIETARIOS.
02 NUM-LOTE PIC 9(9).
02 NOM-PROPIETARIO PIC X(16).
02 TASACION-GRAVADA PIC 9(6)V99.

WORKING-STORAGE SECTION.
77 LINEA PIC 99.
PROCEDURE DIVISION.
PROGRAMA.
PERFORM P-PROGRAMA.
PERFORM INTRODUCIR-DATOS UNTIL NUM-LOTE = 000000000
PERFORM F-PROGRAMA.
STOP RUN.
P-PROGRAMA.
OPEN OUTPUT PROPIETARIOS.
DISPLAY SPACES ERASE.
DISPLAY "ENTRADA DE DATOS" LINE 3 POSITION 01.
DISPLAY "Número de Lote" LINE 4 POSITION 01.
DISPLAY "Nombre Propietario" LINE 4 POSITION 20.
DISPLAY "Valor Catastral " LINE 4 POSITION 43.
MOVE 5 TO LINEA.
ACCEPT NUM-LOTE LINE LINEA, POSITION 01 PROMPT "_".
INTRODUCIR-DATOS.
ACCEPT NOM-PROPIETARIO LINE LINEA
POSITION 20 PROMPT "_".
ACCEPT TASACION-GRAVADA LINE LINEA
POSITION 43 PROMPT "_".
WRITE R-PROPIETARIOS.
ADD 1 TO LINEA.
IF LINEA > 22
DISPLAY SPACES ERASE
DISPLAY "ENTRADA DE DATOS" LINE 3 POSITION 01
DISPLAY "Número de Lote" LINE 4 POSITION 01
DISPLAY "Nombre Propietario" LINE 4 POSITION 20
DISPLAY "Valor Catastral " LINE 4 POSITION 43
MOVE 5 TO LINEA
END-IF.
ACCEPT NUM-LOTE LINE LINEA, POSITION 01 PROMPT "_".
F-PROGRAMA.
CLOSE PROPIETARIOS.
IDENTIFICATION DIVISION.
PROGRAM-ID. EJER24.
REMARKS. Fichero Secuencial. Creación de Actualizar.DAT.
ENVIRONMENT DIVISION.

Manual de Prácticas Página - 34 - septiembre de 2009


Lenguajes Orientados a Sistemas de Gestión

INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT ACTUALIZAR ASSIGN TO DISK "ACTUALIZAR.DAT"
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD ACTUALIZAR
LABEL RECORD IS STANDARD
DATA RECORD IS R-ACTUALIZAR.
01 R-ACTUALIZAR.
02 NUM-LOTE PIC 9(9).
02 CODIGO PIC 9.
02 NOM-PROPIETARIO PIC X(16).
02 TASACION-GRAVADA PIC 9(6)V99.
WORKING-STORAGE SECTION.
77 LINEA PIC 99.
PROCEDURE DIVISION.
.. PROGRAMA.
PERFORM P-PROGRAMA.
PERFORM INTRODUCIR-DATOS UNTIL NUM-LOTE = 000000000
PERFORM F-PROGRAMA.
STOP RUN.
P-PROGRAMA.
OPEN OUTPUT ACTUALIZAR.
DISPLAY SPACES ERASE.
DISPLAY "ENTRADA DE DATOS" LINE 3, POSITION 01.
DISPLAY "Número de Lote" LINE 4, POSITION 01.
DISPLAY "Código" LINE 4, POSITION 20.
DISPLAY "Nombre Propietario" LINE 4, POSITION 30.
DISPLAY "Tasación Gravada" LINE 4, POSITION 65.
MOVE 5 TO LINEA.
ACCEPT NUM-LOTE LINE LINEA, POSITION 01 PROMPT "_".
INTRODUCIR-DATOS.
ACCEPT CODIGO LINE LINEA, POSITION 20 PROMPT "_".
ACCEPT NOM-PROPIETARIO LINE LINEA
POSITION 30 PROMPT "_".
ACCEPT TASACION-GRAVADA LINE LINEA
POSITION 65 PROMPT "_".
WRITE R-ACTUALIZAR.
ADD 1 TO LINEA.
IF LINEA > 22
DISPLAY SPACES ERASE
DISPLAY "ENTRADA DE DATOS" LINE 3, POSITION 01
DISPLAY "Número de Lote" LINE 4, POSITION 01
DISPLAY "Código" LINE 4, POSITION 20
DISPLAY "Nombre Propietario" LINE 4, POSITION 30
DISPLAY "Tasación Gravada" LINE 4, POSITION 65

Manual de Prácticas Página - 35 - septiembre de 2009


Lenguajes Orientados a Sistemas de Gestión

MOVE 5 TO LINEA
END-IF.
ACCEPT NUM-LOTE LINE LINEA, POSITION 01 PROMPT "_".
F-PROGRAMA.
CLOSE ACTUALIZAR.
IDENTIFICATION DIVISION.
PROGRAM-ID. EJER-24.
REMARKS. Actualización e Impresión.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT PROPIETARIOS ASSIGN TO DISK "PROPIETARIOS.DAT".
SELECT ACTUALIZAR ASSIGN TO DISK "ACTUALIZAR.DAT".
SELECT IMPRESO ASSIGN TO PRINTER.
DATA DIVISION.
FILE SECTION.
FD PROPIETARIOS
LABEL RECORD IS STANDARD
DATA RECORD IS R-PROPIETARIOS.
01 R-PROPIETARIOS.
02 PNUM-LOTE PIC 9(9).
02 PNOM-PROPIETARIO PIC X(16).
02 PTASACION-GRAVADA PIC 9(6)V99.
FD ACTUALIZAR
LABEL RECORD IS STANDARD
DATA RECORD IS R-ACTUALIZAR.
01 R-ACTUALIZAR.
02 ANUM-LOTE PIC 9(9).
02 ACODIGO PIC 9.
88 CAM-NOMBRE VALUE 1.
88 CAM-TASACION VALUE 2.
88 CAM-NOM-TASA VALUE 3.
88 SUMAR-IMPUESTOS VALUE 4.
88 QUITAR-IMPUESTOS VALUE 5.
02 ANOM-PROPIETARIO PIC X(16).
02 ATASACION-GRAVADA PIC 9(6)V99.
FD IMPRESO
LABEL RECORD IS OMITTED
DATA RECORD IS R-IMPRESO.
01 R-IMPRESO.
02 LINEA PIC X(80).
WORKING-STORAGE SECTION.
01 CABECERA-1.
02 FILLER PIC X(9) VALUE "Número".
02 FILLER PIC XX VALUE SPACES.
02 FILLER PIC X(16) VALUE "Propietario".
02 FILLER PIC XX VALUE SPACES.
02 FILLER PIC X(10) VALUE "Valor".

Manual de Prácticas Página - 36 - septiembre de 2009


Lenguajes Orientados a Sistemas de Gestión

02 FILLER PIC X VALUE SPACES.


02 FILLER PIC X(16) VALUE "Nuevo".
02 FILLER PIC XX VALUE SPACES.
02 FILLER PIC X(11) VALUE "Nueva".
02 FILLER PIC XX VALUE SPACES.
02 FILLER PIC X(9) VALUE "Cancelado".
01 CABECERA-2.
02 FILLER PIC X(9) VALUE "De Lote".
02 FILLER PIC X(20) VALUE SPACES.
02 FILLER PIC X(10) VALUE "Catastral".
02 FILLER PIC X VALUE SPACES.
02 FILLER PIC X(16) VALUE "Propietario".
02 FILLER PIC XX VALUE SPACES.
02 FILLER PIC X(11) VALUE "Tasación".
02 FILLER PIC X(11) VALUE SPACES.
01 CABECERA-3.
02 FILLER PIC X(80) VALUE ALL "=".
01 LINEA-DETALLE.
02 E-NUM-LOTE PIC 9(9).
02 FILLER PIC XX VALUE SPACES.
02 E-NOM-PROPIETARIO PIC X(16).
02 FILLER PIC XX VALUE SPACES.
02 E-TASACION-GRAVADA PIC $ZZZZZZ.ZZ.
02 FILLER PIC X VALUE SPACES.
02 EN-NOM-PROPIETARIO PIC X(16) VALUE SPACES.
02 FILLER PIC XX VALUE SPACES.
02 EN-TASACION-GRAVADA PIC $ZZZZZZZ.ZZ VALUE
SPACES.
02 FILLER PIC XX VALUE SPACES.
02 ECANCELADA PIC XXX.
77 FIN-PROPIETARIO PIC XX VALUE "NO".
77 FIN-ACTUALIZAR PIC XX VALUE "NO".
77 SUMA PIC 9(7)V99.
PROCEDURE DIVISION.
PROGRAMA.
PERFORM P-PROGRAMA.
PERFORM MEZCLA UNTIL FIN-PROPIETARIO = "SI".
PERFORM F-PROGRAMA.
STOP RUN.
MEZCLA.
PERFORM P-MEZCLA.
IF PNUM-LOTE NOT = ANUM-LOTE
READ PROPIETARIOS AT END MOVE "SI" TO FIN-PROPIETARIO
ELSE
PERFORM TRATAR-IGUAL
END-IF.
PERFORM F-MEZCLA.
TRATAR-IGUAL.

Manual de Prácticas Página - 37 - septiembre de 2009


Lenguajes Orientados a Sistemas de Gestión

IF CAM-NOMBRE
MOVE ANOM-PROPIETARIO TO EN-NOM-PROPIETARIO
ELSE IF CAM-TASACION
MOVE ATASACION-GRAVADA TO EN-TASACION-GRAVADA
ELSE IF CAM-NOM-TASA
MOVE ANOM-PROPIETARIO TO EN-NOM-PROPIETARIO
MOVE ATASACION-GRAVADA TO EN-TASACION-GRAVADA
ELSE IF SUMAR-IMPUESTOS
ADD ATASACION-GRAVADA PTASACION-GRAVADA
TO SUMA
MOVE SUMA TO EN-TASACION-GRAVADA
ELSE
MOVE "***" TO ECANCELADA
END-IF.
READ PROPIETARIOS AT END MOVE "SI" TO FIN-PROPIETARIO.
READ ACTUALIZAR AT END MOVE "SI" TO FIN-ACTUALIZAR.
P-PROGRAMA.
OPEN INPUT PROPIETARIOS.
OPEN INPUT ACTUALIZAR.
OPEN OUTPUT IMPRESO.
WRITE R-IMPRESO FROM CABECERA-1.
WRITE R-IMPRESO FROM CABECERA-2.
WRITE R-IMPRESO FROM CABECERA-3.
READ PROPIETARIOS AT END MOVE "SI" TO FIN-PROPIETARIO.
READ ACTUALIZAR AT END MOVE "SI" TO FIN-ACTUALIZAR.
P-MEZCLA.
MOVE PNUM-LOTE TO E-NUM-LOTE.
MOVE PNOM-PROPIETARIO TO E-NOM-PROPIETARIO.
MOVE PTASACION-GRAVADA TO E-TASACION-GRAVADA.
MOVE SPACES TO EN-NOM-PROPIETARIO.
MOVE ZEROES TO EN-TASACION-GRAVADA.
MOVE SPACES TO ECANCELADA.
F-MEZCLA.

WRITE R-IMPRESO FROM LINEA-DETALLE.


F-PROGRAMA.
CLOSE PROPIETARIOS.
CLOSE ACTUALIZAR.
CLOSE IMPRESO.
Ejercicio 26.
Enunciado: Una fábrica de tornillos y tuercas realiza la facturación
de acuerdo a la siguiente tabla de bonificaciones en los precios
dependiendo de la cantidad comprada:

PIEZA CANTIDAD DESCUENTO


T Mayor que 25 10%

Manual de Prácticas Página - 38 - septiembre de 2009


Lenguajes Orientados a Sistemas de Gestión

T Mayor que 75 15%


A Mayor que 10 8%
A Mayor que 15 11%
A Mayor que 20 15%
A Mayor que 25 25%
C Mayor que 16 5%
C Mayor que 30 10%
Si las cantidades son inferiores a las indicadas no se aplicará ningún
descuento.
Al mismo tiempo se tiene un fichero secuencial no ordenado con los
pedidos que se realizan a la fábrica, cuya descripción de registro es
el siguiente:

Empresa 2 posiciones numéricas


Pieza Solicitada Puede ser T, A o C
Unidades Pedidas 2 posiciones numéricas enteras

Tomando como entrada el fichero anterior, se desea obtener otro


fichero en el que figuren los siguientes datos:

Empresa 2 posiciones numéricas


Importe de las facturas 10 posiciones numéricas enteras

Se debe tener en cuenta:

1.- La fábrica abastece a 99 empresas numeradas de 1 a 99.


2.- El precio de las piezas es el siguiente por unidad:

PIEZA PRECIO
T 1.850
A 675
C 890

3.- Cada empresa puede tener más de un pedido.


4.- La tabla de las bonificaciones se cargará en tiempo de
compilación.
5.- No se puede utilizar la cláusula SORT.

Solución:

IDENTIFICATION DIVISION.
PROGRAM-ID. EJER-26.
REMARKS. Fichero Secuencial. Creación de Pedidos.DAT.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.

Manual de Prácticas Página - 39 - septiembre de 2009


Lenguajes Orientados a Sistemas de Gestión

FILE-CONTROL.
SELECT F-PEDIDOS ASSIGN TO DISK "PEDIDOS.DAT"
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD F-PEDIDOS
LABEL RECORD IS STANDARD
DATA RECORD IS R-PEDIDOS.
01 R-PEDIDOS.
02 EMPRESA PIC 99.
02 PIEZA-SOLICITADA PIC A.
02 UNIDADES-PEDIDAS PIC 99.
WORKING-STORAGE SECTION.
77 LINEA PIC 99.
PROCEDURE DIVISION.
PROGRAMA.
PERFORM P-PROGRAMA.
PERFORM INTRODUCIR-DATOS UNTIL EMPRESA = 0
PERFORM F-PROGRAMA.
STOP RUN.
P-PROGRAMA.
OPEN OUTPUT F-PEDIDOS.
DISPLAY SPACES ERASE.
DISPLAY "ENTRADA DE DATOS".
MOVE 5 TO LINEA.
ACCEPT EMPRESA LINE LINEA, POSITION 01 PROMPT "_".
INTRODUCIR-DATOS.
ACCEPT PIEZA-SOLICITADA LINE LINEA, POSITION 15.
ACCEPT UNIDADES-PEDIDAS LINE LINEA, POSITION 38.
WRITE R-PEDIDOS.
ADD 1 TO LINEA.
IF LINEA > 22
DISPLAY SPACES ERASE
MOVE 5 TO LINEA
END-IF.
ACCEPT EMPRESA LINE LINEA, POSITION 01 PROMPT "_".
F-PROGRAMA.
CLOSE F-PEDIDOS.

IDENTIFICATION DIVISION.
PROGRAM-ID. EJER-26.

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT F-FACTURAS ASSIGN TO DISK "FACTURAS.DAT"
ORGANIZATION IS SEQUENTIAL

Manual de Prácticas Página - 40 - septiembre de 2009


Lenguajes Orientados a Sistemas de Gestión

ACCESS MODE IS SEQUENTIAL.


SELECT F-PEDIDOS ASSIGN TO DISK "PEDIDOS.DAT"
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD F-PEDIDOS
LABEL RECORD IS STANDARD
DATA RECORD IS R-PEDIDOS.
01 R-PEDIDOS.
02 EMPRESA PIC 99.
02 PIEZA-SOLICITADA PIC A.
02 UNIDADES-PEDIDAS PIC 99.
FD F-FACTURAS
LABEL RECORD IS STANDARD
DATA RECORD IS R-FACTURAS.
01 R-FACTURAS.
02 EMPRESA PIC 99.
02 TOTAL-FACTURAS PIC 9(10).
WORKING-STORAGE SECTION.
01 TABLA-DESCUENTOS.
02 FILLER PIC X(10) VALUE "T2510T7515".
02 FILLER PIC X(20) VALUE "A1008A1511A2015A2525".
02 FILLER PIC X(10) VALUE "C1605C3010".
01 DESCUENTOS REDEFINES TABLA-DESCUENTOS.
02 DATOS OCCURS 8 TIMES.
03 PIEZA PIC A.
03 CANTIDAD PIC 99.
03 DESCUENTO PIC 99.
01 TABLA-AUXILIAR.
02 INICIO-TABLA PIC X(990) VALUE ALL "0".
02 DATOS-FACTURAS REDEFINES INICIO-TABLA
OCCURS 99 TIMES PIC 9(10).
77 V-FIN-FICHERO PIC XX VALUE "NO".
77 V-ENCONTRADO PIC X(6).
77 V-DTO PIC 99.
77 V-PRECIO PIC 9(4).
77 V-FACTURA PIC 9(10).
77 I PIC 99.
PROCEDURE DIVISION.
PROGRAMA.
PERFORM P-PROGRAMA
PERFORM RELLENAR-TABLA UNTIL V-FIN-FICHERO = "SI".
PERFORM I-PROGRAMA.
PERFORM RELLENAR-FICHERO UNTIL I > 99.
PERFORM F-PROGRAMA.
STOP RUN.
RELLENAR-TABLA.

Manual de Prácticas Página - 41 - septiembre de 2009


Lenguajes Orientados a Sistemas de Gestión

PERFORM P-RELLENAR-TABLA.
PERFORM BUSCAR-DTO UNTIL V-ENCONTRADO = "CIERTO"
OR I < 1
IF V-ENCONTRADO = "CIERTO"
MOVE DESCUENTO(I + 1) TO V-DTO
ELSE
MOVE ZERO TO V-DTO
END-IF.
IF PIEZA-SOLICITADA = "T"
MOVE 1850 TO V-PRECIO
ELSE IF PIEZA-SOLICITADA = "A"
MOVE 675 TO V-PRECIO
ELSE MOVE 890 TO V-PRECIO
END-IF.
PERFORM F-RELLENAR-TABLA.
BUSCAR-DTO.
IF PIEZA(I) = PIEZA-SOLICITADA
IF UNIDADES-PEDIDAS > CANTIDAD(I)
MOVE "CIERTO" TO V-ENCONTRADO
END-IF.
PERFORM F-BUSCAR-DTO.

P-PROGRAMA.
OPEN INPUT F-PEDIDOS.
OPEN OUTPUT F-FACTURAS
READ F-PEDIDOS AT END MOVE "SI" TO V-FIN-FICHERO.

P-RELLENAR-TABLA.
MOVE "FALSO" TO V-ENCONTRADO.
MOVE 8 TO I.
F-BUSCAR-DTO.

COMPUTE I = I - 1.
F-RELLENAR-TABLA.

MULTIPLY UNIDADES-PEDIDAS BY V-PRECIO GIVING V-FACTURA.


DISPLAY V-FACTURA LINE 14 POSITION 29.
COMPUTE V-FACTURA =
V-FACTURA - (V-FACTURA * V-DTO / 100).
DISPLAY V-FACTURA LINE 15 POSITION 29.

ADD V-FACTURA TO DATOS-FACTURAS(EMPRESA OF R-PEDIDOS).


READ F-PEDIDOS AT END MOVE "SI" TO V-FIN-FICHERO.
I-PROGRAMA.
MOVE 1 TO I.
RELLENAR-FICHERO.
MOVE I TO EMPRESA OF R-FACTURAS.
MOVE DATOS-FACTURAS(I) TO TOTAL-FACTURAS.

Manual de Prácticas Página - 42 - septiembre de 2009


Lenguajes Orientados a Sistemas de Gestión

WRITE R-FACTURAS.
ADD 1 TO I.
F-PROGRAMA.
CLOSE F-PEDIDOS.
CLOSE F-FACTURAS.

Manual de Prácticas Página - 43 - septiembre de 2009

También podría gustarte