Debe introducir al menos 3 caracteres en el buscador.
Inicio / Wikis / Cursos gratis / Curso de Ada - Arrays

Curso de Ada - Arrays

 ****- (10 opiniones)
GNU Free Documentation License Curso gratis de José Alfonso Malo Romero - 16 de Marzo de 2006
Temas Relacionados: Programación estructurada
12. Arrays

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 quisieramos 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 deseasemos 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 range <>) of Tipo_Elemento

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 optimo.

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;

Uso de arrays


Para acceder a los elementos de un array se usan el nombre del objeto array seguido del índice entre paréntesis.

Se puede acceder a una rodaja (slice) de un array usando (x .. y).

Vector_A (1 .. 3) := Vector_B (4 .. 6);

El operador "&" permite concatenar arrays:

Nombre_Completo := Nombre & ' ' & Apellidos;

Si se intenta acceder a un elemento más alla de los límites del array o se asigna a un array (completo o slice) un array de distinto tamaño se levanta la excepción Constraint_Error (a menos que los chequeos estén deshabilitados).

Ejemplo de uso


with Ada.Text_IO, Ada.Integer_Text_IO; use Ada.Text_IO, Ada.Integer_Text_IO; procedure Agenda is type Día_De_Mes is range 1 .. 31; type Día_Con_Cita is array (Día_De_Mes) of Boolean; Citas_En_Mayo : Día_Con_Cita := (others => False); -- Se inicializa todo el mes a False begin -- Tengo citas los días 3, del 8 al 16 (excepto el 14), y el último día del mes. Citas_En_Mayo (3) := True; Citas_En_Mayo (8 .. 16) := (others => True); Citas_En_Mayo (14) := False; Citas_En_Mayo (Citas_En_Mayo'Last) := True; Put ("En mayo tienes citas los días:"); for I in Citas_En_Mayo'Range loop if Citas_En_Mayo (I) then Put (Día_De_Mes'Image (I)); end if; end loop; end Agenda;
Tabla de contenidos
  1. 1 - Introducción
  2. 2 - Historia
  3. 3 - Manual de referencia
  4. 4 - Instalación
  5. 5 - Hola Mundo
  6. 6 - Elementos del lenguaje
  7. 7 - Tipos
  8. 8 - Enteros
  9. 9 - Enumeraciones
  10. 10 - Coma flotante
  11. 11 - Coma fija
  12. 12 - Arrays
  13. 13 - Strings
  14. 14 - Registros
  15. 15 - Registros discriminados
  16. 16 - Registros variantes
  17. 17 - Punteros a objetos
  18. 18 - Punteros a subprogramas
  19. 19 - Tipos derivados
  20. 20 - Tipos etiquetados (orientación a objetos)
  21. 21 - Subtipos
  22. 22 - Objetos (variables y constantes)
  23. 23 - Atributos
  24. 24 - Expresiones
  25. 25 - Operadores
  26. 26 - Sentencias y estructuras de control
  27. 27 - Subprogramas
  28. 28 - Sobrecarga
  29. 29 - Entrada/salida
  30. 30 - Pragmas
  31. 31 - Interfaz con otros lenguajes
  32. 32 - Diseño y programación de sistemas grandes
  33. 33 - Paquetes
  34. 34 - Clausula use
  35. 35 - Clausula with
  36. 36 - Paquete Standard
  1. 37 - Declaraciones
  2. 38 - Ámbito
  3. 39 - Visibilidad
  4. 40 - Renombrado
  5. 41 - La biblioteca Ada (unidades y subunidades)
  6. 42 - Unidades de biblioteca
  7. 43 - Unidades hijas
  8. 44 - Subunidades
  9. 45 - Compilación separada y dependiente
  10. 46 - Tipos abstractos de datos
  11. 47 - Tipos limitados
  12. 48 - Unidades genéricas
  13. 49 - Excepciones
  14. 50 - Paquete Ada.Exceptions
  15. 51 - Concurrencia
  16. 52 - Tareas
  17. 53 - Sincronización de tareas mediante puntos de entrada o citas (entry)
  18. 54 - Aceptación de citas (accept)
  19. 55 - Selección de citas (select)
  20. 56 - Llamadas a punto de entrada complejas
  21. 57 - Tareas dinamicas: creación dinamica de tareas (tipos t
  22. 58 - Dependencia de tareas
  23. 59 - Ejemplos de tareas
  24. 60 - Programación distribuida con GLADE
  25. 61 - Novedades de Ada 2005
  26. 62 - Unidades predefinidas
  27. 63 - Paquete Ada.Strings.Fixed
  28. 64 - Paquete Ada.Strings.Unbounded
  29. 65 - Paquete Ada.Text_IO
  30. 66 - Paquete Ada.Text_IO.Editing
  31. 67 - Paquete Ada.Float_Text_IO
  32. 68 - Paquete Ada.Sequential_IO
  33. 69 - Paquete Ada.Command_Line
  34. 70 - Paquete Interfaces
  35. 71 - Recursos en la Web
Autor y licencia de 'Curso de Ada - Arrays'
José Alfonso Malo Romero Extraído de: http://es.wikibooks.org/wiki/Programaci%C3%B3n_en_Ada_/_Introducci%C3%B3n GNU Free Documentation License
El contenido está disponible bajo los términos de GNU Free Documentation License
Licencia GNU Free Documentation License: http://www.gnu.org/copyleft/fdl.html
Este contenido ha sido recopilado por el equipo de Wikilearning. Todo el contenido recopilado se ha obtenido respetando y comunicando en nuestro site la licencia de cada fuente.
Wikilearning tiene permiso expreso por escrito de los autores para publicar los contenidos que ha extraído de otras webs, incluyendo su uso comercial.

Wikis relacionados con 'Curso de Ada - Arrays'

Excelente curso de iniciación a la astronomía para aquellos que quieran aprender sobre esta apasionante... Más »
La idea de este curso surgió de varias conversaciones entre amig@s de la cuadrilla y... Más »
Este es un curso tremendamente completo, guiado y con ejemplos y prácticas pensadas para convertirlo... Más »
Este tutorial presenta los conceptos básicos de líneas de transmisión (Transmission lines), así como una... Más »
Publicidad, término utilizado para referirse a cualquier anuncio destinado al público y cuyo objetivo es... Más »
Gente Wiki
Tomas Serrano
Soy ingeniero eléctronico y llevo unos cuantos años dedicado a la enseñanza en un colegio de formación profesional. Imparto clases...
Cesar Enrique Lozano Ramirez
Contador público especializado en revisoría fiscal y control de gestión, especialista en docencia universitaria, experiencia y formación en auditoría y...
Auditoría interna
Nestor Boche
Ingeniero 35 años. Gerente de empresa con 3 años de vida. Discipulo de la administración, tecnología, crecimiento, basadas en que...
Juan Flores
En este momento estoy desempleado. Durante 15 años he sido jefe nacional de ventas de españa y portugal de un...
Contratación, Creación y gestión de equipos,...
Carlos Mario Gonzalez Arango
Soy ingeniero de sistemas , vivo en medellin, en un municipio llamado copacabana. Quiero compartir con ustedes alguna de las...
Ricardo Gutierrez Rodriguez
Profesional en el área de administración de empresas, especialista en contabilidad gerencial con experiencia en: diseño e implantacion de sistemas...
Suscribirse
¿Estás seguro de que deseas eliminar este capítulo?