Programación en Pascal/Arrays

De Wikilibros, la colección de libros de texto de contenido libre.

Los arrays son cadenas o listas de algo. Normalmente siempre serán del mismo tipo.

Hasta ahora, hemos visto un tipo de datos que es una cadena: los strings. Son cadenas de caracteres.

Los arrays son prácticamente imprescindibles en casi cualquier tipo de programa. De una forma u otra, todo programa necesita almacenar en memoria grandes cantidades de datos. Por ejemplo, un editor de texto almacena caracteres; un programa de música datos de samples, un programa de conversión almacena datos del dato que va a convertir, un programa de video frames, un juego almacena sus características y escenas, y así con la práctica mayoría de los programas.

Declaración de un array[editar]

La organización "array" es, probablemente, la estructura de datos más conocida debido a que en muchos lenguajes es la única disponible explícitamente.

Un "array" es una estructura homogénea que está constituida por componentes del mismo tipo, llamado tipo base.

También se denomina estructura de acceso aleatorio, o acceso directo, porque todos sus componentes pueden seleccionarse arbitrariamente y son igualmente accesibles. Para designar a un componente aislado, el nombre de la estructura se amplía con el llamado índice de selección del componente. El índice debe ser un valor del tipo definido como tipo índice del array.

     La definición de un tipo "array" T especifica un tipo base To y un tipo índice I.
                               TYPE      T = ARRAY [ I ]      OF  To
     Ejemplos:
                               TYPE vector = ARRAY [1..3] OF REAL
                               TYPE linea = ARRAY [1..80] OF CHAR
                               TYPE nombre = ARRAY [1..32] OF CHAR

Los índices de un "array" deben ser de tipo ordinal. No suele ser posible utilizar el tipo INTEGER porque se excedería el espacio de memoria accesible. Para usar valores enteros como índices, hay que indicar un subrango de enteros.

Un valor de tipo "array" se puede designar por un constructor donde se indica el nombre del tipo y valores constantes de los componentes separados por comas y encerrados entre paréntesis.

     Ejemplo:             vector (2.57, 3.14, -8.16)

Para especificar un mismo valor a componentes consecutivos, se puede usar un factor de repetición de la forma "n of valor"; donde "n" indica el número de componentes que recibirán el mismo valor, y debe ser una expresión constante de tipo INTEGER. El "valor" puede ser una constante u otro constructor del mismo tipo que el componente.

     Ejemplos:             vector (3 OF 1.0) es equivalente a vector (1.0,1.0,1.0)
                           vector (7.2, 2 OF 3.0)

Para seleccionar un componente individual de un "array" se usa un selector que consiste en escribir el nombre de la variable de tipo "array" seguido por el nombre correspondiente al componente, escrito entre corchetes.

     Ejemplo:                  si v := vector (2.57, 3.14, -8.16)
                               entonces v [1] es igual a 2.57.

Los componentes de un "array" se pueden someter a todas las operaciones permitidas para su tipo. La única operación definida para el "array" como tal, es la asignación ( := ).

La forma habitual de operar con "arrays" es actualizar componentes aislados.

El hecho de que los índices tengan que ser de un tipo de datos definido tiene una consecuencia importante: los índices pueden calcularse, es decir, puede ponerse una expresión en lugar de una constante. La expresión debe evaluarse y su resultado determina el componente seleccionado. Esta generalización proporciona una herramienta de programación potente pero, al mismo tiempo, da ocasión a uno de los errores de programación más frecuentes: el valor resultante puede estar fuera del intervalo especificado como campo de variación de los índices. Se supone que en tales casos, la implementación en un equipo concreto ha previsto la emisión de mensajes de error.

Los valores organizados en forma de "array" se suelen manejar utilizando índices variables y sentencias repetitivas que permiten construir algoritmos para realizar tratamientos sistemáticos.

Los índices son de tipo escalar, es decir, un tipo no estructurado en el que está definida una relación de orden. Si el tipo base también está ordenado, entonces queda establecida una relación de orden para ese tipo "array".

