🎃 Grandes descuentos en libros en línea, eformaciones y vídeos*. Código CALABAZA30. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí

Estructuras elementales

Introducción

Los capítulos anteriores nos han enseñado que el algoritmo trata de la transformación de datos. En este capítulo, nos interesa la forma de definir y organizar los datos que usan nuestros algoritmos.

La sección «Las cadenas de caracteres» introduce los caracteres y las cadenas de caracteres. Así podemos empezar a estudiar las transformaciones de datos textuales o, de manera más general, de datos no numéricos. La sección «La tabla» define las tablas y las primeras operaciones elementales en estas estructuras. Todos los lenguajes de programación imperativa de los ordenadores proponen estos tipos que están predefinidos y se pueden utilizar directamente. Sin embargo, no cubren todas las posibilidades de tratamiento ni todas las necesidades de los programadores. Entonces tenemos que introducir la posibilidad de definir tipos de datos nuevos, como el tipo RESERVORIO del capítulo «Programas directos». Eso es lo que haremos en la sección «Definir un tipo de datos nuevo», que estudia cómo el usuario puede definir y utilizar sus propios tipos a partir de tipos de base.

Las cadenas de caracteres

Esta sección estudia el tipo CADENA, que permite declarar datos que no son numéricos. Así, las operaciones habituales con los números ya no son operaciones del dominio de las cadenas de caracteres, y tendremos que precisar las operaciones aplicables a los datos de este tipo.

Una cadena está compuesta por caracteres. El CARÁCTER es la unidad elemental de información considerada en esta sección. La primera parte introduce los caracteres, las notaciones y las primeras operaciones aplicables. La segunda sección compone los caracteres para formar las cadenas e inicia el estudio de las operaciones del dominio. Finalmente, la última sección propone una serie de ejercicios de aplicación.

1. Los caracteres

Un carácter es un dato de texto básico. ’A’, ’4’ y ’!’ son caracteres. Sin embargo, un carácter no es necesariamente imprimible, es decir, representable en condiciones humanas. Así, por ejemplo, un carácter específico destinado a marcar el fin de un registro en un archivo, aunque no se puede representar en una hoja de papel, sigue siendo un carácter como cualquier otro.

Para usar una variable destinada a recibir un carácter, un algoritmo de este libro la declara de esta manera:

car: CARÁCTER 

y le asigna un valor como a cualquier otra variable:

car images/flechegauche.PNG '*' 

La definición de una constante de tipo CARÁCTER usará un separador para delimitar el carácter y aislarlo del resto de las instrucciones. En el ejemplo que hemos visto antes, se ha colocado un apóstrofo («comilla simple») justo antes y justo después del valor de inicialización de car, para evitar ambigüedades. La intención es distinguir con claridad el valor que se va atribuir a la variable del contexto donde aparece. De esta manera, se puede utilizar cualquier separador, siempre y cuando este separador aparezca claramente como tal.

Así, habría sido posible escribir sin distinción:

