Publicado el 25 de Junio del 2021
798 visualizaciones desde el 25 de Junio del 2021
61,5 KB
4 paginas
Creado hace 21a (14/03/2004)
2.3.2 Tipos de Datos
Estructurados
Arreglos, Registros, Strings y
Uniones
Tipo Arreglo
l Es un tipo estructurado consistente en un conjunto
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.
l Índice se escribe entre:
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++
TYPE
matriz = ARRAY [subindice, subindice] OF real;
char *mensaje = “Hola mundo\n”;
char *dias[] = {“lu”, ”ma”, “mi”, “ju”, “vi”, “sa”, “do”};
l C y C++
real matriz [DIM1][DIM2];
l Java
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
selector con subíndice [])
l C++ permite definir una clase arreglo por el
usuario y operadores tales como subíndice,
asignación, inicialización, etc.
l Java define los arreglos como tipos
especiales de objetos. Permite uso de
subíndice, cálculo del largo y otros métodos.
l C/C++ no tiene chequeo de rango para los
índices. Tampoco permite averiguar el largo
de un arreglo.
l Pascal provee chequeo de rango
l Java provee chequeo de rango y permite
conocer el largo del arreglo.
int[] arr = {1,2,3,4,6,7,2,3};
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 Un arreglo es una abstracción del lenguaje
l Un arreglo debe ser mapeado a la memoria
l Ejemplo: dirección de lista[k]
dir(lista[0]) + (k)*tamaño
dir(lista[bajo]) + (k-bajo)*tamaño
l Arreglos bidimensionales se almacenan
como fila de columnas, o viceversa
l Puede influir en la forma más eficiente de
recorrido.
l Arreglo no ordenado de elementos que son
accedidos por una clave
l Cada elementos corresponde a un par ordenado
(clave, dato)
l PERL provee esta estructura con el nombre de
hash:
%dias = (
1 => “Enero”,
…
12 => “Diciembre”
);
print $ dias{7};
Arreglos Asociativos
Arreglos Asociativos
l C++ provee mapas y multimapas a travé de
l Hashing
la STL (Standard Template Library)
l Mapas: una clave, un valor.
l Multimapas: un clave, múltiples valores.
l Java provee interfaces para diccionarios e
implementaciones de tablas hash.
l Ubicación de un elemento dentro del arreglo por una
función matemática sobre la clave.
l Los arreglos son casos especiales, donde la clave es el
índice y la función matemática es la identidad.
l Permite que las claves sean estructuras más complejas.
Tipo Registro
l Permite composición heterogénea de
elementos de datos
Cada elemento se identifica por un nombre
(campo o miembro)
l Introducido por COBOL (data division)
l En C equivale a struct
l Concepto de clase en O-O soporta registros (e.g.
C++ y Java)
clave
f(clave )
posición
Ejemplo:
Registros en C y C++ (struct)
struct empleado_t {
struct {
char primer[10];
char paterno[10];
char materno[10];
} nombre;
int sueldo;
}
empleado_t
pelao, guaton;
guaton.sueldo = 550000;
strcpy( pelao.nombre.primer, “Juan”);
2
Ejemplo: Registros en Pascal
Cadena de Caracteres (String)
TYPE
empleado_t =
RECORD
nombre :
RECORD
primer: PACKED ARRAY [1.10] OF char;
paterno: PACKED ARRAY [1.10] OF char;
materno: PACKED ARRAY [1.10] OF char;
END {nombre};
sueldo : integer
END;
VAR
pelao, guaton : empleado_t;
BEGIN
…
pelao.sueldo := 550000;
l Principalmente para la comunicación máquina-
usuario y para manipulación de textos
l Mejora la facilidad de escritura
l ¿Es una cadena un tipo primitivo?
l Algunos lenguajes lo proveen como tipo (Java y
Perl)
l Otros sólo como arreglo de carácteres (C, C++ y
Pascal)
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
l Largo
l Transformación (e.g. de string a entero)
char str[20];
…
if (strcmp(str,”Hola”){
…
else {
…
}
Strings: Calce de Patrones
(Pattern matching)
l Perl hace uso de expresiones regulares
l Ejemplo:
l /[A-Za-z][A-Za-z\d]+/ permite calzar un
identificador
l /^(\s+)\ s+(s+)\ s+(\s+)$/ permite calzar tres
palabras
Diseño de String
l Diseño de string considera:
l Largo estático (Pascal y Java)
l Largo dinámico limitado (e.g. C y C++)
l Largo dinámico (Perl )
l Último es el más flexible, pero es más
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.
l Reserva espacio de memoria igual al mayor
miembro definido.
l Todos los miembros comparten la memoria y
comienzan desde la misma dirección.
l Su uso es en general poco seguro.
l Java no provee este tipo de estructura
union direccion {
char dominio[20];
int IP[4];
};
IP
Dominio
4
Comentarios de: 2.3.2 Tipos de Datos Estructurados (0)
No hay comentarios