La relación de orden entre dos "arrays" está determinada por los dos componentes desiguales, correspondientes, con menor índice.

Declaración de un array[editar]

La organización "array" es, probablemente, la estructura de datos más conocida debido a que en muchos lenguajes es la única disponible explícitamente.

Un "array" es una estructura homogénea que está constituida por componentes del mismo tipo, llamado tipo base.

También se denomina estructura de acceso aleatorio, o acceso directo, porque todos sus componentes pueden seleccionarse arbitrariamente y son igualmente accesibles. Para designar a un componente aislado, el nombre de la estructura se amplía con el llamado índice de selección del componente. El índice debe ser un valor del tipo definido como tipo índice del array.

     La definición de un tipo "array" T especifica un tipo base To y un tipo índice I.
                               TYPE      T = ARRAY [ I ]      OF  To
     Ejemplos:
                               TYPE vector = ARRAY [1..3] OF REAL
                               TYPE linea = ARRAY [1..80] OF CHAR
                               TYPE nombre = ARRAY [1..32] OF CHAR

Los índices de un "array" deben ser de tipo ordinal. No suele ser posible utilizar el tipo INTEGER porque se excedería el espacio de memoria accesible. Para usar valores enteros como índices, hay que indicar un subrango de enteros.

Un valor de tipo "array" se puede designar por un constructor donde se indica el nombre del tipo y valores constantes de los componentes separados por comas y encerrados entre paréntesis.

     Ejemplo:             vector (2.57, 3.14, -8.16)

Para especificar un mismo valor a componentes consecutivos, se puede usar un factor de repetición de la forma "n of valor"; donde "n" indica el número de componentes que recibirán el mismo valor, y debe ser una expresión constante de tipo INTEGER. El "valor" puede ser una constante u otro constructor del mismo tipo que el componente.

     Ejemplos:             vector (3 OF 1.0) es equivalente a vector (1.0,1.0,1.0)
                           vector (7.2, 2 OF 3.0)

Para seleccionar un componente individual de un "array" se usa un selector que consiste en escribir el nombre de la variable de tipo "array" seguido por el nombre correspondiente al componente, escrito entre corchetes.

     Ejemplo:                  si v := vector (2.57, 3.14, -8.16)
                               entonces v [1] es igual a 2.57.

Los componentes de un "array" se pueden someter a todas las operaciones permitidas para su tipo. La única operación definida para el "array" como tal, es la asignación ( := ).

La forma habitual de operar con "arrays" es actualizar componentes aislados.

El hecho de que los índices tengan que ser de un tipo de datos definido tiene una consecuencia importante: los índices pueden calcularse, es decir, puede ponerse una expresión en lugar de una constante. La expresión debe evaluarse y su resultado determina el componente seleccionado. Esta generalización proporciona una herramienta de programación potente pero, al mismo tiempo, da ocasión a uno de los errores de programación más frecuentes: el valor resultante puede estar fuera del intervalo especificado como campo de variación de los índices. Se supone que en tales casos, la implementación en un equipo concreto ha previsto la emisión de mensajes de error.

Los valores organizados en forma de "array" se suelen manejar utilizando índices variables y sentencias repetitivas que permiten construir algoritmos para realizar tratamientos sistemáticos.

Los índices son de tipo escalar, es decir, un tipo no estructurado en el que está definida una relación de orden. Si el tipo base también está ordenado, entonces queda establecida una relación de orden para ese tipo "array".

La relación de orden entre dos "arrays" está determinada por los dos componentes desiguales, correspondientes, con menor índice. 'Texto en negrita

Arrays dinámicos[editar]

Para declarar matrices dinámicas no se menciona el rango de la matriz. Por ejemplo

type
  arrayDinamico = array of integer;
var
  vector: arrayDinamico;

Antes de usar la matriz, debe declarar el tamaño usando la función setlength

setlength(vector,20);

Ahora, la matriz a tiene un rango de índice de matriz válido de 0 a 20: el índice de la matriz siempre está basado en cero.