You are on page 1of 373

PROGRAMACION

en COBOL ESTRUCTURADO

.'

LAWRENCE R. NEWCOMER,. M.S.

Assistant professor of computer science Pennsylvania State University

TRADUCCION:

Alfonso Camano Liceras Licenciado en Ciencias Matematicas

Revisi6n tecnica:

Antonio Vaquero Sanchez Catedratico de Informatica Facultad de Cieneias Fisicas Universidad Complutense de Madrid

McGRAW-HILL

MEXICO • BOGOTA • BUENOS AIRES • CARACAS • GUATEMALA • USBOA MADRID • NUeVA YORK • PANAMA • SAN JUAN • SANTIAGO • SAO PAULO AUCKLAND • HAMBURGO • LONDRES • MONTREAL • NUEVA DELHI PARIS • SAN FRANCISCO • SINGAPUR • ST. LOUIS

SI;DNEY • TOKIO • TORONTO

CONSUL TORES EDITORIALES

AREA DE INFORMATICA Y COMPUT ACION

Antonio Vaquero Sanchez Catedratico de Informatica

Facultad de Ciencias Fisicas Universidad Cornplutense de Madrid ESPANA

Maria Lourdes Fournier Garda Actuaria, Facultad Ciencias UNAM Profesora Asociada a Tiempo Complete Universidad Autonorna Metropolitana MEXICO

Gerardo Quiroz Vieyra

Ingeniero en Cornunicaciones y Electronica

Escuela Superior de Ingenieria Mecanica y Electrica IPN Carter Wallace, S. A.

Universidad Autonorna Metropolitana Docente OCSA

MEXICO

Alfonso Perez Gama Ingeniero Electronico

Universidad Nacional de Colombia COLOMBIA

JOSe Portillo

Univcrsidad de Lima

PERU

PROGRAMACION en

COBOL ESTRUCTUR1\DO .'

"

LA WRENCE R. NEWCOMER es Profesor Agregado de Informatica en la Universidad del Estado de Pensilvania, Es Diplomado en ingles por la Universidad de Wesleyan (Connectticut), Licenciado en Psicologia por la Universidad del Estado de Millersville y Licenciado en Informatica par la Universidad del Estado de Pensilvania, Adernas de ensenar aplicaciorres comerciales de la informatica, el profesor Newcomer ha publicado articulos sobre la ensenanza de Ia informatica, ha producido diversos programas comerciales y ha dirigido numerosos seminarios y exposiciones para la industria.

"

PROGRAMACION EN COBOL ESTRUCTURAOO

Prohibida la reproduccton total 0 parcial de esta obra, por cualquier medio, sin autorizaclon escrita del editor.

D-ERECHOS RESERVADOS © 1986, respecto a la primers edicl6n en espafiol par McGRAW·HILL INTERAMERICANA DE MEX.ICO, S. A. de C. V.

Attacornutco 499-501, Fracc. lnd. San Andres Atoto 53500 Naucalpan de Juarez, Edo. de Mexico

Miembro de la Camara Nacional de la Industria Editorial, Reg. Nurn. 1890

ISBN 968·422·007·3 (I S B N 968·451· 769·6)

Traducido de la primera edici6n en Ingles de PROGRAMING WITH STRUCTURED COBOL

Copyright © MCMLXXXIV, by McGraw-Hili, lnc., U. S. A.

ISBN O·07·037988·X

2345678901

Edilito-85

8123456798

Impreso en Mexico

Printed in Mexico

Esta obra se terrnino de imprimir en septiembre de 1988

en Programas Educativos, S.A. de C.V. Calz. Chabacano 65-A

Col. Asturias

Deleqacton Cuauhternoc 06850, Mexico, D.F.

Sa tiraron 1000 ejemplares

ProJogo

Este libra trata del COBOL (como se definio par el "American National Standards Institute" en 1974) desde el punta de vista' de 1a programacion esiructurada: Cubre la mayor parte, aunque no todas, de las tecnicas que han permitidoa los programadores alcanzar mayores niveles de productividad en el desarrollo de programas individuales. Se pone especial enfasis en el usa del metoda de diseno modular y descendence, asl como en las numerosas Donnas de codificacion en COBOL.

EI libra trata de ser exhaustive y conciso a Ia vez, permitiendo a1 lector progresar rapidamente, AI finalizar eI Capitulo 2, el lector esta en disposicion de escribir program as simples en COBOL Aprender a prograrnar cornputadoras es como aprender a nadar (hay que lanzarse e intentarlo), par eso el lector debera resolver, en una maquina real, cuantos mas Ejercicios de Programacion, mejor, EI Capitulo 9 trata de Ia depuracion de program as y esta disenado para que pueda leerse despues del Capitulo 2; consulte el Capitulo 9 cuando tenga problemas con un Ejereicio de Prograrnacion.

Si aparecenextensiones al COBOL de 1974 norma ANS, estan siernpre referidas a1 COBOL del sistema IBM OS/VS y, en todo caso, se indica. Todos los ejemplos y problemas fueron coroprobados en la computadora IBM 308 I de la Universidad del Estado de Pensiivania can eI COBOL del sistema IBM OSjVS. Cuando hay diferencias entre distintas computadoras, se da la informacion correspondiente a los sistemas del tipo IBM-310 con sistemas operatives OSjVS 0 similar. EI "American National Standards Institute" esta en la actualidad trabajando en una version de 1980 para el COBOL ANS. Los posibles cambios a introducir en el CQBOL de 1980 se dan en el Apendice C.

Quiero agradecer su ayuda a la Universidad, en particular a1 "campus" de York, a Diane Anderson, su valiosa colaboracion en la preparacion del rnanuscrito; a Marge Johnson, su ayuda constanteen las comunicaciones; a Frank Cable, POf SU oportunidad inicial; a Mike Perelman, su inquebrantable entusiasrno; a Bob Rodgers y Carol Miller, sus utiles comentarios, y a, Debby Lord sus sugerencias y sus varies ejercicios de prograrnacion. Ha sido un placer trabajar can David Beckwith, Mart he Grice y el resto de Jas personas de McGraw-HilL Un agradecirnientoespecia] debo a mis padres por educarme y sabre todo ami esposa que ha hecho posibJe ei libra.

LA WRENCE NEWCOMER

Nota

Para informacion y guia del usuaric a continuacion se extracts el "Government Printing Office

Form Number 1965"0795689". .

Cualquier organizacion interesada en reproducir total 0 parcialmente el informe yespecificaciones COBOL, 0 en utilizar las ideas del inforrne como base para manuales de instrucciones 0 cualquicr otro proposito, puede hacerlo libremente, Sin embargo, iodas estas organizaciones estan obi igadas a reprod ucir esta seccion en la introduccion al documento, Quienes uiilicen un pasaje corte. estan obligados a mencionar "COBOL" para identificar la fuente, pero no debcn transcribir ioda esta scccion.

COBOL es un lenguaje industrial y noes prcpiedad de ninguna campania 0 grupo de cornpanias, ni iampoco de ninguna orgauizacion 0 grupo de organizaciones,

No se ororga ninguna garanua exprcsa ni implicita pOT uingun coniribuvente ni POT el Cornite COBOL sobre la precision y fuucionamiemo del lenguaje de programacion. Mas aun, no se asurne responsabilidad par ningun contribuyerrte ni porel Comite relacionada con 10 anterior.

Se han establecido procedirnientos para el mantenirnientode COBOL Las preguntas y las proposiciones de rnodificacicnes deben dirigirse al M Executive Com m ittee' de la "Conference of Data Systems Languages".

Los autores y propietarios de los derechos del material usado aqut son:

FLOW,MATIC (Trademark of Sperry Rand Corporation), Programming for the UNIVAC® 1 and II, Data Automation Systems copyrighted J 958, 1959, by Sperry Rand Corporation; IBM Comrnercial Translator, Form No. F18~80 13, copyrighted J 959 by J B M ; FACT. DSI 27 A5260-2 7 60, copyrighted 1960 by Minneapolis-Honeywell

ellos han autorizado espectficamente el uso de esie material total a parcial mente en las especificaciones de COBOL Tales autorizaciones se extienden a Ia reproduccion y usa de las especificaciories de COBOL en rnanuales de prograrnacion y publicacioaes similares,

Contenido

Capitulo 1 CONCEPTOS FUNDAMENT ALES DE PROCESAMIENTO DE

DATOS ,'o .. 'o.... .......•.. ...• 1

1.1 Funcionamiento de una computadora ,., ~ -. . 1

1.2 Entrada , , , . , . . . . .. . . . . . . . . . . . 1

1.3 Salida " ,., .. ".......................... 2

1.4 Almaoenamiento auxiliar 2

1.5 Memoria , , , . . . .. . . . . . 3

1.6 ALU , , .. " 4

1.7 CU ", ,.... 4

1.8 Lenguajes de programacion , , , .. , •. ,. 4

1.9 Sistemas operatives .. , .. , , , 6

1.10 Ficheros , , " 6

1.11 C6digos de datos , \.............. 7

Capitulo 2 GENERALlDADES DE COBOL ,............... 9

2.1 Las DIVISIONESen COBOL 10

2.2 Secciones (SECTION) y parrafos : , , . . . . 12

2.3 Reglas para la escritura de programas COBOL "............ 13

'2.4 Nombres definidos por eI programador y palabras reservadas .. ". J 6

2.5 Comienzo , , , , . . . . . . . . . . . . . . . 17

Capitulo 3 DIVISION DE IDENTIFICAOON (IDENTIFICATION DIVISION). 29

3.1 Notacion sintactica , ,........ 29

3.2 Sintaxis de la division de identificaci6n .. , ,.............. 30

3.3 Parrafo PROGRAM-ID 30

3.4 Parrafos opcionales ,., :............. 31

Capitulo 4 DIVISION DEL ENTORNO (ENVIRONMENT DIVISION) .,.... 34

4. J. Sintaxis de la division del entorno , , ,............. 34

4.2 CONFIGURATION SECTION: Parrafo SOURCE~COMPUTER. 35

4.3 CONFIGURATION SECTION: Parrafo OBJECT·COMPUTER .. 36

4.4 CONFIGURATION SECTION: Parrafo SPECIAL~NAMES .. , " 36

4.5 Secci6n de fntrada-salida (INPUT-OUTPUT SECTION) " .. ,.... 38

4.6 Ejemplos de la division del entomo .".......................... 42

Capitulo 5

DIVISION DE DATOS (DATA DIVISION) .

..

5.1 Estmctura de la division de datos , .

5.2 Seccion de ficheros (FILE SECTION) , .

49 49 50

CONTEN1DO

5.3 FD BLOCK CONTAINS... . ,.".'", .. ",. 52

5.4 FD RECORD CONTAINS .. ", 54

5.5 fD LABEL RECORDS... . , .. . . . . . .. . . . . .. . . . . . . . . . . . . . . 55

5.6 FD DATA RECORDS... 55

5.7 FD LINAGE... 56

5.8 Descripcion de registros en la seccion de ficheros 58

5.9 Sintaxis de 1a descripeion de datos ,...... 61

5.lD C1ausula PICTURE , . , . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . 62

5.11 Clausula USAGE , , , :,- 69

5.12 Clausula BLANK , ,................................... 71

5.13 Clausula JUSTIFI ED ., , .. , , . 72

5.14 Clausula OCCURS , ;" '.. 72

5.15 Clausula SIGN .. , , , ,... 73

5.16 Clausula SYNCHRONIZED., , · ;.. 74

5.17 Clausula REDEFINES , ,......................... 74

5.18 Determinacionde la longitud de un eJemento de datos .. , ..... . 76

5.19 Seccion de almacenarniento de trabajo (WORKING·STORAGE

SECTION) ,............................ 77

5.20 Norrnas de codificacion ,.................... 80

Capitulo 6 DIVISION DE PROCEDIMIENTOS (PROCEDURE DIVISION) ,. 94

6.1 Introducci6n: Normas de codificacion , , . . . . . . . . . . . . . . .. . . . 94

6.2 Entrada/salida: Instruccion OPEN , 94

6.3 Entrada/salida: Instruccion CLOSE 97

6.4 Entrada: Instruccion READ ,., :.......... 99

6.5 Salida: Instruccion WRITE ., _ . 100

6.6 Entrada: Instrucci6n ACCEPT ,................. 106

6.7 Salida: Instruccion DISPLAY ., ,........................ 108

6..8 Procesamiento: Instruccion MOVE ,.................... 110

6.9 Fin de programa: Instruccion STOP ., ' ,... 113

6.10 Ejecucion controlada de un parrafo: Instruccion PERFORM.... 114

6.11 Procesamiento: Instruccion ADD , ,.............. 119

6. 12 Procesarn ien to: T ru ncarn iento y opcion R 0 U ND ED 121

6.13 Procesamiento: Desbordamiento y la clausula ON SIZE ERROR. 121

6.14 Procesamiento: Instruccien SUBTRACT .. , ,....... 122

6.15 Procesam i en to: I nsf ruccion MU L TIPLY . . . . . . . .. . J 23

6,16 Procesamiento: Instruccion DIVIDE. . . . . . . . . . . . . . . . .. . . . . . . . . 125

6.17 Procesarniento: Instruccion COMPUTE 127

6.18 Eficiencia en los calculos aritmeticos .. , , , 130

6.19 Norrnas de codificacion adicionales para la division de procedi

mientos ."." "................ 1 30

Capitulo 7 LOGICA DE LOS PROGRAMAS , ,.............. 155

7.1 Disefio logico: Diagramas de flujo estructurados ,.............. 155

7.2 Estruct uras l6gicas de progra macion 156

7.3 La esrructura secuencial en COBOL ,..................... 160

7.4 La estructura de seleccion en COBOL : 160

7.5 Estructura de seleccion: Condicion de clase de datos ! 61

7.6 Estructura de seleccion: Condicion relaci6n 162

7.7 Estructura de seleccion: Condicion signo \ 64

7.8 Estructura de seleccion: Condici6n nornbre-de-condicion 164

CONTENIDO

7.9 Operadores Iogicos y condiciones compuestas ,............ 167

7.10 Abreviaturas de las condiciones compuestas 170

7..1 1 Instrucciones IF anidadas y lineales 170

7.12 Estructuras iterativas: Instruecion PERFORM 173

7.13 lnstrucciones PERFORM anidadas 182

7.14 Diseno logico: Pseudoc6digo ,.,..................... 184

7.15 Diseno logico: Tablas de decision , .. , , ,.......... 185

Capitulo 8 DISENO DE PROGRAMAS: EL METODO DESCENOENTE \:'_

MODULAR (TOP~DOWN) , , .. , ,............. 21)

8.1 Paso 1.°.: Definicion del problema 211

8.2 Paso 2.°: Diseno general del prograrna , _ :'. 2 J I

8.3 Paso 3.°; Diseiio detaHado del programa .-~ ,..... 213

8.4 Paso 4."; Preparacion de un plan para la codificacion y cornproba-

cion del programa 2 J 5

8.5 Paso 5.°: Ensamblaje de datos de prueba ,.,... 216

8.6 Paso 6.°; Codificaeion y comprobacion descendente 216

8.7 Paso 7.": Confeccion de la documentacion del programa ,. 216

Capitulo 9 DEPURACION. , , . , . . . . .. . . . . . . . . . . . . . .. . . . . . . . . . . . .. . .. . 238

9.! Depuraci6n de errores sintacticos 238

9.2 Depuracion de errores logicos graves ,. 241

9.3 Depuraci6n de effores logicos leves _ " . . . . 241

9.4 Obtencion de informacion de trazas del programa ,............. 241

9.5 Lectura de datos durante la ejecucion del programa ..... . . . . . . . . 244

9.6 Las instrucciones DECLARA TIVES Y USE FOR DEBUGGING .. 248

Capitulo 10 MANIPULACION DE TABLAS 260

10.1 Tablas unidimensionales: La clausula OCCURS 260

10.2 Subindices , 260

10.3 Manipulaci6n de tablas unidimensionales 262

10.4 Tablas bidimensionales '" , . . . . . . . . . . . . . . . . . . . . . . . . . 266

10.5 Manipulaci6n de tablas bidimensionales 268

10.6 Tablas de longitud variable: Clausula OCCURS DEPENDING. . 273

10.7 Indices ,................................ 276

10.8 Busqueda secuencial en una tabla y el verba SEARCH 279

]0.9 Busqueda binaria en una tabla y el verba SEARCH ALL ,.... 282

Capitulo 11 PROCESAMIENTO SECUENCIAL DE FICHEROS 297

11.1 Actualizacion de ficheros secuenciales ,...... 297

11.2 Algoritmo "maestro-transacciones" , ,......... 298

J 1.3 Actualizacion de ficheros en disco ,...................... 3 14

Capitulo 12 ORDENACION Y FUSION DE FICHEROS 324

12.1 EI vocabulario de ordenacion de ficheros 324

12.2 UtiJizaci6n de la instruccion SORT :..... 325

12.3 Fusion de ficheros con el verbo MERGE , ,..... 342

Apendiee A
Apendiee B
Apendice C CONTENIDO

PALABRAS RESERV ADAS DE COBOL 351

SECUENClAS DE ORDEN DE CARACfERES I . . 36]

CONSIDERACIONES AL COBOL DE 1980 368

INDICE 371

Capitulo 1

Conceptos fundamentales de, procesamiento de datos

1.1 FUNCIONAMIENTO DE UNA COMPUTADORA

Los objetos que componen fisicamente una computadora se denominan material (hardware).

Desde la perspectiva del programador, un sistema de computadora tiene loscomponentes funciona-

les quese detallan en Ia Figura 1·1. ~.,

CPU

(Unidad Central de Procesamiento)

CU (Unidad de Control)

