Está en la página 1de 4

Tipo Arreglo

2.3.2 Tipos de Datos


l Es un tipo estructurado consistente en un conjunto
Estructurados ordenado de elementos que se identifican por su
posición relativa mediante un índice.
l Existe un tipo asociado a los elementos y al índice.
Arreglos, Registros, Strings y l Índice se escribe entre:
Uniones l paréntesis redondo (Basic) o
l cuadrado (Pascal, C, C++ y Java).
l Verificación de rango del índice mejora fiabilidad
(Pascal y Java lo hacen).

Arreglos Multidimensionales Inicialización de Arreglos


l Pascal permite sólo dos dimensiones l ANSI C y C++
char *mensaje = “Hola mundo\n”;
TYPE char *dias[] = {“lu”, ”ma”, “mi”, “ju”, “vi”, “sa”, “do”};
matriz = ARRAY [subindice, subindice] OF real;

l C y C++ l Java
real matriz [DIM1][DIM2];
int[] edades = { 7, 12, 18, 21, 25 };

l Pascal no lo permite

Operadores con Arreglo Operadores con Arreglo


l Pascal y C y no tienen soporte especial (sólo l C/C++ no tiene chequeo de rango para los
selector con subíndice []) índices. Tampoco permite averiguar el largo
l C++ permite definir una clase arreglo por el de un arreglo.
usuario y operadores tales como subíndice, l Pascal provee chequeo de rango
asignación, inicialización, etc. l Java provee chequeo de rango y permite
l Java define los arreglos como tipos conocer el largo del arreglo.
especiales de objetos. Permite uso de int[] arr = {1,2,3,4,6,7,2,3};
subíndice, cálculo del largo y otros métodos. for(int i=0;i<arr.length ;i++)
{
...
}

1
Implementación de Arreglos Arreglos Asociativos

l La memoria es un arreglo unidimensional de celdas: l Arreglo no ordenado de elementos que son


l Un arreglo es una abstracción del lenguaje accedidos por una clave
l Un arreglo debe ser mapeado a la memoria l Cada elementos corresponde a un par ordenado
l Ejemplo: dirección de lista[k] (clave, dato)
dir(lista[0]) + (k)*tamaño l PERL provee esta estructura con el nombre de
dir(lista[bajo]) + (k-bajo)*tamaño
hash:
l Arreglos bidimensionales se almacenan %dias = (
como fila de columnas, o viceversa 1 => “Enero”,

l Puede influir en la forma más eficiente de 12 => “Diciembre”
);
recorrido. print $ dias{7};

Arreglos Asociativos Arreglos Asociativos

l C++ provee mapas y multimapas a travé de l Hashing


la STL (Standard Template Library) l Ubicación de un elemento dentro del arreglo por una
función matemática sobre la clave.
l Mapas: una clave, un valor. l Los arreglos son casos especiales, donde la clave es el
l Multimapas: un clave, múltiples valores. índice y la función matemática es la identidad.
l Java provee interfaces para diccionarios e l Permite que las claves sean estructuras más complejas.

implementaciones de tablas hash.

clave f(clave )

posición

Ejemplo:
Tipo Registro Registros en C y C++ (struct)

l Permite composición heterogénea de


elementos de datos struct empleado_t {
struct {
Cada elemento se identifica por un nombre char primer[10];
char paterno[10];
(campo o miembro) char materno[10];
} nombre;
l Introducido por COBOL (data division) int sueldo;
}
l En C equivale a struct
empleado_t pelao, guaton;
l Concepto de clase en O-O soporta registros (e.g.
C++ y Java) guaton.sueldo = 550000;
strcpy( pelao.nombre.primer, “Juan”);

2
Ejemplo: Registros en Pascal Cadena de Caracteres (String)
TYPE
empleado_t =
RECORD
l Principalmente para la comunicación máquina-
nombre : usuario y para manipulación de textos
RECORD
primer: PACKED ARRAY [1.10] OF char; l Mejora la facilidad de escritura
paterno: PACKED ARRAY [1.10] OF char;
materno: PACKED ARRAY [1.10] OF char;
END {nombre};
l ¿Es una cadena un tipo primitivo?
sueldo : integer l Algunos lenguajes lo proveen como tipo (Java y
END;
VAR Perl )
pelao, guaton : empleado_t;
l Otros sólo como arreglo de carácteres (C, C++ y
BEGIN Pascal)

pelao.sueldo := 550000; l ¿Puede el largo variar dinámicamente?

Strings: Operaciones Básicas Ejemplo de String en C


l Asignación
l Comparación
l Concatenación char str[20];
l Largo …
l Transformación (e.g. de string a entero) if (strcmp(str ,”Hola”){

else {

}

Strings: Calce de Patrones


(Pattern matching) Diseño de String
l Perl hace uso de expresiones regulares l Diseño de string considera:
l Ejemplo: l Largo estático (Pascal y Java)
l /[A-Za-z][A-Za-z\d]+/ permite calzar un l Largo dinámico limitado (e.g. C y C++)
identificador l Largo dinámico (Perl )
l /^(\s+)\ s+(s+)\ s+(\s+)$/ permite calzar tres l Último es el más flexible, pero es más
palabras costoso de implementar y ejecutar.

3
Tipo Union Ejemplo: C y C++
l Permite almacenar diferentes tipos de datos en
diferentes tiempos en una misma variable. union direccion {
char dominio[20];
l Reserva espacio de memoria igual al mayor int IP[4];
miembro definido. }; IP
l Todos los miembros comparten la memoria y Dominio
comienzan desde la misma dirección.
l Su uso es en general poco seguro.
l Java no provee este tipo de estructura

También podría gustarte