ARRAY AMPARO CALDERON PEREZ CORPORACION DE ESTUDIOS SUPERIORES DEL ORIENTE SARAVENA 2013 ARRAY AMPARO CALDERON PEREZ TRABAJO DIRIGIDO A: ING. Jorge Alberto Patiño CORPORACION DE ESTUDIOS SUPERIORES DEL ORIENTE SARAVENA 2013 ARRAY DEFINICIÓN Un Array es un conjunto finito de valores del mismo tipo. Un Array es una estructura de datos que almacena bajo el mismo nombre (Variable) a una colección de datos del mismo tipo. Un Array es un conjunto de variables del mismo tipo que tienen el Mismo nombre y se diferencian en el índice. Letras = ‘a’ ‘z’ ‘r’ ‘j’ • A cada dato almacenado se le denomina elemento del array o ítem. •Cada elemento del array está numerado, y a éste número se le Denomina índice. INDICES DE UN ARRAY Los índices son números que se utilizan para identificar a cada uno de los componentes de un array. A modo de ejemplo, podemos pensar que los índices son como los números de habitaciones de un hotel, es decir, para poder dirigirnos a un hotel específico es necesario saber el nombre del mismo, luego, si queremos llegar a una habitación específica de dicho hotel necesitaremos, además del nombre del hotel, el número de habitación deseado. DIMENSIONES DE UN ARRAY De acuerdo a la forma en que se construye o declara un array, éste puede ser clasificado como: unidimensional, bidimensional y multidimensional. Los arrays que se emplean con mucha más frecuencia son los estructurados a manera de vector ( array unidimensional ) y los estructurados a manera de matriz ( array bidimensional ), así, aunque en C++ se pueden crear estructuras multidimensionales, en este capítulo solo trataremos con vectores y matrices. ARRAY UNIDIMENSIONAL Una array uni-dimensional es aquel en donde los componentes son accesibles por medio de uno y solamente un índice que apunte al componente requerido. Los arrays de este tipo son conocidos también con el nombre de vectores. Conceptualmente, podemos pensar en un array unidimensional como una lista compuesta de datos, donde para referirnos a uno de ellos emplearemos un número para indicar la posición del mismo dentro de la lista. Por ejemplo, consideremos el caso de la tabla o array Venta Semanal, la cual está pensada para registrar las ventas de cada uno de los días de la semana. En C++ los arrays están basados en 0 (cero ), es decir, el primer elemento de un array se indexa mediante el 0, y el índice para el último de los elementos es igual al número de componentes menos uno. ARRAY BIDIMENSIONAL Una array bi-dimensional es aquel en donde los componentes son accesibles por medio de una pareja de índices que apunten a la fila y a la columna del componente requerido. Los arrays de este tipo son conocidos también con el nombre de matrices. Conceptualmente, podemos pensar en un array bidimensional como en una lista compuesta de filas y columnas, en donde para referirnos a una de ellas emplearemos un número para indicar la posición de fila y otro número para indicar la posición de la columna del componente deseado. Por ejemplo, consideremos el caso de la tabla o array Venta Semana Q, la cual está pensada para registrar las ventas de cada uno de los días de la semana por cuatro semanas, o sea, una tabla de 7 x 4 elementos. De manera conceptual podemos ver el array como se muestra a continuación: Array: VentaSemanaQ C O L U M N A S F +--- componente ( 0, 0 ) | +------+------+------+------+ | dato | dato | dato | dato | |------|------|------|------| | dato | dato | dato | dato | |------|------|------|------| I | dato | dato | dato | dato | |------|------|------|------| L | dato | dato | dato | dato | |------|------|------|------| A | dato | dato | dato | dato | |------|------|------|------| S | dato | dato | dato | dato | |------|------|------|------| | dato | dato | dato | dato | +------+------+------+------+ | +---( 6, 3 ) componente Los arrays de Ada son de alto nivel, comparados, por ejemplo, con los de C/C++. Esto se traduce en varias posibilidades sintácticas que se presentan a continuación. DECLARACIÓN DE ARRAYS Los arrays de Ada son de alto nivel, comparados, por ejemplo, con los de C/C++. Esto se traduce en varias posibilidades sintácticas que se presentan a continuación. SINTÁXIS BÁSICA La declaración básica de un array es la siguiente: Array (Tipo_Índice) of Tipo_Elemento Este array consiste en un elemento de tipo Tipo_Elemento por cada posible valor de Tipo_Índice. Por ejemplo, si quisiéramos contar las ocurrencias de cada letra en un texto nos definiríamos un array de este tipo: Type Contador_Caracteres is array (Character) of Natural; Nota: usamos Natural como tipo de elemento puesto que los valores negativos de Integer no tienen sentido en una cuenta. Es conveniente usar el subtipo entero más adecuado en cada caso, puesto que así nos beneficiamos de la comprobación de rango y podemos descubrir errores fácilmente. Con subrango conocido A menudo no necesitamos un array con todos los valores posibles del tipo del índice. En este caso definimos un subtipo del tipo índice con el rango necesitado. subtype Subtipo_Índice is Tipo_Índice range Primero ... Último; Array (Subtipo_Índice) of Tipo_Elemento; Para lo que hay una forma más abreviada si no deseamos definir el subtipo con nombre, se puede hacer anónimamente: Array (Tipo_Índice range Primero... Último) of Tipo_Elemento; Puesto que Primero y Último son expresiones del tipo Tipo_Índice, una forma más simple es la siguiente: Array (Primero ... Último) of Tipo_Elemento Ten en cuenta que si First y Last son literales numéricos, esto implica que el tipo índice base es el Integer. Si en el ejemplo anterior, sólo deseásemos contar letras mayúsculas desechando otros caracteres, podríamos definir el tipo array de este modo: Type Contador_Caracteres is array (Character range 'A' .. 'Z') of Natural; Con un subrango desconocido A menudo el rango necesitado no se conoce hasta tiempo de ejecución o necesitamos objetos array de varias longitudes. En lenguajes de más bajo nivel como C necesitaríamos hacer uso de la memoria dinámica (del heap). Pero no es el caso de Ada, puesto que la caja <> nos permite declarar arrays de tamaño no restringido: Array (Tipo_Índice Tipo_Elemento range <>) of Cuando declaramos objetos de este tipo, los extremos (bounds) del array deben conocerse, bien como resultado de una función o por una inicialización mediante un agregado. Desde su declaración hasta su finalización, el objeto no puede cambiar de tamaño. Con elementos aliased Los programadores de C/C++ dan por hecho que todo elemento de un array tiene una dirección propia en memoria (de hecho el nombre del array es un puntero sobre el que se puede operar). En Ada, esto no es siempre así. Veamos este ejemplo: type Día_De_Mes is range 1 .. 31; Type Día_Con_Cita is array (Día_De_Mes) of Boolean; pragma Pack (Día_Con_Cita); Puesto que hemos empaquetado el array, el compilador usará el mínimo espacio de almacenamiento posible. En la mayoría de los casos esto implica que los 8 valores booleanos cabrán en un byte. Pero este no es el único caso en el que el compilador de Ada puede empaquetar un array puesto que tiene libertad en los casos en que sea más óptimo. Si queremos acceder con un puntero a cada elemento tenemos que expresarlo explícitamente. type Día_De_Mes is range 1 .. 31; type Día_Con_Cita is array (Día_De_Mes) of aliased Boolean;