car_1, car_2, car_3: CARÁCTER 
car_1 images/flechegauche.PNG '*' 
car_2 images/flechegauche.PNG "*" 
car_3 images/flechegauche.PNG /*/ 

De esta manera, estas instrucciones inicializan car_1, car_2 y car_3 con el carácter *.

Es suficiente declarar una variable de tipo CARÁCTER para que esté definida y exista. Sin embargo, todavía...

La tabla

Una tabla es una estructura que reúne, bajo un mismo nombre, un conjunto múltiple de datos. A partir de ahora suponemos que todos los datos guardados en una tabla son homogéneos, es decir, todos son del mismo tipo. Por ejemplo, hablaremos de una tabla de ENTEROS, de una tabla de PERSONAS, de una tabla de RESERVORIOS, etc., para expresar que todos los datos guardados en la tabla son ENTEROS, PERSONAS o RESERVORIOS. La primera sección trata de las tablas donde los elementos son datos, estructurados o no. La siguiente sección estudia las tablas donde los elementos son tablas. La última sección plantea algunos ejercicios de aplicación.

1. Las tablas simples

Una tabla está formada por un conjunto de «celdas» numeradas secuencialmente. Cada celda puede estar vacía, es decir, no inicializada, o contener un dato del tipo en el que se ha definido la tabla. La figura que aparece siguiente representa una tabla de ENTEROS de nombre v y de 30 celdas numeradas de 1 a 30.

images/04_01.png

Las celdas numeradas de 1 a 10 han sido inicializadas (rellenadas) con números enteros. La celda número 6 contiene el valor -14, la celda número 1 contiene el número entero 5. Las celdas con los números que van de 11 a 30 todavía no han recibido un valor. No contienen nada significativo o son NULO.

Una tabla se define por su declaración. Esta declaración precisa el nombre de la tabla, el número de la primera y de la última celda, así como el tipo de datos que contendrá. De esta manera, para la tabla de la figura que aparece antes, la declaración es, por ejemplo:

variable 
    v: TABLA[ENTERO][1,30] 

Sin embargo, esta forma no es obligatoria. De este modo, por ejemplo, a menudo encontramos en distintos autores la siguiente notación:

variable 
    v: TABLA[1 .. 30] de ENTERO 

Esta notación imita las declaraciones definidas en lenguaje PASCAL, por ejemplo. Lo importante sigue siendo que la notación utilizada precisa correctamente los distintos elementos de la definición de la tabla. Por otro lado, si no fuera tan largo, también sería completamente legítimo escribir:

variable 
  v: tabla de 30 celdas numeradas de 1 a 30 y que reciben 
números enteros. 

La declaración precisa...

Definir un tipo de datos nuevo

Esta sección estudia cómo definir y utilizar nuevos tipos de datos con ayuda de tipos elementales básicos. Sin embargo, mientras que para los tipos de base, como los ENTEROS, por ejemplo, las operaciones aplicables son implícitamente las de las matemáticas habituales, para estos tipos nuevos habrá que definirlas de manera clara y precisa. Es lo que ya hemos empezado a hacer en el capítulo «Programas directos» con el tipo RESERVORIO, por ejemplo. Esta sección propone estudiar esta cuestión con más profundidad.

1. Definir un tipo de datos

Un tipo de datos define el dominio de los valores que pueden tomar los datos que son instancia de este tipo, pero también las operaciones aplicables a estas instancias. Así, podemos determinar la cantidad de líquido para llenar un RESERVORIO dado, pero llenar un ENTERO no tiene sentido, igual que sumar dos reservorios, por ejemplo. Así, llenar es una operación aplicable a una instancia de RESERVORIO, pero no a una instancia de ENTERO; igualmente, se pueden sumar dos enteros, pero no reservorios.

Un tipo se define a partir de los tipos de base, es decir, tipos evidentes de manera intuitiva y que forman parte de nuestra vida diaria: los números enteros, los números reales, los booleanos, etc. Las operaciones aplicables a las instancias de estos tipos de base suelen ser las operaciones matemáticas del dominio: sumar, restar, multiplicar, etc., dos números, calcular a y b, a o b, para dos booleanos a y b, calcular la intersección, la unión de dos conjuntos, etc. Entonces componemos datos de estos tipos de base para definir un tipo nuevo particular. Eso es lo que ya se ha hecho, por ejemplo, para definir RESERVORIO en el capítulo «Programas directos». Las operaciones aplicables se han definido mediante algoritmos complementarios que operan con datos del tipo. Los datos que componen un tipo nuevo son los atributos del tipo. Así, un RESERVORIO tiene dos atributos de tipo REAL: su capacidad y su contenido.

En este libro, se expresa la definición de un tipo nuevo mediante la declaración: 

tipo 
    <nombre del tipo...

Resumen

En este capítulo hemos visto algunos conceptos elementales sobre la definición algorítmica de estructuras de datos. Una estructura de datos permite declarar y utilizar variables cuyos valores son instancias del tipo definido por la estructura. Una instancia de este tipo está compuesta de atributos, que son instancias de los tipos de base o de otras estructuras, y de operaciones aplicables. También hemos estudiado con más detalle la cadena de caracteres que permite definir variables agrupando bajo un mismo nombre un conjunto múltiple de variables del mismo tipo.