1. 1
UNIDAD 4: ARREGLOS Y TIPOS ESTRUCTURADOS
ALGORITMIA Y PROGRAMACIÓN
ESTRUCTURADA
MCC. Sandra Luz Morales Güitrón
2. Temario
2
4.1. Arreglo unidimensional
4.2. Arreglos de más dimensiones.
4.3. Diferencia entre acceso de memoria dinámica
y estática.
4.4. Tipos Estructurados.
M. en C. Sandra Luz Morales Güitrón
3. Objetivos
3
Resolver problemas que requieran de arreglos de tipos de
datos compuestos para representar información mixta
construyendo módulos documentados que mantengan las
definiciones y las operaciones necesarias.
Comprenderá la creación y uso de los arreglos.
Aprenderá como utilizar los arreglos unidimensionales o
multidimensionales.
Conocerá cual es la diferencia de acceso a memoria dinámica o
estática.
Entenderá el uso de los tipos estructurados.
M. en C. Sandra Luz Morales Güitrón
4. Introducción
4
Todas las variables que se han considerado hasta ahora son de tipo
simple. Una variable de tipo simple consiste de una sola caja de
memoria y sólo puede contener un valor cada vez. Una variable de
tipo estructurado consiste en toda una colección de casillas de
memoria. Los tipos de datos estudiados: entero, real, alfabético son
considerados como datos de tipo simple, puesto que una variable
que se define con alguno de estos tipos sólo puede almacenar un
valor a la vez, es decir, existe una relación de uno a uno entre la
variable y el número de elementos (valores) que es capaz de
almacenar. En cambio un dato de tipo estructurado, como el arreglo,
puede almacenar más de un elemento (valor) a la vez, con la
condición de que todos los elementos deben ser del mismo tipo, es
decir, que se puede tener un conjunto de datos enteros, reales, etc.
M. en C. Sandra Luz Morales Güitrón
5. Introducción
5
Datos estructurados:
Estructura de Datos es una colección de datos que se caracterizan por su
organización y las operaciones que se definen en ella. Los datos de tipo estándar
pueden ser organizados en diferentes estructuras de datos: estáticas y dinámicas.
Estructura de Datos estáticas:
Son aquellas en las que el espacio ocupado en memoria se define en tiempo de
compilación y no puede ser modificado durante la ejecución del programa.
Corresponden a este tipo los arrays y registros
Estructuras de Datos Dinámicas:
Son aquellas en las que el espacio ocupado en memoria puede ser modificado en
tiempo de ejecución. Corresponden a este tipo las listas, árboles y grafos . Estas
estructuras no son soportadas en todos los lenguajes. La elección de la estructura
de datos idónea dependerá de la naturaleza del problema a resolver y, en
menor medida, del lenguaje. Las estructuras de datos tienen en común que un
identificador, nombre, puede representar a múltiples datos individuales.
M. en C. Sandra Luz Morales Güitrón
6. 4.1. Arreglo unidimensional
6
Arreglos(Arrays):
Un arreglo (array) es una colección de datos del mismo tipo, que
se almacenan en posiciones consecutivas de memoria y reciben un
nombre común. Para referirse a un determinado elemento de un
array se deberá utilizar un índice, que especifique su posición
relativa en el array. Un arreglo es una colección finita,
homogénea y ordenada de elementos.
Finita: Todo arreglo tiene un límite; es decir, debe determinarse cuál será
el número máximo de elementos que podrán formar parte del arreglo.
Homogénea: Todos los elementos del arreglo deben ser del mismo tipo.
Ordenada: Se puede determinar cuál es el primer elemento, el segundo,
el tercero,.... y el n-ésimo elmento.
M. en C. Sandra Luz Morales Güitrón
7. 4.1. Arreglo unidimensional
7
Los arreglos se clasifican de acuerdo con el número de dimensiones que
tienen. Así se tienen los:
1. Unidimensionales (vectores)
2. Bidimensionales (tablas o matrices)
3. Multidimensionales (tres o más dimensiones)
M. en C. Sandra Luz Morales Güitrón
8. 4.1. Arreglo unidimensional
8
Arreglos Unidimensionales:
Están formados por un conjunto de elementos de un
mismo tipo de datos que se almacenan bajo un mismo
nombre, y se diferencian por la posición que tiene
cada elemento dentro del arreglo de datos. Al
declarar un arreglo, se debe inicializar sus elementos
antes de utilizarlos. Para declarar un arreglo tiene que
indicar su tipo, un nombre único y la cantidad de
elementos que va a contener.
Entero Calificaciones[0…99]
M. en C. Sandra Luz Morales Güitrón
9. 4.1. Arreglo unidimensional
9
Para acceder a valores específicos
del arreglo, use un valor de índice
que apunte al elemento deseado.
Por ejemplo, para acceder al
primer elemento del arreglo
calificaciones debe utilizar el
valor de índice 0
(calificaciones[0]). Los programas
en C++ siempre indizan el primer
elemento de un arreglo con 0 y el
último con un valor n -1al tamaño
del arreglo.
M. en C. Sandra Luz Morales Güitrón
10. 4.1. Arreglo unidimensional
10
Inicialización y asignación de valores
Como se decía anteriormente, antes de utilizar un arreglo es
necesario inicializarlo: Calificaciones[0];
Para inicializar todos los elementos de una vez, es necesario
asignar un valor a un elemento del arreglo se hace por
ejemplo: Calificaciones[0] =100;
Cuando se usan arreglos, una operación común es usar una
variable índice para acceder a los elementos de un arreglo.
Suponiendo que la variable índice I contiene el valor 3, la
siguiente instrucción asigna el valor 400 a valores[3]:
valores[I] = 400;
M. en C. Sandra Luz Morales Güitrón
11. 4.1. Arreglo unidimensional
11
Partes de un arreglo:
Los componentes. Hacen referencia a los elementos que forman el
arreglo, es decir, a los valores que se almacenan en cada una de las
casillas del mismo.
Los índices. Permiten hacer referencia a los componentes del
arreglo en forma individual, especifican cuántos elementos tendrá el
arreglo y además, de qué modo podrán accesarse esos
componentes.
M. en C. Sandra Luz Morales Güitrón
12. 4.1. Arreglo unidimensional
12
Definición de Arreglos:
ident_arreglo = arreglo[liminf .. Limsup] de tipo Operaciones
con vectores:
Las operaciones que se pueden realizar con vectores durante
el proceso de resolución de un problema son:
Lectura/ escritura
Asignación
Actualización(inserción, eliminación, modificación)
Recorrido (acceso secuencial)
Ordenación
Búsqueda
M. en C. Sandra Luz Morales Güitrón
13. 4.1. Arreglo unidimensional
13
Ejemplos: Sea arre un arreglo de 70 elementos enteros con índices enteros.
Su representación nos queda:
M. en C. Sandra Luz Morales Güitrón
14. 4.1. Arreglo unidimensional
14
Lectura
El proceso de lectura de un arreglo consiste en leer y asignar un valor a cada uno
de sus elementos. Normalmente se realizan con estructuras repetitivas, aunque
pueden usarse estructuras selectivas. Usamos los índices para recorrer los elementos
del arreglo:
desde i = 1 hasta 70 hacer
leer ( arre[i])
fin_desde
Escritura:
Es similar al caso de lectura, sólo que en vez de leer el componente del arreglo, lo
escribimos.
leer (N)
desde i = 1 hasta N hacer
escribir (arre[i])
fin_desde
M. en C. Sandra Luz Morales Güitrón
15. 4.1. Arreglo unidimensional
15
Asignación: No es posible asignar directamente un valor a todo el arreglo; sino que se debe asignar el
valor deseado en cada componente. Con una estructura repetitiva se puede asignar un valor a todos los
elementos del vector.
Por ejemplo:
arre[1] =120 (asignación de un valor constante único a una casilla del vector)
arre[3] =arre[1] / 4 (asignar una operación)
Se puede asignar un valor constante a todos los elementos del vector:
desde i = 1 hasta 5 hacer
arre[i] =3
fin_desde
O bien
arre =3 (con arre del tipo arreglo)
Inicialización
Para inicializar con cero todos los elementos del arreglo:
desde i = 1 hasta 70 hacer
arre[i] ¬ 0
fin_desde
M. en C. Sandra Luz Morales Güitrón
16. 4.1. Arreglo unidimensional
16
Acceso Secuencial. (Recorrido)
El acceso a los elementos de un vector puede ser para leer en él o para escribir
(visualizar su contenido). Recorrido del vector es la acción de efectuar una acción
general sobre todos los elementos de ese vector.
Actualización.
Incluye añadir (insertar), borrar o modificar algunos de los ya existentes. Se debe
tener en cuenta si el arreglo está o no ordenado. Añadir datos a un vector consiste
en agregar un nuevo elemento al final del vector, siempre que haya espacio en
memoria.
Investigue cómo insertar o eliminar elementos en un arreglo:
a) Ordenado
b) No ordenado
M. en C. Sandra Luz Morales Güitrón
17. 4.2. Arreglos de más dimensiones.
17
Arreglo Bidimensional:
Es un conjunto de datos homogéneo, finito y ordenado, donde se hace
referencia a cada elemento por medio de dos índices. El primero se
utiliza para los renglones (filas) y el segundo para las columnas.
También puede definirse como un arreglo de arreglos. Internamente en
memoria se reservan MxN posiciones consecutivas para almacenar
todos los elementos del arreglo.
Declaración de una matríz:
M. en C. Sandra Luz Morales Güitrón
18. 4.2. Arreglos de más dimensiones.
18
Por ejemplo un arreglo de MxN (4x5) , tiene 4 renglones y 5 columnas, es
decir, cada renglón se divide en 5 columnas, como se muestra a
continuación:
COLUMNA 1 2 3 4 5
RENGLÓN
(1,1) (1,2) (1,3) (1,4) (1,5)
Para relacionar cada elemento 1
individual de una matriz se usan dos RENGLÓN
2
(2,1) (2,2) (2,3) (2,4) (2,5)
subíndices; el primero indica el RENGLÓN
(3,1) (3,2) (3,3) (3,4) (3,5)
3
renglón y el segundo la columna.
RENGLÓN
(4,1) (4,2) (4,3) (4,4) (4,5)
4
Los subíndices pueden ser números, variables o expresiones de tipo entero.
Como toda variable, una de tipo matriz puede usarse para leer datos,
asignarle valores mediante expresiones aritméticas, imprimir su contenido,
formar parte de expresiones lógicas, etcétera.
M. en C. Sandra Luz Morales Güitrón
19. 4.2. Arreglos de más dimensiones.
19
M. en C. Sandra Luz Morales Güitrón
20. 4.2. Arreglos de más dimensiones.
20
Arreglos Multidimensionales (Poliedros):
Son arreglos de tres o más dimensiones. También se les denomina
poliedros. Este tipo de arreglos no son de uso frecuente, no obstante son
una herramienta útil para un determinado número de problemas.
La mayoría de los lenguajes de programación admiten estas estructuras,
aunque cada uno de ellos tiene una limitación con respecto al número
máximo de dimensiones permitidas.
Tipo de dato IDARREGLO= arreglo[capa, fila, columna]
Entero IDARREGLO[liminf…limsup, liminf…limsup, liminf…limsup]
M. en C. Sandra Luz Morales Güitrón
21. 4.2. Arreglos de más dimensiones.
21
Por ejemplo un arreglo de ZxXxY (3x5x6) , tiene 3 capas, 5
renglones y 6 columnas, es decir, cada capa se divide en 5
renglones, y 6 columnas, como se muestra a continuación:
Columna
Capa 3
Capa 2
Capa 1
Renglón
M. en C. Sandra Luz Morales Güitrón
22. 4.3. Diferencia entre acceso de
22
memoria dinámica y estática.
Datos estáticos: Su tamaño y forma es constante durante la
ejecución de un programa y por tanto se determinan en
tiempo de compilación. El ejemplo: típico son los arrays. Tienen
el problema de que hay que dimensionar la estructura de
antemano, lo que puede conllevar desperdicio o falta de
memoria.
Datos dinámicos: su tamaño y forma es variable (o puede ser
lo) a lo largo de un programa, por lo que se crean y
destruyen en tiempo de ejecución. Esto permite dimensionar la
estructura de datos de una forma precisa: se va asignando
memoria en tiempo de ejecución según se va necesitando.
M. en C. Sandra Luz Morales Güitrón
23. 4.3. Diferencia entre acceso de
23
memoria dinámica y estática.
Datos Simples
Hacen referencia a un único valor a la vez en memoria
Entero, Real, Carácter, Lógico
Estáticos Arreglos, Registros, Archivos, Cadenas
Datos Estructurados
Se refieren a un grupo de casillas de memoria
Dinámicos Listas, Arboles, Grafos
M. en C. Sandra Luz Morales Güitrón
24. 4.3. Diferencia entre acceso de
24
memoria dinámica y estática.
Cuando el sistema operativo carga un programa para ejecutarlo y lo
convierte en proceso, le asigna cuatro partes lógicas en memoria principal:
texto, datos(estáticos), pila y una zona libre. Esta zona libre (o heap) es la
que va a contener los datos dinámicos, la cual, a su vez, en cada instante
de la ejecución tendrá partes asignadas a los mismos y partes libres que
fragmentarán esta zona, siendo posible que se agote sino se liberan las
partes utilizadas ya inservibles. (La pila también varía su tamaño o
dinámicamente, pero la gestiona el sistema operativo, no el programador):
Para trabajar con datos dinámicos necesitamos dos cosas:
1. Subprogramas predefinidos en el lenguaje que nos permitan gestionar la
memoria de forma dinámica (asignación y liberación).
2. Algún tipo de dato con el que podamos acceder a esos datos dinámicos (ya
que con los tipos vistos hasta ahora sólo podemos acceder a datos con un
tamaño y forma ya determinados).
M. en C. Sandra Luz Morales Güitrón
25. 4.3. Diferencia entre acceso de
25
memoria dinámica y estática.
M. en C. Sandra Luz Morales Güitrón
26. 4.3. Diferencia entre acceso de
26
memoria dinámica y estática.
Implementación
Para implementar alguna estructura de datos, primero es
necesario tener muy claro cómo va a ser el manejo de
memoria.
La diferencia entre estructuras estáticas y dinámicas es el
manejo de memoria.
Estática Dinámica
Durante la ejecución del Durante la ejecución del
programa el tamaño de la programa el tamaño de la
estructura no cambia estructura puede cambiar
M. en C. Sandra Luz Morales Güitrón
27. 4.4. Tipos Estructurados.
27
Tipos estructurados o registros:
Definidos por el programador partir de otros tipos escalares
o compuestos.
Conjunto de datos conceptualmente relacionados.
Cada dato del conjunto puede ser de un tipo distinto.
REGISTER
Campo1
Campo 2
…
END_REGISTER
M. en C. Sandra Luz Morales Güitrón
28. 4.4. Tipos Estructurados.
28
Semántica:
Campo: cada objeto de un tipo estructurado, es una
variable de un cierto tipo (escalar o compuesta)
Para acceder a los campos de un registro:
<variable_estructurada>.<nombre_campo>
Persona= REGISTER
Cadena: Nombre, ApellidoP, ApellidoM
Carácter: sexo, edo_civil.
Entero: num_id, edad.
END_REGISTER
M. en C. Sandra Luz Morales Güitrón
29. 4.4. Tipos Estructurados.
29
Declaración de variables.
Persona p;
num_id Nombre ApellidoP ApellidoM sexo edo_civil edad
Acceso a los campos.
p.Nombre Variable de tipo cadena
p.sexo Variable de tipo carácter
p.edad Variable de tipo numérico (entero)
…
M. en C. Sandra Luz Morales Güitrón
30. 4.4. Tipos Estructurados.
30
Asignación num_id Nombre ApellidoP ApellidoM sexo edo_civil edad
p.Nombre = “Esteban” 1 Esteban Sánchez Garcia M S 25
p.sexo = “M”
p.edad= “25”
Lectura
Var1= p.Nombre num_id Nombre ApellidoP ApellidoM sexo edo_civil edad
Var2= p.sexo 1 Esteban Sánchez Garcia M S 25
Var3= p.edad
Esteban M 25
Var1 Var2 Var3
M. en C. Sandra Luz Morales Güitrón