Capitulo 1 1- Elementos del lenguaje COBOL. IDENTIFICATION DIVISION. ENVIRONMENT DIVISION. DATA DIVISION PROCEDURE DIVISION Constantes figurativas: Una constante figurativa es una constante predefinida en COBOL que puede utilizarse en cualquier parte de la WORKING-STORAGE SECTION o PROCEDURE DIVISION para asignar su valor a un campo. Zero- Designa el valor 0 en el caso de datos numéricos. También puede ser referenciada por los nombres ZEROS o ZEROES. Space- Esta constante se utiliza para asignar a un campo no numérico uno o mas espacios en blanco. También puede ser referenciada por el nombre SPACES. High-value- Se utiliza para asignar a literales alfanuméricos el valor mas alto posible del código de caracteres que estemos utilizando (Valor FF en ASCII). También puede ser referenciada por el nombre de HIGH-VALUES. Low-Value- Se utiliza para asignar a literales alfanuméricos el valor mas bajo posible del código de caracteres que estemos utilizando (Valor 00 en ASCII). También puede ser referenciada por el nombre de LOW-VALUES. ALL "literal"- representa una repetición del literal especificado. Constantes identificadas por un nombre. Están formadas por un identificador al que asociamos un valor. Se describen en la DATA DIVISION con nivel 78. Una constante identificada por un nombre se utiliza en cualquier lugar donde un literal pueda aparecer en un formato. Identificadores. Los identificadores son nombres creados por el programador. Para formar un identificador hay que tener en cuenta las siguientes reglas: * Un identificador consta de un máximo de 30 caracteres. Estos caracteres pueden ser solamente letras, dígitos y el guión. * No deben empezar ni terminar en un guión. * Un identificador definido por el usuario no puede tener el mismo nombre que una palabra reservada. * Un identificador debe contener obligatoriamente al menos una letra, excepto cuando se trate de un nombre de párrafo o de sección. Cualquier identificador utilizado en la PROCEDURE DIVISION debe estar previamente definido en la ENVIRONMENT DIVISION o en la DATA DIVISION. Operadores. Los operadores son símbolos que indican como son manipulados los datos. Carácter Significado Ejemplo + Suma A + B - Resta A - B * Multiplicación A * B / División A / B ** Potenciación A ** B = Asignación C = A + B ( ) Dar prioridad D = (A + B) * C Operadores de relación. Los operadores de relación se utilizan para comparar dos valores numéricos o dos valores alfanuméricos (no numéricos). El resultado puede ser verdadero o falso. Carácter Significado Ejemplo = Igual que A = B < Menor que A < B > Mayor que A > B <= Menor igual A <= B >= Mayor igual A >= B Estos operadores, tienen todos igual prioridad. Operadores de Lógicos. Los operadores lógicos nos permiten combinar varias expresiones de relación. Igual que los operadores de relación, se utilizan normalmente para tomar decisiones. Un operador lógico toma una combinación de valores verdaderos-falsos y devuelve un resultado verdadero o falso. Los operadores lógicos colocados en orden de prioridad son los siguientes: NOT, AND, OR. Expresiones aritméticas. Una expresión aritmética puede ser una constante, una variable o un conjunto de constantes y variables unidas por operadores aritméticos. Para su codificación hay que tener en cuenta que: * El paréntesis izquierdo no debe ir seguido de un espacio. * El paréntesis derecho no debe ir precedido de un espacio. * El signo = u los operadores +, -, *, - y ** deben ir precedidos y seguidos de un espacio. Orden de ejecución. A la hora de evaluar una expresión, la prioridad de las operaciones es la siguiente: 1- Primero se evalúan las operaciones entre paréntesis, de los mas internos a los mas externos. 2- Después, y siguiendo el orden que se describe a continuación se evalúan los operadores aritméticos: ** *, / +,- Los operadores escritos sobre una misma línea tienen la misma prioridad. Cuando en una expresión intervienen varios operadores con la misma prioridad, estos se evalúan de izquierda a derecha. Expresiones de BOOLE. Una expresión de BOOLE da como resultado un valor verdadero o falso. Los operadores que intervienen en una expresión de BOOLE pueden ser: Operadores de relación y operadores lógicos. Si en una expresión de BOOLE intervienen varios tipos de operadores primero se evalúan los operadores aritméticos, después los operadores de relación y por ultimo los operadores lógicos. Ejemplo: ((A = 0) AND ((B*2) NOT = 0)) OR (C=0) Capitulo 2. 2- Estructura de un programa Cobol. Descripción General. Un programa fuente COBOL es un conjunto de sentencias COBOL sintácticamente correctas. Las sentencias, entradas, párrafos y secciones de un programa COBOL son agrupadas en cuatro divisiones que forman la estructura general de dicho programa. El formato general y el orden de presentación de las entradas y sentencias que constituyen un programa COBOL es: IDENTIFICATION DIVISION. ENVIRONMENT DIVISION. DATA DIVISION. PROCEDURE DIVISION. [END PROGRAM id-programa] Estos nombres representan las cabeceras de las cuatro divisiones mencionadas y la cabecera de final de programa que es opcional y valida bajo las normas ANS85. En esta ultima, id-programa debe coincidir con el nombre especificado en el parrafo PROGRAM-ID. Identification division. La division de IDENTIFICACION, sirve para proporcionar un nombre para identificar el programa. Opcionalmente se puede especificar información acerca del autor, fecha en que fue escrito, etc.. El formato general para la división es el siguiente. IDENTIFICATION DIVISION. PROGRAM-ID. Nombre del programa. [AUTHOR. Nombre del programador.] [INSTALATION. Lugar de instalación.] [DATE-WRITTEN. Fecha en que fue escrito.] [DATE-COMPILED. Fecha en que fue compilado.] [SECURITY. Entrada de comentarios.] Solo las dos primeras lineas, IDENTIFICATION DIVISION y PROGRAM-ID, son obligatorias. Program-id. Este parrafo sirve para espeficar el nombre del programa. Este nombre sera utilizado por el compilador o durante la ejecución para indicar en que programa ocurrio algun error. El nombre del programa debe ajustarse a las reglas de formación de un identificador COBOL, vistas en el capitulo anterior. El resto de los parrafos son opcionales, pueden aparecer en cualquier orden, y su utilización queda perfectamente definida en el formato descrito. Si un comentario ocupa mas de una linea, no esta permitido utilizar el guión como caracter de continuación, sin embargo puede ser continuado en las lineas siguientes, comenzando en el margen B. Environment division. La division de ENTORNO permite definir el tipo de ordenador para el que fue escrito el programa, asi como los dispositivos perifericos necesarios para soportar los ficheros utilizados en el programa. El formato general de la sección es el siguiente: ENVIRONMENT DIVISION. [CONFIGURATION SECTION. SOURCE-COMPUTER. Modelo de ordenador. OBJECT-COMPUTER. Modelo de ordenador. SPECIAL-NAMES. Nombres especiales.] [INPUT-OUTPUT SECTION. FILE-CONTROL. Control de ficheros. [I-O CONTROL. Control de entrada / Salida.] ] Seccion de configuración. Esta sección es opcional. Su utilidad es documentar el programa COBOL, indicando el modelo de ordenador utilizado y asociar los nombres nemonicos especificados por el programador a nombres utilizados por el compilador. A continuación se describen los parrafos que la componen. Parrafo SOURCE: Sirve para especificar el modelo de ordenador que va a compilar el programa. Su formato es el siguiente: SOURCE COMPUTER. Modelo de ordenador. [WITH DEBUGING MODE.] La opción WITH DEBUGING MODE permite introducir en el fichero fuente COBOL, codigo que nos servira de ayuda para depurar el programa. Parrafo OBJECT: Sirve para especificar el modelo de ordenador que va a ejecutas el programa. Su formato es el siguiente: OBJECT COMPUTER. Modelo de ordenador. [PROGRAM COLLATING SEQUENCE IS codigo] [SEGMENT-LIMIT IS numero-segmento]. ] La clausula MEMORY SIZE tiene como finalidad documentar el programa y especifica el tamaño de la memoria necesaria para poder ejecutar el programa expresado en palabras, caracteres o modulos. La clausula SEQUENCE, especifica la secuencia de caracteres utilzada en comparaciones y clasificaciones no numericas. Si esta se omite se utiliza el codigo ASCII o EBCDIC. En nuestro caso se utiliza el codigo ASCII La clausula SEGMENT-LIMIT solo sirve de comentario. La segmentación en COBOL tiene sentido en la PROCEDURE DIVISION, la cual y para este proposito, estara dividida completamentamente en secciones, cada una de las cuales estara clasificada como una porcion fija o como un segmento independiente del programa objeto. El numero de segmento esta comprendido entre 1 y 49. Parrafo SPECIAL-NAMES: El fomato de este parrafo es el siguiente: SPECIAL-NAMES [Nombre de función IS nombre nemónico] [ALPHABET] [DECIMAL-PIOINT IS COMMA] [CURRENCY SIGN IS literal] Nombre de función es un nombre reconocido por el compilador, por ejemplo PRINTER y nombre nemotecnico es un nombre creado por el programador. La clausula ALPHABET se utiliza para asignar un nombre a un conjunto especifico de caracteres o a una determinada secuencia de clasificación. Su formato es el siguiente: El juego de caracteres STANDARD-1 o ASCII es el codigo American Standard Code for Information Interchange. STANDARD-2 es el codigo ISO 7-bit. La clausula NATIVE se refiere al codigo ASCII o EBCDIC dependiendo de la version COBOL. Cuando se especifica un nombre de alfabeto en una clausula CODE-SET en la descripción de fichero, es para especificar el codigo de caracteres que se quiere utilizar. Si se especifica la opción de literal, el nombre de alfabeto no puede referenciarse en la clausula CODE-SET. La secuencia de clasificación identificada esta definida de acuerdo con las siguientes reglas: 1- El valor de cada literal especifica: A) El valor ordinal de un caracter dentro del juego de caracteres nativo, si el literal es numerico. B) El caracter actual dentro del juego de caracteres nativo, si el literal no es numerico. Si el literal no es numerico y esta formado por varios caracteres, cada caracter, comenzando con el caracter mas a la izquierda, es asignado a posiciones sucesivas, ascendentemente, en la secuencia de clasificación que esta especificando. 2- El orden en el que los literales aparecen en la clausula ALPHABET, en secuencia ascendente, especifica el número ordinal del caracter dentro de la secuencia de clasificación. 3- Cualquier caracter dentro de la secuenca nativa de clasificación que este explicitamente espresado en el literal, asume una posición, en la secuencia de clasificación, mayor que cualquiera de los caracteres explicitamente especificados. 4- Si se especifica la opción THRU, el conjunto de caracteres contiguos, del codigo nativo, que comienzan con el caracter especificado por el literal-1 y que termina con el caracter especificado por el literal-2, es asignado a posiciones sucesivas, ascendentemente, en la secuencia de clasificación que se esta especificando. 5- Si se especifica la opción ALSO, los caracteres del codigo nativo especificados por literal-1 y literal-3 se asignan a la misma posición en la secuencia de clasificación que se esta especificando. Los caracteres que ocupan las posiciones mas baja y mas alta en la secuencia de clasificación definida, se asocian con las constantes figurativas LOW-VALUE y HIGH-VALUE respectivamente. Si estas posiciones son ocupadas por mas de un caracter, el valor de la constante figurativa correspondiente se asocia al ultimo caracter especificado. La clausula DECIMAL-POINT IS COMMA permite transformar, en la edición de resultados, el punto decimal en los numeros, en coma. La función de la clausula CURRENCY IS literal es la de reemplazar el signo $ de la moneda americana, que se usa en la clausula PICTURE, por el correspondiente signo de la moneda local. El literal esta limitado a un solo caracter, el cual debe especificarse en la clausula PICTURE correspondiente, en lugar del caracter $. Seccion de entrada-salida. Esta sección es opcional. Permite declarar los ficheros de E/S que utiliza el programa, asi como definir las tecnicas especiales de E/S. Capitulo 3 3- La división DATA. INTRODUCCIÓN. La división de datos se utiliza para realizar una descripción completa de los ficheros que intervienen en el programa, de sus registros lógicos y de las variables intermedias o de trabajo. El formato general para esta división es el siguiente: DATA DIVISION. [FILE SECTION. Descripción del fichero Descripción del registro. ... ] [WORKING-STORAGE SECTION [77 Descripción de campos individuales. ] [01 Descripción de registros. ]] [LINKAGE SECTION. [77 Descripción de campos individuales. ] [01 Descripción de registros. ]] [COMMUNICATION SECTION. [Descripción comunicación. ] [Descripción de registros. ] ] [REPORT SECTION. [Descripción de informes.]] [SCREEN SECTION. 01 Descripción de pantallas.] Sección de ficheros. En la FILE SECTION debe describirse toda la información referente a los ficheros utilizados en el programa. Sección de trabajo. En la WORKING-STORAGE SECTION se describen los campos utilizados por el programa como campos intermedios o de trabajo. El formato es el siguiente: [WORKING-STORAGE SECTION. [77 Descripción de campos individuales.] [01 Descripción de registros.]] Los campos que se especifican en la SECCIÓN DE TRABAJO pueden agruparse siguiendo el formato empleado en el apartado descripción de una estructura registro, expuesto a continuación, o bien ser campos de independientes en cuyo caso van precedidos por el numero de nivel 77. Descripción de una estructura registro. Una descripción de registro consiste en un conjunto de descripciones de datos, las cuales describen las características de un registro en particular. Cada descripción de dará esta formada por un numero de nivel seguido de un nombre de datos, o de la cláusula FILLER, seguido de una serie de cláusulas si es que estas son requeridas. Una descripción de registro puede tener una estructura jerarquizada compuesta por una o mas inscripciones jerarquizadas o campos que escribiremos de acuerdo con el siguiente formato: [REDEFINES] [PICTURE] [USAGE] [VALUE] [SIGN] [JUSTIFIED RIGTH] [BLANK WHEN ZERO] [OCCURS] El orden de estas cláusulas puede ser cualquiera, excepto la cláusula REDEFINES, que debe ser la primera, en el caso de especificarse. Toda inscripción debe terminar con un punto. El nombre del registro lleva numero de nivel 01 y el resto de los campos lleva un numero de nivel de 02 a 49. Número de nivel. Sirve para indicar la relación existente entre un campo y el resto de los campos del registro. Los campos de datos lo podemos clasificar en: - Campos elementales: Un campo elemental no puede subdividirse o no es necesario subdividirlo para ser tratado por el programa. - Campos compuesto: Un campo compuesto esta formado por varios campos elementales. - Campos independientes : Un campo independiente es un campo de trabajo que será definido en la sección de trabajo. Una estructura jerarquizada, permite trabajara con registros completos, con campos compuestos y con campos elementales. Los números de nivel que pueden utilizarse son: del 01 al 49, 66, 77, 78 y 88. El nivel superior es el 01. Las normas a seguir para utilizar los números de nivel son las siguientes: * Un campo compuesto tiene un nivel superior que cualquiera de sus campos elementales. * El numero de nivel 01 solo puede preceder al nombre del registro. * Los números del 02 al 49 pueden preceder a cualquier campo del registro, elemental o compuesto. * Los numero de nivel utilizados no tienen porque ser correlativos. * El numero de nivel 77 se utiliza para describir campos independientes en la WORKING. * El numero de nivel 88 se utiliza para describir nombres de condición. El formato es el siguiente: * El numero de nivel 66 se utiliza únicamente con la cláusula RENAMES. Permite asignar un nuevo nombre a un campo elemental, a un campo compuesto o a un conjunto de campos elementales. Su formato es el siguiente: La cláusula RENAMES no puede formar parte de la descripción de un campo y es obligatorio especificarla inmediatamente después de la descripción del registro. Un campo con numero de nivel 01, 77 u 88 no puede ser renombrado por esta cláusula. Ni nombre de dato-2 ni nombre de dato-3 pueden tener la cláusula OCCURS, ni pueden estar subordinados a un campo que contenga la cláusula OCCURS. * El numero de nivel 78 se utiliza para definir constantes identificadas por un nombre. Cada referencia a una constante, es reemplazada por el compilador COBOL, por su valor. El formato general es el siguiente: Nombre de datos Sirve para nombrar el campo con el fin de poder referenciarlo en el programa y debe escribirse a continuación del numero de nivel. Si en la PROCEDURE DIVISION no se va a referenciar alguno de los campos nombrados, el nombre de cada uno de estos campos, puede ser sustituido por la palabra FILLER. PICTURE. Esta cláusula permite declarar el tipo y el tamaño de un campo elemental. El tipo determina la información que puede almacenarse en el campo, así como las operaciones de que con él puedan realizarse. Su formato es el siguiente: El tipo de campo, depende de los caracteres que se empleen para definir la especificación de formato. Los campos los podemos clasificar en alfabéticos, alfanuméricos y numéricos. La longitud del campo viene dada por el numero de caracteres empleados en la especificación de formato para declarar el campo. El máximo numero de caracteres permitido es 30. CAMPOS ALFABÉTICOS. Permiten almacenar únicamente letras y/o blancos. El carácter que se emplea para definir un campo de este tipo es la A. CAMPOS ALFANUMÉRICOS. Permiten almacenar cualquier carácter del juego de caracteres ASCII. El carácter que se emplea para definir un campo de este tipo es la X. CAMPOS NUMÉRICOS. Permiten almacenar cualquier valor numérico. Tener en cuenta que en COBOL no se permiten números superiores a 18 cifras. Los caracteres que se emplean para definir un campo de este tipo sin: 9, S, V y P. El significado de cada uno de los caracteres que pueden intervenir en una especificación de formato para un campo numérico es: 9 Representa un cifra del 01 al 9. S Indica la aparición del signo + o -. El signo no es obligatorio, pero es conveniente ponerlo porque sino COBOL, después de cada operación lo suprime sistemáticamente, lo que repercute en un mayor tiempo de ejecución. Cuando se pone, debe ser el primer carácter de la especificación de formato. V Representa la posición de un punto decimal implícito. Se utiliza internamente para alinear las partes decimales de los campos, cuando se quiere realizar una operación. P Indica una cifra virtual, representando un cero. Para la que no se ha reservado una posición de memoria. PICTURE para la edición. Para visualizar por pantalla o escribir por la impresora un campo, además de los caracteres A, X, 9, V y P se dispone de los caracteres: Z * . , 0 B / CR DB $ + - El significado de cada uno de estos caracteres es el siguiente: Z Representa una cifra del 0 al 9. Si la cifra a escribir se corresponde con un 0 no significativo, se escribe en su lugar un espacio en blanco. * Representa una cifra del 0 al 9. Si la cifra a escribir se corresponde con un 0 no significativo, se escribe en su lugar un *. Los caracteres Z y * no pueden ir precedidos, pero si seguidos del carácter 9. . El punto hace que se inserte un punto decimal para separar la parte entera de la parte decimal. , La coma hace que se inserte este mismo carácter en el lugar que se indica en la especificación de formato. La cláusula DECIMAL-POINT IS COMMA en la ENVIRONMENT DIVISION, permite invertir el papel del punto y la coma en las especificaciones de formato en la edición. B Permite que se inserte un espacio en blanco en el lugar que se indica en la especificación de formato. 0 Permite que se inserte un cero en el lugar de que se indica en la especificación de formato. / Permite que se inserte una barra en el lugar de que se indica en la especificación de formato. CR Símbolo bancario indicativo de crédito. Solo puede colocarse a la derecha de la especificación de formato. CR aparece sobre la línea que se imprime si el valor es negativo. Si el valor es positivo aparecerán en su lugar 2 espacios en blanco. DB Símbolo bancario indicativo de débito. Solo puede colocarse a la derecha de la especificación de formato. DB aparece sobre la línea que se imprime si el valor es negativo. Si el valor es positivo aparecerán en su lugar 2 espacios en blanco. $ Un carácter $ colocado en el primer lugar en la especificación de formato, permite la aparición de este carácter en el lugar indicado. + Un carácter + colocado en primer o ultimo lugar en la especificación de formato, permite la aparición de un + para valores positivos y de un - para valores negativos en el lugar indicado. - Un carácter + colocado en primer o ultimo lugar en la especificación de formato, permite la aparición de un espacio en blanco para valores positivos o un - para valores negativos en el lugar indicado. $$... La aparición en una especificación de formato de n caracteres $, permite editar un valor de n-1 cifras. Si la cifra a escribir se corresponde con un 0 no significativo, se escribe en su lugar un espacio en blanco, excepto a la izquierda de la primera cifra significativa que se inserta un carácter $. ++... La aparición en una especificación de formato de n caracteres +, permite editar un valor de n-1 cifras. Si la cifra a escribir se corresponde con un 0 no significativo, se escribe en su lugar un espacio en blanco, excepto a la izquierda de la primera cifra significativa que se inserta un carácter + para los valores positivos o un - para los valores negativos. -- La aparición en una especificación de formato de n caracteres +, permite editar un valor de n-1 cifras. Si la cifra a escribir se corresponde con un 0 no significativo, se escribe en su lugar un espacio en blanco, excepto a la izquierda de la primera cifra significativa que se inserta un carácter - para los valores negativos. La cláusula DECIMAL-POINT IS COMMA, permite utilizar la coma decimal en lugar del punto decimal. Sin embargo, este problema puede ser resuelto sin necesidad de especificar esta cláusula. Para ello indicaremos en la especificación de formato el lugar de la coma mediante el carácter V e insertaremos a su izquierda o derecha el carácter coma( . USAGE. Esta cláusula permite indicar cono se almacenará en memoria, valor en un campo numérico. Su formato es el siguiente: DISPLAY es la opción por defecto. Con esta opción, cara carácter sea numérico o no, ocupa un byte o octeto en memoria, representado en ASCII. Los valores numéricos son almacenados en base 10. COMP y COMP-4 tienen el mismo significado. Se emplean con campos numéricos y los valores son almacenados en los mismos en binario puro. Empleando la representación complemento a 2. COMP-3 se emplea solo con campos numéricos y hace que un valor sea almacenado en binario decimal empaquetado (BCD). El semiocteto menos significativo contiene el signo. COMP-5 es un formato similar a COMP, con la diferencia de que el valor que puede almacenarse, no depende del numero de 9 indicados en la cláusula PIC, si no del numero binario mas grande que pueda almacenarse en ese espacio. COMP-X es un formato similar a COMP. Con respecto a este tiene las siguientes diferencias: * a) La especificación de formato puede estar formada totalmente por X. * b) Tanto si la especificación de formato esta constituida por X o por 9, el valor que puede almacenarse queda limitado al numero binario mas grande que pueda almacenarse. * c) El uso de COMP-X con elementos utilizados en operaciones aritméticas, esta restringido a las operaciones ADD, SUBSTRACT, MULTIPLY y DIVIDE no permitiéndose el empleo de ON SIZE ERROR. Si el resultado obtenido con estas operaciones es demasiado grande, se trunca. Si el resultado no es un entero, se trunca la parte decimal. Si el resultado es negativo se almacena en complemento a 2. VALUE. Esta cláusula puede utilizarse en esta sección, para asignar un valor a un campo con nivel 88, nombres de condición, para asignar un valor a una constante identificada por un nombre o bien para inicializar campos de datos con un determinado valor. Formato: VALUE literal. SIGN. Esta cláusula especifica la posición y el modo de representación del signo operacional de un campo numérico en cuya especificación de formato se ha especificado S. Su formato es el siguiente: La cláusula SIGN se aplica a campos numéricos descritos como USAGE IS DISPLAY. Si la cláusula SEPARATE no se especifica, el signo del numero es incorporado en el dígito de la derecha (TRAILING) o en el dígito de la izquierda (LEADING). En este caso el carácter S de la PICTURE no se tiene en cuenta para determinar el tamaño del campo. Si la cláusula SEPARATE se especifica, entonces el signo es almacenado como un carácter separado adicional a los dígitos. En esta caso el carácter S se tiene en cuenta para determinar el tamaño del campo. Si la cláusula SIGN no se especifica, generalmente la posición por defecto es a la izquierda. JUSTIFIED. Esta cláusula permite justificar un valor alfabético o alfanumérico a la derecha. Su formato es el siguiente: Esta cláusula puede especificarse solamente con campos elementales u no puede especificarse para un campo descrito como numérico o de edición. BLANK. Esta cláusula llena un campo numérico con espacios cuando su valor sea cero. De esta forma, eliminan todos los caracteres de inserción, en caso de que la zona a editar sea nula. Su formato es el siguiente: BLANK WHEN ZERO. Esta cláusula puede especificarse solamente con campos numéricos elementales con formato DISPLAY o con campos numéricos de edición. OCCURS. Esta cláusula permite definir una estructura de datos denominada tabla. Una tabla es un conjunto de elementos todos del mismo tipo, esto es, con idénticos atributos. Su formato es el siguiente: OCCURS n TIMES. La cláusula OCCURS indica el numero de veces, n, que se repite un elemento (campo simple o compuesto) con la misma descripción. El subíndice correspondiente al primer elemento es 1. El subíndice puede ser un numero entero o un nombre de datos. Si es un nombre de datos se recomienda declararlo con formato binario (COMP). La cláusula OCCURS no puede especificarse en una descripción con numero de nivel 01 o 77. Una tabla en COBOL puede tener hasta 3 subíndices. En este caso se dice que la tabla es de 3 dimensiones. La cláusula OCCURS y VALUE son incompatibles, lo cual no permite inicializar una tabla en su propia declaración. REDEFINES. Esta cláusula permite dar a un campo o a un área de memoria mas de un nombre y mas de un formato. Su formato es el siguiente: La cláusula REDEFINES ha de ser la primera que siga al nombre de datos. Los campos nombre de dato-1 y campos nombre de dato-2 han de estar declarados al mismo nivel, pero no a nivel 66 u 88. La redefinición de un campo compuesto se hace inmediatamente después del ultimo de los campos elementales que forman parte de aquel. Esta cláusula va a permitir poder inicializar una tabla en el momento de declararla. Seccion de enlace. Esta sección permite declarar campos de memoria para ser utilizados por otros programas y por consiguiente conservar los datos de un programa para otro. Sección de comunicaciones. Esta seccion permite procesar mensajes y controlar el flujo de los mismos. Sección de informes. Esta sección permite crear un dormato especifico para imprimir un fichero de salida. Sección de pantalla. Esta sección permite controlar la representación de los datos en pantalla. ( 77 hola pic +ZZBV,99. O 77 hola pic +ZZB,V99.