Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Practica RM Cobol
Practica RM Cobol
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.
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.
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
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
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.
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.
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]
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.
$ $
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'
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).
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.
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.
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.
........................................
........................................
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.
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.
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
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.
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.
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.
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.
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.
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.
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.
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).
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.
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
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".
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.
PIEZA PRECIO
T 1.850
A 675
C 890
Solución:
IDENTIFICATION DIVISION.
PROGRAM-ID. EJER-26.
REMARKS. Fichero Secuencial. Creación de Pedidos.DAT.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
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
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.
WRITE R-FACTURAS.
ADD 1 TO I.
F-PROGRAMA.
CLOSE F-PEDIDOS.
CLOSE F-FACTURAS.