Documentos de Académico
Documentos de Profesional
Documentos de Cultura
COBOL
COBOL
COmmon Business Oriented
Language
Introducción
Desarrollado en 1960 por el comité CODASYL
(Conference on Data Systems Languages)
El American National Standards Institute (ANSI)
desrrolla nuevos estándares en 1968, 1974 y
1985
Existen nuevos productos (COBOL OO)
Gartner estima que en el año 2002 hay alrededor
de dos millones de programadores COBOL
comparados con alrededor de un millón de
programadores Java y un millón de
programadores C++
Pág: 3 15/09/2019
Lenguajes
Máquina: escrito en binario o hexadecimal
Bajo nivel: (1 x 1) Ensambladores.
Alto nivel: portables, más parecidos al
lenguaje humano
Compilados: se traducen a lenguaje
máquina una sola vez
Interpretados: se traduce una instrucción
cada vez que se ejecuta
Pág: 4 15/09/2019
Teorema de Dijkstra
Todo programa puede escribirse utilizando
sólo tres estructuras:
Secuencia: Sucesión simple de dos o más
operaciones
Selección: Bifurcación condicional de una o
más operaciones
Interacción: Repetición de una o más
operaciones mientras se cumple una condición
Pág: 5 15/09/2019
Hoja de codificación COBOL
Pág: 6 15/09/2019
Estructura de un programa COBOL
Programa COBOL
División
Sección
Párrafo
Sentencia
...
...
...
...
Instrucción ... ...
Pág: 7 15/09/2019
Estructura de un programa COBOL
División:
Empieza con el nombre de la división y termina con la
siguiente división
Sección:
Comienza con el nombre de la sección y termina con la
siguiente división
Párrafo:
Comienza con el nombre de párrafo y termina con el
siguiente párrafo
Sentencia:
Una o más instrucciones terminadas en un punto
Instrucción:
Un verbo COBOL y uno o más operados
Pág: 8 15/09/2019
Las divisiones de un programa
Comienzan en área A (col. 8)
Terminan en un punto
IDENTIFICATION DIVISION:
Nombre programa
Programador
Fecha de codificación y compilación
Comentarios
ENVIRONMENT DIVISION:
Ficheros
Punto decimal, etc.
DATA DIVISION:
Descripción de datos
PROCEDURE DIVISION:
Código para manipular los datos
Pág: 9 15/09/2019
Proceso de compilación
Informe
Compilador
Fuente
Compilador
Informe
Linkeditor
Objeto Linkeditor
Load
Pág: 10 15/09/2019
Un programa mínimo
IDENTIFICATION DIVISION.
PROGRAM-ID. HOLA.
AUTHOR. ALBERTO.
* IMPRIME UN SALUDO
ENVIRONMENT DIVISION.
DATA DIVISION.
PROCEDURE DIVISION.
DISPLAY ‘HOLA MUNDO’.
STOP RUN.
Pág: 11 15/09/2019
IDENTIFICATION DIVISION
|________________________________________________________________________|
| >>__ _IDENTIFICATION_ __DIVISION.__PROGRAM-ID__ ___ __program-name___> |
| |_ID_____________| |_._| |
| >__ ______________________________________ __________________________> |
| |_AUTHOR__ ___ __ ___________________ _| |
| |_._| | _______________ | |
| |___comment-entry_|_| |
| >__ ____________________________________________ ____________________> |
| |_INSTALLATION__ ___ __ ___________________ _| |
| |_._| | _______________ | |
| |___comment-entry_|_| |
| >__ ____________________________________________ ____________________> |
| |_DATE-WRITTEN__ ___ __ ___________________ _| |
| |_._| | _______________ | |
| |___comment-entry_|_| |
| >__ _____________________________________________ ___________________> |
| |_DATE-COMPILED__ ___ __ ___________________ _| |
| |_._| | _______________ | |
| |___comment-entry_|_| |
| >__ ________________________________________ _______________________> |
| |_SECURITY__ ___ __ ___________________ _| |
| |_._| | _______________ | |
| |___comment-entry_|_| |
|________________________________________________________________________|
Pág: 12 15/09/2019
Categorías de datos
Variables:
Espacio de memoria del que leemos o escribimos
Se le asigna un nombre y tipo (DATA DIVISION)
Numéricas
Alfanuméricas
Alfabéticas
Constantes (literales):
No se modifican durante la ejecución del programa
Numéricas (sin comillas)
Alfanuméricas (con comillas)
Constantes figurativas:
SPACE (SPACES) uno o más blancos
ZERO (ZEROS, ZEROE, ZEROES) uno o más ceros
QUOTE (QUOTES) comillas
HIGH-VALUE (HIGH-VALUES) máximo valor
LOW-VALUE (LOW-VALUES) mínimo valor
ALL literal – uno o más “literal”
Pág: 13 15/09/2019
Declaración de variables I
Cada declaración consta de:
Un número de nivel
Un nombre (1: 30 pos.) (A:Z, 0:9, -) 1ª letra
Un formato (PICTURE)
9 un dígito
X un carácter cualquiera
A un carácter alfabético
V la posición del signo
S indica que hay signo y sólo puede figurar al principio
Un
valor (VALUE) opcional
PIC 9(6) = PICTURE 999999
PIC 9(6)V99 = PIC 999999V99
PICTURE X(10) = PIC XXXXXXXXXX
PIC S9(4)V9(4) = PIC S9999V9999
PIC 9(18) = PIC 999999999999999999
Pág: 14 15/09/2019
Declaración de variables II
ITEM
ELEMENTAL
01 DETALLE-ESTUDIANTES.
05 EST-NUM PIC 9(7).
05 EST-NOMBRE.
07 EST-NOM PIC X(15).
ITEM 07 FILLER PIC X VALUE SPACE
DE 07 EST-APELLIDOS PIC X(15).
GRUPO 05 EST-F-NACIMIENTO.
07 EST-DIA-NAC PIC 99.
07 EST-MES-NAC PIC 99.
07 EST-ANO-NAC PIC 9(4).
05 EST-CURSO PIC X(4).
NO REFERENCIABLE
Pág: 15 15/09/2019
Números de nivel
Pueden ir del 01 a 49
Niveles “especiales”
66 asigna un alias a una variable (no usado)
77 define exclusivamente items elementales
88 define nombres de condición
Pág: 16 15/09/2019
Verbos COBOL
ACCEPT DELETE IF PERFORM START
Pág: 17 15/09/2019
Variable definida en SYSIN
ACCEPT DATA DIVISION CONSOLE
AAMMDD AAAAMMDD
AAAADDD
HHMMSSCC
Pág: 18 15/09/2019
DISPLAY
Se pueden codificar varios
identificadores o literales
<__________________
<<__DISPLAY__ _identifier-1_ _|_______________________________<
|_literal-1____|
<__ ____________________________ ______________________ _____<<
|_UPON__ _mnemonic-name-1__ _| |_______NO ADVANCING_|
|_environment-name-1_| |_WITH_|
No codificar No avanzar
línea
Pág: 19 15/09/2019
Terminación del programa
STOP RUN:
Devuelve el control al Sistema Operativo
GOBACK:
Devuelve el control al programa que le llamó
Pág: 20 15/09/2019
Ejercicio I
Realizar un programa que muestre la fecha
y la hora del sistema en sus diferentes
formatos.
Realizar un programa que acepte un texto
por pantalla (no valido host) y lo visualice
en la salida standard
Pág: 21 15/09/2019
MOVE
<______________
>>__MOVE__ _identifier-1_ __TO____identifier-2_|_______><
|_literal-1____|
01 FECHA. 01 FECHA-EDIT.
05 DIA PIC XX. 05 DIA PIC XX.
05 MES PIC XX. 05 FILLER PIC X VALUE ‘-’.
05 ANO PIC XX. 05 MES PIC XX.
05 FILLER PIC X VALUE ‘-’.
05 ANO PIC XX.
Alfanumérico
entero
Numérico
entero
Numérico no
editado
Numérico
editado
Alfanumérico
Alfabético
Destino
Origen
Alfanumérico S S N S S S
Numérico entero S S S S S N
Numérico no entero S S S S S N
Numérico editado S S S S S N
Alfanumérico editado S N N N S S
Alfabético S N N N S S
Pág: 23 15/09/2019
MOVE (alfanuméricos)
O S CAR P ERE Z
01 ESTUDIANTE.
05 NOMBRE PIC X(8) VALUE ‘OSCAR’.
05 APELLIDOS PIC X(8) VALUE ‘PEREZ’.
Pág: 24 15/09/2019
MOVE (alfa numéricos)
O S CAR GONZAL E Z
01 ESTUDIANTE.
05 NOMBRE PIC X(8) VALUE ‘OSCAR’.
05 APELLIDOS PIC X(8) VALUE ‘PEREZ’.
Pág: 25 15/09/2019
MOVE (alfanuméricos)
J UAN GONZAL E Z
01 ESTUDIANTE.
05 NOMBRE PIC X(8) VALUE ‘OSCAR’.
05 APELLIDOS PIC X(8) VALUE ‘PEREZ’.
Pág: 26 15/09/2019
MOVE (alfanuméricos)
J UAN ARE S P ACO
01 ESTUDIANTE.
05 NOMBRE PIC X(8) VALUE ‘OSCAR’.
05 APELLIDOS PIC X(8) VALUE ‘PEREZ’.
Pág: 27 15/09/2019
MOVE (alfanuméricos)
ROBU S T I AARE S P ACO
01 ESTUDIANTE.
05 NOMBRE PIC X(8) VALUE ‘OSCAR’.
05 APELLIDOS PIC X(8) VALUE ‘PEREZ’.
Pág: 28 15/09/2019
MOVE (alfanuméricos)
LU I S GARC I A
01 ESTUDIANTE.
05 NOMBRE PIC X(8) VALUE ‘OSCAR’.
05 APELLIDOS PIC X(8) VALUE ‘PEREZ’.
Pág: 29 15/09/2019
MOVE (alfanuméricos)
XXXXXXXXXXXXXXXX
01 ESTUDIANTE.
05 NOMBRE PIC X(8) VALUE ‘OSCAR’.
05 APELLIDOS PIC X(8) VALUE ‘PEREZ’.
Pág: 30 15/09/2019
Campos decimales y empaquetados
Representación Interna:
1 byte (carácter) = 8 bits
A = 1 1 0 0 0 0 0 1
C 1
6 = 1 1 1 1 0 1 1 0
F 6
+ 1 2 8 9 7
F 1 F 2 F 8 F 9 F 7
A = 1 1 0 0 0 0 0 1
C 1
6 = 1 1 1 1 0 1 1 0
F 6
+ 1 2 8 9 7
F 1 F 2 F 8 F 9 C 7
Si el campo es negativo
Pág: 32 15/09/2019
Campos decimales y empaquetados
Representación Interna:
1 byte (carácter) = 8 bits
A = 1 1 0 0 0 0 0 1
C 1
6 = 1 1 1 1 0 1 1 0
F 6
- 1 2 8 9 7
F 1 F 2 F 8 F 9 D 7
Formato empaquetado
Pág: 33 15/09/2019
Campos decimales y empaquetados
- 1 2 8 9 7
Decimal Empaquetado
F 1 F 2 F 8 F 9 D 7 1 2 8 9 7 D
5 octetos 3 octetos
- 1 2 8 9 7 6
Decimal
F 1 F 2 F 8 F 9 F 7 D 6 Empaquetado
6 octetos
0 1 2 8 9 7 6 D
4 octetos
Pág: 34 15/09/2019
MOVE (numéricos)
7 3 2 6 8 3 7
.
01 IMPORTE PIC 9(5)V99 VALUE 73268.37.
Pág: 35 15/09/2019
MOVE (numéricos)
0 0 0 1 5 6 0
.
01 IMPORTE PIC 9(5)V99 VALUE 73268.37.
Pág: 36 15/09/2019
MOVE (numéricos)
0 0 1 2 3 4 5 6
.
01 IMPORTE PIC 9(5)V99 VALUE 73268.37.
Pág: 37 15/09/2019
MOVE (numéricos)
1 2 3 4 5 6 7 8 9
.
01 IMPORTE PIC 9(5)V99 VALUE 73268.37.
Pág: 38 15/09/2019
MOVE (numéricos)
0 0 0 0 0 0 0
.
01 IMPORTE PIC 9(5)V99 VALUE 73268.37.
Pág: 39 15/09/2019
MOVE (numéricos)
1 2 3 4 5 6 7 0 0
.
01 IMPORTE PIC 9(5)V99 VALUE 73268.37.
Pág: 40 15/09/2019
MOVE (numéricos)
1 1 1 1 1
.
01 IMPORTE PIC 9(5) VALUE 11111.
Pág: 41 15/09/2019
MOVE (numéricos)
0 0 9 8 7
.
01 IMPORTE PIC 9(5) VALUE 11111.
Pág: 42 15/09/2019
MOVE (numéricos)
1 2 3 4 5 6 7
.
01 IMPORTE PIC 9(5) VALUE 11111.
Pág: 43 15/09/2019
MOVE (numéricos)
0 0 0 2 4 5 6
.
01 IMPORTE PIC 9(5) VALUE 11111.
Pág: 44 15/09/2019
INITIALIZE
ALPHABETIC
ALPHANUMERIC identificador
NUMERIC [DATA] BY
literal
ALPHANUMERIC-EDITED
NUMERIC-EDITED
Pág: 45 15/09/2019
ADD (Formato 1)
<_________________ <______________________
>>_ADD__ _identifier-1_ _|_TO_identifier-2_ _________|_____>
|_literal-1____| |_ROUNDED_|
>__ ____________________________________________ __________>
|_ ____ __SIZE ERROR__imperative-statement-1_|
|_ON_|
>__ _________________________________________________ _____>
|_NOT__ ____ __SIZE ERROR__imperative-statement-2_|
|_ON_|
>__ _________ ____________________________________________><
|_END-ADD_|
Pág: 46 15/09/2019
ADD (Formato 2)
<__________________
>>__ADD____ _identifier-1_ _|__ ____ __ _identifier-2_ ____>
|_literal-1____| |_TO_| |_literal-2____|
<__________________________
>__GIVING____identifier-3__ _________ _|___________________>
|_ROUNDED_|
>__ ____________________________________________ __________>
|_ ____ __SIZE ERROR__imperative-statement-1_|
|_ON_|
>__ _________________________________________________ _____>
|_NOT__ ____ __SIZE ERROR__imperative-statement-2_|
|_ON_|
>__ _________ ____________________________________________><
|_END-ADD_|
Pág: 47 15/09/2019
ADD (Formato 3)
>>__ADD_ CORRESPONDING _ _identifier-1__TO__identifier-2______>
|_CORR___________|
>_ _________ __ ____________________________________________ _>
|_ROUNDED_| |_ ____ __SIZE ERROR__imperative-statement-1_| >
|_ON_|
>__ _________________________________________________ ________>
|_NOT__ ____ __SIZE ERROR__imperative-statement-2_|
|_ON_|
>__ _________ _______________________________________________><
|_END-ADD_|
Pág: 48 15/09/2019
SUBTRACT (Formato 1)
<__________________ <_______________________
>>_SUBTRACT__ _identifier-1_ _|_FROM_identifier-2_ _________|>
|_literal-1____| |_ROUNDED_|
>__ _____________________________________________ ___________>
|_ ____ __SIZE ERROR_imperative-statement-1___|>
|_ON_|
>__ _________________________________________________ _______>
|_NOT__ ____ __SIZE ERROR__imperative-statement-2_|
|_ON_|
>__ ________________ _______________________________________><
|_END-SUBTRACT___|
Pág: 49 15/09/2019
SUBTRACT(Formato 2)
<______________
>>__SUBTRACT_ _identifier-1_|_ ______ __ _identifier-2_ ___>
|_literal-1____| |_FROM_| |_literal-2____|
<_________________________
>__GIVING____identifier-3____________ _|___________________>
|_ROUNDED_|
>__ ____________________________________________ __________>
|_ ____ __SIZE ERROR__imperative-statement-1_|
|_ON_|
>__ _________________________________________________ _____>
|_NOT__ ____ __SIZE ERROR__imperative-statement-2_|
|_ON_|
>__ ________________ _____________________________________><
|_END-SUBTRACT___|
Pág: 50 15/09/2019
SUBTRACT(Formato 3)
>>__SUBTRACT_ CORRESPONDING_ _identifier-1_FROM__identifier-2>
|_CORR_________|
>__ _________ __ ___________________________________________ >
|_ROUNDED_| |_ ____ __SIZE ERROR_imperative-statement-1_|>
|_ON_|
>__ _________________________________________________ _______>
|_NOT__ ____ __SIZE ERROR__imperative-statement-2_|
|_ON_|
>__ ________________ _______________________________________><
|_END- SUBTRACT _|
Pág: 51 15/09/2019
MULTIPLY (Formato 1)
<________________________
>>_MULTIPLY__ _identifier-1_ ___BY_identifier-2___ _________|>
|_literal-1____| |_ROUNDED_|
>__ _____________________________________________ ___________>
|_ ____ __SIZE ERROR_imperative-statement-1___|>
|_ON_|
>__ _________________________________________________ _______>
|_NOT__ ____ __SIZE ERROR__imperative-statement-2_|
|_ON_|
>__ ________________ _______________________________________><
|_END-MULTIPLY___|
Pág: 52 15/09/2019
MULTIPLY(Formato 2)
>>__ MULTIPLY _ _identifier-1_|_ ____ __ _identifier-2_ ___>
|_literal-1____| |_BY_| |_literal-2____|
<_________________________
>__GIVING____identifier-3____________ _|___________________>
|_ROUNDED_|
>__ ____________________________________________ __________>
|_ ____ __SIZE ERROR__imperative-statement-1_|
|_ON_|
>__ _________________________________________________ _____>
|_NOT__ ____ __SIZE ERROR__imperative-statement-2_|
|_ON_|
>__ ________________ _____________________________________><
|_END-MULTIPLY___|
Pág: 53 15/09/2019
DIVIDE (Formato 1)
<________________________
>>_DIVIDE__ _identifier-1_ _ INTO _identifier-2___ _________|>
|_literal-1____| |_BY_| |_ROUNDED_|
>__ _____________________________________________ ___________>
|_ ____ __SIZE ERROR_imperative-statement-1___|>
|_ON_|
>__ _________________________________________________ _______>
|_NOT__ ____ __SIZE ERROR__imperative-statement-2_|
|_ON_|
>__ ________________ _______________________________________><
|_END-DIVIDE ____|
Pág: 54 15/09/2019
DIVIDE (Formato 2)
>>__ DIVIDE_ _identifier-1_|_ __ INTO __ __identifier-2 _____>
|_literal-1____| |_BY_| |_literal-2____|
<________________________
>_GIVING_identifier-3_ _________ _|________________________ _>
|_ROUNDED_| |_REMAINDER identifier-4 |
>__ ____________________________________________ ____________>
|_ ____ __SIZE ERROR__imperative-statement-1_|
|_ON_|
>__ _________________________________________________ _______>
|_NOT__ ____ __SIZE ERROR__imperative-statement-2_|
|_ON_|
>__ ________________ _______________________________________><
|_END-DIVIDE_____|
Pág: 55 15/09/2019
COMPUTE
<___________________________
<<__COMPUTE____identifier-1__ _________ _|__ _=______________<
|_ROUNDED_| |_ EQUAL _|
<__arithmetic-expression_____________________________________<
>__ ___________________________________________ _____________>
|_ ____ __SIZE ERROR__imperative-statement-1_|
|_ON_|
>__ _________________________________________________ _______>
|_NOT__ ____ __SIZE ERROR__imperative-statement-2_|
|_ON_|
>__ ________________ _______________________________________><
|___END-COMPUTE__|
Pág: 57 15/09/2019
Size error
Resultado Después ¿Size
Campo Receptor
operación rounded Error?
PIC 9(3)V9 245.96 245.9 Si
PIC 9(3)V9 3245.9 245.9 Si
PIC 9(3) 324 324 No
PIC 9(3) 5324 324 Si
PIC 9(3)V9 no redondeado 523.35 523.3 Si
PIC 9(3)V9 redondeado 523.35 523.4 No
PIC 9(3)V9 redondeado 3523.35 523.4 Si
Pág: 58 15/09/2019
COMPUTE (Ejemplo)
9 0 - 7 * 3 + 5 0 / 2
Resultado = 94
Pág: 59 15/09/2019
COMPUTE (Ejemplo)
9 0 - ( 7 * 3 ) + ( 5 0 / 2 )
21 25
Resultado = 94
9 0 - ( ( 7 * 3 ) + ( 5 0 / 2 ) )
21 25
Resultado = 44
Pág: 60 15/09/2019
IF
<____________
>>__IF__condition-1__ ______ __ ___statement-1_|_ ___________>
|_THEN_| |_NEXT SENTENCE___|
>__ ___________________________ __ ___________ _____________><
| <_____________ | | |
|_ELSE__ ___statement-2_|_ _| |_END-IF____|
|_NEXT SENTENCE___|
Sentencia 1 Sentencia 1
Sentencia 2 Sentencia 2
IF VAR-A > VAR-D IF VAR-A > VAR-D
Sentencia 3 Sentencia 3
Sentencia 4 Sentencia 4
END-IF Sentencia 5
Sentencia 5 Sentencia 6.
Sentencia 6.
. .
Pág: 61 15/09/2019
Condiciones
Condiciones simples:
Clase
Nombre de condición
Relación
Signo
Condiciones complejas:
Unión de dos o más condiciones simples, a
través de los operadores AND y OR
Pág: 62 15/09/2019
Condiciones de relación
Pág: 63 15/09/2019
Condiciones de clase y signo
NUMERIC
ALPHABETIC
Identificador [IS] [NOT] ALPHABETIC-LOWER
ALPHABETIC-UPPER
Clase-SPECIAL-NAMES
Identificador POSITIVE
Expresión [IS] [NOT] NEGATIVE
Aritmética ZERO
Pág: 64 15/09/2019
Sujeto implícito
IF VAR-A = 1 OR VAR-A = 5 OR VAR-A = 7
IF VAR-A = 1 OR = 5 OR = 7
Pág: 65 15/09/2019
Nombres de condición
[VALUE] literal
88 nombre-condición [VALUES] Mín.valor
THRU
Máx.valor
THROUGH
01 DEP-CODE PIC X.
01 DEP-CODE PIC X.
88 ADMINISTRATIVO VALUES ‘A’ ‘H’ ‘K’ ‘W’
IF ADMINISTRATIVO
...
END-IF
Pág: 66 15/09/2019
Nombres de condición
01 EDAD PIC 9(3).
88 NINO VALUE 0 THRU 13.
88 ADOLESCENTE VALUE 14 THRU 20.
88 ADULTO VALUE 21 THRU 999.
88 VOTANTE VALUE 18 THRU 999.
Pág: 67 15/09/2019
Set y nombres de condición
01 FILLER PIC 9 VALUE 0.
88 FIN-FICHERO VALUE 1.
88 NO-FIN-FICHERO VALUE 0.
READ FICHERO INTO AREA AT-END
SET FIN-FICHERO TO TRUE
END-READ
01 REGISTRO.
88 FIN-FICHERO VALUE HIGH-VALUES.
05 CAMPO1 ...
...
Pág: 69 15/09/2019
EVALUATE
Identificador Identificador
Literal Literal
Exp. Condicional
EVALUATE Exp. Aritmética
ALSO Exp. Condicional ...
Exp. Aritmética
TRUE TRUE
FALSE FALSE
ALSO
ANY
Condición
WHEN TRUE
FALSE Sentencia/s ...
...
Identif. THRU Identif.
[NOT] Literal THROUGH Literal
E. Arit. E. Arit.
Pág: 71 15/09/2019
EVALUATE (Ejemplo)
EVALUATE QTY ALSO TRUE ALSO CLUB
WHEN 1 THRU 5 ALSO IMPORTE < 501 ALSO 'Y' MOVE 2 TO DESCUENTO
WHEN 6 THRU 16 ALSO IMPORTE < 501 ALSO 'Y' MOVE 3 TO DESCUENTO
WHEN 17 THRU 99 ALSO IMPORTE < 501 ALSO 'Y' MOVE 5 TO DESCUENTO
WHEN 1 THRU 5 ALSO IMPORTE < 2001 ALSO 'Y' MOVE 7 TO DESCUENTO
WHEN 6 THRU 16 ALSO IMPORTE < 2001 ALSO 'Y' MOVE 12 TO DESCUENTO
WHEN 17 THRU 99 ALSO IMPORTE < 2001 ALSO 'Y' MOVE 18 TO DESCUENTO
WHEN 1 THRU 5 ALSO IMPORTE > 2000 ALSO 'Y' MOVE 10 TO DESCUENTO
WHEN 6 THRU 16 ALSO IMPORTE > 2000 ALSO 'Y' MOVE 23 TO DESCUENTO
WHEN 17 THRU 99 ALSO IMPORTE > 2000 ALSO 'Y' MOVE 35 TO DESCUENTO
WHEN 1 THRU 5 ALSO IMPORTE < 501 ALSO 'N' MOVE 1 TO DESCUENTO
WHEN 6 THRU 16 ALSO IMPORTE < 501 ALSO 'N' MOVE 2 TO DESCUENTO
WHEN 17 THRU 99 ALSO IMPORTE < 501 ALSO 'N' MOVE 3 TO DESCUENTO
WHEN 1 THRU 5 ALSO IMPORTE < 2001 ALSO 'N' MOVE 5 TO DESCUENTO
WHEN 6 THRU 16 ALSO IMPORTE < 2001 ALSO 'N' MOVE 10 TO DESCUENTO
WHEN 17 THRU 99 ALSO IMPORTE < 2001 ALSO 'N' MOVE 15 TO DESCUENTO
WHEN 1 THRU 5 ALSO IMPORTE > 2000 ALSO 'N' MOVE 8 TO DESCUENTO
WHEN 6 THRU 16 ALSO IMPORTE > 2000 ALSO 'N' MOVE 23 TO DESCUENTO
WHEN 17 THRU 99 ALSO IMPORTE > 2000 ALSO 'N' MOVE 28 TO DESCUENTO
END-EVALUATE
Pág: 72 15/09/2019
Tipos de Subrutinas
Subrutinas abiertas:
Se ejecutan cuando el flujo de control del programa
pasa sobre ellas
Tienen acceso a las variables del programa principal y
no puede definir sus propias variables
Subrutinas cerradas:
Se ejecutan al ser llamadas por su nombre
Definen sus propias variables, que no pueden ser
accedidas desde fuera
Se le comunican datos vía parámetros
COBOL subrutinas:
PERFORM (Formato1) (Subrutinas abiertas)
CALL (Subrutinas cerradas)
Pág: 73 15/09/2019
PERFORM (Fomato1)
PERFORM párrafo THRU parráfo
THROUGH
Pág: 74 15/09/2019
Párrafos
Comienzan en el área A (col. 8)
Terminan en un punto (.)
Definición:
99999-párrafo.
instrucciones ...
...
99999-párrafo-EXIT.
Nº de EXIT.
secuencia
Llamada:
PERFORM 99999-párrafo THRU
99999-párrafo-EXIT.
Pág: 75 15/09/2019
PERFORM (Fomato2)
PERFORM párrafo THRU parráfo
THROUGH
Identif. TIMES
Entero
Pág: 76 15/09/2019
PERFORM (Fomato2)
PERFORM párrafo THRU parráfo
THROUGH
Identif. TIMES
Entero
Sentencias
END-PERFORM
Pág: 77 15/09/2019
PERFORM (Fomato3)
THRU AFTER
PERFORM párrafo parráfo [WHIT] TEST
THROUGH BEFORE
UNTIL condición
Sentencias
END-PERFORM
Pág: 78 15/09/2019
PERFORM (Fomato3)
PERFORM con PERFORM con
TEST BEFORE TEST AFTER
Sentencias
Sentencias
Test
Falso
Cierto
Test
Falso
Siguiente Cierto
Sentencia
Siguiente
Sentencia
Pág: 79 15/09/2019
PERFORM (Fomato4)
THRU AFTER
PERFORM párrafo parráfo [WHIT] TEST
THROUGH BEFORE
Identif.
Identif.
VARYING Índice FROM Índice BY Identif.
literal literal
UNTIL condición
Identif. Identif.
AFTER Índice FROM Índice BY Identif.
literal
literal
UNTIL condición
Sentencias
END-PERFORM
AFTER no pude utilizarse en el formato in-line
Pág: 80 15/09/2019
PERFORM (Fomato4)
PERFORM VARYING
MOVE 1 TO IDX
IDX FROM 1 BY 1
UNTIL IDX = 3 ADD 1 TO IDX
DISPLAY IDX
END-PERFORM
DISPLAY ‘SALIDA IDX = ‘ IDX DISPLAY IDX
IDX =3
SALIDA Falso
Cierto
IDX
Siguiente
Sentencia
Pág: 81 15/09/2019
PERFORM (Fomato4)
PERFORM VARYING
MOVE 1 TO IDX
IDX FROM 1 BY 1
UNTIL IDX = 3 ADD 1 TO IDX
DISPLAY IDX
END-PERFORM
DISPLAY ‘SALIDA IDX = ‘ IDX DISPLAY IDX
IDX =3
SALIDA Falso
Cierto
IDX
1 Siguiente
Sentencia
Pág: 82 15/09/2019
PERFORM (Fomato4)
PERFORM VARYING
MOVE 1 TO IDX
IDX FROM 1 BY 1
UNTIL IDX = 3 ADD 1 TO IDX
DISPLAY IDX
END-PERFORM
DISPLAY ‘SALIDA IDX = ‘ IDX DISPLAY IDX
IDX =3
SALIDA Falso
Cierto
IDX
1 Siguiente
Sentencia
Pág: 83 15/09/2019
PERFORM (Fomato4)
PERFORM VARYING
MOVE 1 TO IDX
IDX FROM 1 BY 1
UNTIL IDX = 3 ADD 1 TO IDX
DISPLAY IDX
END-PERFORM
DISPLAY ‘SALIDA IDX = ‘ IDX DISPLAY IDX
IDX =3
SALIDA Falso
1 Cierto
IDX
1 Siguiente
Sentencia
Pág: 84 15/09/2019
PERFORM (Fomato4)
PERFORM VARYING
MOVE 1 TO IDX
IDX FROM 1 BY 1
UNTIL IDX = 3 ADD 1 TO IDX
DISPLAY IDX
END-PERFORM
DISPLAY ‘SALIDA IDX = ‘ IDX DISPLAY IDX
IDX =3
SALIDA Falso
1 Cierto
IDX
2 Siguiente
Sentencia
Pág: 85 15/09/2019
PERFORM (Fomato4)
PERFORM VARYING
MOVE 1 TO IDX
IDX FROM 1 BY 1
UNTIL IDX = 3 ADD 1 TO IDX
DISPLAY IDX
END-PERFORM
DISPLAY ‘SALIDA IDX = ‘ IDX DISPLAY IDX
IDX =3
SALIDA Falso
Cierto
IDX
2 Siguiente
Sentencia
Pág: 86 15/09/2019
PERFORM (Fomato4)
PERFORM VARYING
MOVE 1 TO IDX
IDX FROM 1 BY 1
UNTIL IDX = 3 ADD 1 TO IDX
DISPLAY IDX
END-PERFORM
DISPLAY ‘SALIDA IDX = ‘ IDX DISPLAY IDX
IDX =3
SALIDA Falso
1 Cierto
IDX 2
2 Siguiente
Sentencia
Pág: 87 15/09/2019
PERFORM (Fomato4)
PERFORM VARYING
MOVE 1 TO IDX
IDX FROM 1 BY 1
UNTIL IDX = 3 ADD 1 TO IDX
DISPLAY IDX
END-PERFORM
DISPLAY ‘SALIDA IDX = ‘ IDX DISPLAY IDX
IDX =3
SALIDA Falso
1 Cierto
IDX 2
3 Siguiente
Sentencia
Pág: 88 15/09/2019
PERFORM (Fomato4)
PERFORM VARYING
MOVE 1 TO IDX
IDX FROM 1 BY 1
UNTIL IDX = 3 ADD 1 TO IDX
DISPLAY IDX
END-PERFORM
DISPLAY ‘SALIDA IDX = ‘ IDX DISPLAY IDX
IDX =3
SALIDA Falso
1 Cierto
IDX 2
3 Siguiente
Sentencia
Pág: 89 15/09/2019
PERFORM (Fomato4)
PERFORM VARYING
MOVE 1 TO IDX
IDX FROM 1 BY 1
UNTIL IDX = 3 ADD 1 TO IDX
DISPLAY IDX
END-PERFORM
DISPLAY ‘SALIDA IDX = ‘ IDX DISPLAY IDX
IDX =3
SALIDA Falso
1 Cierto
IDX 2
3 SALIDA IDX = 3
Siguiente
Sentencia
Pág: 90 15/09/2019
Ejercicio II
Visualización de fechas:
Visualizar todas las fechas (día a día) para los
años 2003 a 2005.
Cada fecha se visualizara en formato DD-
MM-AA
Se considerará que todos los meses tienen 30
días
Posteriormente modificar el programa para
considerar cada mes con los días que le
corresponden
Pág: 91 15/09/2019
Métodos de acceso
Programa
Método Disco
Leer De
acceso
Registro lógico
Cinta
Pág: 92 15/09/2019
Métodos de acceso
Programa
Método Disco
Leer De
acceso
Registro lógico
Cinta
Pág: 93 15/09/2019
VTOC
Fichero 1 Datos
Fichero 2 Datos
Pág: 94 15/09/2019
Definición de un fichero secuencial
ENVIRONMENT DIVISION. Debe coincidir con el
INPUT-OUTPUT SECTION. DDNAME del JCL
FILE-CONTROL.
SELECT fichero ASSIGN nombre-externo.
Suministraremos el
DATA DIVISION. blocaje por JCL
FILE SECTION.
FD FICHERO
BLOCK CONTAINS 0 RECORDS
La longitud total debe coincidir
RECORDING [MODE] F|V con el LRECL del JCL
LABEL RECORDS ARE STANDARD.
01 REGISTRO.
02 CAMPO1 PIC X.
...
02 CAMPON PIC ...
Pág: 95 15/09/2019
Uso de un fichero secuencial
Entrada INPUT Salida
Pág: 97 15/09/2019
La unidad de
E/S y Buffers transferencia es el bloque
Fichero
LRECL=50
BLKZIZE=250
Buffer
Reg. 1 Reg. 2 Reg. 3 Reg. 4 Reg. 5
Puntero
Pág: 98 15/09/2019
E/S y Buffers Fichero
LRECL=50
BLKZIZE=250
Buffer
Reg. 1 Reg. 2 Reg. 3 Reg. 4 Reg. 5
Puntero
Pág: 99 15/09/2019
E/S y Buffers Fichero
LRECL=50
BLKZIZE=250
Buffer
Reg. 1 Reg. 2 Reg. 3 Reg. 4 Reg. 5
Puntero
Puntero
Puntero
DISPLAY nombre
IMPRIMIR-REGISTRO Y apellidos
REG-ESCRITOS + 1
PROCESO
(hasta
FIN-FICHERO)
READ ALUMNOS
LEER-REGISTRO
REG-LEIDOS + 1
CERRAR ALUMNOS
FIN-PROGRAMA
DISPLAY cont.
Fija (+ - CR DB $)
Flotante (+ - $)
Reemplazo:
Ceros por espacios (Z)
Ceros por * (*)
EMISOR RECEPTOR
PICTURE DATOS PICTURE RESULTADO
999V99 12345 999,99 123,45
999V99 02345 999,9 023,4
999V99 71234 99,99 12,34
9(4) 2456 999,99 456,00
CERRAR FICHEROS
FIN-PROGRAMA
DISPLAY cont.
Pág: 113 15/09/2019
Ejercicio IV (pseudocódigo)
Movimientos Maestro N. Maestro Errores
1 1
2 3
6 7
FF FF
ABRIR FICHEROS
READ MAESTRO
MOVTOS.
DISPLAY ERROR
MAESTRO =
MOTOS LEER MOVTOS
ESCRIBIR MAESTRO
MAESTRO <
MOTOS LEER MAESTRO
ESCRIBIR MAESTRO
MAESTRO > DESDE MOVTOS.
MOVTOS LEER MOVTOS
ESCRIBIR MAESTRO
MAESTRO <
MOTOS LEER MAESTRO
ESCRIBIR MAESTRO
MAESTRO > DESDE MOVTOS.
MOVTOS LEER MOVTOS
ESCRIBIR MAESTRO
MAESTRO <
MOTOS LEER MAESTRO
PROCESO
(hasta
FIN-MAESTRO
Y FIN
MOVTOS.)
CERRAR FICHEROS
FIN-PROGRAMA
DISPLAY cont.
Pág: 123 15/09/2019
Ejercicio IV (pseudocódigo)
Movimientos Maestro N. Maestro Errores
2 1
3 3
8 7
FF FF
ABRIR FICHEROS
READ MAESTRO
MOVTOS.
ESCRIBIR MAESTRO
MAESTRO <
MOTOS LEER MAESTRO
DISPLAY ERROR
MAESTRO >
MOTOS LEER MOVTOS
LEER MAESTRO Y
MAESTRO =
MOVTOS.
MOVTOS
ESCRIBIR MAESTRO
MAESTRO <
MOTOS LEER MAESTRO
DISPLAY ERROR
MAESTRO >
MOTOS LEER MOVTOS
PROCESO
(hasta
FIN-MAESTRO
Y FIN
MOVTOS.)
CERRAR FICHEROS
FIN-PROGRAMA
DISPLAY cont.
Pág: 132 15/09/2019
Ejercicio VI (pseudocódigo)
MAESTRO MOVIMIENTOS N.MAESTRO ERROR
ID HORAS ID HORAS ID HORAS
1 30 1 150
2 50 3 120
4 20 4 170
5 20 4 200
FF FF
ABRIR FICHEROS
READ MAESTRO
MOVTOS.
SUMAR HORAS
MAESTRO = ESCRIBIR MAESTRO
MOVTOS LEER MAESTRO Y
MOVTOS.
ESCRIBIR MAESTRO
MAESTRO <
MOVTOS LEER MAESTRO
DISPLAY ERROR
MAESTRO >
MOTOS LEER MOVTOS
SUMAR HORAS
MAESTRO = ESCRIBIR MAESTRO
MOVTOS LEER MAESTRO Y
MOVTOS.
DISPLAY ERROR
MAESTRO >
MOTOS LEER MOVTOS
ESCRIBIR MAESTRO
MAESTRO <
MOVTOS LEER MAESTRO
PROCESO
(hasta
FIN-MAESTRO
Y FIN
MOVTOS.)
Pág: 140 15/09/2019
Ejercicio VI (pseudocódigo) V2
ABRIR FICHEROS
INICIO-PROGRAMA READ MAESTRO
MOVTOS.
DISPLAY ERROR
MAESTRO >
MOTOS LEER MOVTOS
PROCESO SUMAR HORAS
(hasta MAESTRO = LEER MOVTOS.
FIN-MAESTRO MOVTOS
Y FIN
MOVTOS.) ESCRIBIR MAESTRO
MAESTRO <
MOTOS LEER MAESTRO
CERRAR FICHEROS
FIN-PROGRAMA
DISPLAY cont.
Pág: 141 15/09/2019
Ejercicio VI (pseudocódigo) V2
MAESTRO MOVIMIENTOS N.MAESTRO ERROR
ID HORAS ID HORAS ID HORAS
1 30 1 150
2 50 3 120
4 20 4 170
5 20 4 200
FF FF
ABRIR FICHEROS
READ MAESTRO
MOVTOS.
SUMAR HORAS
MAESTRO = LEER MOVTOS.
MOVTOS
ESCRIBIR MAESTRO
MAESTRO <
MOVTOS LEER MAESTRO
ESCRIBIR MAESTRO
MAESTRO <
MOVTOS LEER MAESTRO
DISPLAY ERROR
MAESTRO >
MOTOS LEER MOVTOS
SUMAR HORAS
MAESTRO = LEER MOVTOS.
MOVTOS
SUMAR HORAS
MAESTRO = LEER MOVTOS.
MOVTOS
ESCRIBIR MAESTRO
MAESTRO <
MOVTOS LEER MAESTRO
ESCRIBIR MAESTRO
MAESTRO <
MOVTOS LEER MAESTRO
ESCRIBIR MAESTRO
MAESTRO <
MOVTOS LEER MAESTRO
PROCESO
(hasta
FIN-MAESTRO
Y FIN
MOVTOS.)
Pág: 152 15/09/2019
Ejercicio VII
El fichero user.ALUMNOS.MAESTRO contiene los estudiantes de
un curso, su formato es:
ALM-ID X(5)
ALM-NOMBRE X(25)
ALM-APELLIDOS X(30)
ALM-F-NAC X(8) (AAAAMMDD)
ALM-HORAS S9(5) COMP-3
El fichero user.ALUMNOS.UPDTE contiene las altas, bajas y
modificación de horas de los alumnos, su formato varía en función
del tipo de movimiento:
Altas:
ALM-CODE X (1) (A)
ALM-ID X(5)
ALM-NOMBRE X(25)
ALM-APELLIDOS X(30)
ALM-F-NAC X(8) (AAAAMMDD)
Bajas:
ALM-CODE X (1) (B)
ALM-ID X(5)
Modificaciones:
ALM-CODE X (1) (M)
ALM-ID X(5)
ALM-HORAS S9(5) COMP-3
Pág: 153 15/09/2019
Ejercicio VII
01 REGISTRO.
05 ID-ALUMNO PIC 9(5).
05 ID-ALFA REDEFINES ID-ALUMNO PIC X(5).
----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2----+----3—-
LA HIGIENICA S.A. PAG.- Z.ZZ9
GR40A245S INFORME DE PEDIDOS RECIBIDOS FECHA: XX-XX-XXXX XXXXXX
ALMACEN: XX ============================
20300-ACUMULAR-EXIT
PERFORM 20100-LEER-FICHERO THRU
20100-LEER-FICHERO-EXIT
END-PERFORM
PERFORM 20300-TOTAL-DPTO THRU
20300-TOTAL-DPTO-EXIT
MOVE EMP-DEP-ID TO EMP-DEP-ID-ANT
END-PERFORM
INICIO-PROGRAMA.
PERFORM VARYING INDICE FROM 1 BY 1
UNTIL INDICE > 52
MOVE 0 TO T-IRPF(INDICE)
END-PERFORM
01 TABLA-IRPF.
05 T-IRPF PIC S9(9)V99 COMP-3 OCCURS 52.
05 T-PERSONAS PIC S9(7) COMP-3 OCCURS 52.
ADD IRPF TO T-IRPF(PROVINCIA).
ADD 1 TO T-PERSONAS(PROVINCIA).
01 TOTAL-IRPF.
03 TABLA-IRPF OCCURS 52.
05 T-IRPF PIC S9(9)V99 COMP-3.
05 T-PERSONAS PIC S9(7) COMP-3.
ADD IRPF TO T-IRPF(PROVINCIA).
ADD 1 TO T-PERSONAS(PROVINCIA).
Pág: 165 15/09/2019
Tablas
01 TABLA.
03 TABLA-IRPF OCCURS 52.
05 TABLA-SEXO OCCURS 2.
10 T-IRPF PIC S9(9)V99 COMP-3.
10 T-PERSONAS PIC S9(7) COMP-3.
END-SEARCH
MOVE 1 TO Lower
Lower
MOVE 26 TO Upper
PERFORM UNTIL ItemFound OR ItemNotInTable
COMPUTE Middle = (Lower + Upper) / 2
EVALUATE TRUE Upper
WHEN Key(Middle) < ‘P’
COMPUTE Lower = Middle + 1
WHEN Key(Middle) > ‘P’ Middle
COMPUTE Upper = Middle –1
WHEN Key(Middle) = ‘P’
SET ItemFound TO TRUE Key(Middle)
WHEN Lower > Upper THEN
SET ItemNotInTable TO TRUE
END-EVALUATE
END-PERFORM
Pág: 172 15/09/2019
Búsquedas binarias
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 32 24 25 26
MOVE 1 TO Lower
Lower
MOVE 26 TO Upper
PERFORM UNTIL ItemFound OR ItemNotInTable 1
COMPUTE Middle = (Lower + Upper) / 2
EVALUATE TRUE Upper
WHEN Key(Middle) < ‘P’
COMPUTE Lower = Middle + 1
26
WHEN Key(Middle) > ‘P’ Middle
COMPUTE Upper = Middle –1
WHEN Key(Middle) = ‘P’
SET ItemFound TO TRUE Key(Middle)
WHEN Lower > Upper THEN
SET ItemNotInTable TO TRUE
END-EVALUATE
END-PERFORM
Pág: 173 15/09/2019
Búsquedas binarias
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 32 24 25 26
MOVE 1 TO Lower
Lower
MOVE 26 TO Upper
PERFORM UNTIL ItemFound OR ItemNotInTable 1
COMPUTE Middle = (Lower + Upper) / 2
EVALUATE TRUE Upper
WHEN Key(Middle) < ‘P’
COMPUTE Lower = Middle + 1
26
WHEN Key(Middle) > ‘P’ Middle
COMPUTE Upper = Middle –1
WHEN Key(Middle) = ‘P’ 13
SET ItemFound TO TRUE Key(Middle)
WHEN Lower > Upper THEN
SET ItemNotInTable TO TRUE M
END-EVALUATE
END-PERFORM
Pág: 174 15/09/2019
Búsquedas binarias
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 32 24 25 26
MOVE 1 TO Lower
Lower
MOVE 26 TO Upper
PERFORM UNTIL ItemFound OR ItemNotInTable 14
COMPUTE Middle = (Lower + Upper) / 2
EVALUATE TRUE Upper
WHEN Key(Middle) < ‘P’
COMPUTE Lower = Middle + 1
26
WHEN Key(Middle) > ‘P’ Middle
COMPUTE Upper = Middle –1
WHEN Key(Middle) = ‘P’ 13
SET ItemFound TO TRUE Key(Middle)
WHEN Lower > Upper THEN
SET ItemNotInTable TO TRUE M
END-EVALUATE
END-PERFORM
Pág: 175 15/09/2019
Búsquedas binarias
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 32 24 25 26
MOVE 1 TO Lower
Lower
MOVE 26 TO Upper
PERFORM UNTIL ItemFound OR ItemNotInTable 14
COMPUTE Middle = (Lower + Upper) / 2
EVALUATE TRUE Upper
WHEN Key(Middle) < ‘P’
COMPUTE Lower = Middle + 1
26
WHEN Key(Middle) > ‘P’ Middle
COMPUTE Upper = Middle –1
WHEN Key(Middle) = ‘P’ 20
SET ItemFound TO TRUE Key(Middle)
WHEN Lower > Upper THEN
SET ItemNotInTable TO TRUE T
END-EVALUATE
END-PERFORM
Pág: 176 15/09/2019
Búsquedas binarias
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 32 24 25 26
MOVE 1 TO Lower
Lower
MOVE 26 TO Upper
PERFORM UNTIL ItemFound OR ItemNotInTable 14
COMPUTE Middle = (Lower + Upper) / 2
EVALUATE TRUE Upper
WHEN Key(Middle) < ‘P’
COMPUTE Lower = Middle + 1
19
WHEN Key(Middle) > ‘P’ Middle
COMPUTE Upper = Middle –1
WHEN Key(Middle) = ‘P’ 20
SET ItemFound TO TRUE Key(Middle)
WHEN Lower > Upper THEN
SET ItemNotInTable TO TRUE T
END-EVALUATE
END-PERFORM
Pág: 177 15/09/2019
Búsquedas binarias
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 32 24 25 26
MOVE 1 TO Lower
Lower
MOVE 26 TO Upper
PERFORM UNTIL ItemFound OR ItemNotInTable 14
COMPUTE Middle = (Lower + Upper) / 2
EVALUATE TRUE Upper
WHEN Key(Middle) < ‘P’
COMPUTE Lower = Middle + 1
19
WHEN Key(Middle) > ‘P’ Middle
COMPUTE Upper = Middle –1
WHEN Key(Middle) = ‘P’ 16
SET ItemFound TO TRUE Key(Middle)
WHEN Lower > Upper THEN
SET ItemNotInTable TO TRUE P
END-EVALUATE
END-PERFORM
Pág: 178 15/09/2019
Búsquedas binarias
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 32 24 25 26
MOVE 1 TO Lower
Lower
MOVE 26 TO Upper
PERFORM UNTIL ItemFound OR ItemNotInTable 14
COMPUTE Middle = (Lower + Upper) / 2
EVALUATE TRUE Upper
WHEN Key(Middle) < ‘P’
COMPUTE Lower = Middle + 1
19
WHEN Key(Middle) > ‘P’ Middle
COMPUTE Upper = Middle –1
WHEN Key(Middle) = ‘P’ 16
SET ItemFound TO TRUE Key(Middle)
WHEN Lower > Upper THEN
SET ItemNotInTable TO TRUE P
END-EVALUATE
END-PERFORM
Pág: 179 15/09/2019
Ejercicio XI
Entrada:
Fichero IRPF de cada español
NIF
Sexo (1=Hombre, 2=Mujer)
Comunidad Autónoma (nombre)
IRPF
Salida:
Importe del IRPF por Comunidad Autónoma
Consideraciones:
No es posible que haya errores en el nombre
de la Comunidad Autónoma
[BY] REFERENCE
identificador
CALL USING [BY] CONTENT identificador ... ...
literal
[BY] VALUE
EXCEPTION
ON OVERFLOW sentencias
[END-CALL]
SUBPROGRAMA
LINKAGE SECTION.
01 DATA3.
…
01 DATA2.
…
01 DATA1.
…
PROCEDURE DIVISION USING DATA3, DATA2, DATA1
...
Pág: 182 15/09/2019
CALL
SUBPROGRAMA
IDENTIFICATION DIVISION.
PROGRAM-ID. SUBPROG IS INITIAL.
PROGRAMA PRINCIPAL
PROCEDURE DIVISION.
...
CALL ‘SUBPROG’ USING PARM1, PARM2, PARM3
CANCEL ‘SUBPROG’
CALL ‘SUBPROG’ USING PARM1, PARM2, PARM3
IN
COPY literal librería [REPLACING ==texto== BY ==texto== ...]
OF
BEFORE
CHARACTERS INITIAL (3) ...
AFTER
FOR ...
ALL BEFORE
(3) INITIAL (3) ... ...
LEADING AFTER
NOMBRE
J AVI E R ( GARCI A) S UARE Z
NCHARS: 2
INSPECT NOMBRE TALLYING NCHARS FOR
ALL ‘A’ AFTER INTIAL ‘(‘
BEFORE INITIAL ‘)’
BEFORE
CHARACTERS BY (3) INITIAL (3) ...
AFTER
...
ALL
LEADING BEFORE
(3) BY (3) INITIAL (3) ... ...
FIRST AFTER
BEFORE
CHARACTERS INITIAL (3) ...
AFTER
FOR ...
ALL BEFORE
(3) INITIAL (3) ... ...
LEADING AFTER
BEFORE
CHARACTERS BY (3) INITIAL (3) ...
AFTER
REPLACING ...
ALL
LEADING BEFORE
(3) BY (3) INITIAL (3) ... ...
FIRST AFTER
BEFORE
INITIAL (3) ...
AFTER
01 CAMPOS.
05 FECHA-DMA PIC X(10) VALUE ’01-05-2001’.
05 FECHA-AMD PIC X(8).
Tipos:
Funciones de “string”
Funciones de fecha
Funciones varias
CURRENT-DATE X AAAAMMDDHHMMSSXHHMM
DATE-OF-INTEGER(Int) I AAAAMMDD
DAY-OF-INTEGER(Int) I AAAADDD
INTEGER-OF-DATE(16010101) I 1
INTEGER-OF-DAY(16010101) I 1
Días
transcurridos
desde 31-12-1600
Pág: 223 15/09/2019
Funciones varias
INTEGER(-1,5) I -2
INTEGER-PART(-1,5) I -1
MAX(‘A’,’B’,’C’) I ‘C’
MIN(‘A’,’B’,’C’) I ‘A’
MOD(3,5) I 2
RANDOM(1) - RAMDOM I 0:1
RANGE( 3,4,5 ) N 2
REM(3,5) N 2
SQRT(49) N 7
SUM(1,2,3) N 6
Por clave:
READ Nombre-FD-SELECT [RECORD]
[INTO identificador]
[KEY [IS] identificador]
[INVALID KEY sentencias]
[NOT INVALID KEY sentencias]
[END-READ]
Modificar:
REWRITE registro (nivel 01 FD)
[FROM identificador]
[INVALID KEY sentencias]
[NOT INVALID KEY sentencias]
[END-WRITE]
USING fichero
INPUT PROCEDURE [IS] párrafo [THRU párrafo]
GIVING fichero
OUTPUT PROCEDURE [IS] párrafo [THRU párrafo]