PerroCobolero

PerroCobolero

ADS

martes, 3 de noviembre de 2015

TABLAS EN COBOL

Cobol. Tablas.

Una tabla es un conjunto campos contiguos, cuya longitud y tamaño deben ser iguales,
 unidos todos bajo un mismo nombre, de manera que accedemos a ellos de forma individual 
a través de uno o varios índices. Vamos a hacer un ejemplo para verlo mas claro:

Vamos a imaginar un cine, en las que pueden entrar un máximo de 1000 personas por día. 

Lo que queremos es que no cuente el número de personas que han ido al cine cada día 
de la semana. 

Con lo que sabemos hasta ahora debemos crear 7 variables, una para cada día de

 la semana:
...
77 lunes                pic 9(04).
77 martes             pic 9(04).
77 miercoles         pic 9(04).
77 jueves               pic 9(04).
77 viernes             pic 9(04).
77 sabado             pic 9(04).
77 domingo           pic 9(04). 


Ahora bastaría con ir almacenando las visitas en cada día de la semana. Ahora bien, con

 las tablas nos ahorraríamos estas 7 definiciones y lo almacenaríamos en una sola variable,
 de forma que quedaría así:
...
01 cine.
    02 visitas  pic 9(04) occurs 7 times.

Ahora sólo nos ha hecho falta declarar una sola variable. Si quisiéramos cargar o mover 

datos a la tabla deberíamos indicar un índice:
...
move 121 to visitas(1)
move 82   to visitas(2)
move 42   to visitas(3)
move 61   to visitas(4)
move 425 to visitas(5)
move 247 to visitas(6)
move 879 to visitas(7) 

Si nos fijamos bien, todas las variables, son de la misma longitud y del mismo tipo de datos,

 no puede ser de otra forma si queremos usar una tabla. Es un pequeño requisito a tener
 en cuenta.

Redefines. Este cláusula se utiliza para rellenar la tabla antes de empezar el programa, 

es decir, desde la Working. Vamos a ver un ejemplo:

01 semanas-textos.

    02 texto pic x(21) value "lunmarmiejueviesabdom".
01 semanas redefines semanas-textos.
    02 dias pic x(03) occurs 7 times.

De esta forma lo que hacemos con la cláusula Redefines, es cargar la tabla "semanas" 

con los valores de la variable "semanas-textos" desde el principio del programa.

En la memoria del ordenador este tipo de tablas quedaría representada de la siguiente

 manera.

Cine



Visitas(1)Visitas(2)Visitas(3)Visitas(4)Visitas(5)Visitas(6)Visitas(7)


Esto son tablas unidimensionales, pero también lo podemos hacer de varias dimensiones 

llamadas matrices:

En el ejemplo del cine, vamos almacenar el género, así contaremos también si es

 hombre o mujer:

01 cine.

    02 genero occurs 2 times. 
        03 visitas  pic 9(04) occurs 7 times.

Ahora para cargar o mover datos se necesitan dos índices, uno para la fila y otro para la

 columna, de manera que quedaría así:

move 125 to visitas(1,1)      move 125 to visitas(2,1)

move 125 to visitas(1,2)      move 125 to visitas(2,2)     
move 125 to visitas(1,3)      move 125 to visitas(2,3)
move 125 to visitas(1,4)      move 125 to visitas(2,4)
move 125 to visitas(1,5)      move 125 to visitas(2,5)
move 125 to visitas(1,6)      move 125 to visitas(2,6) 
move 125 to visitas(1,7)      move 125 to visitas(2,7) 

Veamos como se representa en la memoria:


Cine

Visitas(1,1)Visitas(1,2)Visitas(1,3)Visitas(1,4)Visitas(1,5)Visitas(1,6)Visitas(1,7)
Visitas(2,1)Visitas(2,2)Visitas(2,3)Visitas(2,4)Visitas(2,5)Visitas(2,6)Visitas(2,7)
   
Las tablas se pueden complicar como se quiera, incluso meter una tabla dentro de otra,
 ponerlas en ficheros y demás. Buscando en internet vi un ejemplo que me pareció bastante 
bueno para ver como son las que tienen varias dimensiones:

01 tabla.

     02 trabajadores occurs 100 times.
         03 nombre pic x(30).
         03 nif pic x(10).
         03 salario occurs 12 times.
             05 bruto pic s9(08).
             05 neto pic s9(08).
             05 gastos occurs 10 times.
                 07 gasto pic s9(08).

Vamos a explicar todo este embrollo:


- Tenemos una tabla de trabajadores de 100 elementos, compuestos cada uno de ellos por e

nombre y el nif.

- Al mismo tiempo tenemos 12 salarios, uno por cada mes, que se compone de un sueldo bruto 

y un sueldo neto, es decir, tenemos 12 sueldos netos y 12 brutos por trabajador.

- Y para finalizar cada trabajador tiene 10 tipos de gastos diferentes.


Vamos a ver como nos podemos referir a cada elemento: 


- Para saber el nombre del trabajador número 50: display nombre (50).


- Para saber el Nif del trabajador 50: display nif(50).


- Para saber el bruto de Mayo del trabajador 50: display bruto(50, 5).


- Para saber el neto del trabajador 50 del mes de Noviembre: display neto(50,11).


- Para saber el gasto número 3 del mes de Febrero del trabajador 50: display gasto(50,2,3).


Ahora las tablas podemos empezar a usarlas con lo que sabemos hasta ahora, como por
 ejemplo, los bucles para buscar elementos, condiciones para compararlos...etc...etc...etc.

1 comentario:

  1. el ejemplo esta muy bueno pero con una muestra gráfica quedaría mejor entendido

    ResponderBorrar