ALU (Unidad Logico-sritmenca

SALIDA

MEMORIA

-.'

Fig. 1·1

1.2 ENTRADA

Las unidades de entrada son maquinas que transmiten informacion desde el mundo exterior a la memoria de 1a cornputadora, En la mayor parte de los casos, primero se tendra que poner Ja informacion en un formate a la medida de la unidad de entrada, generalmente mecanografiando o tecleando, Los documentos a partir de los cuales se transcribe la informacion se denominan documentos fuente. Las tres principales unidades deentrada son las siguientes:

Lectores de tarjetas

En primer lugar se utiliza una perforadora de tarjetas. operada manualmente 0 por computadofa, para registrar Ia informacion a modo de agujeros en tarjetas de un tamano normalizado, A eontinuacion, se coloca el paquete de tarjetas en el lector de tarjetas, que par procedirnientos electrornecanicos 0 fotomecanicos aprecia los agujeros de las tarjetas y transmite la informacion

a la memoria de la computadora. '

Unidad de disco

Una unidad de disco es conceptualmente similar a un sistema de tarjetas, perc registra la informacion magneucarnente en un disco flexible a en un disco rigido. £1 disco se introduce despues en una unidad de disco, que es capaz de apreciar la informacion eodificada magneticamente y

2

CONCEPTOS FUNDAMENTALES DE PROCESAMIENro DE DATOS

[CAP. I

transmitirla a 1a memoria de la computadora. La unidad de disco lee los datos mucho mas rapidamente que un lector de tarjetas, Asirnismo, a diferencia de las tarjetas, los discos flexible y duro pueden reutilizarse para almacenar nuevos datos,

Terminales de impresora y depantalla (CRT)

Los terminales se pueden conectar a 1a computadora de modo que sus teclados sirvan de unidad de entrada. Cuando se pulsa una tecla, el caracter correspondiente se trans mite a la memoria de 1a computadora. Los terminales inteligentes disponen de un microprocesador (una computadora en un solo chip) y de algo de memoria; de este modo el terminal es capaz de almacenar loscaracteres que se pulsan y transmitirlos despues a Ia memoria de Ia computadora en grupos (en Ingar de uno cada vez). Los terminales inteligentes tambien pueden llevar a cabo algiin procesamiento local de la informacion por sf mismos, Tanto los terminales inteligentes como Ios-terminales no inteligentes disponen ademas de unidades de salida: los terminales de impresora tienen, como su nombre indica, una impresora, mientras que los terminales de pantalla, una pantalla de rayos catodicos (CRT).

1.3 SALIDA

Las unidades de salida reciben 1a informacion de 1a memoria de la cornputadora en forma capaz de ser entendida por el hombre 0 bien por otras rnaquinas.

Impresoras

Estas unidades registran el contenido de la memoria de la computadora en forma de caracteres impresos en papeL En las impresoras por impacto se utiliza una cinta entintada como en las maquinas de escribir; otras impresoras utilizan tecnicas termicas, electrostaticas 0 eJ laser para construir las imagenes enel papel, Las impresoras de caracteres imprimen un caracter cada vez, mientras que las impresoras de [inca imprimen una linea completa cada vez. Las actuates irnpresoras laser pueden imprirnir mas de 20.000 lineas/minuto.

Terminates CRT y de irapresion

Los perifericos que se describen en 1a Seccion 1.2 funcionan a la vez como perifericos de entrada y salida ..

Perforadoras de tarjetas

Estes perifericos funcionan bajo control directo de la CPU y perforan informacion en tarjetas,

1.4 ALMACENAMIENTO AUXILIAR

Los perifericos preparados para la entrada y salida pueden servir como perifericos para almacenamiento auxiliar, que son necesarios por: (i) incluso Ia memoria de la computadora mas grande no puede almacenar toda la informacion que precisa un negocio relativamente pequefio y (ii) Ia memoria de las computadoras modernas se borra cuando se corta 1a corriente, Por tanto, incluso enel caso de que toda la informacion cupiera en la memoria, seria inaceptable asurnir el riesgo de un corte en el suministro de energia electrica,

Disco rigido

Este medio es el mas importante en el almacenarniento auxiliar y utiliza un soporteconductor para leer y escribir datos en el paquete de disco. Un paquete de disco consiste en una pila de platos planes de aluminio cubiertos con un material magneticoe insertado en un eje central (Fig. 1-2). Hay un brazo de acceso que dispone de cabezas de lecrura/escritura (una par cada superficie) y que puede desplazarse hacia dentro, 0 hacia fuera. AI detenerse el brazo de acceso posa las cabezas

CAP. !]

CONCEPTOS FUNDAMENTALES DE PROCESAMJ£NTO DE DATOS

3

Superficie del plato

Cabezas de r+-:
Paquete de disco iectura/escritura
.--- ~
.:>

<,


L


I.,...C;
..._ Braze de scceso (movil hacia dentro 0 hacia Iuera)

Fig. 1-2

sabre una serie de pistas circulares sobre las superficies del disco que esta girando; los datos se registran sabre estas pistas, Las pistasse agrupan en conjuntos denominados cilindros, que se refieren al grupo de pistas accesibles desde una posicion concreta del brazo,

El tiempo medic utilizado para desplazar el brazo de acceso basta el cilindro deseado itiempo de acceso) esta cornprendido entre 16 y 60 milisegundos (un milisegundo es 1/1.000 de segundo). A este tiempo deben sumarse el tiempo rotacional (tiempo para que un determinado lugar de una pista se situe debajo de la cabeza) y el pequefio tiempo para transferir los datos desde 0 hacia la memoria. EI tiempo total de acceso es del orden de 30 ms para los discos IBM.

Algunos discos (denominados de cabeza fija par pistd; disponen de una cabeza de lectura/ escritura para cada pista del disco. De este modo el primer tiempo de acceso (para colocar el braze) es nulo.

Cinta magnetiea

Las cintas de una computadora son analogas a las utilizadas por un magnetofon y vienen

preparadas en forma de carretes 0 de casetes, .

La mayor desventaja de Jas cintascomo medic de alrnacenarniento auxiliar es que la unidad debe leer toda la informacion de la cinta para localizar un dato concreto. Par tanto, la cinta es eficiente s610 si se procesa la informacion en el misrno orden en que esta flsicamente en la misma (procesamiento secuenciah. La informacion contenida en un disco puede procesarse en cualquier orden que pueda desearse, secuencial 0 arbitrario tprocesarniento aleatorioi.

1.5 MEMORIA

La memoria de la computadora se fabrica con componentes electronicos cada uno de los cuales puede alrnacenar un digito binario (bit). Como un bit s610 puede tener por valor cera 0 uno, se agrupan en conjuntos (generalmente de echo) denominados bytes. Un byte tiene suficiente capaci-

dad para almacenar un caracter, .

Los bytes de la memoria estan numerados 0, 1,2,3, ... ; eJ numero unico asociado a un byte se con ace como su direccion. EI acceso al azar de una direccion de memoria es cuestion de nanosegundos (I ns es 1/1.000.000.000 de un segundo).

La capacidad de memoria y de almacenamiento auxiliar se mide en terrninos de KB (kilobyte, aproximadamente mil bytes) y MB (megabyte, aproximadamente un mill6n de bytes). Una memoria de alrededor de 128.000 bytes se dina que tiene 128K, mientras que si tuviera 2.000.000 de bytes se dina que tiene 2 MB. Los paquetes de discos tienen entre 29 y 1.260 ME, dependiendo del modelo,

El constante flujo de informacion hacia la memoria desde los perifericos de entrada y/o almacenamiento auxiliar, el procesamiento de la informacion mientras esta en la memoria y 1a transferencia final de los resultados a los perifericos de salida 0 al almacenamiento auxiliar (para registrarlo permanenternente en una forma facilmente accesible a la cornputadora) =-todo ella constituye 10

4

CONCEPTOS FUNDAMENTALES DE PROCESAM1ENTO DE DATOS

[CAP. I

que se conoce como ciclo entrada-proceso-salida y es caracteristico de casi todas las aplicaciones en el procesamiento de datos.

1.6 ALU (ARITMETIC WGIC UNIT)

La ALU es la parte de la CPU (Central Process Unit) que realmente procesa la informacion.

La ALU recibe los datos que hay que procesar de la memoria y los resultados son enviados a Ia memoria para su almacenamiento temporaL La ALU realiza dos funciones de procesamiento basicas:

Aritmetica. Operaciones de suma, resta, rnultiplicacion y division. ,

Ugica.. Funcion par la cual la ALU compara los valores almacenados en dos lugares de memoria diferentes para determinar si son iguales 0, si no, emil es el mayor. Las "decisiones" simples son la basesobre las que se construyen las rnascomplejas y la aparenie actividad inteligente de la computadora,

1.7 CU (CONTROL UNIT)

Las com putadoras modernas operan sabre elconcepto de programa at macenado, 10 que perm i te cambiar la tarea realizada por la computadora simplemente introduciendo el prograrna en la memoria. La unidad de control se encarga de ejecutar el prograrna almacenado como sigue:

(1) La primero que hace la CU es capturar la instruccion almacenada en 1a memoria cuya direccion esta en un area especial denominada JAR, siglas en ingles de "Instruction Address Register" (Registro de Direccion de Instrucciones),

(2) A continuacion la CU decodifica la instruccion, es decir, la interpreta para deterrninar 10 que hay que hacer ioperacion a llevar a cabo) y los datos que tiene que utilizar en la operacien (direcciones de memoria de los operandosv.

(3) La CU despues sustituye Ia direccion contenida en la IAR con Ia correspondiente a la siguiente instruccion almacenada.

(4) Par ultimo, Ia CU en via las senales al Testa del sistema para asegurarse que la operacion se ejecuta. Asi, en elcaso de una sum a, la unidad-de control exigira que la memoria envie copias de los valores a sumar a la ALU. Despues obligara a la ALU a ejecutar 1a suma y enviar el resultado a la direccion de Ia memoria deseada. Para una operacion de entrada o salida, la CU activara al periferico de entrada/salida ya la memoria para transferir los datos.

Al completar estas cuatro fases de la operacion de la unidad de control, el cicloempieza de nuevo en el punto L (EI JAR se prepara para eIIo en el punto 3.)

EI prograrnador puede alterar esta secuencia de ejecucion poniendo instrucciones de ramificacion en su programa, Una instruccion de ramificacion cambia el contenido del JAR de forma que almacene una direccion distinta de la correspondiente a la siguiente instruccion, De este modo la computadora continua la ejecucion secuencial a partir de la nueva direccion,

La velocidad de ejecucion en las computadoras modernas se mide en IvIIPS (mill ones de instrucciones par segundo). Las computadoras que se comercializan en estos dias operan a velociclades comprendidas entre 0,2 y 11 MIPS a incluso superiores; este ratio se incrementa continuamente.

1.8 LENGUAJES DE PROGRAMACION

Las instrucciones de los programas que se almacenan en memoria y se ejecutan por la CPU tienen la forma de cadenas de digitos binarios; se dice que estan expresadas en lenguaje maquina. Para los hombres, sin embargo, es mas apropiado 'escribir y leer prograrnas escritos en algun

-.

CAP. I)

CONCEPTOS FUNDAMENTALES DE PROCESAMIENTO DE DATOS

5

CPU

ALU

cu

(I)

(3)

list ado fuente impreso

Program a fuente en COBOL

MEMORIA

SALIDA

ENTRADA

Compilador COBOL alrnacenado en disco

Programs objeto alrnacenado en disco

(!) Se transfiere el eompilador desde el almacenamieruo auxiliar a la memoria. (2) Se ejecuta d campi lad or. eJ programs fuente COBOL se lee y iransf e re.

(3) Las instrucciones del compiiador valen alrnacenando el programs obicto en el disco (para su posterior usc) e imprimen unlistado del prograrna fuente,

Fig. 1-3

lenguaje de alto nivel como el COBOL. La traduccien necesaria del programa en un lenguaje de alto nivel tprogramafuentei a lenguaje rnaquina (programa objetoi la realiza la propia computadora bajo el control de un programs especial denominado compilador. Los compiladores son escritos por las companias que producen los sistemas en general y se almaeenan en Formato de lenguaje rnaquina en el almacenarniento auxiliar.

El proceso de compilacion (de un program a fuente escrito en COBOL) se esquernatiza en la Figura 1-J. Si el cornpilador detectara errores de construccion (erreres sintacticos) en eJ program a fuente, generana mensajes para el diagnostico del error que se irnprimirtan.

Si se detectan errores siutacticos, el programador debe corregirlos y vol ver a com pilar el program a fuente modificado. Este nuevo program a Fuente (0 el original si no hubo errores sintacticos) tiene que depurarse: es decir, debe ejecutarse utilizando un conjunto de datos para los cuales los resultados de la salida se conocen de antemano, Este proceoimiento se lleva a cabo para poder detectar los errores logicos del program a; por ejemplo, que se instruya a la cornputadora a sumar, en lugar de multiplicar, las horas trabajadas y el precio por hora para obtener el valor del salario brute .. Durante la depuraci6n, el program a fuente tendra Que recornpilarse cada vez que se modifique para eliminar un error logico.

Una vez que el programs ha sido depurado, la version final del programa objeto se alrnacena permanentemente en el almacenamiento auxiliar; asi puede volver a ser Ieido par la cornputadora y ejecutado cuando se necesite,

6

CONCEPTOS FUNDAMENTALES DE PROCESAMJENTO DE DATOS

[CAP. I

1.9 SISTEMAS OPERATIVOS

En lugar de encargar a operadores humanos la responsabilidad de cargar los programas objeto en la memoria para su ejecucion, los fabricantes de computadoras y otros especialistas han escrito programas denominados sistemas operativos que permiten a la computadora realizar esta funcion con la rapidez que la caracteriza. Estos sistemas operatives se almacenan en disco en lenguaje rna-

quina. ,

Los operadores humanos mantienen un control global del sistema de computadoras, introduciendo, para ello, informacion con destine al sistema operative que Ie indique los programas.que tiene que ejecutar, Esto se lleva a cabo de dos formas distintas. Algunos sistemas operatives esian preparados para aceptar instrucciones especiales que forman pane de 10 que se denomina lenguaje.de control de trabajos (JCL), desde cualquier periferico de entrada. Las instrucciones de JCL indicarr'al sistema operativo los programas de aplicacion (control de inventario, cuentas d~~dientes, proveedores) que tiene que cargar en memoria. Otros sistemas operatives estan disenados de forma que permiten una relacion interactiva y conversacional con los operadores humanos situados en las consolas (CRT). EI usuario humano puede escribir ordenes que el sistema operativo ejecuta de inmediato; las ordenes informan al sistema el prograrna que se desea cargar 0 ejecutar, Para practicar COBOL en una computadora real es preciso conocer prirnero el Jenguaje 'de ordenes 0 de control de trabajos para el sistema operativo can el que se este funcionando.

].10 FICI-IEROS

Tanto los program as como los datos se guardan en el almacenamiento auxiliar en forma de ficheros, Un fichero consiste.en la informacion sobre un programa 0 aplicacion particular y se identifica can el nombre de fichero. Por ejemplo, un fichero denominado ENE.FACTURAS podria tener informacion sobre las facturas pendientes de cobra, y otro Ilamado PROVEED.MAESTRO tener informacion sobre los pagos pendientes a proveedores, Las reglas exactas para asignar nom bres a los ficheros depende del sistema operativo particular can el que se este trabajando,

Los ficheros se componen de registros; un registro contiene informacion sobre una persona 0 cosa particular. Por ejemplo, en un fichero denominado EMP.DATOS los registros podrian contener informacion sabre los empleados, uno sabre Smith, otro sabre Jones, etc. Los registros en un fichero en cinta 0 disco estan separados flsicarnente pOT regiones en blanco llamadas espacios entre registros (TRG, siglas de "Inter Register Gaps").

Las unidades de disco y cinta transfieren a la memoria de la computadora UI1 registro cada vez.

Por eso, cuando un program a COBOL procesa un fichero, tiene que trabajar con un registro cada

Fichera

I I 1
R Registro para Smith R Registro para Jones R
G G G I

I I /

Caracteres

/ I

I R G

- I /'

Tererono

Fig: 1-4

1 R G

Campos

CAP. I)

CONCEPTOS FUNDAMENTALES DE PROCESAMIENTO DE DATOS

7

vez. El programador esta obligado a pensar en terminos del ciclo entrada-proceso-salida: entrada de un registro del fichero, procesamiento del registro, salida del resultado -repitiendo el misrno ciclo hasta que todos los registros hayan sido procesados.

A su vez, un registro se compone de campos, un campo es un atributo como nombre, numero de cuenta, salario brute, saldo, etc. Cada campo se divide en bytes (0 caraaeresi que 10 conforman. La jerarquia fichero/registro/carnpo/caracter se ilustra en la Figura 1-4.

La mayor parte de los sistemas operatives mantienen una etiqueta de fichero para cada fichero en disco 0 cinta. La etiqueta de fichero es un registro especial que contiene campos como nombre del fichero, fecha de creacion, donde se encuentra (disco), tamano del fichero, palabra clave de seguridad del fichero, etc. Las etiquetas de fichero en cinta preceden y siguen al propioficheroen la cinta; las etiquetas de ficheros en disco se agrupan por 10 general en 10 que se llama tabla de contenido del volumen (VTOq 0 directorio. El sistema operative puede localizar un fichero en eJ disco buscando la etiqueta en el directorio, EJ usa de etiquetas en los ficheros permite asegurar que los program as procesan los ficheros adecuados,

1.11 CODIGOS DE DATOS

La unidad fundamental de memoria y de alrnacenamiento auxiliar es, como ya sabemos, el digito binario 0 bit. Cualquier informacion almacenada en sistema debe codificarse en forma de cadena de digitos binaries. A los efectos de su codificacicn, conviene clasificar los datos como sigue:

A lfanumericos. datos que pueden contener cualquier caracter introducido desde un teclado, consola 0 impresora. En este tipo se incluyen todas las tetras del alfabeto, los digitos desde 0 a 9 y todos los caracteres especiales como @, #, $, %, &, *, (,), -, +, espacio, etc. E! campo "John w. Doe" es alfanurnerico (observese el caracter especial ". "), 10 mismo sucede con "238-9761" (observese el caracter especial "-").

AI/abiticos, Datos compuestos par las letras del alfabeto y el caracterespacio en blanco. "John W. Doe" es alfabetico, al igual que "N SPRINT ST"; sin embargo, "John W. Doe" y "43 N SPRlNT 5T" no son aifabeticos.

Numericos, Datos compuestos PDT digitos entre 0 y 9 junto con los signos + 0 -. En algunos casos los datos nurnericos pueden contener el punto decimal (". "), pero en otras ocasiones el punto decimal se omite y se represent a de afro modo, Ejernplos de datos numericos son: "1278", "-53", "1.28" Y ., L28" (donde - representa el punto decimal omitido).

Los siguientes sistemas de codificacion se utilizan para representar datos alfanurnericos, alfabeticos y nurnericos en forma de rnirneros binaries susceptibles de ser alrnacenados par la computadora:

DISPLA Y (EBCDIC y ASCI!). EBCDIC proviene del nornbre ingles "Extended Binary-Coded Decimal Interchange" y ASCII proviene de "American Standard Code for Information Interchange". Ambos son los sistemas de codificacion mas usados para representar datos alfanumericos. Los dos sistemas representan cada caracter (incluido el espacio) por medic de un numero binario de 8 digitos (por eso cada caracter requiere un byte de memoria 0 de almacenarniento auxiliar). Los c6digos completes aparecen en el Apendice B.

Impresoras, lectoras de tarjetas, terminates CRT y terminales can irnpresora intercambian informacion codificada en ASCII 0 EBCDIC con la memoria. En COBOL los datos codificados en ASCII o EBCDIC se dice que estan en formate DISPLA Y.

COMP-3 (decimal empaquetadov. EI sistema decimal empaquetado se utiJiza exclusivarnente con datos nurnericos en memoria 0 en el almacenamiento auxiliar; no se utiliza por los perifericos de entrada/salida, como lectores de tarjetas, terrninales 0 impresoras, ni tampoco todas las ccmputadoras utilizan este sistema. En COBOL se dice que los numeros decimales empaquetados estan en formate COMP-3. Este sistema de codificacion tiene las siguientes ventajas sabre EBCDIC y ASCII: (i) la ALU puede calcular directamente can estos numeros (por el contrario tiene que convertir los mimeros introducidos en EBCDIC 0 ASCII a decimal empaquetado para hacer el

8

CONCEPTOS FUNDAMENT ALES DE PROCESAMIENTO DE DATOS

[CAP. I

calculo y despues volverlos a convertir a EBCDIC 0 ASCII); (ii) los numeros decimates empaquetados consurnen menos memoria que los mismos numerus en EBCDIC 0 ASCII.

COMP icomplemento binario ados). El sistema complemento binario ados tiene la misma aplicacion y 'ventajas que el decimal empaquetado; en COBOL los numeros codificados en cornplemento binario a dos se dicenque estan en formate COMPo

Casi todas las computadoras soportan alguna version del sistema complemento binario ados; algunas disponen adem as del sistema decimal ernpaquetado, Vease el Capitulo 5 para conocer en

que casas se debe usar cada sistema. . .

. '

Capftulo2

Generalidades de COBOL

Una de las caractertsticas mas importantes de COBOL es que autodocumenta, es decir, un programador puede comprender la mayor parte de los programas COBOL simplernente leyendolos, Examine el program a COBOL del Ejernplo 2.1, al que nos referiremos repetidamente en-este capitulo.

EJEMPlO 2.1

.'

00001 00002 00003 00D04 00005 00006 00007 00008 00009 00010 00011 00012 00013 00014 00015 00016 ooon 00018 00019 00020 00021 00022 00023 00024 00025 00026 00027 00028 00029 00030 00031 00032 00033 00034 00035 00036 00037 00038 00039 00040 00041 00042 00043 00044 00045 00046 00047 00048 00049 00050

rOENT J FICATION OJ VISION.

PROGRAM-ID. QUil,RTER. AUTHOR. LARRY NEWCOMER.

INSTALLATION. PENN STATE UNIVERSITY--YORK CAMPUS. DATE·WRlnEN. MAY 1983.

DATE-COMPILED. MAY 9,1983.

SECURITY. THERE ARE NO SECURITY CONS !DERATI ONS FOR QUARTER.

"

"OVERVIEW OF PROGRAM QUARTER·-

"

" ...

*

QUARTER LEE UN F I CHERO QUE CONTI ENE LAS IJENTAS MENSUAlES DE UN VENDEDOR DURANTE UN TRrMESTRE JUNTO CON EL NOMBRE

DEL VENIJEOOR Y LA (UOTA TRl MESTRAL DE V Er'HAS . DESPUES IMPR IME UN I NFORME MOSTRANDO:

... *

...

NOMBRE

VENTAS TRIMESTRALES

CUOTA

" ...

"

JONES SMITH YOST

$42,000.98 $59,000.67 $47,893.00

$40,000.00 $60,000.00 $~'5, 000.00

" ...

ENVIRONMENT DIVISION.

CONFIGURATION SECTION. SOURCE-COMPUTER. IBM-370. OBJECT -COMPUTER. IBM-370.

INPUT -OUTPUT SECTION. F I LE- CONTROL.

SELECT F ICHERO - VENTAS ASS! GN TO VENIA5.

SELECT INFORME- TRlME.STRAL ASSIGN TO INFO\lENT.

DATA DJ it ISIGN.

fILE SECTION.

FO FICHERO-VENTAS

LABEL RECORDS ARE STANDARD RECORD CONTAINS 80 CHARACTERS

01 REGISTRO-VENTAS.

05 N.OMBRE -REG- VENTAS

05 VENTAS-MES1·REG-VENTAS 05 VENTAS-MES2-REG-VENTAS 05 \lENTAS-MES3-REG-VENTAS 05 CUOTA-REG-VENTAS

05 FILLER

PIC X(15). PIC S9(4)V99. PIC 59(4)V99. PIC 59(4)\199. PIC S9(5)V99. PIC X(40).

9

IO

GENERALIDADES DE COBOL

[CAP, 2

00051 00052 00053 00054 00055 00056 00057 00058 00059 00060 00061 00052 00063 00064 00065 00066 00067 00068 00069 00070 00071 00072 00073 00074 00075 00076 00077 00078 00079 00080 00081 000El2 00083 00084 00085 00086 00087 00088 00089 00090 00091 00092 00093 00094 00095 00096 00097 00098 00099 00100 00101 00102 00103 00]04 00105 00106 00107 00108

FD INFORME-TRIMESTRAL

LABEL RECORDS ARE OM IHED RECORD GONTAl NS 132 CHARACTERS,

01 LINEA- INFORME- TRIMESTRAL

PIC X(132).

WORKING-STORAGE SECTION.

01 ItnER-~-TOTALES.

05 FIN-FICHERO-VENTAS 05 TOTAl- TRIMESTRE

01 LINEA-] NFORME - TRABAJO. 05 NOMBRE-TRABAJO

05 FI LLER

05 TOTAl-TRABAJO 05 FILLER

05 CUOTA-TRABAJO 05 FILLER

PIC X.

PIC S9(5)V99

COMP-3_

PIC X(15)_

PIC XIS) VALUE SPACES.

PiC $$$,$$$.99.

prc X(5) VALUE SPACES.

PIC $$$,.$$$_99.

PIC X(87) VALUE SPACES.

PROCEDURE DIVISION.

OlO- EXECUTl VE - PARA.

PERFORM 020-INICIALIZACION

PERFORM 04Q-IMPRES I ON - L INEAS - INFORME UNTIL FIN-FICHERO-VENTAS

PERFORM 050-FIN-Y·REBOBINADO

STOP RUN

020-1NICIALIZACION.

OPEN INPUT FICHERO-VENTAS OUTPUT I NFORME - TRIMESIRAL MOVE "F'" TO FIN-FICHERO-VEIHAS PERFORM 030-LEE-FICHERO-VENTAS

030-lEE-FiCHERO-VENTAS.

READ FICHERO-VENTAS AT END

MOVE "T" TO FIN-FlCHERO-VENTAS

OQO-IMPRESION-LiNEAS-INFORME.

MOVE NOMBRE-REG-VENTAS TO NOMBRE-TRABAJO

COMPUTE TOTAL- TRIMESTRE ~ VENTA5- MES 1- REG- VEIHAS ~ VENTAS-MES2-REG-VENTAS + VENTAS-MES3-REG-VENTA$ MOVE TOTAL~TRIMESTRE TO TOTAL-TRABAJO

MOVE CUOTA-REG-VENTAS TO CUOTA-TRABAJO WRJTE LINEA-INFORME-TRJMESTRAL

FROM LINEA-INFORME-TRIMESTRAL PERfORM 030-LEE-FICHERO-VENTAS

G50-FIN-~-REBOBINADO.

CLOSE FICHERO-VENTAS

1 NFORME -lR IMES1RII,L

2.1 LAS DIVISIONES EN COBOL

Un prograrna COBOL siempre consta de cuatro partes principales denorninadas DIVISIONES, en el siguiente orden: identificacion (IDENT1FICAClON), entorno (ENVIRONMENT), datos (DATA) y procedirnientos (PROCEDURE). Al principia de cada DIVISION hay una instruccion especial COBOL llamada cabecera de dMsi611.

CAP_ 2]

GENERAUDADES DE COBOL

11

EJEMPLO 2.2 Las cabeceras de division del ejemplo 2.1 'son:

Linea 1: lDENTIFICA TION DIVISION. Linea 24: ENVIRONMENT DIVISION. LInea 35: DATA DIVISION.

Linea 70: PROCEDURE DIVISION.

La division de identificacion contiene el nombre del programa, quien 10 escribio, cuando y donde fue escrito, cuando se compile y las precauciones que por motives de seguridad deben tomarse para irnpedir el acceso al programa 0 a los ficheros que el programa procesa, La DIVISION de.Qe finalizar con un conjunto de frases en ingles dando una breve descripcion de 10 que hace el programa (en el Ejemplo 2.1 desde la linea 9 a 1a 22).

La division del entorno contiene informacion sabre la(s) computadorais) en las que el programa COBOL se va a compilar y en las que el program a resultante en lenguaje maquina se ejecutara, Tambien se da un nombre COBOL a cada uno de los ficheros que se van a procesar y asigna cada fichero a una unidad I/O espectfica, Esta informacion determine el entorno y configuracicn en ei que se ejecutara el programa.

EJEMPLO 2.3 En el Ejemplo 2.1:

• Linea 27: SOU RCE"COM PUTER. IBM-370.

Especifica la computadora us-ada para compiler el prograrna,

• Linea 28: OBJECT-COMPUTER. IBM-370.

Especifica la cornputadora usada para la ejecucion del programs objeto,

• Lmeas 32-33: SELECT FlCHERO-VENTAS ASSIGN TO VENTAS.

SELECT INFORME-TRIMESTRAL ASSIGN TO lNFOVENT.

Asigna 1.05 ficheros a sus respectivas unidades I/O.

La division de datos (DATA DIVISION) da UDa breve descripcion de cada fichero que va a procesarse y una descripcion mas detallada de los registros del fichero. Cada campo del registro se describe en terminos de su longitud y tipo de datos. La division de datos tarnbien contiene detalles sabre los campos de datos usados por el programa que no son registros de ficheros, estes campos se , almacenan en un area denominada WORKING-STORAGE. Todos los campos de datos (de registros r a del WORKING STORAGE) tienen que describirse en la division de datos.

EJEMPLO 2 .. 4 Las llneas 39-49 del Ejernplo 2.1 describen el fichero de entrada de ventas y los registros que contiene:

FD FfCHERO-VENTAS

LABEL RECORDS ARE STANDARD RECORD CONTAINS 80 CHARACTERS

01 REGISTRO-VENTAS.

05 NOMBRE-REG-VENTAS

05 VENTAS-MESI-REGNENTAS 05 VENTAS-MES2-REG-VENTAS 05 VENT AS-MES3-REG- VENTAS 05 CUOTA-REG-VENTAS

05 FILLER

PIC X(15). PIC S9(4)V99. PIC S9(4)V99. PIC S9(4)V99. PIC S9(5)V99_ PIC X(40) ..

Las lrneas 57-68 describen los datos del WORKING-STORAGE que no forman pane de ningun registro, WORKING-STORAGE SECTION.

01 INTER-Y-TOTALES.

05 F!N-FlCHERO-VENTAS 05 TOTAL-TRIMESTRE

PIC x.

PIC S9(5)V99

COMP-3.

12

GENERALIDADES DE COBOL

[CAP. 1

01 L1NEA-INfORME- TRABAJO. 05 NOMBRE- TRABAJO

OS FILLER

05 TOTAL"TRABAJO 05 fILLER

OS CUOT A- TRABAJO OS fILLER

PIC XC1S).

PIC XeS) VALUE SPACES. PIC $$$,$$$.99.

PIC X(5) VALUE SPACES. PIC $$$,$$$.99.

PiC X(S7) VALUE SPACES.

Es en la division de procedimientos (PROCEDURE DIVISION) donde se instruye a Ia computadora respecto del proce~o que tiene que Ilevar a cabo. Las instrucciones son sernejantes a frases en ingles,

EJEMPLQ 2.5 Del Ejemplo 2.1 se han extrapolado las siguientes instrucciones de la PROCEDURE DIVISION:

• PERFORM 020-INICIALIZACION

(linea 73) obliga a que todas las instrucciones en eJ pdrrafo COBOL denominado "020-INICIALIZACION" (lineas 80-85) se ejecuten una vez antes de que la computadora proceda a ejecutar la instruccion siguiente "PERFORM 040 .. IMPRESION-L1NEAS-INFORME" (linea 74).

• PERFORM 040-IMPRESION-LiNEAS-INFORME UNTIL FIN-FICHERO-vENTAS = "T"

(!ineas 74-7S) obliga a que 13 computadora ejecute las instrucciones del parrafo llamado "040-IMPRESJONLlNEAS-INFORME" (Iineas 93·103) una y otra vez,secuencialmente, hasta que el dato denominado "FINFICHERO- VENT AS " contenga el valor "T", Esto obliga a la computadora a proceder con la instruccion

siguiente (linea 76); .

• OPEN INPUT FICHERO-VENT AS OUTPUT INFORME-TRlMESTRAL

(linea 81-82) la instruccion OPEN prepara para su procesarniento un fichero e indica 5i se va a utilizar como entrada 0 salida. Un fichero tiene que ser abierto (OPENed) antes de utilizarse por un programa.

• MOVE NOMBRE-REG-VENTAS TO NOMBRE-TRABAJO

(linea 94) la instruccion MOVE copia el contenido de tina variable (en este caso NOMBRE-REG-VENTAS) en otra variable (eli. este caso NOMBRE-TRABAJO).

• COMPUTE TOTAL-TRIME5TR£ = VENTAS-MESI-REG-VEl\TTAS

+ v£NTAS-MES2-REO-VENTAS + VENT AS-MES3-REO- VENTAS

(lineas 9S-97) la instruccion COMPUTE se utiliza para realizar un calculo nurnerico, £1 resultado del calculo se alrnacena en lavariable situada a la izquierda del signo igual.

2.2 SECCIONES (SECTION) Y PARR-\FOS

Cad a division de un programs COBOL se divide en secciones (SECTION) que comienzan con unas Hneas especiales denominadas cabecera de seccion; a su vez, cada seccion se divide en parrafos.

EJEMPlO 2.6 Las cabeceras de seccion en el Ejemplo 2.1 son: linea 26: CONFIGURATION SECTION.

linea 30: INPUT-OUTPUT SECTION.

linea 37: F1LE SECTION.

linea S7: WORKlNG-STORA.OE SECTION.

Las cabeceras de seccion contienen eJ nombre de la secci6n seguido de la palabra "SECTION" y un punta. Los nornbres de cada SECTION en las divisiones del entorno y configuracion y datos son una parte fija del lenguaje COBOL y no pueden carnbiarse (estas palabras se conocen como palabras reservadasi. El uso de SECTION en Ia PROCEDURE DIVISION es opcional; cuando se utilizan, sus nombres deben seguir las reglas de nomenclatura de COBOL (dichos nornbres se conoeen como nombres definidos par el programadori. En la division de identificacion no hay secciones.

Los parrafos en COBOL pueden formar parte de una SECTION 0 bien figurar solos en una DIVISION. En cualquier case, los parrafos se identifican por la cabecera de parrafo, que consiste simplernente en el nornbre del mismo seguido de un punta. Los nombres de parrafo en las divisiones

CAP. 2}

GENERI~UDADES DE COBOL

13

de identification, entorno y configuration y datos son pane fija de COBOL y no pueden carnbiarse. Por el contrario, los parrafos de la division de procedimientos son opcionales y sus nombres dependen del programador,

EJEMPLO 2.7 La division de identificacion se compone unicamente de parrafos (no bay SECTION). Los nombres de parrafo de Ia division de identificacion del Ejemplo 2.! son:

PROGRAM·ID SECURITY

AUTHOR

INST ALLA nON

DATE· WR1ITEN

DA TE·COMPILED

Estes parrafos son parte fija del lenguaje COBOL.

EJEMPLO 2.8 La divlsion de prccedimienros de un programs COBOL pued'e 0 noestar compuesta de secciones, En el Ejemplo 2.1 solo se utilizan parrafos en la division de procedimientos, sus nombres definidos par el prograrnador son:

OlO·EXECUTIVE.PARA 020·INICIALIZACION 030·LEE·FICHERO-VENT AS

040·IMPRESION·LINEAS.INFORME 050·FIN· Y ·REBO BIN ADO

Aunque no es obligatorio en el lenguaje COBOL, estos parrafos ernpiezan con numeros """:"praclic:a que facilita encon trar el parrafo deseado en el listadc del programa (dando por supuesto que los numeros e stan ordenados).

Uso del punto

Los parrafos en la division de proeedimientos se cornponen de frases, y como sucede en ingles, las frases se delimitan con el uso de puntos, Aunque COBOL permite el usa del punta al final de cada frase, es buena idea utilizar los puntas en la division de procedimientossolo cuando es absolutamente necesario. Observese queen Ia division de procedimientos del Ejemplo 2.1 los puntos ocupan ellos solos una linea. Este uso del punto ipunto estructuradoy se recomienda porque permite visualizar- 10. facilmente, haec posible 1£1 insercion de nuevas frases a continuacion del punta y ayuda en la depuracion de errores.

.,'

EJEMPLO 2.9 En COBOL es obligatorio el usa de puntos a1 final de cada parrafo. Algunas veces tambien son necesarios para separar una [rase de otra demro de un mismo parrafo, La division de procedimientos del EjempJo 2.1 utiliza (i) punro despues de Ia cabecera de DIVISION (linea 70); (ii) punta despues de cada cabecera de parrafo (lineas 72, 86, 87, 93 y 105); y (iii) punto estructurado al final de cada parrafo (ltneas 78, 85, 91, 103 Y 108),

EJEMPLO 2.10 Las hneas 42 y 54 del Ejemplo 2.1 conuenen puntos estructurados, £5105 forman parte de la division de datos que puede precisar la insercion 0 borrado de lmeas COBOL conforrne se hagan modificaciones en el program a; el punto estruciurado facilita dichos cambios, Sin embargo, la regia general es que, fuera de la division de procedirnieruos, los puntos se colocan en la misma linea que la frase que concluyen.

2.3 REG LAS PARA LA ESCRJTURA. DE PROGRAMAS COBOL

Los programadores en COBOL escriben sus program as en unos formularios de codificacion COBOL especiales (Fig. 2·1). Las columnas 1·6 de cada linea son par 10 general utilizadas para poner unos numeros de secuencia que permiten ordenar facilmente eJ prograrna. Las columnas 73-80 de cada linea se utilizan para la identificaeiou del prograrna; en estas columnas se escribe una abreviatura del nornbre del prograrna. Los nurneros de secuencia y las colurnnas de identificacion fueron irnportames cuando los program as se perforaban en tarjetas, porque un bloque de tarjetas podia caerse y desordenarse, Hayen dia, que los programas se escriben desde terrninales CRT y se almacenan en disco, son menos importantes estos dos puntas.

14

*

'"
t:l
""
-e -c
"" t;j
Ci ,0:
s. ~
- w
c
Q
'"
:"i
'"
::0
'"
e 1--1--

z r---- I-o

<3

;i I-- t-l? ~f-I--

w Q

z 1--1-Q

<>

g t--t--

:::

~' r-I---z

o

o u

<> '"

0: 0;

~ ~ c;J ffi

c,

GENERALIDADES DE COBOL

[CAP. 2

, ~ .'\$;",,'" ""c I>"': ,..;,'"

,i>,'",'J,*,_i"", t ,""", I,:~ " fIi4 ~~~'~ ,

nil";' H '_~il-'r,;~ 'i4-d~ifI\~,'~ ,'/I~

'.
....
N
e>iI
~ ~ ,_

.-- .,.... """,- --

, ,,¥CllIrY 1';;'I"f;i: , 1

CAP. 2]

GENERAUDADES DE COBOL

15

Las instrucciones COBOL se escriben entre las columnas 8 y 72. Las columnas 8011 conforman el margen A y las columnas 12·72 el margen B. En el margen A comenzara 10 siguiente:

• cabeceras de division

• cabeceras de seceion

• cabeceras de parrafo

y, dentro de la division de datos,

• cabeceras de descripcion de los ficheros (comenzando con las letras "FD" como en las lineas 39 y 51 del Ejemplo 2.1)

• cabeceras de descripcion de los registros (datos can el mrrnero de nivel "0 I" como en las

Iineas 43, 55, 59 y 62 del Ejemplo 2 .. 1).

Todo 10 demas debe comenzar a escribirse en el margen B. Aunque COBOL permite que las entradas en el margen B corniencen en la columna 12, es fundamental en Ia prograrnacion estructurada que dentro del margen B se clarifiquen las relaciones entre las Ifneas.

EJEMPLO 2.11 En las frases siguientes, extraidas de la division de procedimieruos del Ejernplo 2.!. cada linea de la rnisma frase cornienza un poco desprazada de la anterior:

• lineas 88-90: READ RCHERO- VENT AS

AT END

MOVE"T" TO FIN·FICHERO·VENT AS

• lineas 100-101: WRITE LlNEA·INFORME·TRIMESTRAL

FROM LINEA-INFORME- TRABAJO

Usos especiales de la columna 7

COBOL asurne que cada linea sigue a la anterior dentro de una misma frase basta que se encuentra un punta. Solo se necesitan reglas especiales cuando una linea concluye en medic de una palabra a en medic de una cadena entre comillas (Seccion 5.19, literates no nurnericos):

(I) Si la linea anterior concluye en medic de una palabra, debe escribirse un "_" (guion) en la columna 7 de la linea siguiente y continuer en el margen B.

(2) Si la linea anterior concluye en media de un literal entre comilIas, debe escribirse un "0" (guion) en la columna 7 de la linea siguiente, repetir las comillas de aperture en el margen B y continuar can la cadena. .

EJEMP~O 2.12

r

MOVE "GRACIAS POR SU

I "PRONTO PAGO" TO CUSTOMER-MESSAGE t

col. col. col.

7 12 16

En el ejernplo de arriba se usan estas reglas, si bien se produciran muchos espacios en blanco involuntarios porque para fa primera linea de fa cadena entre comilias se asume que continua hasta 10 columna 72_

EJEMPLO 2.13 i,Que es incorrecto en 10 que sigue?

MOVE "OVER

1 rAYMENT" TO MENSAJE-SAWO-NEGATIVO

col. col. col.

7 12 16

16

GENERALlDADES DE COBOL

[CAP. 2

(a) En primer lugar podna haberse evitado partir la cadena:

MOVE "OVERPAYMENT"

TO MENSAJE-SALDO-NEGA TIVO

(b) Puesto que la primera linea se extiende hasta la columna 72, el mensaje aparecera asi:

"OVER PA YMENT"

que no es 10 que se pretendia,

Cuando se escribe un "'I<" en la columna 7, el resto de la linea se trata como un com en ta rio. Esto significa que aunque el cornpilador imprirnira la linea en eI listado del program a fuente, no traducira su contenido alprograma objeto .. Los comentarios se utilizan para explicar 10 que hace el programa y como 10 hace. Son utiles para que otros prograrnadores en COBOL puedan realizar modificaciones en un programa. Recuerde: puesto que COBOL es un lenguaje autodocumentado, loscornentarios son superfluos y s610 deben usarse donde real mente es necesario clarificar alga.

EJEMP.LO 2.14 Hay comentarios en las lineas 9-22 del Eiemplo 2.1.

La columna 7 rambien se utiliza para insertar linea's de depurocion et: un programa COBOL. las lmeas de depuracion son simplemente lineas COBOL con una "D" escrita en la columna 7. Como su nombre .indica, se utilizan para localizar y corregir errores en un prograrna. (V ease la Seccion 4.2.)

Lineas en blanco

En un programs COBOL pueden aparecer lineas en blanco; se utilizan para hacer mas legible el listado del prograrna fuente. (Lfneas 2, 23, 25, 29, ... , 104 del Ejernplo 2.1.)

Algunos pro gram adores prefieren las ltneas de comentario en blanco (lineas con un "*,, en la columna 7 u nica mente), porque el compilador procesa mas rapidarnente una linea de comentarios que una linea en blanco. Sin embargo, la ventaja es minuscula y por tanto emplearemos lioeas en blanco.

2.4 NOMBRES DEFINIDOS POR EL PROGRAMADOR Y PALABRAS RESERVADAS

Las palabras individuales que conforrnan un programs COBOL se forman de acuerdo con las siguientes reglas:

(1) Inferiores a 30 caracteres de longitud ..

(2) Los caracteres permitidos son las letras de la A ala Z,. los digitos de ° a 9 y el guion. (3) No pueden empezar ni acabar con un guion.

(4) No pueden contener espacios dentro.

Algunas de las palabras usadas en un program a COBOL se consideran parte dellenguaje COBOL y sirven para un proposito deterrninado. Entre estas palabras reservadas estan "IDENTIFICA nON", "DIVISION", "DATE-WRITTEN", "INPUT-OUTPUT", "SECTION", "WORKlNG-STORAGE", "MOVE", "OPEN" y "COMPUTE"; hay una lista completa en el Apendice A. Los nombres definidos por el programador se construyen de acuerdo can las reglas anteriores y no pueden duplicar una palabra reservada. Entre las paJabras definidas por el programador estan:

• nombres de fichero usados en las instrucciones SELECT y en las descripciones de fichero (FD) (veanse las Iineas 32, 33, 39 y 51 del Ejemplo 2.1),

• nombres de registros y campos en la division de datos (lineas 43~49, 55, 59-68),

• nornbres de parrafos y secciones en la division de procedirnientos (Iineas 72, 80, 87, 93, 105).

CAP.2J

GENERAUDADES DE COBOL

17

EJEMPLO 2.15

(a) Compare las siguientes parejas de nombres definidos por el programador:

• MVHF 0 MEDlA-V£NTAS-HASTA-FECHA

• MP 0 MEDIA-PONOERADA

• EXTRA 0 PAGA-EXTRA-DlCIEMBRE

Cuando haya posibilidad de duda es preferible ser descriptivos,

(b) Los siguientes nombres definidos por el programador son invalidos 0 absurdos:



RECORD (invalido: duplica una palabra reservada)

.'

• STUDENT-BODY-CUMULATJVE~GRADE-POINT-AVERAGE (invalido: mas de 30 caracte-

res)

• -OUT-Of-STOCK (invalido: comienza con un guion)

• N (absurdo: no es descriptive)

• TOT AL-$SALES (invalido: contiene un caracter prohibido)

2.5 COMIENZO

Hasta el momento se ha exarninado superficialmente la programacion en COBOL. Sin embargo, cualquierlenguaje de programaci6n se aprende praciicandalo. Los dos programas COBOL que siguen sirven como guias para resolver los ejercicios de programacion que se dan a1 final del capitulo. Para comprobar los program as que escriba debera consultar con un instructor. 0 programador con experiencia en el lenguaje de control de trabajos 0 lenguaje de 6rdenes que utilice su sistema de cornputadoras,

EJEMPLO 2.16 Un programa COBOL completo. Todos los cornentarios aparecen dentro del programa (utilizando Ifneas de comentarios), Despues del listado del prograrna aparece un ejernplo de la salida.

00001 00002 00003 00004 00005 00006 00007 00008 00009 00011 00012 00013 00014 00015 00016

IDENTIFICATION DIVISION.

PROGRAM-! D. PHONE LST ..

AUTHOR. LARRY NEWCOMER.

INSTALLATION. PENN STATE UNIVERSITY--YORK CAMPUS.

00018

DATE-WRITTEN. MAY 1983. DATE-COMPILED. MAY 9,1983.

* PHONELST PRODUCE UN LISTADO IMPRESO DE TODOS lOS NOMBRES * Y TELEFONOS DE EMPl[AOOS. HOMBRES Y TEL~FONOS ENTRAM

* OESaE UN FICHERO DE TARJETAS COLOCADAS POR ORDEN ALFABETICO. * LA UNICA SALIDA ES UNA COPIA DE NOMBRES Y TELEFONOS, SIN

* CABECERAS Y SIN NUMEROS DE PAGINA (SE TRATA DE QUE SEA

LO MAS SIMPLE POSIBlE)

ENVIRONMENT DIVISION.

...

00020

CONFIGURATION SECTION.

00022 00023 00024 00025 00026 00027 00028

* *

LA SECCION DE CONFIGURACfON DESCRIBE EL SISTEMA QUE SE VA A IJT I LI ZAH EN LA COMPI LAC I ON DE L PROGRAMA (SOURCE-COMPUTER) Y El SISTEMA QUE SE IJSARA EN LA EJECIJCION DEL PHOGRAMA OBJETO (OBJECT-COMPUTER)

SOURCE-COMPUTER. IBM-370. OBJECT - COMPUTER. J 6M-370.

*

*

18

GENERAUDADES DE COBOL

00030

INPUT-OUTPUT SECTION.

00032

FILE-CONTROL.

00034 00035 00036 00037 00038 00039 00040 00041 00042 00043 00044 00045 00046 00047 00048 00049

* *

EL PARRAFO FILE-CONTROL DE LA INPUT-OUTPUT SECTION DEFINE LOS FICHEROS QUE SE VAN A'PROCESAR:

SELECT FICHERO-TARJETAS SELECT FICHERO-IMPRESION

ASSIGN TO TARJETAS. ASSIGN TO IMPRES.

* * *

ESTAS INSTRUCCIONES DAN NOMBRES COBOL A LOS FICHEROS A PROCESAR. EN ESTE CASO EL FICHERO DE ENTRADA

ES FICHERO-TARJETAS Y EL DE SALIDA FICHERO-IMPRESION

LAS INSTRUCCIONES SELECT TAMBIEN DAN A CADA FICHERO UNA INSTRUCCION DEL LENG. DE CONTROL DE TRABAJOS DONDE HAY MAS INFORMACION SOBRE EL DISPOSITIVO liD. CONSULTE A SU INSTRUCTOR SOBRE LAS INSTRUCCIONES DEL LENGUAJE DE CONTROL DE TRABAJOS NECESARIAS PARA EJECUTAR EL PROGRAMA.

* * * * * *

00051

DATA DIVISION.

00053 00054 00055 00056

00058 00059 00060 00061 00062 00063 00064 00065 0006& 00067 00068 00069 00070 00071 00072 00073 00074 00075 00076 00077 00078

00080 00081 00082 00083 00084 00085 00086 00087 00088 00089 00090 00091 00092

* EN LA DIVISION DE DATOS SE OESCRIBEN TOOOS LOS

* ELEMENTOS PROCESAOOS POR EL PROGRAMA.

FILE SECT! ON.

* * * * *

LA SECCION DE FICHEROS CONTI ENE INFORMACION ADICIONAL SOBRE CAOA FICHERO. OBSERVE QUE LOS NOMBRES DE SELECT Y FD COINCIDEN EXACTAMENTE. DEBE HABER

UNA INSTRUCCION FD DE CAOA FICHERO QUE APAREZCA EN UNA INSTRUCCION SELECT.

FD FICHERO-TARJETAS

RECORD CONTAINS 80 CHARACTERS LABEL RECORDS ARE OMInED

* * -I;

*

EN "FO" SE INDICA EL NUMERO DE CARAC,TERES POR REGISTRO Y 51 TIENE 0 NO ETIQUETAS. EN UNA TARJETA NORt~AL LA LONG nUD ES 80 COLUMNAS. NO SE

ADMITEN ETIQUETAS EN UN FICHERO DE TARJETAS.

EL RESTO DE LA INST. "FD" DESCRIBE EL CONTENIDO DEL REGISTRO. PIC X(BO) SIGNIF]CA QUE CADA REGISTRO TIENE 80 CARACTERES ALFANUMERICOS.

* * *

01 ENTRADA-NOMBRE-TELEFONO

PIC X(80).

*

LA JNST. FD PARA UN FICHERO DE IMPRESION NO PUEDE

TENER ETIQUETAS. LAS IMPRESORAS TIENEN LINEAS DE 132 CAR.

FD FICHERO-IMPRESION

RECORD CONTAINS 132 CHARACTERS LABEL RECORDS ARE OMITTED

*

* * *

UN REGISTRO DE UN FICHERO DE lMPRESION ES UNA LINEA. EN [STE CASO CADA LINEA CONTI ENE 132 CARACTERES ALFANUMERICOS ("PIC X(132)").

01 L1NEA-IMPRESION

PIC X(132).

00094

WORKING-STORAGE SECTION.

00096 00097

* *

LAS AREAS DEL WORKING-STORAGE NO FORMAN PARTE

OE REGISTROS DE FICHEROS, AQUI SE HA DEF1NIDO UN

[CAP. 2

CAP, 2]

00098 00099 00100 00101 00102 00103

00105 00106 00107 00108 00109 00110 00111 00112 00113 00114

00116 00117 00118 00119 00120 00121 00122 00]23 00124 00]25 00126

00128

00130 00131 00132 00133

00135 00136 00137 00138 00139 00140 00141 00142 00143 00144 00145 00146 00147 00148 00149 00150 00151 00152 00153 00154 00155 00156 00157 00158 00159 00160 00161 00162 00163 00164 00165

GENERALIDADES DE COBOL

* * *

INTERRUPTOR CON TRES CARACTERES ("PIC X(3)") QUE CONTI ENE "SI" 0 "NO" DEPENDIENDO DE QUE Sf HAYA o NO ALCANIAOO EL FINAL DEL FICHERD, ES DECIR, SI QUEDAN 0 NO REGISTROS POR PROCESAR,

*

01 INTER-FIN-TARJETAS

PIC X(3),

* * * * *

ESTA AREA CONTI ENE UNA TARJETA DE ENTRADA CON EL NOMBRE Y TElEFONO DEL EMPLEADO -- EL NOMBRE TlENE 20 CARACTERES ALFANUMERICOS Y EL TELEFONO

TIENE 8 CARACTERES ALFANUMERICOS_ "FILLER" SE UTILIZA PARA RELlENAR ESPACIOS INOPERANTES,

01 NOMBRE-TELEFONO-TARJETA. 05 NOMBRE-EMPLEADO

05 TELEFONO-EMPLEADO

05 FILLER

PIC X(20). PIC X(8). prc X{S2).

* * * * *

EN ESTA AREA SE CONSTRUYEN LAS LINEAS DE IMPRESION OBSERVE QUE HAY AREAS INTERMEDIAS CON "FILLER" RELLENADAS CON [SPACIOS EN BLANCO MEDJANTE "VALUE SPACES". ESTOS ESPACIOS SIRV.EN PARA LA SEPARACION DE LOS CAMPOS EN LA L1 MEA DE I MPRE S I ON.

01 LINEA-NOMBRE-TELEFONO. 05 NOMBRE-IMPRESO

05 FILLER

05 TELEFONO-IMPRESO 05 FILLER

PIC X(20). PIC X(5) PIC X(S). PIC X(99)

VALUE SPACES.

VALUE SPACES.

PROCEDURE DIVISION.

* '"

LA DIVISION DE PROCEDIMIENTOS CONTI ENE LAS INSTRUCCIONES QUE OICEN A LA COMPo LO QUE DEBE HACER.

OOO-PROD-LISTADO-TELEFONOS.

MOVE "NO" TO INTER-FIN- TARJETAS

*

DA A INTER- FIN- TARJETAS EL VALOR "NO".

'" *

'"

LA INSTRUCCION OPEN DEBE UTILIZARSE ANTES DE QUE S[ PUEDA PROCESAR UN FICHERO. SE INDICA 51 EL FICHERO ES DE ENTRADA 0 SALIDA.

OPEN

INPUT OUTPUT

rt CHERO- TARJET AS FICHERO-IMPRESION

PERFORM lOO·ErTRADA-REGISTRO

* '" * *

'"

LA INSTRUCCION PERFORM HACE QUE TODAS LAS INST. DEL PARRAFO "lOO-ENTRADA-REGISTRO" SE EJECUTEN. OBSERVE QUE ASI SE DA ENTRADA AL P-RIMER REG!STRO, DEL FICHERO, EL PARRAFO"PROD-LISTAOONOMBRE-TEL" PROCESA ESTE PRIMER REGISTRO.

DESPUES SE [JECUTA EL PARRAFO "IOO-ENTRADAREGISTRO" CON EL QUE SE OA ENTRADA AL

SIGUIENTE REGISTRO DEL FICHERO Y ASI SUCESIVAMENTE,

... *

*

*

* * *

PERFORI~ 200- PROD- L ISTAOO - NOMBRE - TEL

UNTIL INTER-FIN-TARJETAS IS EQUAL TO "SI"

ESTA VERSION DE LA INSTRUCCION PERFORM HACE QUE SE EJECUTE REPETITIVAMENTE El PARRAFO LLAMADO "200- PROD- LI STADO -NOMBRE - TEL" . LA

19

20

oeI66 00167 00168 00169 00170 00171 00172 00173 00174 00175 00176 00177 00178 00179 00180 00181 00182

00184 00185 00186 00187 00188 00189 00190 00191 00192 00193 00194 00195 00196 00197 00198 00199

00201 00202 0020j 00204 00205 00205 00207 00208 00209 00210 D02Il 00212 00213 00214 00215 00215 00217 00218 00219

ABEL FRED

BAKER SUE CHARLIE SUE PERELMAN BARNEY PERELMAN MIKE RODGERS BOB RODGERS BOBB RODGE RS LE E FOLKERS DICK FOLKERS RUTH SUE PEGGY

zorz ZAPPA

GENERALIDADES DE COBOL

*

REPETI C I ON DEL PARRAFO CONTINUA. HASTA QUE I NTER- FI 1'1- TARJETAS CONTI ENE El VALOR "SI".

*

* * *

CLOSE FICHERD-TARJ[TAS FICHERO-IMPRESION

LA INSTRUCCION CLOSE DEBE UTI LIZARSE CUANDO El PROGRAMA ACABA DE PROCESAR UN FICHERO. OESCONECTA EL FICHERO DEL PROGRAMA COBOL.

STOP RUN

* *

LA I NSTRUCCION STOP OBLIGA A lA COMPUTADORA A

PARAR LA EJECUC ION DE L PROGRAMA.. i,\

lOO-ENTRAOA-REGISTRO.

* * * * * * * *

ESTE PARRAFO DA ENTRADA A UNA TARJETA. LA INSTRUCCION READ lEE UNA TARJETA DEL FICHERa Y MUEVE EL CDNTEN 100 AL AREA DEL WORKING- STORAGE lLAMADA "NOMBRE - TE LE FOND - TARJ ETA" . S I NO flU B IE RA MAS TARJETAS QUE LEER, EL INTER-FIN-TARJETAS TOMA EL VALOR "S I". SE EJECUTAN A CONTI NUAC I ON LAS

IN STRUCC IONES CLOSE Y STOP RUN. ESTA ULTIMA

DET! ENE LA EJE cue ION DE L PROGRAMA ..

READ FICHERO-TARJETA.5 RECORD INTO NOMBRE-TELEFONO-TARJETA AT END

MOVE "51" TO INTER-fIN- TARJETAS

200-PROD-LI$TADO-NOMBRE-TEL.

* * * * * *

ESTt PARRAFO MUEVE lOS DATOS DE NOMBRE-TELEFONOTARJETA AL AREA DESDE LA CUAL SE IMPRIMIRA UNA LINEA DEL INFORML LA INSTRUCC ION "\-;iRITE" IMPRIME UNA Ll NEA CUYOS CONTE 1'1 I DOS ESTAN EN" II 1'1 EA - NOMBRE - TELEFONO". DESPUES DE [STO LA INSTRUCCION PERFORM 100-ENTRADA-REGISTRO HACt QUE SE EJECUTE ESTE PARRAFO PONIENDO A DISPOSICION DEL PROGRAMA [l SIGUIENTE REGISTRO.

* *

MOVE NOMBRE-EMPLEADO MOVE TELEFONO-EMPLEADO

TO NOMBRE-IMPRESO TO TELEFONO-IMPRESO

WRITE LINEA-IMPRESION

FROM LINEA-NOMBRE-TELEFONO

PERFORM 100-ENTRADA-REGISTRO

123-4567 111-2222 453-7822 UNLl STED UNKNOWN 234-5678 345-6789 456-7890 557-8901 578-9012 231-7856 999-9999

[CAP. 2·

CAP,2J

GENERALIDADES DE COBOL

2J

EJEMPlO 2.17 AI igual que en el Ejemplo 2.16, s610 se comentan aquellas caractensticas que aparecen por primera vez,

00001 00002 00003 00004 00005 00006 00007 00008 00009 00011 00012 00013 00014 00015 00016

IDENTIFICATION DIVISION.

PROGRAM- 10. TlHEUST.

00018

AUTHOR. LARRY NEWCOMER,

INSTALLATION. PENN STATE UNl VERS LTY - - YORK CAMPUS.

DATE-WRITTEN. MAY 1983.

DATE-COMPILED. MAY 9,1983.

* TIMELIST IMPRIME UNA LINEA POR EMPLEADO CON:

NUM. DE HoRAS NORMALES TRABAJADAS, NUM. DE HORAS EXTRAS TRABAJAOAS Y TOTAL HORAS TRABAJADAS. AL FINAL DEL INFORME SE IMPRIHE El NUM. TOTAL DE

EMPLEADO$ PROCESADOS. LA ENTRADA ES UN PAQ'UETE

DE TARJETAS OROENAOAS ALFABETICAMENTE.

ENVIRONMENT DIVISION.

* * * * *

00020

CONFIGURATION SECTION.

00022 00023

SOURCE-COMPUTER. IBM-370. OBJECT-COMPUTER. rSM-370.

00025

INPUT-OUTPUT SECTION.

00027

FILE - CONTROL.

00029 00030

SELECT FICHERO-TARJETAS SELECT FICHERO-IMPRESION

ASSIGN TO TARJETAS. ASSIGN TO IMPRES.

00032

DATA DIVISION.

00034

FILE SECTION.

00036 00037 00038 00039 00040 00041

FD FICHERO-TARJETAS

RECORD CONTAINS 80 CHARACTERS LABEL RECORDS ARE OMITTED

01 ENTRAOA-TARJETA-HORA

PIC X(80).

00043 OOOQ4 00045 00046 00047 00048

FD FICHERO-IMPRESION

RECORD CONTAINS 132 CHARACTERS LABEL RECORDS ARE OMITTED

01 LINEA-IMPRESION

PIC X(132).

00050

WORKING-STORAGE SECTION.

00052 00053 00054 00055 00056 00057 00058

* *

OBSERVE QUE HAY VARIOS CAMPOS NUMERICOS DEFINIDOS EN EL WORKING-STORAGE CON "PIC 99" 0 BIEN

"PIC 999". CADA 9 REPRESENTA UN OIGITO DECIMAL. ASI "PIC 99" DESCRIBE UN ELEMENTO QUE PUEDE CONTENER UN NUMERO DE 2 DIG nos.

* * *

01 INTER-FIN-TARJETAS

PIC X(3).

00060 00061 00062 00063 00064 00065 00066

0] TARJETA-HORA-TRABAJO.

*

CONT/ENE LA INFORMACION ENTRAOA DESDE EL FICHERO TARJ.

05 NOMBRE-TRABAJO

05 HORAS-NORMALES-TRABAJO 05 HORAS-EXTRA·TRABAJO

PIC X(20). PIC 99. PIC 99.

22

GENERALIDADES DE COBOL

00067

05 FILLER

PIC X(56).

00069 00070 00071 00072 00073 00074 00075 00076 00077 00078 00079 00080

01 LlNEA-LlSTADO-HORAS.

*

AREA PARA CONST. UNA LINEA DEL INFORME

05 NOMBRE - LI STADO PIC X(20).
05 FILLER PIC X(5) VALUE SPACES.
05 HORAS-NORMALES-LISTADO PIC 99.
05 FILLER PIC X(5) VALUE SPACES.
05 HORAS-EXTRA-LISTADO PIC 99.
05 FI LLER PIC X(5) VALUE SPACES.
05 TOTAL-HORAS-LISTADO PIC 999.
05 FILLER PIC X(90) VALUE SPACES.
01 LINEA-TOTAL-EMPLEADO. ~}'f_ 00082 00083 00084 00085 00086 00087 00088 00089 00090 00091

* * *

AREA UTILlZ.ADA PARA CONSTRUIR LA LINEA OEL FINAL DEL INFORME. CONTI ENE UN CONTADOR DEL NUMERO

DE EMPLEADOS.

05 FILLER

: PIC X(2S)

VALUE "NUMERO DE EMPLEADOS". PIC 999.

PIC X(104) VALUE SPACES.

05 NUM-EMPLEADOS 05 FILLER

00093

PROCEDURE DIVISION.

00095 00096 00097 00098 00099 00100 00101 00102 00103 00104 . 00105 00106 00107 00108 00109 OOllO 00111 00112 00113 00114 00115 00116 00117 00118 00119 00120 00121 00122 00123 00124 00125 00126 00127 00128

OOO-PROO-INFORME-HORAS.

*

LOS INTERRUPTORES Y CONTADORES DEBEN INICIALIZARSE AL PRINCIPIO DEL PROGRAMA. EL INTERRUPTOR TOMA EL VALOR "NO" Y EL CONTADOR EL VALOR CERO. SE SUMARA UNO

CADA VEZ QUE SE PROCESE UN REGISTRO DE EMPLEAOO (VEASE EL CONTENIDO DEL PARRAFO 200-PROD.-

II STADG - HORAS) .

~lOVE "NO" TO IN1ER-FIN-TARJETAS MOVE ZERO TO NUM-EMPLEADOS

*

* * * *

INPUT OUTPUT

FICHERO-TARJETAS FICHERO-IMPRESION

OPEN

PERFORM 100-ENTRADA-REGISTRO

...

PERFORM 200-PROD.-LISTADO-HORAS

UNTIL INTER-FIN-TARJETAS IS EQUAL TO "51"

DESPUES DE PROCESAR TODAS LAS TARJETAS (Al CAMBIAR INTER-FIN-TARJETAS A "51"). TIENE QUE

IMPRIMI RSE UNA LINEA CON EL NUMERO DE EMPLEADOS PROCESADOS.

"WRITE LINEA- IMPRES I N FROM LI NEA- TOTAL- EMPLEAOO" IMPRJ ME EL CONTEN! DO DE LI NEA- TOTAL· EMPLEADO

* *

" *

*

WRITE LI NEA- IMPRES ION

FROM UNEA-TOTAL-EMPLEADO

CLOSE FICHERO-TARJETAS FICHERO-IMPRESION STOP RUN

00130 00131 00132 00133 00134

100-ENTRADA-REGISTRO.

READ FICHERO-TARJETAS RECORD INTO TARJETA-HORA-TRABAJO AT END

[CAP. 2

CAP. 2]

GENERALIDADES DE COBOL

00135 00136

MOVE "51" TO INTER-FIN TARJHAS

00138 00139 00140 00141 00142 00143 00'144 00145 00146 00147 00148 00149 00150 00151 00152 00153 00154 00155 00156 00157 00158 00159 00160

200-PROD-LISTADO-HORAS.

*

INCREMENTA CONTAOOR AL PROCESAR UN EMPLEADO

ADD 1 TO NUM-EMPLEADOS

*

MUEVE DATOS DES DE LA TARJETA. A DONOE SE CONST. LA Ll NEA

MOVE NOMBRE-TRABAJO

MOVE HORA5-NORMALES-TRABAJO MOVE HORAS-EXTRA,TRABAJO

TO NOMBRE - Ll STADO

TO HORAS-NORMALES-LISTADO TO HORAS-EXTRA-LISTADO

.'

* *

CALCULAR TOTAL HORAS SUMANOO HORAS NORMALES Y EXTRAS. RESULTAOO EN LI NEA- LI STAOO- HORAS.

AOD HORAS - NORMALES - TRAB.AJO HORAS - EXTRA - TRABAJO GIVING TOTAl-HORAS-LISTADO

WRITE LINEA- IMPRESION

FROM LI NEA- U STAOO-HORAS

PERFORM lOO-ENTRAOA-REGISTRO

ABEL FRED 40 03 043
BAKER SUE 30 00 030
CHARL! E CHUCK 40 12 052
FLECKSTEINER CINDY 40 00 040
FLECKSTEINER DON 40 20 060
FLfCKSTEINER STACY 15 00 OJ5 .,'
PERELMAN BARNEY 40 15 055
PERELMAN MIKE 03 00 003
NUM. DE EMPlEAOOS 008 Preguntas de repaso

2.1 ~Por que se dice que COBOL es un lenguaje autodocurnentado?

2.2 iCuales son las cuatro divisiones de un programs COBOL?

2.3 iCua! es el proposito de la division de identification?

2.4 l,Cual es el propos ito de la division del eruorno y configuracion?

2.5 ,;Cual es el prop6sito de la division de datos?

2.6 iQue es el WORKING-STORAGE?

2.7 i,En que division se especifica el procesamiento a realizar?

23

24

GENERALIDADES DE COBOL

[CAP. 2

2.8 lQue es una seccion en COBOL?

2.9 ;,Que son los parrafos en COBOL?

2.10 lPor que se incluyen ntimeros de secuencia como parte del nornbre de los parrafos en la division de procedirnientos?

2.11 lQue es un punto estructurado?

2.12 Explique el significado de los margenes A y B.

2.13 ~Que debe ernpezarse en e! margen A?

2.1 4 Explique la i m portancia del desplazarniento jerarq u ieo de las Imeas en el margen B.

2.15 Explique las regias de continuacion de lmeas en COBOL.

2.16 Explique las reglas de escritura de program as COBOL

2.17 lCual es el uso especial de la columna 7 en COBOL?

2.18 lQue son las palabras reservadas en COBOL?

2.19 i,Cuales son las reglas para los nornbres definidos por el programador en. COBOL?

2.20 Explique la funcion desempenada por las lineas en blanco en un program a COBOL

Prograrnas resueltos

~.

2.21 lQue tipo de datos pertenecen al WORKING-STORAGE?

El WORKING-STORAGE (almacenamiento de trabajo) se utiliza para aquellos datos que no corresponden a los campos de registros de ficheros. Estes datos se calc ulan, par 10 general, por el programa 0 se usan como zonas de almacenarniento temporal durante el procesarniento. Ejemplo de cosas que se asignan al WORKJNG~STORAGE son:

Contadores 0 posiciones de memoria utilizadas para represeruar un dato numerico que sirve para contar (por ejernplo, el numero de ernpleados), Los con tad ores se inicializan per 10 general a cero.

Acumuladores 0 posiciones de memoria utilizadas para acumular un IOta I (par ejernplo, el saldo de una cuenta), Los acurnuladores se suelen inicializar a cero,

Banderas elnterruptores lie programa. Estas posiciones de memoria contienen informacion que indica 5i ciertos sucesos han ocurrido durante la ejecuci6n del prograrna. Las banderase interruptores de programa frecuenternente adrniten los valores verdadero 0 false (par ejernplo, si todos los registros de un fichero han sido 0 no procesados). Las banderas se fijan en uno u otro valor durante la ejecucion del prograrna.

Lineas de informacion, Con frecucncia conviene construir en el WORKING-STORAGE lineas de informacion para despues transferirlas al area de registros del fichero de irnpresion antes de O'er impresas con la instruccion WRITE.

2.22 (,Que hace la computadora cuando ejecuta la version en lenguaje maquina de "PERFORM 090-CALCULO-IMPUESTOS"?

La cornputadora cnviara el control a la pri rnera instruccion en la version en lenguaje maquina del parrafo denominado "090-CALCULO-IMPUESTOS. Despucs procedera a ejecutar el resto de las

CAP. 2]

GENERAUDADES DE COBOL

2S

instrucciones del parrafo, uno despues de otro, y par ultimo se devuelve el control a la instruccion inrnediatamente posterior a "PERFORM 090-CALCULO-IMPUESTOS".

2.23 ~Que hace la cornputadora cuando ejecuta la version en lenguaje maquina de "MOVE EXISTENCIAS TO EXISTENCIAS~INFORME"?

En terminos generales, copiara el contenido de la posicion de memoria (campo de en via) "EXISTENCIAS" en la posicion de memoria (campo de recepciont "EXISTENCIAS·INFORME". EI valor de EXISTENCIAS permanecera inalterado, El contenido exacto del campo de recepcion dependera de la

descripcion de la division de datos de los dos campos. .-

2.24 Indicar si los siguientes nombres del parrafo de la division de procedimientos son incorrect05, correctos, pew faltos de descripcion 0 totalmente aceptables: (a) INPUT, (b) INPUTINVENTORY-RECORD, (c) B-INPUT-INVENTORY-RECORD-040, (d) PROCESSDATA.

(a) Ineorrecto: duplica una palabra reservada.

(b) Correcto (se puede mejorar anadiendo un numero de secuencia at nornbre),

(c) Correcto: la combinacion de secuencia de letras y numeros, junto con el nombre que describe el parrafo, es optima,

(d) Correcto, pero el nornbre es vago y no describe 10 que el parrafo realiza.

2.25 Explicar los siguientes usos especiales de la columna 7:

(a)

MOVE SPACES TO LlNEA-DIRECCION-NOMBRE

EL PARRAFO SIGUIENTE CALCULA LOS IMPUESTOS ESTATALES

MOVE "LA LlBRERIA DE LA UNIVERSIDAD DE - col. 72 "PENSIL VANIA" TO CABECERA~INFORME

(b)

(c)

(d)

D t

col. 7

EXHIBIT NAMED NUM-DE-EMPLEADOS-PROCESADOS t

Margen B

(a) Puesto que se divide en dos lineas se necesiia "." en la columna 7 para indicar que se continua, Tengase en cuerua que esta situacion debe evitarse en la medida de 10 posible:

MOVE SPACES TO LINEA·DIRECCION-NOMBRE

(b) EI "*,, en la columna 7 indica que el resto de la linea es un cornentario, usado para explicar 10 que lleva a cabo una parte dada del program a 0 bien como 10 realiza.

(c) El -,» en Ia columna 7 se utiliza aqui para expresar la continuacion de una cadena entre cornillas (litera! no numerico) de una linea a otra, Observese que no hay cierre de comillas en la primera linea (que acaba en la columna 72) y Ia apertura de comillas se repite en eI margen B de la segunda linea. Podria haberse evitado la particion escribiendo:

MOVE

"LA LIBRERIA DE LA UNIVERSIDAD DEL ESTADO DE PENSILVANIA" TO LINEA-IN FORME

(d) La "D" en la columna 7 califica la linea como linea de depuracion, usada para detectar errores en el programs. Las lmeas de depuracion deben eliminarse despues de que el programa haya sido corregido (vease la Seeci6n 4.2).

2.26 Comentar los siguientes nornbres de datos definidos por el usuario: (a) TNWJ, (b) TOTAL· NET-WORTH-OF-INVENTORY-FOR-JULY, (c) PHONE NUMBER, (d) #-ON-HAND, (e) ON-HAND·.

(a) Los nombres de los datos deben ser descriptivos, Aunque TNWI es legal, TOTAL-NET-WORTH· OF·INVENTORY es rnucho mejor.

26

GENERALlDADES DE COBOL

[CAP. 2

(b) Los nombres definidos por e1 usuario no pueden tener mas de 30 caracteres; como consecuencia este nombre es ilegal y constituye un error sintactico,

(e) Los nombres definidos par el usuario no pueden contener espacios en blanco (ni cualquier otro caracter que no sea letra, digito 0 guion): error sintactico.

(d) Caracter ilegal "# ": error sintactico,

(e) No es po sible comenzar 0 terminar una palabra con un guion: error sintactico,

Problemas complementarios

2.27 Entrevistese con un programador en COBOL profesional; Enterese de sus normas y organizacion para la escritura de programas en materia de (a) lineas de cornentarios, (b) continuacion, (e) nombres definidos par el programador, (d) punto estructurado, (e) despiazamiento de lineas, ({) lineas en blanco.

2.28 Vuelva a leer el Ejernplo 2.1 y compruebe si entiende ahora la mayor parte del prograrna. (.Podria cornprender el program a sin comentarios, lineas en blanco, despIazamiento de lineas, nombres descriptivos y nornbres de parrafos?

Ejercicios de programacion

En todo 10 que sigue debe asumir que todos los irnportes son enteros (vease el Capitulo 5 para el procesamiento de decimales).

2.29 Escriba, cornpruebe y depute un programa COBOL complete que imprima el siguiente informe. Disefie

sus propios datos de comprobacion y verifique que Ia salida es correcta. '

I. Una linea del informe contendra 132 caracteres, distribuidos del siguiente modo: nurnero de cliente, 5 caracteres alfan umericos; 10 espacios; nom bre de clien te, 30 caracteres alfa n umeri 1005; 10 espaci os: numero de producto, 7 caracteres alfanumericos; 5 espacios; cantidad pedida, 4 drgitos; -5 espacios; cantidad enviada, 4 digitos; resto de la linea en blanco.

2. Los datos de entrada estan perforados en tarjetas como sigue: nurnero de cliente, 5 primeras columnas; nombre de cliente, siguientes 30 columnas; nurnero de producto, siguientes 7 colurnnas; cantidad pedida, siguientes 4 columnas; cantidad enviada, siguientes 4 colurnnas; resto de la tarjeta, sin usarse.

3. Al final del inforrne, imprima una llnea con Ia cantidad total solicitada y la cantidad total enviada (a todos los clientes).

4. No se preocupe por los titulos, numeros de pagina, espacios entre lineas, etc.

2.30 Escriba, cornpruebe y depure un programa COBOL complete para irnprimir el siguicnte informe:

numero saldo importe saldo
de c1iente: anterior: del pago: nuevo:
5 5 5
8 espacios 5 espacios 4 espacios 5
caracteres digitos digitos dtgitos La entrada se producira mediante tarjetas perforadas como sigue:

nurnero saldo importe
de diente / anterior: del pago: 63 colurnnas
8 5 4 sin uso
caracteres digitos digitos CAP, 2]

GENERALlDADES DE COBOL

27

EI saldo nuevo se calculacomo saldo anterior menos irnporte del pago. AI final, irr prirna una linea conel importe total pagado.

\

2.31 Escriba, compruebe y depute un programa COBOL complete que imprima el siguiente informe:

La salida. consistira en los siguientes campos espaciados adecuadamente: numero de producto, 8 caracteres; existeneias, 5 digitos; pedido, 5 dfgitos; cantidad disponible, 6 dtgitos.

La entrada se producira mediante tarjetas perforadas como sigue: numero de producto, prirneras 8 colurnnas; existencias, 5 columnas; pedido, 5 columnes; resto de la tarjeta, sin uso.

La cantidad disponible se calcula con existencias + pedido.

Al final, imprima una linea que rnuestre la cantidad total en exisieneia (para todos los productos) y el pedido total (para todos los productos).

2.32 Escriba, compruebe y depure un program a COBOL complete que irnprima el siguiente i~fonne.:

Salida (espaciada adeeuadamente): numero de cuenta en ellibro mayor, 4 caracteres; descripcion, 20 caracteres; irnporte del abono, 5 digitos; importe del debito, 5 digitos.

La entrada se producira por medio de tarjetas perforadas ordenadas de acuerdo con el numero de cuenta del libro mayor: mimero de cuenta en el Iibro mayor, 4 caracteres; descripcion, 20 caracteres; importe del abono, 5 digitos; importe del debito, 5 digitos; resto de la tarjeta, sin uso.

Al final, irnprimir una linea que muestre el irnporte total de los abonos y de los debitos.

2.33 Escriba, compruebe y depure un programa que imprima Ia siguiente Iista desde un ficnero maestro de empleados;

La salida consiste en los siguientes campos, con 5 espacios entre cada campo: identificativo delempleado, 6 caracteres; nurnero de deducciones, 2 dfgitos; salario anual del ana anterior,S digitos; salario anual del ano en CUI'SO, 5 digitos.

La entrada se producira mediante tarjetas perforadas como sigue: identifieativo del ernpleado, colurnnas 1-6; mimero de deduceiones, 7 y 8; salario del ana anterior, columnas 9-13; salario del afio en curso, columnas 14- J 8.

Al Iinal del inforrne, escriba una linea rnostrando los salaries totales del ano anterior, del ano en curse

y el numero de ernpleados procesados, .

2.34 Escriba, compruebe y depure un programa que irnprima el siguienre listado desde eI fichero de cuentas a pagar:

La salida (con 8 espacios entre cada campo) sera: numero de factura, 4 caracteres; fecha de la factura (mm aa dd), 6 digitos; importe de la factura. f dfgitos; descuento, 4 digitosi.importe neto (deducido el descuemo), 5 digiros,

La entrada se producira mediante tarjetas perforadas como sigue: mimero de factura, J -4; imporie de la factura, 5-9; descucnto, IO·J 3; fecha de la facture (mm aa dd), 14-J9.

AI final del informe, irnprima una linea mostrando el total de los importes de las factures, descuento total e importe new total.

2.35 Imprima un infonne con los siguientes campos del fichero de estudiantes de una universidad:

Estudiante # Nombre AnD # Asignaturas aprobadas

La entrada se producira mediante tarjetas perforadas como sigue: numero de estudiante, 1~9; nombre, 10-29; afio (I, 2, 3 6 4), 50; numero de asignaturas pasadas, 31-33.

AI final, imprima el numero total de asignaturas pasadas por iodos los estudiantes.

2.36 Irnprima etiquetas de correo con el siguiente formate:

M. MOUSE

103! EDGECOMB AVE. YORK, PA 17403

La entrada se producira mediante tarjetas perforadas como sigue: nombre, 1-20;. calle, 21-40; ciudad, 41-51; estado, 52-53; codigo postal, 54-58.

[Nola: (1) Se necesiiaran Ires Iineas de informacion (Problema 2.21). (2) Cad a registro de entrada generara tres line as de salida. (3) Use

28

GENERAUDADES DE COBOL

[CAP. 2

WRITE IMPRIME-L1NEA

FROM NOMBRE-LINEA-TRABAJO AFTER ADVANCING 2 LINES

para dejar una linea en blanco despues de cada etiqueta.]

2.37 Escriba un program a que imprirna cheques can el siguiente formate:

CHEQUE #

LIBRADO

IMPORTE (dolares)

.'

La entrada se producira en forma de tarjetas perforadas que contendran el nombre del librado en las columnas 1-20 y el importe {PIC 9(5)] en las colurnnas 21-25. Los numeros de los cheques los debe generar el propio progrilma,comenzando por#- J 00, despues J 10, 120, 130, etc. Despues de imprimir todos los cheques, debe imprirnirse una linea can el importe total desernbolsado,

2.38 Escriba un prograrna que imprima un inforrne bancario a 'partir de la siguiente entrada mediante tarjetas: nornbre de cliente, 1-20; saldo en cuenta de ahorro, 21-25; saldo en cuenta corriente, 26-30; saldo en certificados de depositos, 31- 3 5. La salida debe consistir en una linea para cada cliente, rnostrando el nornbre del cliente y 1,05 diversos saldos, Al final del informe, irnprima una linea que rnuestre el sal do total en cuentas de ahorro, corrientes y certificados de deposito, EI formato del informe se deja a su eleccion.

Capitulo 3

Div,ision de identificaci6n (IDENTIFICATION DIVISION)

3.1 NOTACION SINTACfICA

Esta seccion no s610 se aplica a 1a division de identificacion, sino tam bien a todo e.l programs

en COBOL. ,._ ,

La sintaxis es la estructura grarnatical del lenguaje. Por ejemplo, la frase enespanol "carnina hombre el calle por" tiene varies errores sintacticos en cuanto al orden de las palabras que la eonforman. Si un program a en COBOL contuviera errores sintacticos, el cornpilador no podria traducir las frases invalid as al lenguaje maquina. Se imprimirian mensajes de diagnostico del error en el listado del programa fuente, de esta manera el programador puede encontrar y corregir los errores.

Se utiliza una notaei6n comun para representar la sintaxis correcta en COBOL. Los convenios aceptados son los siguientes:

(I) Corchetes ( ] encierran un grupo de elementos opcionales. Se puede utilizar algun elemento a ninguno.

(2) Llaves II encierran un grupo de elementos 0 bien uno s610. Necesariamente hay que utilizar uno de ellos,

(3) Letras mayusculas se utilizan para las palabras reservadas y las letras minuscules se utilizan para los nombres definidos par el programador,

(4) Las palabras reservadas (en mayusculas) subrayadas deben aparecer en la frase; las palabras

reservadas sin subrayar pueden omitirse, .

(5) Los puntos suspensivos ( ... ) se usan para identificar elementos que pueden repetirse cualquier numero de veces.'

E.JEMPLO 3.1 Examine la notaci6n de la instruceion MOVE de Ia division de procedirnientos:

MOVE {identificador-I} TO'd 'fi d 2 [id 'Ii d 3J

. I' I I entuca or-, 1 enu lea 0[- ...

--- itera -.-.

La palabra "MOVE" esta subrayada y no encerrada entrecorchetes; por tanto es obligatoria, A continuacion, el prograrnador puede elegit entre usar un identificativo 0 un literal (los unicos literales vistos hastael momento estan encerrados entre cornillas). Puesto que estos dos elementos estan en minusculas, la eleccion entre uno u otro es a gusto del prograrnador. Despues la palabra dave "TO·' es obligatoria y tambien el identificativo que Ia ha de seguir (nornbre definido por el programador). De hecho a "TO" puede seguirle cualquier numero de identificativos definidos por el programador.

EJEMPLO 3.2 Vamos a ver algunos ejemplos de esta instruccion:

• MOVE ENTRADA·NOMBRE-CLIENTE TO SALfDA-NOMBRE,CLIENTE

Correcto: forma "MOVE rdentificativo-! TO identificauvo-Z".

• MOVE "EXCESO DE PAGO" TO AREA-MENSAJES-FACTURA TIPO·DE-CUENTA

Correeto: forma "MOVE literal TO identificativo-Z identificativo-S",

• MOVE IMPORTE-DESCUENTO TO DESCUENTO-FACTURA AND DESCUENTO-ENVIO

Incorrecto: la palabra "AND" no debe escribirse entre los identificativos DESCUENTO-FACTURA Y DESCUENTO·ENVIO_

29

30

DIVISION DE IDENTIFICACION

[CAP. 3

• MOVE SALUDOS TO "HOLA"

Incorrecto: aunque "HOLA" es un literal valido, los literales no pueden seguir a "TO".

• MOVE "HOLA" VENTAS-BRUTAS TO TOTAL-VENTAS

Incorrecto: tan s610 un literal a identificativo puede aparecer entre "MOVE" y"TO".

3.2 SINTAXIS DE LA DIVISION DE IDENTIFICAClON

La division de identificacion cuya funcion se describio en la Seccion 2.1 tiene el formato sintactico que aparece en la Figura 3-1 .

IDENTIFICATION DIVISION. PROGRAM-ID. nombre de prograrna, [AUTHOR. comentario.] [INSTALLATION. comentario.]

[DA TE- WRITTEN. comentario. J

iDA TE-COMPILED.]

[SECURITY. comentario.]

Fig. 3-1

Observese que solo la cabecera de division y el parrafo PROGRAM-ID. son obligatorios.

EJEMPLO 3.3 Compare las lfneas 1-8 del Ejernplo 2.1 con el modele sintactico de la Figura 3-1.

3.3 PARRAFO PROGRAM-IO

,.

El parrafo PROGRAM-ID se usa para dar un nombre al prograrna objeto. Cuando el prograrna esta totalmente depurado se coloca en un fichero permanente en disco (en la biblioteca de programass y se Ie distingue por el nornbre que figuraba en el parrafo PROGRAM-ID (que figura en el directorio de la biblioteca). Coneste nombre se accede al prograrna para volver a ejecutarlo, sin necesidad de com pilar.

EI nornbre que se de en el parrafo PROGRAM-ID esta sujeto a las reglas generales de los nornbres definidos por el programador (Seccion 2.4). Sin embargo, en el sistema IBM OSjVS y en otros sistemas, el cornpilador COBOL convierte automaticamente un nombre COBOL en un nornbre de programa para la biblioteca. Par tanto, para evitar confusion, es rnejor restringirse a las reglas de los nombres de program a en la biblioteca, Dichas reglas en Ia version COBOL de IBM OS/VS son: (i) no mas de 8 caracteres, (ii) Ietras y digitos solamente, (iii) el primer earacter debe ser UDa letra.

EJEMPLO 3.4 En los sistemas IBM:

• INVENTORY-REPORT se transformarta en INVENTOR

(5610 se penniten 8 earacteres, por 10 cual el cornpilador trunca cl nornbre),

• INVRPT no se alterana,

• PRINT-PAYCHECKS Sf transforrnana en PRINTOPA

(s610 Sf perrniten 8 caracteres: el guion no esta permitido y par ella el compilador 10 transforma en 0).

e I"UPDATE-RECEIV ABLES se transformmia en AOUPDATE

(solo se permiten 8 caracteres; los guiones se transforman en 0 y adernas el nornbre tiene que empezar con una letra, por 10 cual"I" se convierte en la letra "A"),

• RECVUPDT no se alierarta.

CAP. J]

DIVISION DE IDENTIFICACION

31

3.4 PARRAFOS OPOONALES

E1 resto de los parrafos de la division de identificacion son opcionales y las frases de cada parrafo se tratan como 51 fueran comentarios, Puesto que estes parrafos pueden contener la informacion que desee el programador, los nombres de parrafo deben reflejar claramente de que informacion se trata.

EJEMPLO 3.5

• INSTALLATION. INVESTIGACION Y DESARROLLO.

El parrafo INSTALLATION indica en que centro de calculo se desarrollo el programs (una gran ernpresa dispondra probabtemente de muchos sistemas de computadoras en distintos lugares),

• DA TE-COMPILED.

EI parrafo DATE-COMPILED (fecha de eompilacion) es especial, puesto que la computadora y no el prograrnador 10 rellena.

• SECURITY. AUTORIZADO SOLO AL PERSONAL-VEASE MANUAL DE POLIClA 3D!.

EI parrafo SECURITY (Seguridad) sirve para establecer las consideraciones en esta materia para eI programa

y los ficheros Que process. '

A continuacion de los diversos parrafos de Ia division de identificacion, se recomienda que el programador incluya una serie de comentarios (con "*,, en la columna 7) dando una breve descripcion de 10 que el prograrna lleva a cabo. De este modo, se ahorrara tiernpo y dinero cuando otro prograrnador tenga que realizar modificaciones en eI program a COBOL tmantenimienta de programas). El fin de la documentacion de un programa es permitir que sea mas facil leerlo, entenderlo y modificarlo.

EJEMPLO 3.6 Critique la siguiente division de idenuficacion de un programa que va a ejecutarse en un sistema IBM OS/VS;

PROGRAM-ill. IMPRIME-ETIQUET AS-CORREO. DATE-WRITTEN. OCT 1983.

Desde un punto de vista tecnico, 10 unico que esta mal es que falta 'Ia cabecera de division ("IDENTIFICATION DIVISION"). Sin embargo: (I) IMPRIME-ETIQUETAS-CORREG no esta en el format a que requiere la biblioteca y par tanto el cornpilador 10 transformara en IMPRJMEO. (2) Es una practice no aconsejable que se omitan los parrafos AUTHOR, INSTALLATION, DATE-COMPILED, SECURITY y los comentarios con una breve descripcion del programa. Documentar apropiadamente es fundamental en cualquier program a COBOL

Preguntas de repaso

3.1 iCua1 es eI fin de la division de identificacion?

3.2 Defina: (a) sintaxis, (b) errores sintacricos, (c) rnensajes de diagnostico de error.

3.3 Explique Ja noracion sintactica usada en este libra.

3.4 ~CmH es la sin taxis de la division de identificacion?

3.5 l.Que partes de la division de identificacion son obligatorias? l.Que otras paries son opcionales?

3.6 Explique las reglas de la escritura de la division de identificacion,

3.7 l.Cwil es la funcion de una biblioteca de prograrnas?

3.8 lCuales son las reglas para el parrafo PROGRA.M-ID en los sistemas IBM?

3.9 Explique la informacion que se da en cada uno de los parrafos opcionales de la division de idemiflcacion.

3.10 (.Que es el mantenimiemo de programas? l.Que tiene que ver con la division de identificacion?

32

DIVISION DE IDENTIFICACION

[CAP. 3

Problemas resueltos

3.11 Dado el siguiente modelo de Ia instruccion PERFORM para la division de procedimientos:

PERFORM { nombre-de-parr~!O-I} [{ THROUGH} {nombre-de-parrafO-2}]

nombre-de-seccion-I THRU nornbre-de-seccion-Z .

--

{ identificador-l} TIMES entero-l

.'

indicar cuales de las frases siguientes son sintacticamente correctas:

(a) PERFORM CALCULA-IMPORTE-DESCUENTO 10 TIMES

(b) PERFORM LEE-REGISTRO-EMPLEADO THROUGH IMPRIME-CHEQUE NUMERO-DE~EMPLEADOS TIMES

(c) PERFORM CHECK-DEPENDIENTE TO CALCULO-DEDUCCIONES NUMERO-DE-DEPENDIENTES TIMES

(d) PERFORM THRU CODIGO-POSTAL 9 TIMES

(e) PERFORM CHECK-CODIGO-DEPART THROUGH CONTADORCODIGO TIMES

(j) PERFORM IMPRIME-LlNEA-FACTURA 7

(a) Correcto, (b) Correcto. (e) Incorrecto: "THROUGH" 0 "THRU"deben usarse en lugar de "TO". (d) Incorrecto: se requiere bien nornbre-de-parrafo-I 0 nornbre-de-seccion-I (PERFORM V AUDACION-NOMBRE THRU CODIGO-POSTAL 9 TIMES). (e) Incorrecto: necesariamente nombre de parrafo 2 0 nombre de seccion 2 deben seguir a "THROUGH" 0 "THRU" (PERFORM CHECKCODIGO-DEPART THRU lMPRlME-TOTAL~DEPART CONTADOR"qmIGO TIMES). (j) lncorrecto: "TIMES" es obligatorio (PERFORM IMPRIME-LINEA-FACTURA 7 TIMES).

3.12 ~CuaIes de los nornbres siguientes son apropiados para el parrafo PROGRAM~ID?

(a) INFORME-MENSUAL- VENT f\S

(b) IMPRIME· BALANCE-SITUACION,CUENT AS-DE-CLlENTES

(a) Correcto: el nombre es descriptive de 10 que el programa hace, EI cornpilador COBOL de IBM 10 transformarta en "INFORMEO", par 10 que seria preferible usaf una abreviatura de 8 caracteres (por ejernplo, "INMENVEN"),

(b) Incorrecto: el nornbre usado en PROGRAM-ID debe ser un nornbre definido por el usuario valido (maximo 30 caracteres),

3.13 Escriba la division de identificacion de un programa COBOL que imprima cheques. Toda la informacion de los cheques esta en un fichero en disco creado por el prograrna nominas.

En la solucion observese el usa de lineas en blanco para destacar PROGRAM-ID.

IDENTIFICATION DIVISION.

PROGRAM-ID. IMPCHEQ.

AUTHOR, MIKE PERELMAN, PROGRAMADOR JUNIOR, NOMINAS INSTALLATION. XYZ COMPANY, BALTIMORE, MD, DATE-WRITTEN. 7 SEPTIEMBRE, 1983.

DA TE"COMPILED.

SECURITY. VEASE MANUAL DE POLlCIA 7A3 MANElO DE CHEQUES DE LA rOMPANTA

CAP. 3)

DIVISION DE IDENTIFlCACION

33

.. IMPCHEQ IMPRIME CHEQUES PARA LOS EMPLEADOS COPIANDO LA .. INFORMACION DE LAS NOMINAS Y A CONTENIDA EN EL FICHERO

.. DEL DISCO PAGOCHEQ. IMAGE EN FORMULARIOS PARA CHEQUES .

.. EL OPERADOR PUEDE DETEI'jER LA IMPRESION EN CASO DE DlFICULTAD . .. IMPCHEQ TrENE ADEMAS LA SIGUIENTE INFORMACION DE CONTROL:

# CHEQUES .

.. IMPRESOS, # CHEQUES DUPLlCADOS, TOTAL IMPOR TE.

Ejercicios de programacion

3.14-3.23 Modificar los Problemas 2.29"2.38 para recoger los nuevas conocimientos sobre la division de identificaci6n.

Capitulo 4

Division del entorno (ENVIRONMENT DIVISION)

4.1 SINTAXIS DE LA DIVISION DEL ENTORNO

La division del entomo, euyo proposito general se describio en la Sec~lon 2.1, tiene la forma sintactica que aparece en la Figura 4-L (Los numeros de linea sirven tan solo como indice de referencia.) Se aprecia que la division del entorno (ENVIRONMENT DIVISION) se compone de la seccion de configuracion (CONFIGURATION SECTION) y de la seccion de entrada-salida (INPUT-OUTPUT SECTION). La prirnera seccion incluye los parrafos computadora fuente (SOURCE-COMPUTER), computadora objeto (OBJECT-COMPUTER) y nombres especiales (SPECIAL-NAMES). La otra seccion contiene unicamente el parrafo control de ficheros (FILE-CONTROL). Recuerde que las cabeceras de division (linea I en la Fig. 4-1), seccion (lineas 2 y 14) y parrafo (lfneas 3, 4,6 y IS) deben escribirse comenzando en el margen A; las demas cosas deben escribirse a partir del margen B. En ocasiones todo el parrafo esta en Ja misrna linea que el nornbre, mientras que en otras ocasiones esto no sucede. E1 cuidado aspecto visual debe servir de gufa (veaseel Ejemplo 4.1). Aqul solo se comentan las entradas aplicables a los ficheros organizados secuencialmente (Seccion 4.5).

(I) (2) (3) (4) (5) (6) (7) (8) (9)

(10)

(1 !)

ENVIRONMENT DIVISION. CONFIGURATION SECTION.

SOURCE·COMPUTER. nornbre-computadora [WITH DEBUGGING MODE].

OBJECT-COMPUTER. nombre-cornputadora .

[PROGRAM COLLATING SEQUENCE IS nombre-alfabetico],

[SPECIAL-NAMES. ..

[nombre-funcion ~ .nombre-cobol] ... nombre-alfabetico IS

STANDARD-J

NATIVE

[{THROUGH}literaJ_2 1

literal-l THRU . . ..

ALSO literal-3 [ALSO literal-s]

[ [f THROUGH} literal-S II

literal-S THRU

ALSO literal-7 [ALSO literal-S]

(12)

(13) (14) (IS) (16) (17) (18) (19) (20)

(21 ) (22

.J

[rNPUT-OUTPUT SECTION. FlLE·CONTROL.

SELLECT nornbre-ficbero

ASSIGN TO nombre-externo [ORGANIZA TIONS IS SEQUENTIAL] [ACCESS MODE IS SEQUENTIAL] [FILE STATUS IS nombre-datos]

[RESERVE entero [AREAS]] . AREA

.J

Fig .. 4-1

1,1

CAP. 4]

DIVISION DEL ENTORNO

35

EJEMPLO 4.1 00031 00032 00033 00034 00035 00036 00037 00038 00039 000110 00041 00042 00043 00044 00045 00046 00047 00048 00049 00050 00051 00052 00053 00054 00055 00056 00057 00058 00059 00060 00061 00062 00063 00064

ENVIRONMENT DIVISION. CONFIGURATION SECTION.

SOURCE-COMPUTER. IBM·370 WITH DEBUGGING ~lODE. OBJECT -COMPUTER. IBM- 370

PROGRA.M COLlA.TING SEQUENCE IS CUSTOMER-NUMBER-COOE-SEQUENCE.

SPECIAL-NAMES.

COl IS PARTE-SUP-PAGINA CUSTOMER-NUMBER-CODE-SEQUENCE IS "3" THRU "9"

112"

"0" THRU "1"

INPUT -OUTPUT SECTION. FILE-CONTROl.

SELECT FICHERO- VENTAS - CLI ENTES ASSIGN TO VENCLIEN ORGANIZATION IS SEQUENTIAL ACCESS IS SEQUENTIAL

FILE STATUS IS ESTADO-VENTAS

SELECT INFORME-VENTAS ASSIGN TO INFOVENT

ORGAN I ZA 11 ON IS SEQU EN11 Al ACCESS IS SEQUENTIAL

Fl LE STATUS IS ESTADO-INFORME

4.2 CONFIGURATION SECTION: PARRAFO SOURCE COMPUTER

La CONFIGURATION SECTION describe la computadora usada para compilar y ejecutar el programa. El parrafo SOURCE~COMPUTER ernpieza can el "nornbre de la computadora" utilizada para la eompilacion, Esta frase se trata como si fuera un comentario por el compilador y sirve unicamente como documentacion del programa, La forma de introducir el "nombre de la cornputadora" varia de acuerdo Con el sistema; para los sistemas IBM-.370, seria suficiente "IBM-370".

EI parra fa SOURCE-COMPUTER admite la [rase opcional "WITH DEBUGGING MODE" (linea 3, Fig. 4-1), Con esta frase, todas las !ineas de depuraci6n (rnarcadas con una "D" en la columna 7) se traducen al programa objeto y por tanto se tienen en cuenta durante 1a ejecucion, Si no se incluye esta [rase, las !ineas de depuracion se tratan como comentarios (aunque se imprirnen en el listado del programa fuente, no se traducen a1 programa objeto y par tanto no tienen ejecta durantela ejecucion), La depuracion de prograrnas se {rata extensamente en el Capitulo 9.

EJEMPLO 4.2

• SOURCE-COMPUTER. lBM-370-158.

El numero de modele de Ja computadora '·'158" se puede anadir opcionalmente a "lBM·370". AI no haber especificado "WITH DEBUGGING MODE", las frases marcadas con "D" en Ja columna 7 se trataran como cornentarios y per tanto nose ejecutaran, El nombre de la cornputadora se trata como un comentario.

• SOURCE-COMPUTER, IBM-370

WITH DEBUGGING MODE.

Las !ineas de depuracion pasaran a formar parte del prograrna objet a (como cualquier otra instruceion) y se ejecutaran, Se escribe esta frase en una linea aparte para aumentar !a apariencia visual.

36

DIVISION DEL ENTORNO

[CAP. 4

4.3 CONFIGURATION SECTION: PARRAFO OBJECT-COMPUTER

EI parrafo OBJECT -COMPUTER indica la computadora usada para ejecutar el prograrna objeto.

El nombre de la cornputadora sirve s610 como documentaci6n del programa; por 10 general es el mismo que se introduce en el parrafo SOURCE-COMPUTER.

Recuerde que la computadora almacena informacion registrando cada caracter en forina de numero binario. Al considerar el orden de los numeros correspondientes a cada caracter, se obtiene un orden para los caracteres propiamente dichos que se conoce con el nombre de secuencia de orden de caracteres. Esta secuencia depende, por supuesto, del sistema de codificacion utilizado; las seeuencias correspondientes a los sistemas EBCDIC y ASCII aparecen en el Apendice B.

EJEMPLO 4.3 En la secuencia de orden de EBCDIC,

espacio < $ < # < A < B <Z<O < 9 EI orden de estos mismos caracteres en ASCII es:

espacio < "# < $ < 0 < 9 < A < B < Z

Ambos sistemas, EBCDIC y ASCII, respetan en sus secuencias el orden alfabetico; "ZAG" < "ZIG" ..

El parrafo O~JECT-COMPUTER tiene una entrada opeional (linea 5, Fig. 4-1) que permite aI programador elegir la secuencia de orden de caracteres que debera usarseen la ejecucion del prograrna. Si se omite esta entrada, se asumira un sistema por defecto (como par 10 general se desea la secuencia que se asume par defecto, no suele hacerse usa de esta facilidad), La secuencia de orden detennina el resultado que se obtendra al comparar 0 clasificar datos alfanurnericos.

EJEMPLO 4.4 Exarninar el Ejemplo 4.1. En el parrafo OBJECT·COMPUTER (lineas 36-38), "IBM·370" se trata como un comentario y "CUSTOMER-NUMBER"CODE-SEQUENCE" es In secuencia de orden que utilizara el programa. Esta secuencia se define en las lineas 42-45 de"! parrafo SPECIAL·NAMES.

3<4<5<6<7<8<9<2<0<)

4.4 CONFIGURATION SECTION: PARRAFO SPEdAvNAMES

Este parrafo tiene tres funcicnes principales, que. se estudiaran individualmente ..

Nomenclatura de canales de control de carro

Cuando se imprimen datos en papel continuo, las posiciones de los diversos elementos en el formulario se definen por medio de los canales de control del carro. En la Figura 4-2 estos canales se indican mediante agujeros en una cinta de papel que acompafia a1 propio formulario; mas comunmente, en las irnpresoras modern as los canales se controlan electr6nicamente. En cualquier caso, la linea 7 de la Figura 4-1 se utiliza para asignar un nornbre COBOL a un canal de control del carro para la impresora. En Ia version de COBOL IBM OSjVS el "nombre de funei6n" de un canal consiste en la letra "C" seguida de un numero de canal can dos dlgitos: COl, C02, C03, ... , C09. El "nombrecobol" de un canal tiene que ser un nombre definido por el programador.

EJEMPLO 4.5

COl IS PARTE-SUPERIOR-FACTURA C02 IS FECHA-FACTURA

C03 IS DIRECCION-CLIENTE

C04 IS LINEA-ELEMENTO

En este caso, los canales 1-4 sc asocian con nom bres definidos par el usuario que se usaran en la di vision de procedimiento para controlar el formate de la salida por irnpresora, Observese que solo hay un punta para todo el parrafo SPECIAL-NAMES (linea 13 de la Fig. 4·1) -no hay puntos entre las distintas entradas. Asimismo, observese el caracter descriptive de los nornbres definidos por el programador.

CAP. 4]

DIVISION DEL ENTORNO

37

1--- - -
I
,
I
I 1- --
I J
I
I I
I I I--
I I I
I I ,
I [ I
I I I
I I I
I I I
I I I .-
I I I I
I
I I I I FACTUIt.!\ EJEMPLO
.. direccion J
dienie

..... feclia !
area

linea de elemento (una linea .,
.. por cada elemento comprado)
\
"
.,
..... I area
~ para total canal I 2 3 4

Fig. 4-2

Definicion de la(s) secuencia(s) de orden

Si se especifica una secuencia de orden en el parrafo OBJECT-COMPUTER, debe definirse en el parrafo SPECIAL-NAMES (lineas 8-12 de la Fig. 4-1). EI nombre del alfabeto (linea 8) del parrafo SPECIAL-NAMES debe coincidir can el que aparece en el parrafo OBJECT-COMPUTER (linea 5). La secuencia de ordcn asociada can el nombre del alfabeto se define como' una de las siguientes:

• STANDARD-l

(linea 9, Fig. 4-1), secuencia de orden ASCII

• NATIVE

(linea 10, Fig. 4-1), secuencia de orden EBCD1C (sistema por defecto en las computadoras IBM-3 70)

• definido par el prograrnador

(Iineas J 1-12, Fig. 4-1). EI programador puede crear su propia secuencia de orden escribiendo para elIo los caracieres en el orden deseado. Para abreviar se pueden especificar rangos de caracteres (Uli1eral-l THROUGH literal-Z"), la paridad entre dos caracteres se indica can la opcion ·'ALSO".

Nuevarnente, rernarcarernos que can independencia de los canales de control del carro y la secuencia de orden que se especifique en el parra fa SPECIAL-NAMES, 5610 hay un punta a1 final del parrafo total.

EJEMPLO 4.6

• + • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • , • • • ' • • • • • ~ • • • • • , • • • • • • • • • ~ • + • • • • • • • • • •

OBJECT-COMPUTER. lBM-370 COLLA TL'\iG SEQUENCE IS COOIGO-OROE -RAPIDG.

COl IS PARTE-SUP-FORMULARIO C02 IS AREA-DOMICILIO-CORREO

CODIGO-ORDEN-RAPIDO IS

""I" THRU" "

"A" THRU "C' "H" ALSO "0"

38

DIVISION DEL ENTORNO

[CAP. 4

Aquf, en el parrafo SPECIAL-NAMES, se define la secuencia de orden CODIGO-ORDEN-RAPIDO como sigue: 1<1 <K<L<M <N <D<G<F<E <A <B<C<H=O

"H" v "0" se consideran equivalentes en esta secuencia de orden. Los. caracteres no especificados se supone que siguen a "H" y "0." en el orden normal par defecto, es decir, vendrian los caracteres especiales, letras minusculas, despues "P", etc.

La consola del operador y las palabras SYSIN y SYSOUT

En el parrafo SPECIAL-NAMES se puede opcionalmente asignar (linea 7, Fig. 4-1) nombres COBOL a ciertos ficheros del sistema procesados en la division de procedimientos par las instrucciones ACCEPT y DISPLAY (vease el Capitulo 6). Los detalJ.es exactos de este mecanisme varian de un sistema operativo a otro, pero en el sistema IBM OS(VS COBOL "l\CCEPT" permite la entrada de un registro desde 1a consola del operador (pantalla CRT 0 terminal de impresion utilizado par el operador de Ja cornputadora para comunicarse con el sistema operativo) 0 desde el fichero SYSIN. La instruccion "DISPLAY" permite la salida de un registro bacia la consola del operador 0 bacia el fichero SYSOUT.

EJEMPLO 4.7 SPECIAL-NAMES.

COl IS PARTE-SUP-FACfURA

CONSOLE IS DlSPOSITIVO-MENS-OPERADOR.

EI nombre-de-funcion "CONSOLE" es una palabra reservada de IBM. "DISPOSITIVO-MENS-OPERADOR" es el nombre mediante el eual el resto del programa fuente en COBOL se referira a la consola del operador en las instrucciones ACCEPT y DISPLAY:

DlSPLA Y UPON DlSPOSITIVO-MENS-OPERADOR

ACCEPT FROM DISPOSITIVO-MENS-OPERADOR

EJEMPLO 4.8

SPECIAL-NAMES.

CO 1 IS AREA-CABECERA C02 IS AREA- TOTAL

SYSIN IS FUNCION-SEL-ENTRADA BACK-ORDER-CQDING-SEQUENCE IS STANDARD-1

"FUNCION-SEL-ENTRADA" es el nombre elegido en COBOL para la entrada en eJ ficbero especial SYSIN (palabra reservada IBM). "FUNCION-SEL-ENTRADA" se utilizara en las instrucciones ACCEPT de la division de procedimientcs:

ACCEPT ... FROM FUNCION-SEL-ENTRADA

EJEMPLO 4.9 SPECIAL-NAMES.

SYSOUT IS ERROR-LOG.

La salida de la instruccion DISPLAY en la division de procedirniento ira al fichero de salida especial del sistema SYSOUT (palabra reservada del COBOL de IBM). EI nombre COBOL para SYSOUT sera "ERROR-LOG"; por ejemplo:

DISPLA Y ... UPON ERROR-LOG

4.5 SECCION DE ENTRADA~SALIDA (INPUT-OUTPUT SECTION)

Todo el procesamiento de datos en COBOL se basa en la manipulaci6n de registros en ficheros, La informacion de Ja entrada (con independencia del dispositive que se utilice) se analiza como si se compusiera de registros de entrada procedentes de unfichero de entrada. La informacion de salida (can independencia del dispositive que se utilice) se contempla como un conjunto discrete de

CAP, 4]

DIV[S[ON DEL ENTORNO

39

registros de salida que se envian a unfichero de salida. A causa de la posibilidad de acceso a cualquier registro en cuestion de rnilisegundos (Seccion 1.4), las unidades de almacenamiento auxiliaren disco (generalmente llamadas perifericos de acceso directoi pueden soportar ficheros cuyos registros son de entrada y salida en el misrno programa COBOL (ficheros de enirada-salidai. Un registro con posibilidad de acceso directo puede primero ser tratado como entrada, despues modifiearse y par ultimo devolverse como salida a su prirnitiva posicion en el disco. Esta operaci6n se conoce como aaualizacion en su lugar.

EJEMPLO 4.10 Un programa COBOL que imprima los cheques con eJ sal ario de los empleados procesara por 10 menos 3 ficheros:

(I) Un fichero de entrada cuyos registros (tarjetas) cornengan como campos eJ identificativodel ernpleado

y las horas semanales trabajadas, ~

(2) La informacion de los cheques se destinara ala irnpresora para que sea impresa en formularies preparados al efecto. Cada linea irnpresa se considera un registro del fichero de salida.

(3) EJ salario-hora de cada ernpleado podna obtenerse de un fichero maestro de empleados, Conforme se da entrada a la tarjeta de un empleado, el registro correspondiente en el fichero maestro se traera desde eI disco. Probablemente, algunos campos del fichero' maestro de empleados se actualicen durante el proceso; por ejernplo, salario anual bmw hasta Ja fecha severa incrementado adecuadamente. El registro de empleado una vez actualizado se devolvera a SU posicion primitiva en eJ disco (borrando el contenido anterior del registro), De este modo, eI tichero en disco sirve a la vez para entrada y salida en el prograrna. Esta snuacion es cornun al trabajar con ficheros contcnidos en dispositivos de almacenamiento auxiliar.

Laseccion de entrada-salida contiene un unico parrafo COBOL, el parrafo FILE·CONTROL, que contiene una instruccion SELECT por cada fichero (de entrada, de salida 0 de entrada-salida) procesado por el programa, Cada instruccion SELECT se cornpone de varias clausulas y finaliza can un punto (veanse las lfneas 16·22, Fig. 4-1).

SELECf nornbre-fichero (linea 16)

EI nombre del fichero es un nornbre COBOL definido par el programador. Debe ser tan descriptivo como sea posible; par ejemplo, "FICHERO-MAESTRO·EMPLEADOS" es mas apropiado que "FICHERO-l". Este nombre se usara para referirse al fiehero en todo el resto del programs.

EJEMPLO 4 .. 11

INPUT-OUTPUT SECTION. FILE-CONTROL.

SELECT FICH ERO- VENT AS-CLIENTES SELECT INFORME·VENTAS ...

(extraido del Ejemplo 4.1), Este programa procesaria exacramente dos ficneros (puesio que s610 hay dos instrucciones SELECT), Que aparecerian en el resto del programs bajo los nombres FICHERO· VENTAS·CLlENTES e INFORME-VENTAS.

ASSIGN TO ncmbre-externo (!inea 17)

La clausula ASSIGN TO asigna ficheros a perifericos de entrada/salida (1/0). A cada fichero se Ie da un "nombre externo" que asocia e) fichero COBOL con las instrucciones del Ienguaje de coni rot de trabajos 0 las ordenes del sistema opera/iva (veanse la Seccion 1.9 y el Problema 4.45). EI contenido y formate de las instrucciories dellenguaje de control de trabajos varian mucho de una computadora o sistema operativo a otro; debe aprender e! modo de escribir nombres externos en su sistema de computadoras. En la version de COBOL para IBM OS/VS e! nornbre externo tiene que tener de 1 a 8 letras 0 digitos, siendo el primer caracter una letra. El prograrnador en COBOL debe procurar conocer cuanto mas rnejor sobre el Jenguaje de control de trabajos,

40

DIVISION DEL ENTORNO

[CAP. 4

EJEMPLO 4.12

INPUT-OUTPUT SECTION. FILE-CONTROL

SELECT F1CHERO- VENT AS-CLIENTES ASSIGN TO VENCLlEN ...

SELECT INFORME-vENTAS

ASSIGN TO INFOVENT ...

(extraido del Ejemplo 4. I). En este caso, al fichero denorninado F1CH ERO- VENTAS·CLlENTES se-Ie asigna el nombre externo VENCUEN y al fichero INFORME-VENTAS se le asigna el nombre INFOVENT. Estes nombres extern os se utihzaran en las instrucciones del lenguaje de control de trabajos 0 en las ordenes del sistema operative, las cuales proporcionaran informacion adicional score los dispositivos I/O necesarios para

procesar estes ticheros. ;.\

Organizacion y modo de acceso secuenciales (lineas 18, 19; Opdonal)

EI lenguaje COBOL gira en torno al procesamiento de ficheros registro a registro. Sin embargo, se adrnite flexibiiidad respecto de que registros se procesan primero, segundo, etc. Hay dos formas fundarnentales de procesamiento de ficheros 0 modos de acceso ..

Acceso secuencial. Los registros se procesan de acuerdo con su orden fisico en el dispositivo de entrada-salida. No se precisa mas informacion del fichero que la que contienen los registros que 10 cornponen. Este tipo de procesamiento es posible con cualquier clase de dispositive de entradasalida.

Acceso al azar. Los registros se procesan en el orden previsto en el programa, que puede ser diferente del de su ubicacion fisica en el dispositive correspondiente. Este tipo de procesarniento s610 es posible con perifericos de acceso directo. Puede suceder que se necesite informacion adicional sobre el fichero para ayudar a localizar los registros de datos que requiera el prograrna,

Organization de ficheros es un termino usado en relacion con el metodo usado para almacenar registros (y cualquier informacion adicional precisa para la localizacion de los registros) en un fichero. EI COBOL estandar ofrece aJ prograrnador ires posibilidades:

Organizacion secuenciai. Los ficheros organizados secuencialmente se pueden alrnacenar en cualquier dispositive I/O. EI fichero se cornpone solo de los registros de datos propiarnente dichos, que tienen que ser procesados en el orden de su colocacion en el dispositive I/O.

Organizaclon lndexada. Los ficheros indexados tienen que ubicarse en dispositivos de acceso directo. Se pueden procesar secuencialmente 0 al azar, Cuando se procesan secuencialmente, los registros se van capturando en orden creciente de una clave predefinida (campo cuyo contenido identifica unitariamente cada registro del fichero; por ejemplo, el nurnero de cuenta). Cuando se procesan al azar, se identifica a los registros haciendo uso de la misma clave. EI fichero se compone no s610 de los registros de datos propiamente dichos, sino tarnbien de registios indice que contienen informacion sobre la ubicacion de cada registro en el fichero, Si se conoce el campo clave de un registro, se puede Iocalizar rapidamente el registro buscando para ella en los registros indice del fichero. De este modo se hace posible el procesarniento al azar,

Organizacion relativa. Los ficheros relatives no se usan con la misrna frecuencia que los ficheros secuenciales 0 indexados. II fichero se compone solo de los registros de datos nurnerados I, 2, 3, ... , y por medio de este numero de registro el proceso se puede pro cesar al azar. Dado que en los negocios se acostumbra a idenrificar la informacion contenida en los registros por su claw y no por el numero de registro, los ficheros relatives se utilizan solo cuando se necesita un acceso extremadarnente rapido. Los ficheros relatives deben almacenarse en dispositivos de acceso directo.

CAP, 4)

DIVISlON DEL ENTORNO

41

La instruccion SELECT proporciona un rnedio para que el programador en COBOL pueda elegir la organizacion del. fichero y el modo de acceso en cada fichero manejado por el programa, Esta eleccion es fundamental. Por 10 general, los ficheros que requieren un prooesamiento al azar se crean con organizacion indexada; los ficheros que solo requieren procesarniento secueneial se crean con organizacion secuencial y los ficheros que pueden precisar procesamiento al azar 0 secuencial se crean con organizacion indexada (adecuada para ambos modos). El procesamiento secuencial de ficheros se estudiaen el Capitulo II; los ficheros indexados y relatives caen fuera del ambito de este libro.

EJEMPLO 4.13

INPUT-OUTPUT SECTION. FILE-CONTROL.

SELECT FICHERO-VENTAS-CUENTES ASS1GN TO VENCLIEN ORGANIZA TJON IS SEQUENTIAL ACCESS IS SEQUENTIAL.

SELECT INFORME- VENT AS

ASSIGN TO lNFOVENT ORGANIZA nON IS SEQUENTIA L ' ACCESS IS SEQUENTIAL.

'. J~

(extraido del Ejernplo 4.1). Hay instrucciones SELECT para dos ficheros, FICHERO-VENTAS-CUENTES (nornbre externo, VENCLlEN) e INFORME-VENTAS (nornbre cxterno, INFOVENT).

• ORGANIZA TION IS SEQUENTIAL

Esta entrada se podria haber ornitido porque la organizacicn secuencial se asurne por defecto, Otras posibilidades senan ORGANIZATION IS INDEXED y ORGANIZATION IS RELA Tl VE.

• ACCESS MODE IS SEQUENTIAL

Esta entrada tarnbien podria haberse omitido porque el modo de acceso secuencial se asume por dcfecto. Las otras posibilidades hubieran side ACCESS MODE IS RANDOM y;ACCESS MODE IS DYNAMiC. Los ficheros organizados secuencialmente solo perrniten el acceso secuencial; otros rnodos de acceso exigen que ia organizacion sea indexada 0 relativa.

FILE STATUS IS nombre-de-datos (linea 20; Opcional)

Conceptualmente, la rnanipulacion de los registros de un fichero que se hace en la division de procedimientos en COBOL es muy simple. La instruccion READ trae un registro a la CPU para su procesamiento desde el dispositive de entrada 0 desde el alrnacenarniento auxiliar; WRITE transfiere un registro desde Ja memoria de la CPU al dispositive de salida 0 al alrnacenamiento auxiliar, Antes de que puedan usarse las instrucciones READ 0 WRITE con los registros de un fichero, tiene que utilizarse la instruccion "OPEN ... " para preparar (abrir) el fichero para su procesamiento (vease el Ejemplo 2.5). De forma analoga, tiene que usarse la instruccion "CLOSE ... " para desactivar (cerrar) el fichero despues de haber ejecutado todas las instrucciones READ y WRITE.

En la vida real, sin embargo, es facil que se cometan equivocaciones. Por ejernplo, una instruccion OPEN puede fallar porque la descripcion del fichero en el programa fuente en COBOL es inconsistente con la descripcion en las insrrueciones correspcndientesen el lenguaje de control de trabajo. o bien una instruccion WRITE para anadir un registro a un fichero organizado secuencialmente en disco puede fallar porque no quede espacio vacio en el disco. De hecho, en los prograrnas en COBOL se preve que ciertas instrucciones puedan fallar. Asi, para procesar los registros de un fichero secuencial, se diseriara un programa que permanezca Jeyendo (READ) registros, procesandolos y sacando los resultados hasta que la instruccion READ falle porque todos los registros hayan sido leidos (condicion de ji n de ficheros.

Por tanto, los programas deben estar preparados para manejar las condiciones excepcionales que puedan tener lugar durante el procesamiento del fichero, La instruccion SELECT proporciona un media para obtener respuesta sobre el exito 0 fallo de cada instruccion que manipula un fichero,

42

DIVISION DEL ENTORNO

[CAP. 4

Esta respuesta se produce en forma de un c6digo que se situa en un area de datos despues de cada instruccion OPEN, CLOSE, READ y WRITE. EI codigo indica si la ejecuci6n de la instruccion tuvo o no exito, y si no 10 tuvo, las razones del fallo.

EJEMPLO 4.14

INPUT-OUTPUT SECTION. FI LE-CONTRO L.

SELECT VENT AS-MENSUALES ASSIGN TO MENSVEN

FILE STATUS IS ESTADO-VENTAS-MENSUALES

: -, .. ~

En la clausula FILE STATUS, el prograrnador ha elegido el nombre "EST ADO- VENT AS-MENSUALES" para el area de datos que se usara para obtener respuesta con relacion aI resultado de las instrucciones OPEN, READ, WRITE Y CLOSE ejecutadas en la division de procedimientos. "ESTADO-VENTAS-MENSUALES" debe adernas definirse en la division de datos como un area que puede contener des caracteres cuyo significado sera el exito 0 fracaso de cualquier operacion realizada con el fichero. Consulte su manual para conocer el significado de FILE 5T A TUS en su sistema.

Muchos program adores en COBOL can experiencia no definen area para el FILE STATUS en los ficheros secuenciales, puesto que hay otros modes de cornprobar el resultado (ex ito a fracaso) de las operaciones de entrada/salida (vease el Capitulo 1 I).

RESERVE entero AREAS (linea 21; Opcional)

Esta clausula se puede incluir para aumentar la velocidad de procedimiento cuando el acceso es secuencial (vease la Seccion 5.8).

4.6 EJEMPLOS DE LA DIVISION DEL ENTORNO

EJEMPLO 4.15

ENVIRONMENT DIVISION. CONFIGURATION SECTION. SOURCE-COMPUTER. IBM-370. OBJECT-COMPUTER. lBM-370. INPUT-OUTPUT SECTION. FILE-CONTROL.

SELECT VIEJO-MAESTRO-INVENT ARlO ASSIGN TO VIEJOMAE.

SELECT NU£vO-MAESTRO-INVENTARIO ASSIGN TO NUEVOMAE.

SELECT FICHERO- TRANSACCIONES ASSIGN TO TRANSACC.

Esta es la division del entomo de un program a para procesar un fichero secuencial Los registros del FICHEROTRANSACCIONES se usaran para actualizar la informacion de los registros de VIEJO-MAESTROlNVENTARlO. Los registros conteniendo la informacion actualizada se ubicaran en el fichero NUEVOMAESTRO-INVENTARIO .. Los Ires ficheros son secuenciales (asuncion por defecto cuando se amite la clausula ORGANIZATION IS ... ) y se procesan secuencialrnente (asuncion par defecto cuando se omite la clausula ACCESS MODE IS ... ). Puesto que todos los ficheros son secueuciales, las areas deterrninadas en la clausula FILE STATUS son opcionales yaqui no se utilizan (las condiciones excepcionales se cornprueban durante los procesos de entrada/salida con merodos de la division de procedi rnientos). La secuencia de orden de caracteres es la que se asume par defecto en el sistema de que se irate (EBCDIC en los sistemas IBM-370). Como no se especifica DEBUGGING MODE, las lineas con una "D" en la columna 7 se trataran como comentarios y no tend ran efectos en la ejecucion del programa. Los nornbres de las clausulas ASSIGN TO tienen el Iorrnato apropiado para los sistemas IBM OS/YS ("VIEJOMAE". "NUEVOMAE'· y "TRANSACC" contienen de I a 8 caracteres, letras 0 dtgitos, el prirnero de los cuales es una letra),

CAP. 4]

DIVISION DEL ENTORNO

43

EJEMPLO 4.16

ENVIRONMENT DIVISION. CONFIGURA TION SECTION. SOURCE·COMPUTER. IBM-370

WITH DEBUGGING MODE.

OBJECT-COMPUTER. IBM-370. SPECIAlrN AMES.

COl IS PARTE-SUP-CHEQUE CO2 IS AREA UBRADO

C05 IS AREA-IMPORTE

INPUT-OUTPUT SECTION. RLE-CONTROL.

SELECT FICHERO-NOMINAS

ASSIGN TO NOMINAS ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS ESTADO-NOMlNAS

SELECT FICHERO-CHEQUES

ASSIGN TO CHEQUES ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS ESTADO-CHEQUES

Cornen tari os:

(1) DEBUGGING MODE esta "activado"; por tanto, las !ineas con "0" en La columna 7 se traduciran y tendran efecto durante la ejecucion

(2) Observese el uso de los puntos estructurados al final de las instrucciones SPECIAL-NAMES y SELECT. (3) Los canales 1, 2 Y 5 del. mecanisme de control de cerro de la irnpresora se usaran para posicionar el carro en las tres areas de los cheques irnpresos por este programa,

(4) EJ programa usa dos ficheros. La informacion de entrada la torna del FICHERO-NOMINAS y los cheques los imprime en eI FICHERO-CHEQUES. Los nornbres externos (NOMINAS y CHEQUES) iienen formate IBM OS;VS.

(5) Las clausulas ORGANIZATION y ACCESS MODE se incluyen, aunque su valor par delecto es SEQUENTIAL. Se actua asf para mejorar la documentacion del prograrna.

(6) Ambos ficheros tienen asociadas areas para el codigo de FlLE ST ATUS; estas areas pueden cornprobarse despues de eada operacion en el fichero realizada en Iadivision de procedimientos, ESTADONOMINAS y ESTADO-CHEQUES deben definirse en la division de datos. Estas areas podrian haberse ornitido y manejarse las condiciones excepcionales de otro modo (vease el Capitulo J 1).

Preguntas de repaso

4.1 Describa la sintaxis de la division del entorno ..

4.2 i,Cual es el proposito de la CONFIGURATION SECTION?

4.3 i,CuaJ es el proposito de la INPUT-OUTPUT SECTION?

4.4 Describa las reglas de escritura de Ia division del entorno,

4.5 I Explique el proposito de las "hneas para la depuracion ". i,C6mo se ven afectadas por el parrafo SOURCEI COMPUTER?

44

DIVISION DEL ENTORNO

(CAP, 4

4.6 i,Cual es eJ significado de "secuencia de orden de caracteres"?

4.7 i,Como se implernerua la secuencia de orden por defectc?

4.8 i.Que debe hacerse para utilizar una secuencia de orden distinta de la que se asurne por defecto?

4.9 i,Que tres funciones tiene el parrafo SPECIAL-NAMES?

4.10 i,Que es el "papel continuo"?

4.1] i.Que es una cinta para el control del carro de la impresora?

4.12 Explique como se relacionan los canales de control del carro con las .distintas areas en un forrnulario

en papel continuo. ..'

4.13 i.Que utilizan las impresoras modernas en lugar de las cintas de control del carro?

4.14 En los sistemas IBM, i,que secuencias de orden de caracteres se Ilarnan STANDARD-l y NATIVE?

4.15 i,Que es un terminal con consola para el operador de la cornputadora?

4.16 i.Que funcion realizan las instrucciones ACCEPT y DISPLAY de la division de procedirniernos? i.Como se relacionan con el parrafo SPECIAL-NAMES de la division delentorno y configuracion?

4.17 Explicar el significado de los siguiernes "nornbres de funcion" en el sistema IBM OSjVS: (a) SYSIN, (b) CONSOLE, (el SYSOUT, (d) COl, (e) C04.

4.18 i.Que son los dispositivos de acceso directo?

4.19 i,Que es la operacion "actualizacion en su lugar"?

4.20 De algunos ejernplos de registros y ficheros,

4.21 Describa cada parte de la instruccion SELECT yexplique 10 que realiza:

4.22 i,Que es el lenguaje de control de trabajos (JCl)?

4.23 i,Que es el lenguaje de orcenes del sistema operativo?

4.24 i.Como se relaciona ia clausula ASSrG N TO de la i nstruccion SELECT can el lenguaje de control de trabajos?

4.25 Explique en que consiste el procesamieruo (acceso) aleatoric de un fichero.

4.26 Explique en que consiste el procesarniento (acceso) secuencial de un fichero,

4_27 Defina el concepto "organizacion de un fichero",

4.28 Explique brevernente el significado de fichero organizado secuencialrnente,

4.29 Explique brevernente el significado de organizacion indexada de un fichero,

4.30 Explique brevernente cl significado de organizacion relativa de un fichero.

4.31 i.Por que es tan irnportante la eleccion de Ia organizacion de un fichero?

4.32 Explique cuando debe elegirse organizacion secuencial y cuando organizacion indexada para un fichero.

4.33 Explique brevemenie la funcion de las instrucciones OPEN. READ. WRITE Y CLOSE de la division de procedirnicntos,

4.34 Diga algunas "condiciones excepcionales" que puedan producirse durante el procesam ierno de ficheros.

CAP.4J

DIVISION DEL ENTORNO

4S

4.35 ~De que. modo la clausula FILE STATUS de la instruccion SELECT se relaciona can eJ manejo de condiciones excepcionales?

4.36 l. Que es la condicion' fi n de fichero "?

Problemas resueltos

.'

4.37 Escriba la secci6n de configuraci6n (CONFIGURA TJON S'ECTlON) de un programa que correra en un sistema lBM-370. Las Iineas de depuracion seran traducidas al prograrna objeto y se debera usar la secuencia de orden de caracteres EBCDIC:

CONFIGURATION SECTION.

SOURCE-COMPUTER. IBM-370 WITH DEBUGGrNG MODE.

OBJECT-COMPUTER. IBM·370. '

o

CONFJGURA TION SECTION. SOURCE-COMPUTER. IBM-370

WITH DEBUGGING MODE.

OBJECT·COMPUTER. IBM-370

PROGRAM COLLATING SEQUENCE IS EBCDIC-ORDER.

SPECIAL-NAMES.

EBCDIC-ORDER IS NATIVE.

4.38 Dar todas las variaciones legales de la linea 5, Figura 4-1.

(I) PROGRAM COLLATING SEQUENCl: IS nombre-alfabeto; (2) PROGRAM SEQUENCE IS nombre-alfabeto; (3) PROGRAM SEQVENCE nombre-alfabetc; (4) COLLATING SEQUENCE IS nombre-alfabeto; (5) SEQUENCE IS nornbrc-alfabcto; (6) PROGRAM COLLA TINQ SEQUENCE nombre-alfabeto; (7) COLLATING SEQUENCE nornbre-alfabeto; (8) SEQUENCE nombre-alfabeto;

(9) linea en blanco. .

4.39 La impresora tiene que rellenar cheques. Los canales de control de carro se preparan para los cheques como sigue: canal 1, fecha; canal 2, librado; canalS, importe, El programa tambien imprirne en la consola del operadorel numero total de cheques impresos, Escriba el parrafo SPECIAL·NAMES para este prograrna.

SPECIAL·NAMES.

COl IS AREA-FECHA-CHEQUE C02 IS AREA-L1BRADO-CHEQUE C05 IS AREA-fMPORTE-CHEQUE

CONSOLE IS DlSP-CONTROL-NUM-CHEQUES

4.40 Escriba la CONFIGURA TION SECTION para un program a que uti lice la siguiente secuencia de orden de caracteres: B, J, A, K, ... , W, C, ... , I, 7, 1, 0, 2, ... , 6, 9. El programa esta total men te depurado y se va a compilar y ejecutar en una computadora IBM-370.

CONFIGURATION SECTION.

SOURCE-COMPUTER. IBM-370.

OBJECT-COMPUTER. IBM-370

, COLLATING SEQUENCE IS ORDEN-BIN-ALMACEN.

46

DIVISION DEL ENTORNO

[CAP. 4

SPECIAL-NAMES.

ORDEN-BIN-ALMACEN IS

"K" THRU "W" "C" THRU "1"

"2" THRU "6"

"9"

4.41 Escriba la CONFlGURA TION SECTION de un prograrna que va a ejecutarse en un sistema IBM-370 con La secuencia de orden de caracteres ASCII en lugar de la EBCDIC que.se asumini por defecto .. Las lineas de depuracion deben traducirse.

CONFIGURATION SECTION.

SOURCE-COMPUTER. IBM-370 DEBUGGING MODE. OBJECT-COMPUTER. IBM-370 SEQUENCE ASCII-ORDER. SPECIAL-NAMES.

ASCII-ORDER IS ST ANDARD·l.

4.42 Las impresoras, perforadoras de tarjetas y los lectores de tarjetas se denominan perifericos de registro tlnico. Explique los conceptos campo, registro y fichero en relacion con (a) un paquete de tarjetas; (b) un infonne de ventas impreso en papel continuo.

(a) Cada tarjeta es un registro; el paquete complete es un [ichero; cada parte de informacion par separado es un campo (por ejemplo, nurnero de articulo, cantidad, etc.).

(6) £1 conjunto de todas las lineas irnpresas en el informe es el fichero; cada linea es un registro; cada porcion de informacion de una lmea es un campo (incluyendo los espacios en blanco de separaci6n).

4.43 Describa como se puede actualizar en su Jugar un registro de un fichero en disco relative a una cuenta de ahorro en un banco.

Considerese un banco que disponga de terminales en linea (los term in ales estan conectados a Ia cornputadora del banco por rnedio de cable 0 mediante la telecomunicacion), Si un cliente desea realizar un ingreso 0 reintegro de una cuenta de ahorro, el operador escribira en el terminal el numero de cuenta, , el tipo de transaccion y el impone. Esta informacion es procesada por un programa que accede al azar al registro del fichero que contiene el saldo de la cuenta de ahorro de ese cliente (para permitir eI acceso al azar, el fichero probablemente esiara indexado 'per el n.umero de la cuenta de ahorro). El programa actualizara despues el saldo sumaodo 0 restando el importe de la transaccion. Por ultimo, el registro actualizado volvera a ocupar su primitive lugar en el disco.

4.44 Clasifique los siguientes nombres de ficheros eo COBOL:

(a) SELECT REPORT ASSIGN TO ...

(b) SELECT FICHERO-TNFORME ASSIGN TO ...

(c) SELECT INFORME-PROD-ESCASOS ASSIGN TO ... (d) SELECT FICHERO-ENTRADA ASSIGN TO ...

indicando si son correctos, correctos pero incompletos 0 incorrectos.

(a) lncorrecto: "REPORr' es una palabra reservada, (b) Correcto, aunque pobre: "FICHEROINFORME" no es muy descriptive. (c) Correcto. (d) Correcto, aunque pobre: probablernente habra varies ficheros de entrada.

4.45 Cada fichero procesado par un programs COBOL debe describirse con una instruccion SELECT en la seccion de entrada/salida. ~Cua! es el proposito de ASSIGN TO ... en la instruccion SELECT?

La division del entorno y configuration (al tratar del equipo que rodea al program a) es la parte del programa COBOL que mas posiblemente cambie al pasar de Ull sistema a otro. Darernos des ejernplos:

DIVISION DEL ENTORNO

47

(0) La version de COBOL IBM OS/VS (para los sistemas IBM-370) precise que cada fichero sea descrito adicionalmente en la instruecion DD (definicion de datos) del lenguaje de control de trabajos, E! nombre que aparece en la clausula ASSIGN TOes el nexo de union entre [a instruccion DD y el programa fuente en COBOL. ASi, en

SELECT MAESTRO-INVENTARIO ASSIGN TO MAESINVE ...

Ia instruccion DD asociada sera de la forma:

Instruccion DD IIMAES1NVE DD UNIT =DISK,

II VOL=SER~ABCI23,

/ I DfSP=OLD,

1/ DSNAME=MAESTRO.INV.AI7

Explieacion

el diagnostico es un disco nombre del disco ABCl23 el fichero ya existe

nombre del fichero en Ia etiqueta '.\

La presencia del nombre ("MAESINVE") al principio de la instruccion DD es obligatoria,

(b) La version de COBOL Burroughs (para el sistema B 191 0) emplea un lenguaje de ordenes al sistema operative en vez de un lenguaje de control de trabajos, Un usuario situado ante una consola CRT puede escribir un programa COBOL y despues mediante las ordenes al sistema operative hacer que se compile. Suponga que el programa fuente tiene Ia instruccion SELECT:

SELECT INVENTARIO ASSIGN TO DISK

Los nom bres de fichero en el sistema B 19 10 estan li rni tados a un maximo de 10 caracteres (" INVENTARIO"). La palabra "DISK" que aparece despues de ASSIGN TO es reservada e indica aJ sistema que "INVENT ARlO" reside en el dispositive del disco magnetico, En el COBOL del sistema BI910 es el nornbre del fichero "lNVENTARIO" 10 que sirve de nexo de union entre la definicion del fichero en el programs y las instrucciones en 01 lenguaje de ordenes del sistema operative, Si el PROGRAM-ID fuera "ACTUALINVE", Sf podna escribir [a siguiente orden para ejecutar el program a cornpilado:

EXECUTE ACTUALINVE; FILE INVENTARIO NAME INVMASA 17

La orden EXECUTE dice al sistema operative que ejecute el programs objeto indicado. La clausula FILE conecta el fichero "INVENTARIO" descritoen el programs COBOL con el fichero en disco llamado "INVMASA 17". AI eiecutarse el.prograrna se actualizara el fichero en disco denominado INVMASAI7.

,.

4.46 Indique la organizacion y modo de acceso que elegiria para los ficheros que se rnanipularan en las siguientes aplicaciones: (a) un fichero maestro de Iimites de eredito de una compania que permite a otros comerciantes llarnar y alterar el limite de creditos de una tarjeta de cliente; (b) un fichero en cinta de nombres y direcciones de una lista de correos; (c) un fichero de co bros pendientes COn registros de Ia cantidad adeudada por cada cliente.

(a) Organizacion: indexada (por el nurnero de tarjeta de credito). Acceso: aJ azar,

(b) Organizacion: secuencial (unica posiblecuando no se dispone de un periferico de aceeso directo), Acceso secuencial (unico posible con cinta),

(c) Organizacioa: indexada (par nurnero de cliente) 0 bien secuencial (cJasificado por nurnero de diente).

Acceso: El fichero debe actualizarse con informacion sobre pages y nuevas cornpras. Si la organizaciones indexada, la actualizaci6n puede hacerse al azar. Si los pages y cornpras tambien se clasifiean par nurnero de diente, la actualizacion se puede llevar a cabo con acceso al azar Q secuencial, Los informes impresos (como un inventario per fechas) se llevaran a cabo con acceso secuencial.

4.47 i,Que es la condition "fin de fichero"?

EI concepto "fin de ficaero" se aplica cuando un fichero se procesa secuencialmente. EI primer registro del fichero se Jee pri rnero, despues el segundo, etc. Si el fichero tu viera 7.000 registros, la condicion "fin de fichero" teudrfa lugar cuando falla el intento de leer el registro 7.001.

4.48 Escriba la division delentomo completa para un program a que imprirna cheques. Usara un fichero de entrada en cinta con registros conteniendo el tiempo trabajado sernanal clasificado

48

DIVISION DEL ENTORNO

[CAP .. 4

par nurnero de empleado y otro fichero de entrada en disco can registros maestros para cada ernpleado tambien clasificado por numero de empleado, Todos los ficheros se procesan secuencialmente y el programa ya esta depurado. Los canales de control del carro no se usan en este program a, aunque se pueden imprimir algunos mensajes en la consola del operador de la computadora.

ENVIRONMENT DiVISION.

CONFIGURA TION SECTION.

SOURCE-COMPUTER. IBM-370.

OBJECT-COMPUTER. IBM-370.

SPECIA L- NAMES.

CONSOLE IS DISPOSITIVO-MENSAJES-OPERADOR

INPUT-OUTPUT SECTION.

FILE·CONTRO L.

SELECT FICHERO- TlEMPO-SEMANAL ASSIGN TO TIEMSEMA ORGANIZATION IS SEQUENTIAL ACCESS IS SEQUENTIAL

FILE STATUS IS ESTADO·FlCHERO-TIEMPO

SELECT FICHERO-MAESTRO-EMPLEADOS ASSIGN TO MAESEMPL ORGANIZATION IS SEQUENTIAL ACCESS IS SEQUENTI.~L

SELECT FICHERO-CHEQUES ASSIGN TO CHEQUES

ORGANIZA TION IS SEQUENTIAL .ACCESS IS SEQUENTIAL

((,Olvid6 que los cheques irnpresos constituyen un fichero y par tanto requicren una instruccion SE· LECT?). Observe: (i) los puntos estructurados y las ltneasen blanco; (ii) la omision de las clausulas DEBUGGING MODE y COLLATING SEQUENCE; (iii) Ia asociacion del nornbrc COBOL "DISPOSITIVO-MENSAJES·OPERADOR" con la consola (CONSOLE) del sistema; (iv) que al FICHEROTIEMPO-SEMANAL se Ie asocia un area (denominada ESTADO-FICHERO-TIEMPO y mas tarde definida en la division de datos) en Ia cual se erea un codigo despues de cada operacicn can el fichero,

Ejercicios de programacidn

4.49-4.58 Modifiq ue los Pro blernas 2.29- 2.38 pa ra reflejar su mej or co n oei miemo de la division del ento rno,

Capitulo 5

Divisi6n de datos (DATA DIVIS.ION)

5.1 ESTRUcrURA DE LA DIVISION DE DATOS

.'

La Figura 5~ 1 indica la estructura de la division de datos (DATA ;'DIVISION), cuya Iuncion principal se describio en la Secciori 2.1.

DATA DIVISION.

[ FILE SECTION. 1

[descripcion de fichero 'descripcion de registro] ...

[ WORKING-STORAGE SECTION. J

[descripcion de variables 0 "registros"], ..

Fig. 5-1

Las dos secciones (FILE SECTION y WORKING-STORAGE SECTION) son opcionales, En la practica, las dos son necesarias porque casi todos los programas utilizan al rnenos un fichero y algunos contadores, variables" banderas, etc., de la WORKING-STORAGE SECTION. En el Ejemplo 5.1 se da Ia division de datos correspondiente a la division del entomo que aparecia en el Ejemplo 4.1.

EJEMPLO 5.1 00066 '

00067

00068

00069

00070

00071

00072

00073

00074

00075

00076

00077

00078

00079

00080

00081

00082

00083

00084

00085

00086

00087

00088

00089

00090

00091

00092

000\)3

00094

00095

00096

nnnQ7

DATA DIVISION.

FILE SECT! ON.

FD FICHERO-VENTAS-tLIE~TES

BLOCK CONTAINS 0 RECORD~ RECORD CONTAINS 80 CHARACTERS LABEL RECORDS ARE STANDARO

01 REGISTRO-VENTAS-CLIENTES. 05 NUM-CL1 ENTE- VENTAS

05 IDENT-CLIENTE

05 IMPORTE-VENTAS

05 RElLENO

PIC X(4). PIC X(6).

PIC S9(7)V99. PIC X(51).

FD INFORME-VENTAS

RECORD CONTAINS 132 CHARACTERS LABEL RECORDS ARE OMITTED

01 LINEA-INFORME-VENTAS

PIC X(132).

WORK 1 NG- STORA.GE SEer ION.

01 AREA-FIN-FICHERO-ESTADO.

05 FIN·FICHERO-VENTAS-CUENTES PIC X. 88 NO-MAS-REGISTROS-CLIENTES

05 ESTADO-VENTAS PIC XX.

05 ESTADO-INFORME PIC xx.

VALUE "T".

50 DIVISION DE DATOS [CAP. 5
00098 01 AREAS-TOTAL-¥-COMPARACION.
00099
00100 05 NUM-VIEJO-CLIENTE PIC X(4).
00101 05 TOTAL-C 1I ENTE PIC S9(9)V99 COMP-3.
00102 05 GRAN-TOTAL PIC S9(9)V99 COMP-3.
00103
00104 01 AREA-CONTAOORES.
00105
00106 05 CONTAOOR-LIN[AS PIC S9(3) COMP-3.
00107 05 CONTAOOR-PAGINAS PIC 59(5) COMP-3.
00108 05 SAL TO-OE- PAGINA PIC 59(3) COMP-3.
00109
00110 01 CABECERA-LINEA.
00111
00112 05 FILLER PIC X(lO) \;, VALUE SPACES.
00113 05 FILLER PIC X(20)
00114 VALUE "VENTAS POR C LI ENTES" .
00115 05 FILLER PIC X(lO) VALUE SPACES.
00116 05 CONTADOR-PAGINAS PIC ZZ,ZZ9.
00117 05 FILLER PIC X(86) VALUE SPACES.
00118
00119 01 L! NEA- ERRORES.
00120
00121 05 ERROR-NUM-CLIENTE PIC X(4).
00122 05 FILLER PIC X(2) VALUE SPACES.
00123 05 FILLER PIC X(22)
00124 VALUE "** DESORDENADO **".
00125 -OS FILLER PIC X(104) VALUE SPACES.
00126
00127 01 LINEA-TOTAL.
00128
00129 05 FILLER PIC X(30) VALUE SPACES.
00130 05 TOTAL-CLIENTE PIC $$$$,$$$,$$$.99-,
00131 05 FILLER PIC XX VALUE " =".
00132 05 BANOERA-GRAN-TOTAL PIC X.
00133 05 FILLER PIC X(83) VALUE SPACES.
00134
00135 01 LINEA- SAL! OA.
00136 .,
00137 05 NUM-CLIENTE-SAlIDA PIC X( 4) _
00138 05 Fl LLER PIC X(IO) VALUE SPACES.
00139 05 IO-VENTAS PIC X(6).
00140 05 Fl LLER PIC X(10) VALUE SPACES.
00141 05 IMPORTE - SAL! OA PIC $$,$$$,$$$.99-.
00142 05 FILLER PIC X(88) VALUE SPACES. 5.2 SECCION DE FICHEROS (FILE SECfION)

La seccion de ficheros debe contener una entrada de descripcion de fichero ("FD") por cada fichero que aparezca en una instruccion SELECT de la division del entomo.

EJEMPLQ 5.2 En el Ejernplo 4. I,

linea 52: SELECT FICHERO- VENTAS-CLlE TES linea 59: SELECT I lFORME-VENTAS

se refieren ados ficheros que son procesados par cl programa. Las clausulas FD correspondientes en el Ejernplo 5.1 estan en las lmeas 70 y 82.

A continuacion de la informacion contenida en FD, cada fichero debe tener al menos al nivel Gl una entrada de descripcion del registro, describiendo los registros del fichero. La estructura sintactica de la clausula FD aparece en la Figura 5-2.

CAP. 5]

DIVISION DE DATOS

51

FD nombre-fichero

[ . {CHARACTERS}]·

BLOCK CONTAINS [entero-! TO] entero-2 RECORDS

lRECORD CONTAINS [eotero-3 TO] entero-4 CHARACTERS]

LABEL {. RECORD IS } {ST At-.TDARD } -

-- --- . RECORDS ARE OMITTED

[DATA { RECORD IS. } nombre-de-datos-J [nombre-de-datos-c] ... ]

--_. . RECORDS ARE . .-

LINAGE IS {nOmbre-.de-ctatos-s}. LINES

entero-S

[WITH FOOTING AT {nOmbre-. de-datos-S -}] entero-6

LINES AT TOP {nombre-de-datos-7} --. - - entero- 7

LINES AT BOTTOM {no. rnbre-de-datos-S } entero-S ;

Fig. 5-2

La cabecera de descripcion del fichero ("FD") debe escribirse comenzando en el margen A; el resto de las entradas se escribiran en el margen B. EI "nombre de fichero" (el mismo que aparece en Ia instruccion SELECT para el fichero) es la primera entrada. El resto de las entradas se pueden escribir en cualquier orden. Las Iineas en blanco (a lmeas de comentarios en blanco) y los desplazamientos deben usarse para aumentar la facilidad de lectura, Hay un punta unico, situado a1 final de la instruccion FD, y es mejor que dicho punta sea estructurado.

EJEMPL05.3

DA T A DIVISION.

FILE SECTION.

FD INFORME·SEMANAL-PERSONAL

BLOCK CONTAINS I RECORD

RECORD CONTA1NS 132 CHARACTERS LABEL RECORDS ARE OMITTED

DATA RECORD IS REGISTRO-INFORM.E-PERSONAL LINAGE IS 50 LINES

WITH FOOTING AT 45 LINES AT TOP 8 LINES AT BOTTOM s

01 REGISTRO-INFORME-PERSONAL...

Observe el uso de lfneas en blanco, desplazamiento de Iineas y punta estructurado. En la descripeion del registro que sigue a la instruccion FD se detalla cada campo del fichero. El nombre que sigue a FO ("INFORMESEMANAL-PERSONAL") debe ser el rnismo que se utilizo en la instruccion SELECT para el fichero,

En las Secciones 5.3 a 5.7 que siguen, se cornentan las clausulas de la instruccion FD que aparecen en la Figura 5-2, una par una. Tenga en cuenta que el abjeto de cada clausula es proporcionar informacion con vistas al alrnacenamiento de los registros del fichero en el dispositive correspondiente,

DIVISION DE DATOS

[CAP, 5

5.3 FD BLOCK CONTAINS ...

Los ficberos almacenados en disco 0 cinta frecuentemente se agrupan en bloques para hacer mas eficiente la utilizacion del espacio y aurnentar 1a velocidad de procesarniento. En la operaci6n de bloqueo se distingue entre registros logicos (procesados uno cada vez porel programa) y registros fisicos (unidad de informacion transferida desde 0 hacia el dispositive de entrada/salida).

EJEMPLO 5.4 Un fichero no bloqueado en cinta 0 en disco SI! cornpone de registros logicos separados por espacios interregistros:

espacio

Registro logico

espacio

Registro 16gico

espacio

Registro logico

t.".=...

espacio

En un fichero bloqueado, los registros logicos se agrupan en registros fisicos 0 bloques separados por espacios inI erbloques:

espacio

Registro logico

Registro logico

Registro logico

espacio

Registro Iogico

Registro logico

Registro 16gico

espacio

Registro fisico

EI fichero bJoqucado indicado tiene tres registros logicos por cada registro fisico; se dice que ellaclOr de bloqueo es 3 (BF=3), en el fichero no bloqueado BF = 1. En cualquier fichero, todos los caracteres entre dos espacios se manipulan de una vez, Por tanto, durante un procesarniento secuencial, el fichero bloqueado requerira solo 1/3 de las operaciones de entrada/salida que hubiera requerido el fichero no bloqueado -con la consecuencia de que el tiernpo de posicionarniento en la cinta 0 disco se reducira aproximadamente a 1/3 del tiempo ernpleado en eJ otro caso-, Como en eJ fichero bloqueado hay 1/3 de los espacios en blanco de! fichero no bloqueado, tambien se optimiza eluso del espacio disponible,

EJ.EMPLO 5.5 Supongase que se desea procesaraleaioriamenie un fichero no secuencial de 20.000 registros, Mas aun, supongase que por terrnino medio solo' la rnitad de los registros del fichero son procesados en una ejecucion, Si el fichero no estuviera bloqueado, se necesitanan alrededor de 10.000 operaciones de entrada para obtener los 10.000 registros logicos que han de procesarse,

Si el fichero 1 uviera un factor de bloqueo de 10,. todavia necesitarfa aproxirnadamente 10,000 operaciones de entrada para conseguir los 10.000 registros logicos que rienen que procesarse (porque en el procesamienro al alar el siguiente registro logico no tierie que estar necesariarnente en el bloque que acaba de leerse). EI tiernpo utilizado para transferir los datos que no van a utilizarse se malgasta, Aunquc el bloqueo puede aurnentar la velocidad de un procesamieruo secuencial, sin embargo disrninuye la velocidad en uri procesarniento al azar. No obstante, algunos ficlieros que vayan a procesarse 31 azar puede que permanezcan bloqueados para ahorrar espacio en el disco.

La clausula BLOCK CONTAINS indica si el fichero esta 0 no bloqueado y especifica el factor de bloqueo. El sistema operative autornaticarnente ensamblara los registros logicos en bloques para la salida y analizara los bloques, distinguiendo los registros logicos en el proceso de entrada. La division de procedimientos siempre se escribe para trabajar con registros logicos individuates sin tener en cuenta el factor de bloqueo BF (vease la Seccion 5.8). Existen tres posibiiidades:

Fichera no bloqueado. En este case, la clausula BLOCK CONTAINS se amite en la instruccion FD:

FD INFORME-SEMANAL-PERSONAL RECORD CONTAINS 132 CH.".RACTERS LABEL RECORDS ARE OMITTED

01 REGISTRO-INFORME-PERSONAL ..

Como el bloqueo s610 es posible en medias magneticos como la cinta 0 el disco, los ficheros de Ia impresora no son bloqueados,

CAP.5J

DJVISION DE DATOS

53

Bloques de longitud fija. Utilizar la clausula BLOCK CO NT AINS entero-Z CHARACTERS:

FD FlCHERO-MAESTRO-INVENT ARlO BLOCK CONTAINS sao CHARACTERS RECORD CONTAINS 100 CHARACTERS LABEL RECORDS ARE STANDARD

a utilizar BLOCK CONTAINS entero-2 RECORDS:

FD FICHERO-MAESTRO-INVENT ARlO BLOCK CONTAINS 5 RECORDS RECORD CONTAINS 100 CHARACTERS LABEL RECORDS ARE STANDARD

.'

En el primer ejemplo, el factor de bloqueo BF es

500 bytes/bloque 5 . t /bl

-----'----'---=-- = regts ros oque

100 bytes/negative

mientras que en el segundo ejemplo la longitud de bloque es

(5 registros/bloq ue) (I 00 bytes/registro)= sao bytes/bloq ue Las dos formas son completarnente equivalentes,

Bloques de longitud l'a ria ble: (l.Que ocurre cuando los registros 16gicos de un fichero son de longitud variable?). Utilizar:

BLOCK CONTAINS entero-l TO entero-? CHARACTERS RECORD CONTAINS entero-3 TO entero-4 CHARACTERS

(vease eJ Ejemplo 5.6) 0 use

BLOCK CONTAINS entero-Z RECORDS

RECORD CONTAINS eutero-3 TO entero-4 CHARACTERS

(vease el Ejemplo 5.7).

EJEMPLO 5.6

FD FICHERO·MAESTRO·CLlENTES

BLOCK CONTAI 5 220 TO 420 CHARACTERS RECORD CONTAI S SO TO 100 CHARACTERS LABEL RECORDS ARE ST ANDARO

-'

La Figura 5·3 indica Ia estructura de un bloque de longitud variable (BF=3) en la version de COBOL para e! sistema IBM OSjVS.

I I. J I. I I R .
.. . espacio BOW I RDW I R~gl.stro I RDW ! R:g~Slro I RDW i ~gl.strO espacio " .
I I logico I J logico I" I IOgIcO
I I. I I _l BDW2paiabm de descripcion de bloque (insertada autornaticameme par el compilador) que especifica la longitud, incluyendo

los 4 bytes del BOW.

RDW == palabra de descripcion del registro (autornaticamente insertada par

el eornpilador) que especifica

la longitud del registro logico

aJ que precede, inc1uyendo los 4 bytes de la ROW.

Fig. 5-3

~ 54

DIViS!ON DE DATOS

[CAP. 5

La ciausuia RECORO CONTAINS excluye la ROW. pero la clausula BLOCK CONTAINS ... CHARACTERS incluve La BOW y In ROW. Par tanto, el bloque mas corto del fichero contiene

220-4. ,

--. -=4 registros 50+4

y el bJoque mas largo contiene

420~4 .

--. =4 registros 100+4

En resumen, BF=4 para el fichero,

EJEMPLO 5.7

FO FICHERO-MAESTRO-CLIENTES BLOCK CONTAINS 4 RECORDS

RECORD CONTAINS 50 TO 100 CHARACTERS LABEL RECORDS ARE STANDARD

En este caso, al contrario que en el Ejemplo 5.6, el factor de bloqueo se fija exphcitamente: BF =4. Las longitudes maxima y minima del bloque son

4(50+4)+4=220 bytes

4( I OO+4)+4~420 bytes

y se ve que la instruccion FD es equivalente a la del Ejernplo 5.6

5.4 FD RECORD CONTAINS ...

La aplicacion de esta clausula a registros de longitud fija y variable ya se ha estudiado en la Seccion 5,3, La.clausula es opcional porque el compilador puede determinar la longitud del registro a partir de la description del mismo en el nivelOJ (que incluye la longitud de cada campo), Sin embargo, es buena idea utilizar siempre La clausula RECORD CONTAINS ... para rnejorar la documentaci6n del programa y porque algunos cornpiladores generan mensajes de atencion si las longitudes de los campos no suman el valor especificado en Ia frase RECORD CONTAINS ...

BLOCK/RECORD CONTAINS 0 CHARACTERS

En 1a version de COBOL para IBM OS/VS se puede especificar

BLOC.K CONTAINS 0 {C. HARACT. ERS} 0 RECORD CONTAINS 0 CHARACTERS

RECORDS

I

1

I

,

i

Esto es una ampliacion de ia norma ANS, que requiere un numero positive de earacteres 0 registros. En el COBOL de IBM, e1 uso de cero indica que el tamano del bloque 0 registro debe tomarse de las instrucciones en el lenguaje de control de trabajos que describen el fichero (vease Ia Seeei6n 4,5). Aunque RECORD CONTAINS 0 CHARACTERS tiene poea aplicacion en COBOL, BLOCK CONTAINS 0 ... puede y debe usarse para hacer un programa en COBOL independienie del factor de bloqueo (de manera que un cambio en el factor de bloqueo no implique volver a compiiar el programa fuente en COBOL), (Recuerde que los ficheros de impresora y los ficheros en tarjetas no pueden bloquearse.)

EJEMPLO 5.8

FD FICHERO-FACTURAS-ABIERTAS

BLOCK CONTAINS 0 CHARACTERS RECORD CONTAINS 250 CHARACTERS LABEL RECORDS ARE STANDARD

La longitud del bloque se tornara de la instruccion en el Ienguaje de control de trabajos asociado al fichero en el memento de Ja ejecucion. Si el fichero ya existe y dispone de una etiqueta, la longitud del blcque tarnbien

CAP. 5]

DIVISION DE DATOS

55

se puede tomar de I.a misma (eliminando asi la necesidad de especificar la longitud en la instrucci6n del lenguaje de control de trabajos),

5.5 FD LABEL RECORDS ...

Recuerde que como se indico en la Seccion 1.10, cada fichero en un dispositive de acceso directo dispone de una etiqueta de fichero (automaticamente creada par el sistema operativo) donde se indican: el nombre par el que el sistema operativo reconoce al fichero, la organizacion (secuencial, indexada 0 relativa), la direccion del area de indices (si existe), la direccion de los registros de datos, tamano del bloque, tipo de registro (longitud fija a variable), la longitud del registro, la palabra clave para el acceso, el tiempo durante el cual no podra borrarse, etc. Las etiquetas de ficheros en un disco se agrupan en un fichero especial del sistema operative denominado tabla de contenido del volumen (VTOC) 0 directorio.

Las etiquetas de ficheros son opcionales en los ficheros en cinta magnetica, pero como consecuencia de las ventajas que ofrecen casi siernpre se utilizan, Las etiquetas de fichero no existen en los ficheros contenidos en dispositivos de registro unico (lectores de tarjetas, perforadoras e impreso-

ras). .

LABEL RECORDS ... es la unica olausula obligatoria en la instruccion FD. Utilice

LABEL RECORDS ARE OMITTED

si el fichero esta en un dispositive de registro unico 0 si eJ fichero esta en cinta pero no tiene etiquetas, Utilice

LABEL RECORDS ARE ST AND,ARD

si el fichero esta en un dispositive de acceso directo (disco, disco flexible, tarnbor, etc.) 0 si esta en una cinta magnetics con etiquetas.

5.6 FD DATA RECORDS ...

La clausula DATA RECORDS lista los nornbres definidos por el programador con los que se denomina a los registros del fichero en Ia division de procedimientos. Esta clausula tiene una utilidad limitada, sobre todo con registros de longitud fija, puesto que los nornbres de los registros en COBOL siguen a la instruccion FD (son la prirnera entrada al nivel 0 I de la descripci6n del registro), Los nornbres de registros que aparezcan en el nivel 0 I deben coincidir con los que aparezcan en la clausula DATA RECORDS. Esta clausula es opcional en todos los casos.

EJEMPLO 5.9

FD FICH£RO- TIEMPO-SEMANAL

BLOCK CONTAINS 436 TO 1636 CHARACTERS RECORD CONTAINS 50 TO 200 CHARACTERS LABEL RECORDS ARE STANDARD

DATA RECORDS ARE REGI5TRO-TIEMPO-PERDIDO REGISTRO- TIEMPO-ABOGADOS

01 REGISTRO- TIEMPO-PERDI DO

(descriocion de 1.111 registro log/co de 50 b)'I('s)

01 REGISTRO- TIEMPO-ABOGADOS

tdescripcion de lin registro togico de 200 bv{(?s)

Se asume en el COBOL de IBM OS/VS un factor de bloqueo para FICHERO-TIEMPO-SEMANAL de 8.

Los ficherosen tarjetas (en ningun caso pueden estar bloqneados) tienen a menudo mas de un tipo de registro porque todos los campos que se necesitan no caben en una tarjeta. Cuando sucede esto, la informacion se divide entre varias tarjetas y cada tarjeta se codifica para indicar los campos Que contiene. El codigo de tarjeta se suele ubi car en el primer 0 en elultimo byte del registro (tarjeta),

56

DIVISION DE DATOS

[CAP. 5

EJEMPLO 5. TO Se desea colocar etiquetas de COITeo en tarjetas de 80 columnas, Como los datos requieren mas de 80 caracteres, e! fichero contendra tres tipos de registro, Las descripciones de! fichero (FD) y de los

registros (nivel 01) podnan ser: .

FD FICHERO-ETIQUETAS-CORREO RECORD CONTAINS 80 CHARACTERS LABEL RECORDS ARE OMITTED

DATA RECORDS ARE REGISTRO-TIP01-NOMBRE REGISTRO- TIP02-CIUDAD REGISTRO· TIP03-NEGOClO

01 REGISTRO·TIPOi·NOMBRE

05 COO1GO-I PIC X

05 lD-I PIC X(9).

05 NOMBRE-l PIC X(30).

05 CALLE-J PIC X(30).

05 FILLER PIC X( 10).

01 REGISTRO- TIP02-CIUDAD

05 C00100-2 prC X.

05 lD·2 PIC X(9).

05 TELEFONO-2 .. PIC X(8).

05 CIUDAD-2 PIC X(30).

05 EST ADO-2 PIC X(2).

05 CODlGO·POST AL-2 PIC X(9).

05 FILLER PIC X(2]).

01 REGISTRO-TlP03-NEOOCIO

05 COOlOO·3 PIC X.

05 ID-3 PIC X(9).

05 NEGOCIO-3 PIC X(70).

Observese que la clausula BLOCK CONTAINS ... se ornite para los ficheros en tarjetas. RECORD CON· TAINS ... se utiliza para que el compilador genere un. mensaje de atencion en el caso de que la descripcion de un registro a nivel 0 I no sume 80 caracteres (compjobacion util, puesto que se iutenta no tener registros de longitud variable, sino Ires tipos de registros iodos con la misma longitud). La clausula LABEL RECORDS ... sc ornite para el fichero de tarjetas: DATA RECORDS ... sirve como docurnentacion del prograrna, facilitando la comprension de que hay tres tipos de registros en el fichero. i,Podrfa enumerar los campos de cada tipo de registro logico?

5.7 FD LINAGE ...

La clausula LINAGE s610 se utiliza para los ficheros de impresora y siempre es opcional. Cuando se utiliza, define una pagina logica que se compone de un margen superior. un margen inferior y un cuerpo de pagina en el que tiene lugar la escritura .. Un area inferior del cuerpo de pagina se puede destinar para las notas al pie. LINAGE ... es una altemativa al usa de los canales de control del carro (Seccion 4.4); los dos metodos no se pueden utilizar al mismo tiempo para eJ mismo fichero. La clausula LINAGE ... no se puede utilizar can todos los cornpiladores. Vease el Problema 8.30 para conocer tecnicas de control del paginado sin LINAGE.

EJEMPLO 5.11

FD lNFORME- VENT AS-POR- VENDEDORES RECORD CONTAINS 132 CHARACTERS LABEL RECORDS ARE OMITTED LINAGE IS 54 LINES

WITH FOOTING AT 44 LINES AT TOP 6

LINES AT BOTTOM 6

EI fichero de impresion no tiene bloques ni etiqueta, La clausula LINAGE define una pagina Iogica como se indica en 13 Figura 5·4. Toda la irnpresion se efectuara en el C"UCTPO de pagina (sombreado).

CAP., 5]

DIVISION DE DATOS

57

61ineas

Margen superior (LINES AT TOP)

.'

Margen inferior (LINES AT BOnOM)

61ineas

Fig. 5-4

Los margenes superior e inferior de una pagina logica, siernpre se dejan en blanco, por tanto los margenes sirven s610 para separar un cuerpo de pagina de otro, Tanto "LINES AT TOP .. .' como "LINES AT BOTTOM.,." son opcionalesjsi se omite cualquiera de elias, el margen correspondiente

contendra cera lineas. '

El area de notas al pie dentro del cuerpo de pagina se puede utilizar para: (1) imprimir los rotates de pagina de ciertos campos, (2) imprirnir un rnensaje cuando el inforrne continua en la pagina siguiente 0 (3) asegurarse que hay suficiente espacio al final de la pagina para completarcualquier cosa sin necesidad de acudir a otra pagina, EI area de notas al pie es opcional y si se amite "WITH FOOTING AT" no existira esta area al final del cuerpo de pagina,

El cuerpo de pagina es donde tiene lugar la escritura, Vease el Capitulo 6 para conocer las consideraciones que hay que tener en cuenta en la division de procedimientos can las instrucciones WRITE relativas a ficheros con LINAGE ...

EJEMPLO 5.12

• FD INFORME-PROD-BAJO-MJNIMO

RECORD CONTAINS 132 CHARACTERS LABEL RECORDS ARE OMITTED LINAGE IS 66 LTNES

Cada cuerpo de pagina tiene 66 lineas y ocupa toda la pagina. No existe area de notas al pie, perc la deteccion de un area de notas al pie sera apuntada por la instruccion WRITE cuando se alcance la parte inferior de la pagina.

• FD INFORME-VENT AS-POR-CLIENTES

RECORD CONTAINS 132 CHARACTERS LABEL RECORDS OMITTED

LINAGE 50 LINES

LINES AT TOP TAMANYO-MARGEN-SUPERIOR LINES AT BOTTOM 5

58

DIVlS10N DE DATOS

[CAP. :;

Todas 0 alguna de las clausulas LINAGE pueden especificar un valor que ha sido almacenado antes de abrir el fichero (prepararle para el procesamiento, vease el EjempJo 2.5). En este caso, dicho entero esta contenido en la posici6n TAMANYO·MARGEN-SUPERIOR cuando se abre el fichero INFORME·VENTAS-PORCUENTES e indica Ia anchura del margen superior. Deeste modo el program a puede calcular la anehura de las areas asociadas con LINAGE.

5.8 DESCRIPCION DE REGISTROS EN LA SECaON DE FICHEROS

Cuando un programs objeto COBOL procesa un fichero, una parte de la memoria de la computadora debe estar preparada para recibir un registro fisico (desde un fichero de entrada) 0 para construir un registro fisico (can destino a un fichero de salida); estas areas se conocen con el nombre de buffer de un fichero determinado. EI prop6sito de la descripcion del registrare» detallar el registro logico tal como aparece en el buffer, En otras palabras, la descripeicn del registro especifica que parte del buffer contiene el registro Iogico que esta siendo procesado,

EJEMPLO 5.13 EI segmento de program a del Ejemplo 5.9 continua asi:

FD F1CHERO-TIEMPO-SEMANAL

BLOCK CONTAINS 436 TO 1636 CHARACTERS RECORD CONTAINS' 50 TO 200 CHARACTERS LABEL RECORDS ARE- STANDARD

DATA RECORDS ARE REG1STRO-TIEMPO-PERDiDO REOISTRO-TIEMPO·ABOGADOS

01 REGISTRO· TIEMPO-PERDIDO.

tdescripcion de un registro logica de 50 bytes)

OJ REGISTRO· TIEMPO.ABOGADOS.

idescrtpcion de un registro logico de 200 bytes)

PROCEDURE DIVISION.

OPEN INPUT FlCHERO·TIEMPO-SEMA IAL

READ FICHERO-TIEMPO-SEMANAL RECORD

Las instrucciones de la division de procedi mientos ilustran el modo de preparar un fichero para la entrada ("OPEN INPUT FICHERO-TIEMPO-SEMANAL") Y c6mo se introduce un registro del fichero ("READ FICHERO·TIEMPO·SEMANAL RECORD"). La instruccion READ realiza las siguientes funciones:

(I) Si el buller estuviera vaclo, capturaria un registro fisico y pond ria de este modo un registro logico a disposicicn del prograrna.

(2) Si eJ bulTer ya contienc un registro fisico del cual ya se han letdo todos los registros logicos, se repiie la opcracion ( I ).

(3) Si cl bulTer ya coritiene un registro flsico del cual no sc han lefdo todos los registros logicos, pone a

disposicion del program a el sif.{lIicni(' registro logico (no procesado),

En cualquier caso, despues de cada instruccion REA D hay un registro logico a disposicion del programa, Depende del programador reconocer r:/ tino de rcgistro /r5gico de qtu: se Ira/e. EI procedimiento general consiste en reservar I1n byte de cada registro para el codigo de registro. De este modo cl primer byte de los registros de tiernpo perdido podria contener una "C', m icntras que el primer byte de los registros de tiernpo de abogados podria c.onlener una "L". Un rcgistro tipo "C" rccibira un procesarniento tipo "C" por parte del prograrna y un registro trpo "L" recibira un procesamienio tipo "L".

Numeros de nivel

Como parte esencial de la descripcion del registro, se asigna a los campos unos numeros de nivel de 0 I a 49. EI nivel 0 I se reserva para el nom bre del registro. Si el nurnero de nivel aumenta al pasar de un campo al siguiente, se dice que e! segundo es un subcampo del prirnero.

CAP.5J

DIVISION DE DATOS

59

EJEMPLO 5.14

FO FICHERO-OE-PAGOS

BLOCK CONTAiNS 100 RECORDS RECORD CONTAINS 33 CHARACTERS LABEL RECORDS ARE STANDARD

01 REGISTRO-DE-PAGOS.

05 NUMERO-DE-CLIENTE 05 ZONA-DEL-CLlENTE

05 FECHA-DEUDA.

10 MES-DEUDA 10 DIA-OEUDA 10 ANO-DEUDA

05 FECHA-RECIBO-PAGO iO MES-RECIBO

10 DIA-RECIBO

10 ANO·RECIBO

05 SALOO-ANTERIOR 05 IMPORTE-PAGO

PIC X(5). PiC X(2).

PIC X(2). PIC X(2). PIC X(2).

PIC X(2). PIC X(2). PIC X(2).

PIC S9(5)V99. PIC S9(5)99.

EI nivel 01 se ernpieza a escribir en eI margen A e indica el cornienzo de la descripcion del registro, Los otros n U meros de n ivel, en este caso 05 y 10, se eseriben en el margen B. Observese el uso de la jerarqu izacion de las lineas en la division de datos. Aunque el compilador no 10 precisa, es muy importante para poner de manifiesto la estructura del registro,

La estructura definida por los rnimeros de nivel aparece en cl diagrama de la Figura 5-5.

Los campos con subcampos se llaman elementos ·compuestos; los campos que no tienen subcampos se llarnan elementos simples.

EJEMPLO 5-15 En el Ejernplo 5.14:

elementos compuestos

~.

elementos simples

REGISTRO-DE-PAGOS FECHA-DEUDA FECHA-RECIBO-PAGO NUMERO-OE-CLlENTE ZONA-CLlENTE M,E5-DEUDA DIA-OEUDA ANO-DEUDA MES-REelBO DIA-RECJBO ANO-RECIBO SALDO-ANTERlOR

I MPORTE-PAGO

b)1"I~-+-----+----+---+-1 ---l2 f-----+-------+--------+------j-------------I

r I NUMERO· ZONA· I ME.\.. 'DIA· I ANO-' MfS. D1A·' I ANo. I SALDO· , IMPORTE· I

...•... :~_a~IE_~_E~~_c_u_,ru_T_E~_1 _M_U_D_A_I_D_ru_D_A_ID_E_U_DA_'~_R_oc_rn_O~~_~_C_IB_O~_' _R_E_U_OO~~' _AN_IT_'R_ID_R_' _'~_P_A_GO~: ...

_ fKHA,DEUDA FECHA·REOBO·PAGO

. I1ftrrrJOI rtgl suo frlgu:c

L__~~__ en ,I buQ'1'f

REG1STRO- DE· PAGOS (rt"gis/rO IOgico '" el ""fferl

Fig. 5.5

60

DIVISION DE DATOS

[CAP. 5

Observese que los elementos simples tienen una clausul a "PIC" que describe su longitud y tipo de datos.

Los elementos compuestos no tienen tal descripcion, porque quedan cornpletarnente definidos per SUS cornponentes elementales. Los nombres definidos par el programador para elementos simples y compuestos siempre se refieren al registro logico en activo conienido en eI buffer

Se recornienda como norma que una abreviatura del nombre del fichero 0 del registro sirva como prefijo a cada elernento (campo) del registro, De este modo se conocera a que registro 0 fichero pertenece.

EJEMPLO 5_16

FD FICHERO-ETIQUET AS-CORREO RECORD CONTAINS 76

LABEL RECORDS OMITTED

DATA RECORDS ETIQ-CORREO-CALLE-REG ETlQ-CORREO-EST ADO-REG

.'

01 ETIQ-CORREO·CALLE-REG.

05 ETIQ-CORREO-CALLE-CODIGO 05 ETIQ-CORREO-CALLE-ID

05 ETIQ-CORREO-CALLE-NOMBRE 05 ETIQ-CORREO-CALLE-CALLE

05 FILLER

PIC X. PIC X(5). PIC X(30). PIC X(30). PIC X(lO).

01 ETIQ-CORREO-ESTADO-REG.

05 ETIQ-CORREO-EST ADO-CODlGO 05 ETIQ-CORREO-ESTADO-lD

05 ETIQ-CORREO-ESTADO-TELEF 05 ET1Q-CORREO-ESTADO-C1UDAD 05 ETIQ-CORREO-ESTADO"ESTADO

05 ETIQ-CORREO-ESTA PO-CO-POSTAL 05 FILLER

PIC X. PIC X(5). PIC X(8). PIC X(30). rrc X(2). PIC X(9). PIC X(21).

~.

Hay dos niveles de prefijos en este ejemplo:

(l) Cada nornbre de registro y de campo .comienza can "ETIQ~CORREO", que es una abreviatura del nornbre del "FICHERO-ETIQUETAS-CORREO", Como consecuencia, cualquier dato que comience con "ETIQ-CORREO" se asocia con el "FICHERO-ETIQUETAS-CORREO". De este modo, se puede leer la division de procedimientos sin referencias continuas a la division de datos para saber a que ficnero 0 registro pertenece un campo.

(2) El nombre de cada campo del regisiro ETIQ-CORREO-CALLE-REG contiene e! prefijo secundario "CA L LE" (por ejernplo, ETl Q-CO RREO-CA LLE-CO 0 IGO se asocia con eI FI CH ER 0- ETI QU ETAS" COR REO y en particular conel registro ETIQ-CORREO-CALLE-REG de dicho fichcro). De igua! modo, cada campo del registro ETIQ-CORREO-EST ADO-REG tiene eJ prefijo secundario "EST ADO".

EJEMPLO 5 .. 17 En el Ejernplo 5.. [6 hay dos niveles 0 1 con las descripciones correspondientes a los registros logicos en eI buffer: estas dos descripciones sc representan en la Figura 5-6. (Cuando existe mas de un nivel 0 I en una FD, las descripciones de los registros logicos rcdefinen irnphcitameme una a la otra.)

Observese que las descripciones de ambos rcgistros coinciden en la interpretacion de los primeros 6 bytes del registro logico. Como tanto ETIQ-CORREO-CALLE-CODIGO como ETIQ-CORREO-EST A DO-CODIGO se refieren a la misrna posicion de memoria (primer byte del. registro lcgico), estos dos nom bres pueden considerarse sin6nimos en el resto del prograrna. De igual manera, ETIQ~CORREO-CALLE-lD y ETIQCORREO-ESTADO-ID ambos se refieren a [as bytes cornprendidos entre el2 y el6 del registro logico y, por Ian to, el intercarnbio entre estes nornbres en [a di vision de procedimientos no afecta a la ejecucion del programa. EI primer byte del registro logico (al que se puede referir mediante ETIQ-CORREO-CALLE.CODIGO 0 mediante el sinonimo ETIQ-CORREO-EST ADO-CODIGO) se puede usar para contener el codigo de registro que le identifica como un registro calle 0 un registro estado, (Veanse el Ejemplo 5.13 yel Problema 5.80.)

CAP.5J

DIVISION DE DATOS

61

I

I CALLE· I CODIGO I I

CALLElD

CALLENOMBRE 30

CALLECAUE 30

sin usal

byles

10

registro 16gico activado en el buffer

by!es

1 I I 5 8

JEST ADO" I EST ADO. I EST ADO· I

I CODIGO I lD I TELEF I

I I I I

30 ESTADOC1VDAD

I I

I 2 I 9

I ESTADO- I ESTADo. I I ESTADO I COD.POSTAll I I I

21

sin usar

Fig. 5-6

Buffers multiples

Para un fichero secuencial, podra ser ventajoso disponer de dos (0 mas) buffers: el contenido de uno estara sometido al procesamiento de la CPU al mismo tiempo quee1 otro se esta cargando con el siguiente bloque desde el dispositive de entrada/salida, En el COBOL de IBM OSjVS, el numero de buffer por defecto para un fichero secuencial es dos; para un fichero con acceso al azar el nurnero de buffers par defecto es uno. El COBOL ANS tiene una clausula adicional en la instruccion SELECT que permite aJ programador especificar el numero (entero) de buffers para lin fichero:

SELECT ... ASSIGN TO ... [ RESERVE entero [AREA 1] ...

. 'AREAS •.

A menos que conozca perfectamente lacomputadora y su estructura de entrada/salida, es preferible omitir la clausula RESERVE y aceptarel numero de buffer por defecto que designe el compilador,

5.9 SINTAXIS DE LA DESCRIPCIQN DE DATOS

EI proposito de la descripcion de los datos en Ia seccion de ficberos es detallar por complete un campo del fichero, La Figura 5·7 indica la sintaxis general de la descripcion de datos.

.. . { nombre~da!OS-l}

numero-de-m:,el FILLER

(I) [REDEFINES nornbre-datos-Z]

[ !PICTURE} 1

(2) lPIC . IS cadena de carac1eres.

DISPLAY COMPUTATIONAL (3) [USAGE IS] COMP

COMPUT A TIONAL-3 COMP-3

(4) [BLANK WHEN ZERO]

(5) [ {~IFIED} RIGHT]

(6) [OCCURS entero TIMES]

(7) [ [SIGN IS] {~!:~~~~}JSEPARATE CHARACTERS] 1 (8) l {SYNCHRONlZED } [LEIT. ])

.. SYNC RIGHT

-.-- .

(9) .

Fig. 5·7

62

DIVISION DE DATOS

[CAP. 5

El numero de nivel siempre estara comprendido entre 01 y 49,01 se reserva para los nombres de registro. "Nombre-datos-I" es el nombre definido por el programador para el campo tal y como se usara en la division de procedimientos cuando se .le procese, Si un campo presente no va a ser procesado por eJ programa, se puede usar la palabra reservada "FILLER" en Iugar del nornbre del campo. "FILLER" se puede usar tanto como se desee,

EJEMPLO 5.18

FD FICHERO·OE-PAGOS

LABEL RECORDS ARE STANDARD.

01 REGISTRO·DE-PAGOS.

05 NOMBRE-DE-CLIENTE 05 IMPORTE-DEL-PAGO

FD INFORME·COBROS-SEMANALES LABEL RECORDS ARE OMITTED.

01 REGISTRO·COBROS-SEMANALES.

05 NOMBRE-DE-CLlENTE

05 FILLER

05 IMPORTE-DEL·PAGO 05 FILLER

PIC X(20). PIC S9(5)V99.

PIC X(20). PIC X(5).

PIC ZZ,ZZZ.99-. PIC X(65).

PROCEDURE DIVISION.

READ FICHERO-DE-PAGOS RECORD

MOVE NOMBRE-DE·CLIENTE OF REGISTRO·DE·PAGOS

TO NOMBRE-OE-CLIENTE OF REGISTRO-COBROS-SEMANALES MOVE IMPORTE-OEL-PAGO OF REGJSTRO-DE-PAGOS

TO IMPORTE-OEL-PAGO OF REOlSTRO-COBROS·SEMANALES

Las reglas delienguaje COBOL penniten duplicar los nornbres '·NOM BRE·DE-CLIENTE" e "JMPORTE-DELPAGO" que eri el ejernplo aparecen en dos registros diferentes, Cuando se utiliza un nombre duplicado en la division de procedimientos debe adjeiivarse: por ejernplo, debe estar subordinado a un unico nombre de grupo (coma- "IMPORTE-PAGO OF REGISTRO-PAGO" Y "NOMBRE-CLIENTE OF REGISTRO-REClBOS-

SEMANALES"). ,

Se recornienda utilizar nombres de datos unicos con prefijos que sean abreviaturas de los nornbres de registro ° fichero (Ejernplo 5.16) para evitar tener que adjetivar en la division de procedirnientos,

Si se utiliza la clausula REDEFINES.' .. , esta debe aparecer a continuaeion del "nurnero de nivel", las otras clausulas deben aparecer en orden. En las Secciones 5.10-5.17 se cornentan las clausulas en orden decreciente de su usa. (Excepto en 10 relative a REDEFINES ... , este es el orden que se indica en la Fig. 5·7.)

5.10 CLAUSULA PICrURE (Fig. 5-7, linea 2)

Esta clausula describe el formate de los datos elernentales; no se puede dar para un elemento compuesto. La cadena de caracteres puede contener los siguientes:

ABPSVXZ09/,

+ ~ CR DB >I< $

La cadena de caracteres especifica (1) el nurnero de posiciones de un caracter en el elemento simple; (2) el tipo de datos (numericos, alfanurnericos, alfabeticos) que ocuparan las posiciones; y (3) si eJ elernento se editara optimizando su aspecto a1 imprirnirle en papel 0 en la pantalla.

La clausula PICTURE es cornplicada porque ofrece muchas variaciones. Se cornentara cada caracter de PICTURE individualrnente. Recuerde: cada elemento simple debe tener una clausula PICTURE.

A

Cada "A" en la "cadena de caracteres" representa una posicion de caracter (byte) que puede contener s610 una letra 0 un espacio.

CAP. 5]

DIVISION DE DATOS

63

EJEMPLO 5.19

01 NOMBRE-EMPLEADO.

05 APELLIDO-EMPLEADQ 05 NOMBRE-EMPLEADO 05 INIClAL-SEG·NOMBRE

PIC A(l5), PIC A(ID). PIC A.

Comentarios: (I) EI elemento compuesio NOMBRE-EMPLEADO no time clausula PICTURE. (2) Todos los elementos simples tienen clausulas P1CTURE descriptivas, (3) El uso de un [actor de repeticion simplifies Ia escritura de PICTURE:

"A(IO)" es una abreviarura de "AAAAAAAAAA" (diez Aes) "A(4) es una abreviatura de "AAAA" (cuatro Aes)

(4) APELLlDO-EMPLEADO ocupa 15 caracteres (bytes); NOMBRE-EMPLEAOO ocupa 10 bytes; INlCIAL-SEG-NOMBRE ocupa 1 byte .. (5) Los tres elementos contendran 5610 letras del alfabeto 0 espacios, (6) Se utiliza "PIC" en vez de "PICTURE IS".

B (Caracter de edicion)

Cada "B" de una cadena PICTURE representa un byte en el que se insertara un espacio 'en blanco cuando 10$ datos se carguen en el campo, "B" es un ejemplo de cardcter de edicion que haee que los datos se formateen al cargarse en un campo can la clausula PICTURE.

EJEMPLO 5.20

• 0 I SALUDOS PIC AABA(5).

Comentarios: (J) SALUOOS es un campo de 8 bytes: 2 letras 0 espacios ("AA"), seguidos por un espacio ("B") y despues 5 tetras 0 espacios ["A(5)"]. (2) MOVE "HITHERE" TO SALUDOS produeira como resultado el siguiente contenido de SALUDOS:

"HI THERE"

La "B" haee que se inserte un espacio en blanco entre las dos prirneras letras y las cinco ultimas letras.



01 INICIALES-EMPLEADO .

05 lNICIALES-COMPRIMIPAS 05 INICIALES-SEPARADAS

PIC A(3).

PIC ABABAB.

Co~entarios: (I) No se puede repetir grupos de caracteres de PICTURE excepto escribicndolos. ["AB(3)" produciria "ABBB" y no "ABABAB".] (2) S·; JNICIALES-COMPRIMIDAS contiene "DA F" , entonces

MOVE IN1CJALES·COMPRIMlDAS TO

IN I CIA LES-SEP A RA DAS

prodncina "0 A F" en INICIALES-SEPARADAS.

x

Este caracter es usado can mucha frecuencia y representa un byte que puede contener cualquier caracter del conjunto de caracteres de la computadora (en los sistemas IBM-370 caracteres EBCDIC). A menudo se usa X en la clausula PICTURE que acornpana a un registro a nivel a 1 que no se divide en campos,

EJEMPlO 5.21

05 ENTRAOA-NUM-SEG-SOCIAL

PIC X(9).

05 IMPRES'ON-NUM~SEG-SOCJAL

PIC XXXBXXBXXXX.

ENTRADA-NUM-SEG-SOCIAL podria contener un valor como" 111223333", correspondiente al mimero de la seguridad social de un trabajador, sin neccsidad de espacios ni puntos, "PIC X(9)" prepara espacio para almacenar 9 caracteres cualesquiera, Cuando se vaya a imprimir el nurnero de la seguridad social sera preciso editarlo para hacerlo mas legible. Esto puede llevarse a cabo insertando espaciosen blanco par medio del earacter "B", produciendo, pOT ejempJo, "111 223333".

64

DIVlSION DE DATOS

[CAP. 5

En general, cuando se utilizan datos numericos como identificativos y no para calculos (por ejernplo, numero de 13 seguridad social, numeros de telefono, etc.), es preferible usar "PIC X".

9

Cada "9" en una cadena de PICTURE representa la posici6n de un digito decimal (0 a 9). A diferencia de "A", "B" y "X", "9" no siempre requiere un byte (0 posicion de un caracter) de memoria. El tamaiio real de un elemento numerico, que depende del c6digo de datos, se tratara en la Seccion 5.1 8. Aunque no es valido programar calculos en COBOL con "numeros" en formato "PIC X", "PIC 9", sin embargo, esta especificamente disenado para realizar calculos. "PIC 9"-na produce ninguna edicion de elementos numericos; en particular, no inserta puntas ni elimina los ceros a /a izquierda.

EJEMPLO 5.22

01 REGISTRO-INFORMACION-EMPLEADO .

. . . . . . . . . . . . .. " ~ ~ , .

05 EMPLEADO-INFO-SEG-SOC

05 EMPLEADO-INFO-FAMILlARES 05 EMPLEADO-INFO-DIAS-ENF

05 EMPLEADO-INFO-DIAS- VACA

PIC X(9). PIC 99. PIC 9(3). PIC 9(3) .

.............. , -., , .

01 REGISTRO-CUENTA-DE-AHORRO. 05 CUENT-AHORRO-NUM-ING

05 CUENT-AHORRO-REINTEG ROS 05 CUENT-AHORRO-NUMERO

PIC 9(5). PIC 9(5). PIC X(7) .

• • • • • • • I •••• ~ ••••••••••••••••••••••••••••••• , •••••

01 REG I STRO-MAESTRO-I NVENT ARlO. 05 MAESTRO-INV-EXISTENCIAS

PIC 9(7).

Los campos EMPLEADO-INFO-SEG-SOC v CUENT-AHORRO- UMERO se usan como identificativos y no para calculos, par eso se utiliza "PIC X". -Todos los otros campos pueden tornar parte en calculos y par eso se us~ "PIC 9". Observese que si se traslada 52 al campo MAESTRO-INV-EXISTENCIAS se almacenara como "0000052".

s

El caracter "S" indica la presencia de un signa de operacion. Un signa no ocupa espacio adicional para su almacenamiento, porque se incorpora intemamente en 1a representacion de los datos (veanse las Secciones 1.11 y 5.11). Los sistemas de codificaci6n "complemento binario ados" (COMP) y "decimal empaquetado" (COMP-3) integran el signa en su representaci6n; por ello, en estos cases, ornitir la "S" equivale a considerar exclusivamente el valor absoluto. La representaci6n mediante DISPLA Y (EBCDIC y ASCII) reserva autornaticamente espacio para un signo como parte de la representacion del digito mas a la derecha, pero el hecho de que se utilice 0 no este espacio depende exc1usivamente de que se especifique una "S" en la cadena de PICTURE.

EJEMPLO 5.23

05 SEGUNDOS-ANTES-LANZAMTENTO

PIC S9(5).

Comentarios:

(I) Si se usa "S", debe sec eJ primer caracter de la cadena de PICTURE.

(2) Cuando se imprimen numeros con signa en forrnato DISPLAY, el digito mas a fa derecha se imprime como una tetra 0 UI1 blanco. Asi, en EBCDIC (Tabla 5-1), si SEGUNDOS-ANTES-LANZAMIENTO contuviere 17 se imprimiria OOOIG y si contuviera 12 irnprimina OOOIK.

(3) Los numeros can signa deben trasiadarse a campos de edicion e imprimir su version editada para evitar dificultades de interpretacion.

CAP. 5]

DIVISION DE DATOS

65

Tabla 5-1

Digito mas Irnpresion si lmpresion si
ala derecha Bevil signa + . lleva signa -
0 blanco blanco .
1 A J
2 B K
3 C L
4 D M
5 E N
6 F 0
7 G P
8 H Q
9 I R (;.., .'

EJEMPLO 5.24

05 SALDO-TOTAL-DEUDA

PIC 9(5).

Sin la "5" en la clausula PICTURE de un date numerico, la computadora siernpre genera un signa + dando como resultado su valor absolute. Con este problema, no s610 se requieren ciertas instrucciones en lenguaje rnaquina caoa vez que. se manioula e! campo, sino que tambien puede ser peligroso, Par ejernplo, suponga que SA LDO- TOTAL-DEUDA contiene 00015 para indicar queuri determinado clients debe 15 dolares. Si el cliente paga 20 dolares y se resta el valor 20 del coruenido de! campo SALDO-TOTAL-DEUDA, ocurriria 10 siguiente: 00015 menos 00020 da -00005 Que como no hay "S·' se almacena como +00005. Todo indica que el cliente sigue debiendo 5 dolares cuando en realidad es acreedor de 5 d61ares.

A menos que se desee expresamente et valor absoluto, ex preferible anadir signo a los datos numericos en la

cldusula PICTURE. '

05 SALDO-TOTAL-DEUDA

PIC 59(5).

v

EI caracter "V" se usa para indicar.la presencia de un punta decimal en un dato numerico, Se utiliza en conjuncion con el caracter "9" y puede aparecer solo una vezen la cadena PICTURE. Si se omite el caracter "V", se asume que :el punto decimal sigue al digito mas a la derecha del numero. Puesto que el punta decimal no fonna pane de la representacion interna de un nurnero, no ocupa espacio en la memoria. Los puntas decimales se utilizan para ali near datos nurnericos a efectos de computes y de edicion.

EJEMPLO 5.25 Suponiendo que los campos

OS HORAS-TRABAJ-ESTA-SEMANA 05 TOT AL-HORAS-ANO

PIC S99V9. PIC S9(4).

contienen +42_5 y +060L respectivamente (una fracci6n de hora es importante enel tiempo sernanal, perc no en el tiempe anual). Si la compuiadora tuviera que surnar las horas de 1a sernana a las horas del ano, deberta indicarse d6nde se supone que estan los puntos decimales:

Incorrecto horas-sernana ~ 425 horas-ano '" 0603 SUMA 1028

Correcto horas-sernana = 42_.5 horas-ano ~ 0603_ SUMA 0645~5

Si el resultaoo correcto se tiene que alrnacenar en TOTAL-HORAS-ANO, 0 bien la parte fraccionada (0.5) tiene Que truncarse (despreciarse) 0 el numero debe redondearse. Si se trunca 0645.5 a prc S9(4), eI resultado es +0645. EI redondeo surna I si la parte fraceionaria es 0.5 0 mayor. En este caso, si 0645.5 se redondea a PIC 59(4), eJ resultado es +0646.

Z (Caracter de edki6n)

EI caracter "Z" se usa en lugar de "9" para representar la posicion de un digito decimal que se reernplaza por un espacio en blanco en el caso de que sea un cera a la izquierda, Los campos con

66

D!VISION DE DATOS

[CAP. 5

caracteres de edicion (incluido "Z") no se pueden utilizar en ealculos, aunque si pueden alimentarse can el resultado de un calculo.

EJEMPLO 5.26

• OS PRECrO prc ZZZZ9.

Si PREcro contiene el valor doscientos tres y es parte de un registro de salida a !a irnpresora, se imprimina bb203 (b=:oespacio en blanco). Los dos primeros caracteres "Z" de la cadena de PICTURE represcntan ceres a la izquierda y por tanto se rellenan con espacios en blanco. EI cuarto caracter "Z" tam bien corresponde a un cera, pero no es un cero a Ja izquierda (no 50[0 le preceden ceros), par eso se imprime. (Si PRECIO contuviera cera, se imprimirta bbbbO, puesto que PIC "9" siempre representa un digito sea cero 0 no).

• 05 PRECIO nc ZZZZ.

Si PRECIO contuviera cero, en caso de impresion el resultado sena bbbb.

· (Punto, caracter de edicion)

EI caracter ''.' (pun to) represen ta la posicion de un p u nto deci mal real en un cam po (en can traposicion coo "V", que representa unsupuesto punta decimal). El caracter "." ocupa un byte de memoria en el campo y aparece cuando se imprime el campo en papel a en la pantalla, A"," se Ie considera un caracter de edicion; par tanto, los campos que contengan ".' en la clausula PICTURE no pueden ser usados para calculos, Mas min, "." no pueden ser el ultimo caracter de la cadena de PICTURE,

EJEMPLO 5.27

01 LINEA-FACTURA.

05 NUM-ARTICULO-FACTURA OS FILLER

OS DESC-ARTICULO-FACTURA 05 FILLER

05 CANTIDAD-AR TICULO-FACTURA

05 FILLER .'

OS PRECIO-UNIDAD-FACTURA

05 FILLER "

OS PRECIO-TOTAL-FACTURA

PIC X(5). PIC X(8), PIC X(20). PIC XeS). PIC ZZ9. PIC X(3). PIC ZZZ.99. PIC X(10).

PIC ZZZZZZ.99.

Comentarios:

(I) EI elernento compuesto (nivel 0 I) no tiene clausula PICTURE.

(2) NUM-ARTICULO-FACTURA es un campo numerico que sirve como identificativo y par eso tiene "PIC X(S}".

(3) FILLER es una palabra reservada que se utiliza en lugar de un nombre de campo que no interviene en Ia division de procedimientos, Aqui se utiliza como nornbre de un campo en blanco que sirve de separacion entre campos reales que van a ser impresos en papel 0 en la pantalla CRT.

(4) CANTIDAD-ARTICULO-FACTURA es un campo editado para -su impresion, Es un campo de 3 dtgitos (dos caracteres "Z" y un "9"), los dos primeros se convertiran en espacios en blanco si contienen ceres a la izquierda,

(5) Los campos PRECIO-UNIDAD-FACTURA y PRECIO-TOTAL-FACTURA estan editados para su impresion, Se anulan los ceres ala izquierda y se incluye un punto decimal. Observe ei uso de "9" en lugar de "Z" despues de "." en Ia clausula PIC, asi se imprirne siernpre el punto decimal. Los caracteres de puntuaci6n rodeados de "2" en una clausula PIC se convierten en espacios en blanco si ambas "Z" representan ceres a la izquierda,

, (Coma, caracter de edicion)

El caracter "," representa un byte de memoria en el que se situara el codigo del caracter coma.

Al igual que".", una coma en tre dos "Z' se can vertira en espacios en blanco si am bas" Z" representan ceros a la izquierda. La coma tarnbien se convierte en espacio en blanco cuando s6/0 hay espacios en blanco a su izquierda. Los campos numericos can "," en la cadena de PIC no pueden ser utilizados en calculos (aunque pueden alimentarse del resultado de un compute).

CAP.5J

EJEMPLO 5.28

PICTURE ZZ,ZZZ.99 ZZ,ZZZ.99 ZZ,ZZZ.99 ZZ,ZZZ.99 ZZ,ZZZ.ZZ ZZ,ZZZ.ZZ

ZZ,ZZZ.99

DIVISION DE DATOS

Valor 00010.05 00123.45 01000.00 98765.43 00000,00 00000,03

00000,03

67

Impreso como: bbblO.05 bbb123.45 bl,OOO.OO 98,765,43 bbbbbbbbb' bbbbbbbb3

(falseado) bbhbbbO.3

(version eorrecta del anterior)

$ (Caracter de edicion)

EI caracter $ se puede usar para inserter un signa de dolar fiio inmediatamente a la izquierda de

la primera posicion correspondiente a un digito. '.-'

EJEMPLO 5.29

PICTURE $2,ZZZ.99 $Z,ZZZ.99

Valor 0072,15 9876.54

Impreso como: $bbb72.15 $9,876.54

El caracter "S" tarnbien puede significar un signa flotante de dolar que se imprime a la izquierda del primer canicter significaiivo (es decir, el primer digito 0 el punto decimal). Para ello se necesita mas de un "$" en Ja clausula PICTURE: el caracter "S" mas a la izquierda representa un Ingar para el signa dolar, los restantes caracteres "S" representan posiciones de digitos enel campo.

EJEMPLO 5.30

PICTURE

(0) $$,$$$.99

(b) $$,$$$.99

(c) $$,$$$,99

(d) $~,$$$,99

(e) $$,$$$.99

Valor 0001"23 0845"79 9876.54

12345,67 -0000.05

Impreso como: bbbb$L23 bb$845.79 $9,876.54 $2,345,67 bbbbb$.05

Comentarios: (a)·{c) EI signo dolarrflota'' sabre Ja cifra mas significativa del valor editado, (d) Hay solo 6 posiciones de dfgito en la clausula PICTURE (los cuatro "S" y los dos "9"). Per eso el septimo dtgito se trunca par fa izquierda. (e) No esta previsto el signo en la clausula PICTURE, por ello se imprime el valor como si fuera positive. Aqui el primer caracter significative es el punto decimal y el signa "S" flota sabre el.

Recuerde que el signo dolar flotante requiere un caracter "$" mas en la cadena de PICTURE que el numero de posiciones de digitos a editar, Los campos que utilicen "$" en su clausula PIC no pueden usarse en calculos,

CR, DB, -., + (Caracteres de control de edicion del signo)

Estes caracteres se usan principalmente en la edici6n de val ores negatives.

EJEMPLO 5.31 Los caracteres "CR" (0 "DB") se pueden usaf en el extreme derecho de la cadena de PICTURE de un elemenio numerico para indicar un "abono" (credito) 0 "debito" negative.

PICTURE

(a) $Z,ZZZ.99CR

(b) $Z,ZZZ,99CR

(c) $$,$$$,99BDB

Valor 0010,56 -1435.72

-3476,52

Impreso como: $hbb IO.S6bb $1,435.72CR $3,476.52 DB

Comentarios: (a)·{b) Si el valor es negative, se imprime "CR" (0 "DB"); en otro caso se sustituyen por blancos. (c) Aqui el caracter "B" introduce un espacio en blanco entre eJ ultimo dfgito impreso y "DB" (0 "CR"),

DIVISION DE DATOS

[CAP. 5

Los otros dos caracteres de control de edicion del signa, "+" y .'_", funcionan identicamente excepto en un sentido: el caracter"}" siempre imprime un signa para el nurnero (can independencia de que sea positive 0 negativo), mientras que "-" imprime un signa menos s610 cuando el valor es negative. Estos caracteres de PICTURE se pueden usar al principia (precediendo a la prirnera posicion de un dlgito) oal final (a continuacion de 1a ultima posicion de undigito). Tambien se usan en modosjlatante y!ija al igual que "$".

EJEMPLO 5.32

PICTURE (a) $$,$$$.99- (b) $$,$$$.99-

(e) ZZZ.9+

(d) -ZZ.9

(e) -ZZ .. 9

(f) +ZZ9

(g) ++,+++.9

(h) --,.--9 (i) . --,--9 U) ++,++9

Valor -2345.67 0023.78 -763.7 23.7 00.7 -005

0003.7 0000 -0100 0000

Impreso como: $2,345.67- bbb$ 2.'3. 78b 763.7- /)23.7 -bb.7

-bb5

bbbb+s.l bbbbbfJ bb-IOO bbb+t)

.'

Cornentarios: (a) El signa menos por detras se usa frecuenternente en los informes de negocios para hacer mas visibles las cantidades negativas, (b) El signo menos por detras se conviertc en espacio en blanco cuando el valor es positive, (e) El signo + por detras imprime siempre el signa del valor. (d) El signo menos fijo por delante se convierte en espacio en blanco para valores positives. (e) EI signa rnenos fijo por delante siernpre se imprime en la primers posicion. (f) EI signo mas flotame se situa inmediatamente antes del primer caracter significative. (g) El signo mas flotante se situa antes del primer caracter significative. (h) El signo menos flotante se imprirne solo si el valor es negative; acabando PIC con "9" obliga a irnprirnir "0". (I). EI signo menos flotante se imprime cuando el valor es negative. 0) Cera se considera positive.

En los informes de negocios, el control del signo se suele realizar can signa "_" por detras a can "CR" 0 "DB". Como can los otros .. caracteres de edicicn, los campos con control del signa no se pueden usar en los calculos,

* (Asterisco, caracter de edicion)

Como proteccion en los cheques se rellenan las posiciones en blanco par delante can asteriscos, de forma que eI importe no se pueda incrementar: $***23.54. Para la proteccion de cheques se utiliza el caracter "*,, en la clausula PICTURE.

EJEMPLO 5.33

PICTURE Valor lmpreso como:
(a) $*,*""'.99 12345.67 $2,345,67
(b) $*,**'*,***.99 0001234.56 $***"'\ ,234.56
(c) $* ~~* ** OOOO~OO $**"***. *~
, . Comentados: (a) Cuatro caracteres "*,, y dog "9" solo pueden contener 6 digitos; el truncarniento se produce par la izquierda, (b) Los ceres y comas POf la izqirierda se sustituyen par "~"; los digitos y comas significativos se mantienen. (c) El punto decimal siernpre se imprime al utilizar la proteccion de cheques, incluso para un valor nulo.

o (Cero, caracter de edicion)

EI caracter "0" se usa para reservar una posicion en un resultado editado, en Ja cual se insertara un "0".

CAP. 5]

EJEMPLO 5.34

DIVISION DE DATOS

69

Un usa tipico de "on es para imprimir centimos cuando el valor se almacena entero en la memoria de la cornputadora,

PICTURE $ZZ'zZZ.OO $ZZ.ZZZ.OO $$$,$$$.00

Valor 01205 00002 00002

Impreso como: $bl,205.00 $bbbbb2.00 bbbbb$2.00

/ (Barra, caracter de edition)

EI caracter "[" se usa para reservar un byte en el resultado editado que conteadra siernpre un -r: Este earacter es sumamente util aleditar numeros que representan fechas (par ejemplo, 231083 se editara como 23/10/83 con PIC 99/99/99).

p

Una cadena de caracteres "P" se utiliza para representar la posici6n de un punto decimal asumido cuando ellugar cae fuera del range de digitos almacenados en la memoria. "P" no es un caraeter de edicion y se usa para definir campos numericos que van a usarse en calculos. "P" no ocupa espacio adicional de aunacenarniento para el campo, simplernente indica la posicion de un punto decimal asumido. "P" puede aparecer s610 en 105 extremes derecho 0 izquierdo de un campo numerico. Los unicos caracteres que pueden precede! a "P" per Ia izquierda son "S" y "V"; el unico caracter que puede seguir a "P" par la derecha es "V",

EJEMPLO 5.35

PICTURE

(a) PP99

(b) 99PP

(c) PP99PP

(d) SP.PP999

(e) SVPPP999 (j) . SPP999

(g) S9{3)P(4)

(h) SP99

Valor en memoria 12

12

735 735 1234 538 03

Valor usado en los cdlculos .0012 1200,

+,000735 +.000735 +.00234

+5380000. +.003

Cornentarics: (0), (b), (g) El punto decimal asurnido esta tantos lugares a la izquierda del primer digito (a la derecha del ultimo dfgito) como earacreres "P" haya a la izquierda (derecha) del campo. (c) lncorrecto: "P" no puede aparecer en ambos extremes. (d) "S" puede preceder a "P" por la izquierda, (e) "v,. es redundante en este caso porque el punto decimal asurnido ya esta fijado inmediatamente a la izquierda del caractervP" situado mas ala izquierda. (j) Si el valor en memoria tiene mas digitos que caracteres "9" hay en la cadena de PICTURE, el valor se trunca por la izquierda y e1 punto decimal en el valor truncado aparece donde corresponde de acuerdo con los caracteres "P". (IJ) A los efectos del funcionamiento del caracter "P" no tiene importancia que el dfgjto mas a [a izquierda sea un cero.

5.11 CLAUSULA USAGE (Figura 5-7, linea 3)

En esta clausula se especifica la representacion interna para un elernento de datos; con frecuencia se omite dado que el valor DISPLA Y que toma por defecto es apropiado en 1a mayor parte de los casas.

USAGE IS DISPLAY

Con DISPLAY un data se representa en el sistema de codigos de caracteres propio de la cornputadora (EBCDIC a ASCfI), en el que cada caracter alfanurnerico queda reducido a un codigo binario que ocupa un byte de memoria. DISPLAY es obligatorio cuando elelernento de datos es: (I) alfanumerico (PIC X); (2) alfabetico (PIC A); (3) cualquier campo en un fichero de tarjetas (de entrada 0 de salida); (4) cualquier campo de un fichero con destine a la impresora; (5) cualquier

CAP. 5]

DIVISION DE DATOS

71

Puesto que los tres datos estan en formate DISPLA Y, eJ cornpilador se da cuenta de que tiene que convertirlos a formato COMP (0 COMP-3) para efectuar calculos. EJ resultado se volvera a convertir a for-nato DISPLAY. Una traduccion posible aJ lenguaje rnaqnina de la instruocion SUBTRACT seria:

(J) Convierte PRECIO-ORIGINAL a formate COMP y coloca el resultado provisionalmente en eI lugar de memoria T I .

(2) Convierte DESCUENTO a formate COMP y coloca el resultado provisionalrnente en eJ Jugar de memoria T2.

(3) Resia el contenido de la posicion de memoria T2 del comenido de La posicion de memoria Tl; situa el resultado en la posicion de memoria T3.

(4) Convierte el contenido de la posicion de memoria T3 a formato DISPLA Y Y coloca el resultado en PRE-

CIO-NETO. .'

Si los Ires datos estuvieran en formate COMP, Ia traduccion al lenguaje rnaquina hubiera side mas economica:

(1) Resta el contenido de DESCUENTO del contenido de PRECIO-ORJGINAL: coloca el resultado en PRECIO-NETO.

USAGE IS COMPUTATIONAL-3 (abreviado COMP-3)

COMP-3 es una extension del COBOL ANS disponible en algunos pero no en todos los sistemas.

COMP-3 es similar a COMP en el sentido de que la CPU puede realizar operaciones aritmeticas con ambos tipos de numeros; igualmente, ambos formatos ocupan rnenos memoria que la que ocuparia el mismo dato numerico en formate DISPLAY. Si se dispone de COMP-3, probablemente es mas adecuado que COMP para los datos numericos en los calculos que se realizan en el mundo de los negocios (consulte el manual de su sistema). Excepcion: No utilice COMP-3 para subindices (vease el Capitulo 10).

EJEMPLO 5.39 En el Ejernplo 5.38; sustituir "PIC S9(3)V99." par "PIC S9(3)V99 COMP-3." producina el programa objeto mas eficiente en 'una cornputadora del tipo IBM-370. El usc del formate COMP para los Ires datos ocupana el segundo Ingar en tcrmiuos de eficiencia; el formate DISPLAY genera (como en el Ejempia 5.38) la traduccion menos eficiente.

5.12 CLAUSULA BLANl( (Figura 5-7, linea 4)

La frase BLANK WHEN ZERO hace que un elemento se rellene con espacios en blanco cuando vaya a tomar el valor cero. La clausula s610 se puede utilizar con elementos numericos que no requieran proteccion de cheque. Un dato con la clausula BLANK WHEN ZERO se considera automaticamente editado, por 10 que su USAGE debe ser DISPLAY.

EJEMPLO 5.40

01 LINEA-Cl1ENTAS-DE-CLlENTES. 05 NOMBRE·DE~CLlENTE

05 FILLER

OS TIPO-DE-CLIEl'.1TE 05 FlLLER

05 DIAS-DESDE~ VENCIMIENTO as FILLER

05 IMPORTE-DEBIDO

PIC X(30). PIC XeS). PIC XBX. PIC X(4).

PIC ZZ9 BLANK WHEN ZERO.

PIC X(7).

PIC $$,$$$.99 BLANK WHEN ZERO.

Si DIAS-DESDE-VENCIMIE. TO tamara el valor cera, se imprirniria como bbb (en lugar de bbO). Si IMPORIE-DEBIDO tornara el valor cero. se irnprimirta como bbbbbbbbb (en lugar de bbbbb$.OO). EI resultado es que en el informe solo sc imprirnen valores no nulos, concentrando la atencion del usuario en aq uellos clientes que no han efectuado sus pages cuando les correspondia

72

DIVISION DE DATOS

[CAP. 5

EJEMPLO 5.41 Un informe producido par eJ Ejernplo 5.40, sin la clausula BLANK WHEN ZERO, pod ria tener el siguiente aspect 0:

NOMBRE TIPO DE PAGO DIAS PASADOS IMPORTE
FRANK A 7 0 $.00
ACE A 7 0 $.00
CARTER B 3 5 $25.32
SMITH A 7 0 $.00
PERELMAN B 5 63 $587.00
CONVERSE A 7 0 $.00
GETZ B 3 0 $.00 Observese como se requiere dena atencion para no perderse en el laberinto de ceres.

5.13 CLAUSULA JUSTIFIED (Figura 5-7, linea 5)

La clausula JUSTIFIED 5610 puede usarse con datos alfanumericos (PIC X) 0 alfabeticos (PIC A). Par defecto los datos alfanumericos y alfabeticos se justifican pot La izquierda del campo; al incluir la clausula se justifican por la derecha. Esta clausula se utiliza raramente.

EJEMPLO 5.42

OS CAMPO·A OS CAMPO-B

PIC X(5).

PIC X(5) JUSTIFIED RIGHT.

Supongarnos que CAMPO-A y CAMPO-8 taman el valor "CAT". Entcnces:

. Campo CAMPO-A CAMPO-B

Impreso como:

CATbb bbCAT

EJEMPLO 5.43

OS CAMPO-A 05 CAMPO-8

PIC X(3) ..

PIC X(3): JUSTIFIED RIGHT,

Supongarnos que CAMPO-A y CAMPO-B taman el valor "SONRIE". Entonces:

(a) (b)

Compo CAMPO-A CAMPO-B

Impreso como:

SON RIE

Comentarios: (0) Si el valor es dernasiado largo para eJ campo, los elementos PIC X y PIC A sc truocan por el mismo lado que se rellenarian si fueran COI10S. Como la justificacion por defecto se produce a la izquierda, el truncarnicnto se produce par La derecha y el campo se rellena con los tres caractcres mas a la izquierda. (b) La clausula JUSTIFIED obliga a la justificacion par la derecha, En este caso el campo PIC X(3) se rellena can los 3 caracteres mas a la derecha del valor.

5.14 CLAUSULA OCCURS (Figura 5-7, linea 6)

La clausula OCCURS permite al programador crear una estructura conocida como tabla a matriz (array): la manipulacion de tablas en COBOL se cornenzara en el Capitulo 10.

EJEMPLO 5.44

01 REGISTRO-DESCRIPCION-ARTlCULO. 05 NUMERO-ARTICULO

05 ALMACEN-ARTICULO

05 EXISTENClAS-ARTICULO OS PROVEEDORES-ARTICULO

10 NOMBRE-PROVEEDOR-ARTICULO 10 ID-PROVEEDOR-ARTICULO

10 COSTE-PROVEEDOR-ARTICULO 05 PRECIO-ARTICULO

PIC X(7). PIC X(2).

prc S9(5) COMP-3.

OCCURS 10 TIMES.

PIC X(20). PIC XC)~.

PIC S9(5)V99 COMP-3.

PIC S9(5)V99 COMP-3.

CAP, 51

DIVISION DE DATOS

73

EJ eletnento cornpuesto PROVEEDORES-ART1CULO se repite JO veces, constituyendo una labia. En Ia division de procedimientos, el programador tendra que utiiizar subindices 0 Indices para indicar la linea de la tabla que tiene que procesarse:

MOVE 'CAMANYO Y CIA' TO NOMBRE-PROVEEDOR-ARTICULO (QUE-PROVEEDOR) QUE-PROVEEDOR es un dato numerico comprendido entre I y 10, que indica a cual de las JO llneas de la tabla se refiere. Estes subindices deben tener formate (USAGE) COMP:

05 QUE-PROVEEDOR

PIC S9(2) COMPo

5.15 CLAUSULA SIGN (Figura 5-7, linea 7)

La clausula SIGN solo puede usarse con datos numericos que tengan una "S" en la clausula PICTURE y esten en formate DISPLAY. Existen las siguientes opciones:

• SIGN IS TRAILING

El signo forma parte de la representacion interna del digito mas a Ia derecha y no precisaespacio adicional en la memoria Este es el valor par defecto en el COBOL del sistema IBM OS/VS.

• SIGN IS LEADING

E! signo forma parte de la representacion interna del digito mas a 1a izquierda, No precisa espacio adicional en la memoria,

• SIGN IS TRAILING SEPARATE CHARACTER

A la representacion interna del nurnero se Ie anade por 1a dereeha el codigo EBCDIC (0 ASCII) correspondiente a "+" a ">". En este supuesto, el caracter "S' de la clausula PICTURE representa un byte extra de almacenamiento. Si el signo no estuviera presente en un dato .de este tipo, el program a fall aria.

• SIGN IS LEADING SEPARATE CHARACTER

A Ia representacion intema del mimero se Ie afiade par la izquierda el codigo EBCDIC (0 ASClI) correspondiente a "'+" 0 "-'\ .. Aquf tambien el caracter "S" de la clausula PICTURE representa un byte extra de almacenamiento. Si el signa no estuviera presente en un dato de este tipo, el prograrna

fallana, -,'

EJEMPLO 5.45 Dado

ELEMENTO-DE-DA TOS

PIC 59(3)

con un valor + 123, la Figura 5-8 muestra 11'1 representacion interna de ELEMENTO-OE-DA TOS para las diversas posibilidades de In clausula SIGN. Cada cuadrado represents un byte de memoria.

SIGN IS TRAILING: II 1213+ I SIGN IS LEADING: I+d 2\ 3\

SIGN IS TRAILING SEPARATE CHARACTER: II I 2131 + I SIGN IS LEADING SEPARATE CHARACTER: 1 +\1 1 i 131

(3 bytes)

(3 bytes)

(4 bytes)

(4 bytes)

Fig. 5-8

Las opciones "SEPARATE CHARA.CTER" y "LEADING" produciran un program a objeto menos eficiente para las computadoras del tipo IBM 370. En general es preferible la ornision de la clausula "SIGN ... " y limitarse a Ia representacion por defecto que realice un sistema concreto.

74

DIVISION DE DATOS

[CAP. 5

5.16 CLAUSULA SYNCHRONIZED (Figura 5-7, linea 8)

En algunas computadoras (como las IBM 370) los datos nurnericos en formato COMP se pueden rnanipular de forma mas eficiente si se alinean las posiciones de memoria asignadas en unos lirnites apropiados, Par ejemplo, un elemento COMP de 2 bytes se puede procesar mas facilmente si la direccion del prirnero de los 2 bytes es divisible par 2; un campo en formate COMP de 4 bytes se puede procesar mas eficienternente SI ernpieza en un byte cuya direccion es divisible por 4.

. La clausula SYNCHRONIZED (abreviada SYNC) haee queel cornpilador asigne una posicion de memoria a un elemento en formato COMP alineada con el limite que optimiza 1a eficiencia. Esto puede irnplicar la necesidad de insertar bytes de holgura entreel campo anterior en el registro y el campo que se esta alineando; dicha insercion se realiza automaticamente par el compilador,

EJEMPLO 5.46 Dada la siguiente descripcion de registro Longitud en bytes

01 REGISTRO-PEDIDO.
4 OS NUMERO-PEDIDO PIC X(4).
5 OS ID·CLI ENTE·PED J DO PIC X(S).
6 OS NUM·ARTICULO-PEDlDO PIC X(6).
2 OS CANTIDAD-PEDIDO PIC S9(4) COMP SYNC.
4 05 PRECIO-UNIDAO· PEOIDO PIC S9(S)V99 COMP SYNC. la distribucion en memoria de REG1STRO-PEDIDO sera la siguiente (el byte mas H la izquierda tiene direccion cera):

4 bytes

5 bytes

__..._,

6 bytes

I byte

2 bytes

2 bytes

------

4 bytes

.~

Precio

Articulo #- holgura Cantidad flo/gum

cliente unidad

Dado que los bytes de holgura ocupan espacio y pueden conducir a errores en la determinacion de la longitud del registro, se recomienda el usa de COMP SYNC solo para subindices en el sistema

IBM 370. _.

Pedido #-

ID

EJEMPLO 5.47 En el Ejernplo S.44, QUE-PROVEEDOR estana mejor definido asi:

OS QUE-PROVEEDOR PIC S9(2) COMP SYNC.

Es precise decir que en el COBOL del sistema IBM OS/VS se ignora por el cornpilador el adjetivo "LEFT" 0 "RIGHT" en la clausula SYNCHRONIZED.

5.17 CLAUSVLA REDEFINES (Figura 5-7, linea 1)

La clausula REDEFINES se utiliza para dar una descripcion alternative de un elemento simple o compuesto. Cuando se utiliza REDEFINES ... debe ser la primera clausula que siga al nurnero de nivel y nombre del dato:

mimero-de-nivel nombre-del-dato-l

REDEFINES nornbre-de-dato-2

EJ "nombre-de-dato-t "es un nombre altern ati vo y el "nornbre-de-dato-Z es el nornbre anterior. EI numero de nivel del nombre-de-dato-t debe ser el mismo que el correspondiente a nornbre-dedatos-2

EJEMPLO 5.48

FD FICHERO-MAESTRO-DE-CLIENTES RECORD CONTAINS !O5 CHARACTERS LABEL RECORDS ARE STANDARD .

CAP, 5]

DIVISION DE DATOS

01 REGlSTRO-MAESTRO-CLiENTES.

05 IO-CLIENTE

05 NOMBRE~CLIENTE

05 DIRECCION-CLIENTE

05 DATOS-CLIENTE-HABITUAL.

10 TIPO-FACTURA-CLIENTE 10 LlMlTE-CREDITO-CLIENTE J 0 LlMITE-PESO-CLIENTE

05 DA TOS-CLIENTE~PREFERENTE REDEFINES DA TOS-CLiENTE-HABJTUAL. 10 TIPO-DE-DESCUENTO

to CODIGO-POBLAClON

10 MODO-DE-ENVIO

10 TIPO-FACTURA.

05 DIRECCION-CLlENTE. 10 CruDAD

10 ESTADO

J 0 CODIGO-POST AL

75

PIC X(6). PIC X(30). PIC X(30).

PIC xx.

PIC S9(5)V99 PIC S9(3)V9

COMP-3. COMPo:'.

PIC SV99 PIC XC)~. PIC X(3). PIC X.

COMP-3.

PIC X(!9). PIC X(2). PIC X(9).

Si el fichero esta almacenado en disco, se pueden utilizar ,'os formatos COMPo) 0 CaMP para los datos numericos que se utilicen en calculos. Asf no s610 se Morra espacio del disco, sino que el programa objeto sera mas eficiente, La clausula REDEFINES haec' que DATOS~CLlENT£"HABITUAL y DA TOS-CLIENTEPREFERENTE ocupen exactamente las misrnas posiciones de memoria (como esto forma parte de la FD, estas posiciones son pane del registro 16gico activado en eI buffer). Ast hay un area de 9 bytes del registro logico en activo que puede tener dos intcrpretaciones diferentes (Fig. 5-9). Depende del programador trabajar can los nombres de datos que casan con el contenido real de la memoria en un instante determinado durante la ejecucion del prcgrarna. Por ejemplo, los clientes preferemes pcdrian tener todos identificativos que acabasen en cero. Despues de leer un REGISTRO-MAESTRO-CLIENTES, el programa pod ria comprobarsi el ultimo caractcr del campo ID-CLIENTE es un cera. SI no fuera cere, se procesarta DA TOS-CLIENT£.HABITUAL, en caso contrario se procesana DATOS~CUENTE-PREFERENTE.

DA TOS-CLIENTE-PREFERENTE

Tipo de I ., I
descuento I .1 Tipo de
Pic SV99 I. Codigo de poblacion Modo de envio I factura
COMP-3 \ Pic X(3) Pic X(3) I Pie X
(2 bytes) I (3 bytes) (3 bytes) I (I byte) parte del registro logico activo en el buffer

Tipo de factum PIC XX (2 bytes)

Limite del credito PIC S9(5)V99 COMpc3

(4 bytes)

DA TOS-CLIENTE- HABITUAL

Fig. 5-9

Limite de peso PIC S9(3)V9 COMP-:,

(3 bytes)

Observese que hay total libertad para usaf REDEFINE con un area que contenga clausulas PICTURE, USAGE, etc, La unica restriccion es que las longitudes del elementa redefinido y del elemento redeflnidor sean iguales. Observese tambien que REDEFINES debe tenerse en cuenta para calcular Ia longitud de un registro: la Iongitud del REGISTRO-MAESTRO-CLIENTES es 105 y no 114 bytes.

EJEMPLO 5..49 En el prograrna del Ejernplo 5.16, la insrruccion 01 ETIQ-CORREO·ESTADO-REG

REDEFINES ETIQ·CORREO-CALLE-REG.

76

DIVISION DE DATOS

LCAP. 5

causara un error sintactico (y seria innecesario puesto que los dos elementos del nivel 0 I se redefinen implicitamente uno a otro), Los elementos del nivel 0] en la seccicn de ficheros no pueden ser REDEFINED. Los elementos de nivel 01 pueden, sin embargo, ser REDEFINED en e) WORKING·5TORl\GE.

EJEMPLO 5.50 A menudo es titil al cornprobar campos de entrada ivalidacion de entradas) poder referirse a un campo numerico como si fuera PIC X 0 PIC 9. La chiusula REDEFINES ... permite hacerlo de ambos modos:

05 CAMPO·ENTRADA~NUMERICO PIC S9(3)V99.

05 CAMPO·ENTRADA~NUMERICO·X

REDEFINES CAMPO~ENTRADANUMERICO PIC XeS).

5.18 DETERMINACION DE LA LONGITUD DE UN ELEMENTO DE DATOS

La cantidad de memoria requerida para alrnacenar un dato elemental se determina teniendo en cuenta las clausulas PICTURE y USAGE. La Iongitud de' un elernento compuesto es Ia suma de las longitudes de los elementos simples que 10 conforman, por 10 que es suficiente saber determiner Ia Iongitud de un dato elemental.

DISPLAY USAGE. Cada caracter de Ja cadena PICTURE (a excepcion de "P","S" y "V") requiere un byte de almaceaamiento; "P", "S" y "V" no utilizan espacio.

COMP USAGE. Como los datos COMP no se pueden editar, los unicos caracteres perrnitidos son "S", "V", "9" y "P". Como sucedia can los datos en formate DISPLAY, "S", "V" y "P" no consumen espacio de memoria. Desgraciadarnente, el numero de "9" en la cadena PICTURE de un data COMP no deterrnina por si mismo la Iongitud. Para los sistemas-del tipo IBM 370;

Numera de'C9" en PIC

1 a 4 5a9

10 a 18

Longitud del elemento

en bytes

2 4 8

COMP-3 USAGE. Los unicos caracteres permitidos son "S", "V", "9" y "P". Al igual que con COMP, la longitud de un dato en formate COMP~3 depende del numero de digitos del data (nurnero de "9" en la cadena de PICTURE). Si hubiera k caracteres "9" (I 5.k5.18) en la cadena PICTURE de un data COMP~3, el mirnero de bytes ocupados en un sistema IBM 370 sena

[k/2l + I

donde [kI2] es el mayor entero menor 0 igual a kl2 (las fracciones se truncan) ..

EJEMPLO 5.51

01 REGISTRO·INVENTARIO·DISCO.

05 NUM·ARTICULO·INVENTARIO 05 DESCRIPCION~INVENT ARlO

05 EXLSTENC'AS~INVENTARro

05 PEND~RECIBIR~INVENTARIO 05 DESCUENTO-INVENTARIO

05 PRECIO~VENTA~INVENTARIO 05 FECHA~PEDIDO~INVENTARIO.

I n MES~PEDIDO~INVENT ARlO 10 DIA-PEDIDO~INVENTARIO 10 ANO·PEDiDO~JNVENTARrO

05 PORC·PERDIDA~rNVENTARIO

PIC X(8).

PIC X(30). PIC S9(5) PIC 59(4) PIC S9(3)V99 PIC 59(5)V99

prc XX ..

PIC XX.

PTC XX.

PIC SVP9

COMPo COMPo COMPo COMPo

COMP.

· If! longitud del registro es 1a suma de las longitudes de los campos un byte por cada PIC X

un byte POf cada PIC X

5 a 9 dfgitos CaMP: 4 bytes 1 a 4 digitos CaMP: 2 bytes 5 a 9 digitos COMP: 4 bytes 5 a 9 digitos COMP: 4 bytes

eJ campo Jongitud es la surnade los subcampos longitud.

un byte por cada PIC X

un byte par cada PIC X

un byte par cada PIC X

1 a 4 digitos COMP: 2 bytes (no:.610 un gen PIC)

Can COMP-3 en lugar de COMP, tendrian lugar los siguientes carnbios en las longitudes de los campos:

CAP. 5]

En un sistema del tipo IBM 370, se tendria:

Nombre del data

REGISTRO-INVENT ARlO-DISCO

NUM-ARTICVLO-INVENT ARlO DESCRIPCION-INVENT ARlO EXISTENCIAS-INVENTARIO PEND-RECIBIR-INVENT ARlO DESCUENTO-INVENT ARlO PRECIO- VENT A-INVENTARIO FECHA-PEDJDO·INVENTARIO

MES-·PEDlDO-INVENTARIO DIA-PEDIDO·INVENTARIO ANO-PEDlDO~INVENT ARlO PORC-PERDIDA~rNVENARIO

Nombre del data

REGJSTRO-INVENTARIO-DISCO EXISTENCIAS-INVENT ARlO

PEND-RECIBIR-INVENT ARID

DESCUENTO-INVENT ARIO PRECIO-VENTA-INVENT ARlO PORC-PERDIDA-INVENTARIO

DIVISION DE DATOS

Longitud en bytes

60

8

30 4 2 4 4 6

Longitud en bytes

58

[5/2) + 1 = 3

[4/2J + 1 = 3

[5/2J + I = 3 [7/2J + 1 = 4 (J/2]+1=4

77

Comentario

2 2 2 2

Comentarlo

se ahorran 2 bytes utilizando COMP~3 ahorra un byte can relaci6n a COMP; hay cinco "9" en PICTURE

toma un byte adicionaI COMP;

haycuatro "9" en PICTURE ahorra un byte con.relacion a COMP igual que CaMP

ahorra un byte con relacion a COMP

5.19 SECCION DE ALMACENAMIENTO DE TRABAJO (\VORKING-STORAGE SECflON)

La seccion de alrnacenamiento de trabajo de Ia division de datos permite que el programador defina areas de alrnacenamiento de datos en memoria principal que requiere el programa y que no son parte de ningun registro (vease el Problema 2.21). La descripcion de los datos en la WORKlNGSTORAGE SECTION es bastante similar a Ia de la seccion de ficheros, can las siguientes diferencias:

(1) Como los campos del WORKING-STORAGE no forman parte de los registros logicos, no hay entradascomo las de FDen la seccion de almacenamiento de trabajo,

(2) Hay un nuevo numero de nivel (77) para su usa al definir campos del alrnacenarniento de trabajo que no son parte de un registro,

(3) Tambien existe una nueva clausula de descripcion de datos ("VALUE ... "), Que sirve para dar, a un elemento del almacenamiento temporal, el valor que debe tamar al principio de la ejecucion del prograrna ..

NiveI77

Mientras que todos los campos de la seccion de ficheros (FILE SECTION) son registros logicos o parte de registros logicos, machos campos de la seccion de almacenamiento de trabajo son datos independientes sin relacion con otros campos del WORKING-STORAGE. A los datos independientes se les puede dar a cada uno el nivel 77 y colocarlos al principia de la seccion de alrnacenamiento de trabajo, Sin embargo, se recomienda Que siempre que sea posible, los datos elementaies se agrupen formando registros en el WORKING-STORAGE can entradas descriptivas al nivel 01 (al igual que en 1a seccion de ficheros), De este modo se facilita la depuracion y mantenimiento del prograrna.

78

DIVISION DE DATOS

[CAP. 5

EJEMPLO 5.52 Compare las dos versiones siguientes de la section de atmacenarniento de trabajo:



77 NUM-CHEQUES-IMPRESOS 77 TRAB-HORAS-EXTRAS

77 INDJ CE- T ABLA- IMPUESTOS 77 TODOS-REG-PROCESADOS

77 INDICE-TABLA-DEDUCCIONES 77 PER TENENCIA-SINDICA TO



01 LlNEA-I NFOR ME-NOMINA. 05 fD-EMPLEADO-NOMINA 05 ALLER

05 NOMBRE-EMPLEADO-NOMINA 05 FTLLER

as SALARIO-BRUTO-NOMINA

01 CONTADORES-DE-TRABAJO . 05 NUM-CHEQUES-IMPRESOS 05 TRAB-HORAS-EXTRAS

OJ INTERRUPTORES-PROGRAMA. as TODOS-REG-PROCESADOS 05 PERTENENCIA-SINDICA TO

01 INDICES-TABLAS.

05 fNDICE- T ABLA-IMPUESTOS

05 INDICE-TABLA-DEDUCCIONES

01 LINEA-INFORME-NOMrNA.

OS ID-EMPLEADO-NOMINA 05 FILLER

05 NOMBRE-EMPLEADO-NOMINA 05 FILLER

05 SALARJO-BRUTO-NOMINA

PIC 59(5) PIC 59(5) PIC S9(4) PIC X. PIC S9(4) PIC x.

PIC XeS). PIC X(3) PIC X(20). PIC X(4)

PIC $$$,$$$.99.

PIC 59(5) PIC 59(5)

PIC x PIC X.

PIC 59(4) PIC 59(4)

PIC XeS). PIC X(3) PIC X(20). PIC X.(4)

PIC $$$,$$$.99.

COMP-3 . COMP-3. COMP SYNC.

COMPSYNC.

VALUE SPACES.

VALUE SPACES.

COMP-3. COMP-3.

COMP SYNC. COMP SYNC.

VALUE SPACES.

VALUE SPACES.

En la segu nda version, ·los sei s elem en tos de ni vel 77 han sido agrupados en ires clases: contadores, in terru p1 ores y subindices. Cada grupo de datos se ha tratado como un conjunto de campos en nivel A!. EI nombre de dato a ni vel 0 J esdescripti vo de la clase de datos. La segunda version esta m ucho mejororganizada que la primera.

EJEMPLO 5.53 Aunque la clausula PICTURE es invalida para un elernento cornpuesto, USAGE ... y SYNCHRONIZED ... sf se pueden utilizar can esos datos, en cuyo caso se aplican a tcdos los elementos del grupo, Recomendamos que esta practica se utilice en muy raras ocasiones, porque dificultara a otros programadores durante el mantenimiento del programa el que puedan reconocer el USAGE para est os datos. Un lugar relativarnente "apropiado' para el usc de USAGE con elementos compuestos es con aquellos que de otro modo estarian en el nivel 77 del WORKING-STORAGE (por ejemplo, en el Ejemplo 5.52, "0 I CONTADORES-DE-

TRABAJO COMP-3").

Clausula VALUE

Cuando se utiliza la clausula

[ "'{ literal } ]

VALUE IS I constante-figurativa

es para indicar el valor de un elemento de la seccion de alrnacenamiento de trabajo (WORKlNGSTOR.J\GE) al principia de La ejecucion del program a .. Si no se utiliza la clausula VALUE, es impredecible el contenido inicial de estos datos; los programadores en estos cases dicen que contienen basura 0 que estan indefinidos. Muchas veces, el contenido inicial de un dato no tiene importancia porque la logica del program a inyecta el valor preciso (borrando la basura) antes de hacer usa de su

contenido, "

CAP. 5]

DIVISION DE DATOS

79

Hay dos tipos de Iiterales y seis tipos de constantes fi gurati vas:

Literales no numericos. Un literal no numerico es una cadena de caracteres entre comillas (Seceion 2.3). Si se desea representar unas cornillas en un literal no nurnerico, se utilizan dos dobles cornillas seguidas y s610 una se considera parte del literal.

EJEMPLO 5.54

.,

05 NOMBRE·CLIENT~ PIC X(i5) VALUE "''''KWIK'''' CLEAN".

especifica el valor "KWIK" CLEAN (cada pareja de dobles corniltas dentro del literal representa unas dobJes cornillas en el valor).

Algunos cornpiladores utilizan la camilla simple (0 el apostrofo) en lugar de las dobles cornjllas. La norma ANS 74 especificael uso de las dobles cornillas, pero el programador tiene cjUe conformarse con el sistema del que disponga:

05 NOMBRE·CLIENTE PIC X(15) VALUE 'PERELMAN"S PETS'.

Literates numerleos. Se cornponen de digitos entre 0 y 9, signa mas (+), signa (-) y el punta decimal. EI maximo valor de un literal nurnerico depende de la cornputadora; en el COBOL del sistema IBM OSjVS es de 101&-\ (18 digitos), Si DO se especifica signa en un literal numerico, se asurne que es positive. Si un literal nurnerico no tiene punto decimal, se supone que es eruero.

Constantes flgurativas. Una constante figurativa es una palabra reservada que representa un valor constante y pueden usarse en cualquier parte de un program a en lugar del literal correspondiente, La Tabla 5·2 rnuestra las constantes figurativas del COBOL de 1MB OSjVS.

Tabla 5·2

Tipo del literal I ,
Palabra reservada Valor
: al que reernplaza
o (repetido un
-, adecuado nurnero de
ZERO numerico veces; el compilador se
ZEROS (or ZEROES) ajusta para cera en los
formatos DISPLAY 0 COMP)
SPACE un espacio en blanco
SPACES no numerico (apropiadarnente
repetido)
el caracter mayor en la
HIGH-VALUE no numerico secuencia de orden de
HIGH·VALUES caracteres (repetido
apropiadarnente)
el caracter menor
LOW·VALUE no nurnerico en la secuencia de orden
LOW·VALUES de caracteres (repetido
apropiadarnen te)
QUOTE las cornillas (simples
no numerico o dobles) que se usen
QUOTES (apropiadamente repetido)
"literal" puede ser
ALL literal no numerieo cualquier cadena de caraeteres
entre comillas (cadenas
repetidas apropiadamente) 80

DIVISION DE DATOS

[CAP. 5

EJEMPLO 5.55 Observe el uso de constantes figurativas y de luerales ell 10 siguiente:

WORKING-STORAGE SECTION.

01 TODO-EL- WORKING-STORAGE. 05 FILLER

05 BANDERA-ULTIMO-REGISTRO

PIC X(30)

VALUE "WORKING-STORAGE EMPIEZA AQUI" ..

PIC X(3)

VALUE HIGH-VALUES.

PIC X(IOO) VALUE ALL "-".

PIC X(100) VALUE SPACES.

PIC S9(4) " COMP-3

VALUE ZERO .

05 AREA~SUBRA Y ADO

05 AREA-U~EA-EN-BLANCO

05 CONTADOR-REGISTROS-INV ALIDOS

•••• ~ •••• ~ •••••••••••• ~, •• ~~ •• , ••• + ...... ". + •••••

PROCEDURE DIVISION.

MOVE SPACES TO AREA-SALIDA-MENSAJES

MOVE "NUM-ARTICULO-IN VA LIDO;' TO, MENSAJE-SALIDA MOVE 200.95 TO COTIZDIARIA

MOVE ALL "*" TO AREA-MENS-PAGADO

MOVE LOW-VALUES TO ID-MAESTRO-EMPLEADOS

Observe especialmente el usa de un litera! no numerico para marcar el principio del WORKING-STORAGE.

De este modo se Iacilita la tarea de encontrar el WORKING-STORAGE en cualquier circunstancia (vease la Seccion 9.2)

Comparacion entre VALUE ... Y MOVE .

Como se ha vista, la clausula VALUE se puede utilizer para inicializar un elemento del almace-

namiento de trabajo: '

05 CONTApOR-REGISTROS-INVALIDOS PIC S9(4) COMP-3 VALUE ZERO.

Tambien con el mismo resultado se puede utilizar una instruccion MOVE en la division de procedimientos para inicializar el elemento:

MOVE ZERO TO CONT ADOR-REGISTROS-INV AUDOS

Con respecto al uso de estas dos posibilidades se dan los siguientes consejos:

(1) Si el elernento que se cita inicializando permanece inalterado durante la ejeeucion del programa, debe usarse Ia clausula VALUE.

(2) Si el valor del elemento cambia durante laejecucion del prograrna, es mejor usar para inicializar la instruccion MOVE.

(3) Si el elemento no pertenece al WORKING-STORAGE (a excepcion de los elementos de nivel 88 que se ven en la Seccion 7.8), no puede usarse la clausula VALUE.

(4) Si el valor inicial no tiene importancia para el correcto funcionamiento del prograrna, es preferible no inicializarla,

5.20 NORMAS DE CODIFICACION

Recopilamos aqui una serie de normas recomendadas para la codificaci6n de las divisiones de identificacion, del entorno y de datos.

1. Los parrafos de la division de identificacion se inc1uyen en las normas ANS porque la informacion que contienen es importante, No se salte las entradas de la IDENTIFICATION DIVISION.

2_ Hay mucha flexibilidad para la escritura de ia division de identificacion: ayude a que se pueda leer facilmente ..

3, Utilice cornentarios al final de la di vision de identificacion para explicar 10 que haee el programa.

CAP,5J

DIVISION DE DATOS

4. Utilice puntos estructurados cuando una instruccion tenga varias clausulas (par ejernplo, SPE~ ClAL-NAMES, FD).

5. lncremente los numeros de nivel en mas de una unidad para permitir posteriormeute inserciones. (En este libra se suelen n umerar 01, 05, 10, 15, 20,. ""' etc.),

6. Desplace las !ineas para que se aprecien con cJaridad los nurneros de nivel.

7. Cad a nombre de data debe tener un corto prefijo (0 sufijo) que Ie asocie can el registro del que forma parte.

8. El Testa de los nombres de datos deben ser tan descriptivos como sea posible (recuerde que dispone de hasta 30 caracteres),

9. Coloque las instrueciones SELECT en algun orden (par ejemplo, prirnero ficheros de entrada, despues ficheros de entrada/salida y par ultimo ficheros de salida) y utilice el misrno orden con

las instrucciones FD. ..

10. No utilice elementos de nivel 77 en el almacenarniento de trabajo; en su lugar agrupe los elementos formando categorias bajo nom bres descripti vas al ni vel 0 I.

11. Utilice alguna norma para la codificacion de elementos del alrnacenamiento de trabajo, tales como: interruptores de programa, banderas, contadores, constantes figurativas y literales, acumuladores, subindices, tablas y capias de trabajo de los registros logicos para los ficheros, Estos ultirnos deben ordenarse como en FD; en los ficheros de impresion deben definirse prirnero las capias de trabajo de las lineas de cabecera, a continuacion las lineas del cuerpo y despues los totales y las notas aJ pie.

12.. Siempre que sea posible, alinee las clausulas PIC USAGE, SYNC y VALUE en columnas.

13. Si es posible, indique la funcicn de cada elernento de datos en so nornbre; par ejemplo, todos los interruptores de programa deberian comenzar con "INTER", todas las banderas con "BANDERA", todas las areas de total can "TOTAL''', todos los con tad ores con "CONTADOR" 0 can "NUMERO".

14. Algunos compiladores disponen de extensiones del COBOL ANS que perrniten al programador separar los elementos en el listado de! prograrna fuente para que sea mas. Iacil su lectura. Por ejernplo, enel COBOL del sistema IMB OS/VS, la instruccion "EJECT" escrita en cualquier parte del margen B de una linea hace que !a siguiente linea del listado cornience aI principio de una nueva pagina, "SKlP I", "SKlP2", "SKIP3", escrito en cualquier parte del margen B de una linea, obligan al compilador a saltar el numero de lineas indicado. Estas posibilidades pueden usarse para que cada division y seccion empiece en una pagina nueva y que los parrafos estell separados uno de otro (con eI nombre del parrafo seguido de alguna linea en blanco). Las instrucciones SKIP 1, SKIP2 y SKIP3 se procesan por el cornpilador can mayor rapidez que una linea en blanco en el propio programa.

Preguntas de repaso

5.1 ~Cual es e) fin de Ia division de datos", z,ycl de la seccion de fichcros?, ~y eJ de la seecion de almaeenamiento de trabajo?

5.2 ~Que tipo de datos se encuenuan en el almacenarnicnto de trabajo?

5.J~CUlil es el proposito de una entrada a nivel 0 I en la division de datos?

5.4 Explique la relacion entre las instrucciones FD y SELECT.

5.5 zQue informacion se especifica en la instruccion FD?

5.6 Explique c6mo ahorra espacio en disco 0 cinta el bloqueo,

5.7 Explicar las diferencias entre los registros fisicos y 16gicos.

82

DIVISION DE DATOS

[CAP. 5

5.8 Defina factor de bloqueo.

5.9 i,Que son los espacios interregistros e interbloques?

5.10 Explique de que manera el bloqueo aumenta la vela.cidad de procesamiento de un fichero.secuencial en cinta 0 disco.

5.11 Explique el efecto del bloqueo en el procesarniento al azar de un fichero.

5.12 Explique como se manipulan los registros de longitud variable en el sistema IBM OS/VS:

5.13 Explique el modo de calcular el argurnento de la clausula BLOCK CONTAINS ... para registros de longitud variable.

5.14 i,Par que es opcional la clausula RECORD CONTAINS? i,Cuando debe utilizarse?

5.15 Explique el modo de calcular el argumento de la clausula RECORD CONTAINS ... para registros de longitud variable ..

5.16 i.Cm'il es el significado especial de "BLOCK CONTAINS 0 RECORDS" en el COBOL del sistema IBM OS/VS?

5.1 7 Explique 1001 uso de etiquetas con ficheros en ci n ta 0 disco.

5.18 i,Quc es el directorio 0 VTOC?

5.19 iCu:il es la (mica entrada obligatoria en la instruction FD?

5.20 iQue ficheros se supone que tienen etiquetas y cuales no?

5.21 iPor que es tan infrecuente el usa de DATA RECORDS ... ? l,Cuando podna ser util?

5.22 De un ejemploide fichero can mas de un tipo de registro 16gico. Explique c6mo se puede utilizer el e6digo de registro para distinguir entre los diversos tipos.

5.23 Defina los siguientes terrninos asociadas can la clausula LINAGE:. (a) pagina logica, (b) cuerpo de pagina, (e). area de notas al pie, (d) margen superior, (el margen inferior.

5.24 /,Para que tipo de fichero debe usarse la clausula LINAGE?

5 .. 25 ~Q\le es un drea de entradatsalida 0 bl{lJer?

5.26 Explique la relacion entre las entradas al nivel 01 de la instruccion FD y los buffers de ficheros,

5.27 i,Cuales son los numeros de nivel validos?

5.28 l, Que tiene de especial el ni vel Ol ?

5.29 Explique como se utilizan los nurneros de nivel para rnostrar la estructura del registro.

5.30 l,Que importancia tiene el desplazamieruo de Itneas en la division de datos?

5.31 Defina: (a) elemento cornpuesto, (6) elernento simple.

5.32 De sugerencias para la invencion de nornbres de elementos.

5.33 En un fichero que cont iene mas de un ti po de registro logico, iPor que am bas ti pOS suelen coincidir en unos bytes particuiares?

5.34 Explique la forma en que los buffers multiples suelen aumentar la velocidad de procesamiento.

5.35 GPar:a que se utiliza "FILLER'"?

CAP S)

DIVISION DE DATOS

83

5.36 i,Que se entiende por edicion]

5.37 i,Para que sirve la clausula PICTURE?

5.38 i,Como se puede repetir facilmente un caracter en .una cadena de PICTURE?

5.39 Explique el uso de los caraeteres "An y "B" en la clausula PICTURE.

5.40 i,Por que se usa tan frecuentemente el caracter "X" en la clausula PICTURE?

5.41 Indique que caracter debe usarse para represeniar "nurneros' en la clausula PICTURE.

5.42 Explique el uso de "5", "9" y "V" para representar numeros, Distinga entre esto y PTC "X":'

5.43 Defina: (a) Iruneamiento, (b) redondeo,

5.44 i,Por que "5" y "Y" no requieren espacio de almacenarniento adicional?

5.45 i,Cuando debe usarse "S" y pOT que? i,Cuando ha de ornitirse?

5.46 i,Cual sera el resultado si se imprime un dato nurnerico con PIC "$", "9'" y "V" en un sistema IBM?

5.47 Explique la edicion a que dan lugar los caracteres: "Z", punto, coma, "S", "CRn, "DB", "_", "s-",

5,48 Explique en que consiste la proieccion de cheques.

5.49 Explique la diferencia entre edicion fija y [lctante.

5.50 i.De que forma se suelen imprimir los nurneros negatives en los inforrnes del mundo de los negoeios?

5.51 Explique el uso con PIC de "0", "/" y "P".

5.52 Diga los Iormatos USAGE disponibles en el COBOL de IBM OS/VS e indique cuando deben usarse cada uno de elias.

5.53 ~Cuando un elemento debe tener formato DISPLA Y?

5.54 i,Por que son COMP y COMP-3 mas eficientes para hacer calculus?

5.55 i,Que ventajas ofrece el usa de COMP y COMP-3 para campos numericos en registros en cinta 0 disco?

5.56 Explique como determinar la longitud de un elemento cuyo forrnato es (a) DISPLAY, (b) COMP, (c) COMP-3.

5.57 Explique el uso de Ia clausula BLANK WHEN ZERO.

5.58 Explique la funcion desernpenada par JUSTIFIED.

5.59 (,Que hace la clausula OCCURS?

5.60 Cornente las diversas opciones de SIGN IS ...

5.61 Explique 10 que haec la clausula SYNCHRONIZED ...

5.62 i,Que son los bytes de holgura? Relacionelos can el usa eonveniente 0 no de SYNC.

5.63 Explique el uso de REDEF1NES ... De algun ejemplo concreto.

5.64 i,QUt debe utilizarse en lugar del nivel 77 del almacenarniento de trabajo?

5.65 i,Que es la basural

84

DIVISION DE DATOS

[CAP. 5

5.66 Diga las reglas para la formacion en COBOL de literales y constantes figurativas,

5.67 Explique la funcion de 12 clausula VALUE.

5.68 iCuando debe inicializarse un campo con Ia clausula VALUE?, iY COil una instruccion MOVE de la division de proeedirnientos?

Problemas resneItos

5.69 i,Que esta equivocado en la siguiente entrada del WORKlNG-STORAGE?

05 MAXIMO-VENT AS- TOTALES

\:,.

PIC S9(5)99 VALUE HIGH- VALUE.

HIGH-VALUES Y LOW-VALUES son constantes figurativas que pueden usarse solo COil PIC X, nunca en calculos ..

5.70 Dadas las instrucciones

SELECT FICHERO-PEDIDOS-CLIENTES SELECT INFORME-DE-PEDIDOS SELECT FICHERO·MAESTRO-CLIENTES

ASSIGN TO PEDIDOS. ASSIGN TO INFORME. ASSIGN TO MAESCLIE.

i,que nombres FD deberan usarse en la seccion de ficheros?

FILE SECTION.

FD FICHERO-PEDIDOS-CLIENTES

FD INFORME-DE-PEDlDOS

FD FICHERO-MAESTRO-CLlENTES

5.71 Suponga que el FICHERO-PEDIDOS-CLIENTES del Problema 5-70' contiene 65 bytes par registro can un factor de bloqueo 40'. Almacenado en disco. De la descripcion FD cornpleta.

FD FICHERO-PEDIDOS-CLIENTES

BLOCK CONTAINS 40 RECORDS RECORD CONTAINS 65 CHARACTERS LABEL RECORDS ARE STANDARD

Puesto que el fichero esta en disco, se necesita usaf Las etiquetas estandar. En los sistemas IBM, hubiera sido rnejor utilizar "BLOCK CONTAINS 0 RECORDS" para que el factor de bloqueo pudiera ser tornado de la etiqueta del fichero ya existente,

5.72 Si el fichero del Problema 5.71 contuviera 2.0'0'0 registros logicos, cuantas operaciones de entrada/salida se necesitanan durante un procesarniento secuencial del fichero?

Con 40 registros logicos per bloque, 2 .. 000 registros logicos requieren 2.000/40 = 50 bloques. Como cada entrada del disco transfiere un b!oque complete, se necesitan solo 50 cperaciones.

En el caso de que el fichero no estuviera bloqueado, habria un registro logico par eada registro fisico y se hubieran necesitado 2.000 operaciones de entrada/salida.

5.73 l,Por que el mlmero de "operaciones de entrada/salida del disco" es un indicativo importante de la vel acid ad con que se puede procesar el fichero?

CAP. 51

DIVISION DE DATOS

85

A diferencia del acceso a datos contenidos en la memoria principal, que puede hacerse en nanosegu ndos (10-9 seg . .) 0 men os, el acceso a datos contenidos en disco algunos veces implica el desplazarnieruo del braze (a rnenos que se disponga de una cabeza por cada pista 0 la cabeza movil este precisamente situada sobre la pista que se necesita) y siempre implica eI tiempo de rotarian necesario para que la informacion se situe debajo de la cabeza, Estas operaciones son rnecanicas y POT tanto lentas en comparacion can las operaciones de la cornputadora: para un disco modele .IBM 3380 eJ tiempo m edio para el movi m iento del braze es J 6 ms y el tiempo medic de rotacion es 8,3 rns, Si el procesamiento del fichero contiene un nurnero grande de accesos flsicos al disco, est os tiempos en milisegundos cobran una irnportancia extraordinaria,

5.74 ~C6mo afecta el bloqueo a la utilizacion del espacio en cinta 0 disco?

EI bloqueo ahorra espacio en disco 0 cinta eliminandoalgunos de los espacios interregistros, Per ejernplo, en el fichero del Problema 5,72 se requieren 4 pistas en un discomodele 3380 can tin factor de bloqueo 40,. Si el factor de bloqueo fuera 1, se necesitanan 25 pistas, .-

5.75 Suponga que el INFORME-DE-PEDIDOS del Problema 5,70 debe irnprimirseen papel de [32 caracteres por linea, De la descripcion cornpleta de este fichero (FD).

FO INFORME-PEOIDOS

RECORD CONTAINS 132 CHARACTERS LABEL RECORDS ARE OMITTED LINAGE IS 60

WITH FOOTING AT 55 LINES AT TOP 3

LINES AT BOTTOM 3

Se omite la clausula BLOCK CONTAINS porque los ficheros de impresion no deben estar bloqueados, No hay eiiquetas en los ficheros de impresion (LABEL RECORDS ARE OMITTED). La clausula UNAGE facilita a las instrucciones "WRITE" de 1a division de procedimienios el control de la posicion de las lineas en Ia pagina, Con este fichero no se pueden utilizar los canales de control del carro porque se utiliza la clausuta LINAGE,

5,76 Suponga que ~J FICHERO-MAESTRO-CLIENTES del Problema 5,70 tiene dos tipos de registros Iogicos: El REGISTRO-CLIENTE-NORMAL con 200 bytes y eJ REGISTROCLIENTE-PREFERENTE con 350 bytes, Detalle completarnente la instruccion FD para un factor de bloqueo 40., Uiilice BLOCK CONTAINS", RECORDS,

FO F1CHERO-MAESTRO-CLIENTES BLOCK CONTAINS 40 RECORDS

RECORD CONTAINS 200 TO 350 CHARACTERS LABEL RECORDS ARE STANDARD

DATA RECORDS ARE

REGISTRO-CLIENTE-NORMA L REG ISTRO-CLIENTE" PR EFER ENTE

OJ REGISTRO-CLIENTE-NORMAL

01 REG1STRO-CLlENTE-PREFERENTE

5.77 Resuelva el Problema 5,76 utilizando BLOCK CONTAINS." CHARACTERS,

FD F1CHERO-MAESTRO-CLIENTES

BLOCK CONTAINS 8164 TO 14164 CHARACTERS RECORD CONTAINS 200 TO 350 CHARACTERS LABEL RECORDS ARE STANDARD

DATA RECORDS ARE

REGISTRO-CUENTE·NORMAL REGISTRO·CLIENTE-PREFERENTE

La clausula RECORD CONTAINS .. , no incluye los bytes ocupados par las palabras de descripcion de rcgistro y bloque; pero, cuando sc uiiliza la opcion CHARACTERS. BLOCK CONTAINS.,,, debe /

86

DIVISION DE DATOS

[CAP. 5

coruener estas areas de 4 bytes. EI nurnero de bytes. precisos para contener un bJoque minima es 8.164: cuarenta registros logicos de 200 bytes mas cuarenta palabras de descripcion de registro de 4 bytes mas una palabra de descripci6n de bloq ue de 4 bytes. De form a SI mi lar se precisan 14. 164 bytes para

almacenar un bloque de la maxima longitud, .

En la version de COBOL del sistema IBM OSjVS serfa preferible especificar "BLOCK CONTAINS o CHARACTERS" para que el tamano del bloque se pueda conocer a partir de la etiqueta del fichero (que ya existe y dispone de etiquetas estandar).

5.78 Si no existe un fichero y pretende crearse mediante un prograrna, lse puede utilizar "BLOCK CONTAINS 0 ... "?

Sf, pero en este case Ia instruccion del lenguaje de control de trabajos que define el flchero debe especificar el tamano del bloque 0 de 10 contrario tendra lugar un error,

5.79 Clasifique los dispositivos de entrada/salida que se han mencionado hasta el memento en terminos de si soportan a no etiquetas de fichero,

Soportan etiquetas estdndar

I. Disco de cabeza rnovil

2. Discos de cabeza fija y tam bores

3. Cinta magnetica (carrete)

4. Cinta magnetica (casete)

5. Disco flexible

Las etiquetas SOD precisas en todos los ficheros ell disco. Ell los ficheros en cinta suele estar generalizado el uso de etiquetas par la seguridad que proporcionan,

No soportan etiquetas I. Lectores de tarjetas

2. Perforadores de tarjetas

3. Irnpresoras

5.80 Escriba las instrucciones de la division de procedimientos que imprirnan una etiqueta de correo manipulando codigos de registros para el fichero de los Ejernplos 5.16 y 5.17.

READ FlCHERO-ETIQUETAS-CORREO RECORD

IF ETIQ-CORREO-CALLE-CODIGO IS EQUAL TO ., J "

MOVE ETIQ-CORREO-CALLE-NOMBRE TO NOMBRE-ETIQUET A

: MOVE ETIQ-CORREO-CALLE-CALLE TO CALLE-ETIQUETA

. ELSE

IF ETIQ-CORREO-CALLE-CODIGO IS EQUAL TO "2"

., MOVE ETIQ-CORREO-ESTADO-CIUDAD, TO CIUDAD-ETIQUETA

MOVE ETIQ-CORREO-ESTADO-ESTADO TO ESTADO-ETIQUETA

MOVE ETIQ-CORREO-ESTADO-CODPOSTAL TO CODPOSTAL-ETIQUETA ELSE

DISPLAY "ERROR--CODIGO REGISTRO IN\' ALIDO: IGNORADO"

La instruccion READ lee un registro Iogico del FICHERO-ETIQUETAS-CORREO. Recuerde que como se vio en el Ejemplo 5.17 el codigo de registro ocupa el primer byte del registro logico e identifica su tipo. Suponga que los registros tipo calle tienen "I" en el primer byte y los registros tipc estado tienen un "2" .. Como el primer byte de cada registro es del tipo PIC X, no irnporta emit de los dos nornbres utilice e) programador para referirse a el (ETIQ-CORREO-CALLE-CODIGO y ETIQCORREO-E5TADO-CODIGO, ambos se refieren al primer byte del registro logico y 10 interpretan como "PIC X").

Despues de la instruccion READ, eI prograrna utiliza la instruccion IF para comprobar si el valor del primer byte del registro 16gico es "l". En caso afirmativo, se mueven el nombre y Ja calle al area de la etiqueta; en caso negative, se cornprueba si eI primer byte del registro Iogico es "2". 51 este primer byte DO es ni "I" ni "2", el programa imprirne un mensaje de error e ignora el registro logico correspondiente, Observe Como los nornbres utilizados en las seritencias MOVE dependen totalrneme del codigo de registro,

5.81 Tanto PIC A como PIC X se pueden usaf can datos alfabeticos, ZCual es mejor?

Muchos program adores en COBOL utilizan PIC X en lugar de PIC A para datos alfabeticos. No hay inconvenientes y 51 algunas ventajas: algunas instrucciones de Ia division de procedirnientos funcionan con PIC X y no can PIC A (veanse los Capitulos 6 y 7) ..

CAP, 5]

DIVISION DE DA ros

87

5.82 Clasifique los elementos de los que a continuaci6n se da su clausula PICTURE en una de estas cuatro categorias: (i) alfabetico, (ii) alfanumerico, (iii) numerico y (iv) numerico editado.

(a) AABAAA (e) 99/99/99 ~ (i) A(JO)
(b) XXBXXX (j) $2Z,2ZZ.99 (j) 9(3)V99
(c) S9(3)V99 (g) S99PP (k) $ $$ ,$$$.99 BCR
(d) 59(3).99 (ft) XC?) (I) 2999 -

(a) i; (b) ii: (c) Iii: (d) iv (el signa operacional "S" y e.1 caracter "." son incompatibles); (e) iv; if) iv;

(g) iii; (h) ii: (I) i; (f) iii; (k) iv; (l) iv.

,,'

5.83 Dar las clausulas PICTURE y USAGE (si no es DISPLAY) a-propiadas para los siguientes elementos de datos (en el caso de mas de una posibiJidad, poner Ja mejor en primer lugar): (a) un numero de la seguridad social (sin guiones); (b) el irnporte de un cheque inferior a l.000 dolares; (c) un numero de Ia seguridad social con guiones; (d) un apellido (maximo 20 caract e res); (e) numero de horas extras (redondeado a la decenaj+-fichero en cinta; en numero de articulos en un alrnacen (hasta 99. 999)"-f'ichero en disco; (g) saldo de una hipoteca (basta 500.000,00)-fichero en tarjetas; (h) saldo de una hipoteca (hasta 500.000,00) =-fichero en disco; (i) saldo de una hipoteca (hasta 500.000,OO)-informe impreso; (j) numero de horas extras (redondeado al mas cercano rnu ltiplo de 0, I )-fiehero en tarjetas; (k) numero de horas extras (redandeado al mas cercano multiple de 0, I }~informe impreso; (I) nurnero de aruculos en un alrnacen (hasta 99.999)-fichero en tarjetas; (m) mimero de articulos en un almacen (hasta 99.999)-informe impreso; (11) flete por libra (redondeado al mas cercano multip)« de 0.1 )-fichero en tarjetas; (0) flete por libra (redondeado al mas cercano multiple de 0, I )-fichero en disco; (P) flete par libra (redondeado al mas cercano multiple de 0, I )-informe irnpreso; (q) una fecha en el formato aa mm dd (sin guiones) -llchero en tarjetas; (I') una fecha en el formate aa mm dd (sin guiones)-fichero en disco; (5) una fecha -en formate aa mrn cd, editada para su irnpresion; (i) un c6digo de registro de un digito-vfichero en tarjetas; (u) un codigo de registro de un digito-fichero en disco; (v) un c6digo deregistro de un digito-informe impreso; (11') instrucciones de envio (hasta 70 caracteresj=-ficheros en tarjetas disco impresora; (x) numero de articulo (7 dfgitos)-fichero en tarjetas; (y) un nurnero de articulo (7 digitos)-fichero en disco: (z) el salario que le gustaria ganar (expresado en el COBOL de IBM OS/VS)-informe impreso.

Cal PIC X(9) 0 PIC 9(9) (b) PIC $~.*"*.99 (c) PIC X(ll) (d) PIC X(20) 0 PIC A(20)

(e) PIC S99V9 0 PIC 99V9 can COMP-3 0 COMP (f) PIC 59(5) 0 PIC 9(5) Con COMP-3 0 CaMP (g) PIC S9(6)V99 0 PIC 9(6)V99 (17) prc S9(6)V99 0 PIC 9(6)V99 COil COMP-3 0 COMP (i} PIC $$$$.$$$.99- U) PIC S99\19 0 PIC 99V9 (k) PIC2Z.9 (I) prc S9(5) 0 PIC 9(5) (m) PIC ZZ,ZZ9- 0 PIC ZZ,ZZ9 (n) PIC S9(3)\l999 0 PIC (3)V999 (0) PIC S9(3)V9990 PIC 9(3)V999 con COMP-3 0 COMP (P) PIC ZZZ.999 (q) PIC X(6) 0 PIC 9(6) (I') PIC X(6) 0 PIC 9(6) (s) PIC XX/XX/XX 0 PIC 99/99/99 (t) PIC X a PIC 9 (u) PIC X 0 PIC 9 (v) PIC X 0 PIC 9 (11') PIC X(70) (x) PIC X(7) 0 PIC 9(7) (,.) PIC X(7) 0 PIC 9(7)

(z) PIC $$,$$$,$$$,$$$.99

5.84 CaIcular la longitud en byte de todos los datos definidos en el Problema 5.83. (Asurna que esta trabajando can COBOL para un sistema IBM OS/VS a los efectos de las longitudes de los datos en forrnatos COMP y COMP-3.)

Cal 9 (con DfSPLA Y cada caracter de PIC, excepio "S" y "V", rcquiere 1 byte). (b) 9 (con DISPLA Y cada caracter de PIC, excepto "S" y "V", requiere 1 byte). (e) II

(d) 20

(e) COMP-3: 2 (PIC tiene 3 digitos, luego [3/2] + I = 2 bytes) COMP : 2 (se pueden manipular de 1 a 4 dfgitos)

(j) COMP-3: 3 (PIC tiene 5 digiios, luego 15/2] + 1 = 3 bytes) COMP : 4 (se puedcn manipular de 5 a 9 dfgitos)

(g) 8 (con DISPLA Y, cada caracter PIC, a excepcion de "5" y "V", requiere 1 byte)

88
(11)
(i)
U)
(k)
(I)
(m)
(n)
(0)
(p)
(q)
(;;:) DIVISION DE DATOS

[CAP_ 5

'.._

COMP-3: 5 (PIC tiene 8 dfgitos, luego [8/2J + 1 = 5 bytes) COMP : 4 (se pueden rnanipular de 5 a 9 digitos)

12

3 ("5" y "V" no ocupan espacio)

4 (el punta ''." representa un punta decimal real y ocupa I byte) 5

7 can el signa menos par delante, 6 sin el signa menos 6 ("5" y "V" no ocupan espaeio)

COMP-3: 4 (PIC tiene 6 digitos, luego [6/2] + 1 = 4 bytes) COMP : 4 (se pueden znanipular de 5 a 9 dfgitos)

7 (r) 6 (I) I ( v) I (x) 7

6 (s) 8 (II) 1 (11/) 70 (y) 7

17 (cada caracter PIC en un data editado requiere I byte)

~

5.85 Dada la instrucci6n MOVE ZEROS TO ELEMENTO-DATOS-SIMPLE, mostrar el resultado al definirse ELEMENTO-DATOS-SIMPLE como:

(a) PIC S9(3)V99 COMP-3 (b) PIC S9(3)V99. (c) PIC ZZ.ZZ
(d) PIC $**,***.** ( e) PIC $**,***.** (I) PIC Z,ZZ2.99
BLANK WHEN ZERO
(g) PIC Z;ZZZ.Z9 (11) PIC Z,ZZZ.99 (i) PIC X(4)
BLANK WHEN ZERO
U) PIC A(4) (k) PIC XX/XX/XX (/) PIC XXBXXBXX (al + 000.00 (formate COMP·) (b) +00o_00 (formate DISPLA Y) (el bbbbb

(d) $*"'****."* ("," siempre sc irnprirne con proteccion de cheque) (el Invalido: PIC A s610 puede adrnitir letras y espacios.

(j) bbbbb.OO

(g) bbbbMbO

(h) bbbbbbbb

(i) 0000 (ceros EBCDIC)

(j) IIl)'{iii(j(): PIC A solo puede adrn itir letras y espacios (k) 00/00/00

(!) odbOObOO

5.86 Dada la instruccion MOVE ZEROS TO ELEMENTO~DA TOS·S1MPLE, rnostrar el resultado al definirse ELEMEN'TO-DA TOS-SIMPLE como:

(a) PIC X(3) (b) PtC A(4)

(e) PIC XXX/XX

(e) PIC 9(3)

(d) PIC S9(4)V99

(a) bbb

(b) bbbb (el invalido

(d) invdlido

(el bbb/bb

(Recuerde que "PIC 9" solo puede coniener un digito.)

5.87 Dada la instruccion MOVE" A BCDE" TO ELEMENTO-DA TOS-SIMPLE, mostrar eJ resultado a1 definirse ELEMENTO-DA TOS-SIMPLE como:

(a) PIC X(3) (d) PIC X(8)

(b) PIC X(3) JUSTIFIED RIGHT (c) PIC XX/XX

(e) PIC X(8) JUSTIFIED RIGHT

(al ABC (truncarniento par la derecha)

(b) CDE (truncamiento por la izquierda, como consecuencia de la clausula JUSTIFIED RIGHT) (c) AB/CD (truncarniento per la derecha; se inserta "I")

(d) ABCDEbbb (cspacios por la derecha)

(e) bbbABCDE (la clausula JUSTIFIED RIGHT mueve el valor a la parte derecha del campo: los espacios aparecen par la izquierda)

CAP. 5]

DIVISION DE DATOS

89

5.88 iPor que es importante el uso de SYNC con elementos en formate COMP?

La importancia de la clausula SYNCHRONIZING en relacion con elementos en formate COMP depende de la arquitectura de Ja computadora de que se trate, En los sistemas IBM-370, e1 ahorro de tiempo es insignificante, A causa de la insercion de los bytes de holgura (Seccion 5.16), SYNC no debe usarse con elementos COMP que pertenezcan a registros logicos,

5.89 Dar el resultado de la instruccion MOVE ZEROS TO ELEM-COMP-A si dicho elemento se define como:

OJ ELEM-COMP-A

05 A PIC X(2).

05 B PIC S9(3)V99.

05 C PIC S9(5)V99

05 D PIC S9(4)

COMP-3. COMPo

v-,

Al rnanipular elementos compuestos en la division de procedimientos, siempre se trata COmo un (largo) campo PIC X. Como la longitud de ELEM-COMP-A es 13 bytes (2+5+4+2),la instruceion MOVE procesa ELEM-COMP-A como si estuviera definido con PIC X( 13). Por tanto, se trasladan 13 ceros DiSPLAY al interior del campo. Estes ceros encajan correctarnente en los campos A y B puesto que estan en formato Dl$PLA Y (par defecto). Sin embargo, C requiere ceros COMP-3 y D requiere ceros COMP en lugar de ceros DISPLAY. £1 resultado es que los campos C y D no ccntienen datos validos; de heche la manipulacion de los campos C y D producira resultados erroneos y rnuy probablemente el programa lallara.

5.90 Dado

. 01 ELEMENTO-SIMPLE.

05 A PIC 9(4)V99.

05 B REDEFINES A.

10 C PIC 9(2)V9.

10 D PIC 9(3).

, icual es el contenido de C y D despues de que la instruccion MOVE 12.34 TO A se ejecute?

I

I A: PIC 9(4)V99

I o[ 0 [ I 2 I 3[ 4

I . I

I C: PIC 9(2)V9·: D: PIC 9(3)

! B: PIC X(6)

Fig. 5-10

Como consecuencia de la instruccion MOVE, A contiene 0012_34. Sin embargo, como resultado de REDEFINES los campos C y D Sf refieren a las rnismas posiciones de memoria que el campo A. La situacion se esquernatiza en la Figura 5-10. Se ve que C contiene la mitad izquierda de A. es decir (co n el actual contenido de A), 00.1; D contiene 234 (m itad d erecha de A). B, que es un elemen 10 cornpuesto, contend ria 001234 y seria tratado como siestuviera definido como PIC X(6) DISPLAY.

5.91 Dado

01 ELEMENTO-SIMPLE.

05 A PIC X(8)

05 B REDEFINES A.

JO C PIC X(3).

10 D PIC X(2).

10 E PIC X(3).

VALUE "ABCDEFGH".

lcwH es el contenido de C, D, E y B?

90

DIVISION DE DATOS

[CAP_ 5

Como B esta redefi nid 0 con A, se esta en la snuaci on de la Figu ra 5-1 l.

A: PIC X(8)

A

B

C: PIC X(3) p: PIC X(2): £: prc X(3) B: PIC X(8)

Fig. 5-11

Al ser B un elemento compuesto, se considera PIC X(8). Tenga en cuenta que para usaf REDEFINES, am bos elementos deben tener la misrna longitud, C contiene"ABC", D contiene ·'DE" y E contiene 'fGH". B contiene "ABCDEfGH" al referirsc a los mismos lugares de memoria que el eJemento A.

5.92 Defina un cuerpo que vaya a ser parte de una linea irnpresa, El campo debe contener bien (1) el valor (maximo 50.000,00) que tienen las existencias de un articulo 0 (2) el mensaje "CONSUMIDO" si las existencias se han acabado,

05 VALOR-INVENTARIO

05 AREA-MENS-SIN"EXISTENCIAS

PIC ZZ,ZZZ.99.

REDEFINES V ALOR-JNvENTARIO PIC X(9-).

Este problema ilustra la necesidad y el medio de obtener que un rnisrno cuerpo de un registro disponga ala vez de ~JCTURE nurnerico y alfanumerico, La instruccion ·'MOVE "CONSUMlDO" TO VALORINVENTARIO" produciria un error sintactico, puesto que a ese campo solo se pueden transferir datos numericos, La insiruccion "MOVE "CONSUMIDO" TO AREA·MENS-SIN-EXISTENCIAS" es correcta y realiza el misrno cornetido que la anterior.

5.93 ~Que esta equivocado en 10 siguiente? 01 _ ELEMENTO-SIMPLE. '05 A

05 B

10 C 10 D

rrc X(5). REDEFINES A. r-rc S9(5)

PIC S9(4)

COMP-3. COMPo

Nada esta equivocado, La longitud de B es 3 + 2 = 5 bytes, que es igual que la longitud de A. EI programador puede carnbiar librernente las clausulas PICTURE y USAGE de los subcarnpos cuando se utiliza REDEfl NES_ Las unicas condiciones son: (i) la longitud debe scr Ia misrna, (ii) no puede usarse REDEFINES para elementos de nivel 01 en la seccion de ficheros, (iii) los elementos redefinido y redefinidor deben tener e1 mismo nivel,

5.94 ~Queesta equivocado en 10 siguiente? 01 ELEMENTO-SIMPLE

01 OTRO-ELEMENTO

05 A

05 B

05 C

PIC XeS).

REDEFINES ELEMENTO-SI MPLE. PIC X(4).

PIC X(3).

PIC X(2) REDEFINES B.

(l) REDEFINES se utiliza con elementos de nivel 01: correcto en el WORKJNG-STORAGE. pero

incorrecio en la seccion de ficheros,

(2) La longitud de ELEMENTO-5!MPLE no es igual a In de OTRO,ELEMENTO. (3) La longitud de C no es igual que la de B.

(4) Para el elemento C, REDEFINES debe ser la prirnera clausula de la descripcion, (5) EI nivel del elernento rcdefinido C no es el rnisrno que el del elernenro B.

CAP. 5J

DIVISION DE DATOS

91

5.95 l.Que esta equivocado en 10 siguiente?

WORKlNG~STORAGE SECTION.

01 CONTADORES·DE~PROGRAMA.

05 NUMERO·DE·FACT ~IMPAGADAS

PIC S9(5)

COMP·3.

PROCEDURE DIVISION.

ADD 1 TO NUMERO·DE~FACT-IMPAGADAS

La instrucci6n ADD coge el valor de NUMERO·DE·FACT·IMPAGADAS, le surna 1 yalmacena el resultado en NUMERO·DE·FACT·IMPAGADA$. Pero i,cmiJ es el contenido de NUtylERO.DE" FACT-IMPAGADAS cuando comienza 1.3 ejecucion del programs? Corno.el programador no ha inicializado el data, su contenido i nicial es indefi n ida a bam ra. Este es un error ill uy com Ii n en los program adores principiantes: las consecuencias son una cuenta incorrecta 0 un fallo del prcgrama,

5.96 l.Que puede hacerse para eliminar el error del Problema S.95?

EI elernento debe inicializarse a cero. Como su valor cambia durante la ejecucion del prograrna, es preferible inicializar mediante Una instruccion de la division de procedimientos:

PRO<;;EDURE DIVISION.

MOVE ZERO TO NUMERO·DE"FACT·IMPAGADAS

ADD I TO N1JMERO·DE"FACT·IMPAGADAS

Como el NUMERO-DE·FACT-IMPAGADAS se define en el almacenamiento de trabajo, se podna utilizar 'como metcdo altemativo con 1a clausula VALUE el siguiente:

05 NUMERO-DE·FACT·IMPAGADAS PIC S9(5) COMP·3 VALUE ZERO.

que hara que NUMERO-D~FACT-IMPAGADAS contenga cero (en lugar de basura) al comenzar Ja ejecucion del programa. (Las normas de codificaci6n de algunas companfas reservan el usc de Ia clausula VALUE para aquellos elementos cuyo valor no se ahem durante la ejecucicn del prograrna.)

5,97 Machos programadores prefieren no escribir descripciones detalladas de los registros logicos en la FILE SECTION. En su lugar, definen un area en el alrnacenarniento de trabajo de la rnisma longitud que un registro logico, Cuando se daentrada a un registro 16gico del fichero (mediante la instruccion READ), el programa rnueve una copia del registro logico al almacenamiento de trabajo. Toda la rnanipulacion de los datos se realiza utilizando la copia del WOR· KING·STORAGE. De forma similar, los registros de salida se preparan en un area del almacenamiento de trabajo de Jongitud y descripcion apropiadas, despues se traslada al area del registro logico del fichero (nivel 0 I en FD) antes de ejecutar la instruccion WRITE.

Modifique la siguiente seccicn de ficheros para que el procesamiento pueda tener lugar en el almacenamiento temporal.

FILE SECTION.

FD FICHERO~ENTRADA· TIEMPOS

BLOCK CONTAfNS 0 CHARACTERS RECORD CONTAINS 21 CHARACTERS LABEL RECORDS ARE STANDARD

01 REGISTRO·TlEMPO.

OS ID-EMPLEADO-TIEMPO

05 HORAS·NORMALES·TIEMPO 05 HORAS·EXTRAS-TIEMPO

05 GASTOS-TIEM PO

05 DESCANSO-TIEMPO 05 VACACIONES·TIEMPO

PIC X(S).

prc 99V9. PIC 99V9. PIC S9(4)V99. P1C 99.

PIC 99.

You might also like