Presentación Proyecto Trabajo Creativa Profesional Azul.pdf
Estructura de Datos Unidad 1 Tipo abstracto de datos TAD
1. Ingeniería en Sistemas Computacionales
Estructura de Datos
Unidad I: Tipos Abstractos de Datos
Este material está desarrollado para la asignatura Estructura de Datos
AED-1026, de la carrera de Ingeniería en Sistemas Computacionales,
plan de estudios ISIC-2010-224
2. Unidad I
Introducción a las Estructuras de Datos
Competencia de la Unidad
Representar y aplicar los tipos de datos abstractos por medio de un lenguaje
de programación.
3. 1.1. Tipos de Datos Abstractos
Algunos lenguajes de programación tienen características que nos permiten
ampliar el lenguaje añadiendo sus propios tipos de datos.
• Un tipo de dato definido por el programador se denomina tipo abstracto de
datos (TAD) para diferenciarlo del tipo fundamental (predefinido) de datos.
• En esencia un tipo abstracto de datos es un tipo que consta de datos
(estructuras de datos propias) y operaciones que se pueden realizar sobre esos
datos. Un TAD se compone de estructuras de datos y los procedimientos o
funciones que manipulan esas estructuras de datos.
4. • Es decir, los usuarios de un TAD se comunican con éste a partir de la interfaz
que ofrece el TAD mediante funciones de acceso.
• Las unidades de programación de lenguajes que pueden implementar un TAD
reciben distintos nombres:
5. Trabajando con Tipos Abstractos de Datos
Concepto de estructura:
• Una estructura es una colección de uno o más elementos, cada uno de los
cuales puede ser de un tipo de dato diferente.
• Cada elemento de la estructura se denomina miembro.
• Una estructura puede contener un número ilimitado de miembros.
• A las estructuras también se las llama registros.
6. • Definición del tipo de dato estructura: Una estructura es un tipo de dato
creado por el usuario, por tanto, es necesario definirlo antes de poder
utilizarlo. Un vez definido, podremos crear variables de tipo estructura.
7.
8. • Declaración de variables de tipo estructura: Una vez definido el tipo de dato
estructura, necesitamos declarar variables de ese tipo (Como para cualquier
tipo de dato).
9. • Inicialización de variables de tipo estructura: Las variables de tipo estructura
las podemos inicializar de dos formas:
10. • Ejercicio: Crear una estructura que contenga los campos básicos de una
agenda personal.
• Ejercicio: Crear un registro que contenga los datos personales para una
nómina.
11. • Acceso a los miembros de una variable de tipo estructura: Una vez que hemos
declarado una variable de tipo estructura, podemos acceder a los miembros
de dicha variable:
12. Acceso a los miembros de una variable de tipo estructura:
13. Acceso a los miembros de una variable de tipo estructura:
14. • Ejercicio: Utilizando estructuras desarrolle un programa que permita la captura
de la información correspondiente a un disco, el programa debe repetir la
captura hasta que el usuario teclee enter en el nombre del disco:
Campos de la estructura
• Nombre del disco
• Cantidad de canciones
• Precio
• Fecha de Compra (dd/mm/aaaa)
El programa debe ser entregado en archivo ya probado en Dev C++
15. 1.2. Modularidad
• Módulo: Un módulo que se supone que representa una función lógica es una
secuencia léxicamente continúa de instrucciones que se encuentra limitado
por elementos de fronteras y además se caracteriza por disponer de un
nombre o identificador.
• Módulo: Es aquél que está constituido por una o varias instrucciones
físicamente contiguas y lógicamente encadenadas, las cuales se pueden
referenciar mediante un nombre y pueden ser llamadas desde diferentes
puntos de un programa.
16. Un módulo puede ser:
• Un programa
• Una función
• Una subrutina (procedimiento o función)
• La modularidad se basa en la descomposición de un problema en una serie de
sub problemas; dividiéndolo en pequeños módulos. Esta división exige la
presencia de un módulo denominado módulo de base o principal, y su función
es que controle los demás.
• El módulo principal coordina las llamadas a los módulos secundarios y pasa
los datos necesarios en forma de parámetros. A su vez cada modulo puede
contener sus propios datos y llamar a otros módulos o funciones.
17. Principios para asegurar diseños modulares:
Pocas interfaces: Cada módulo debe comunicarse con tan pocos como
sea posible.
Interfaces pequeñas (Acoplamiento débil): Si dos módulos se
comunican, deben intercambiar la menor información posible.
Interfaces explícitas: Cuando dos módulos se comunican, debe estar
claro en el texto de uno o de ambos.
Ocultación de la información: Toda la información sobre un módulo
debe ser privada al módulo, a menos que se haya declarado
específicamente como pública.
18. • La solución de un problema complejo puede obtenerse a menudo a partir de la
resolución de subproblemas más simples (estrategia “divide y vencerás”).
22. Ejercicio: realice un programa que calcule el IVA, el DTA y el IGI a productos que
son importados a territorio nacional. Se debe realizar un módulo que haga el
calculo de los impuestos, ya sea que se calcule cada uno de ellos de forma
modular o que se haga un modulo general para todos los impuestos
Entregar el programa ya funcionando y probado en Dev C++
Tabla de impuestos
• IVA = 16%
• DTA = 8 por millar
• IGI depende del país de origen de la mercancía
USA = 0%
CAN = 0%
UK = 2%
EU = 0%
JP = 2%
CHN = 50%
BR = 5%
AUL = 2%
RU = 10%
IND = 10%
Datos necesarios por partida:
Producto
Cantidad
Precio
Unidad de Medida
País
IVA
DTA
IGI
Total
Nota: Cualquier
otro país paga el
25% de IGI.
23. Memoria Estática
• 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 esta en el manejo de
memoria. En la memoria estática durante la ejecución del programa el tamaño
de la estructura no cambia.
• La estructura que maneja memoria estática son los arreglos.
• Un arreglo es una colección finita, homogénea y ordenada de elementos. Es
finita porque todo arreglo tiene un límite, homogénea porque todos los
elementos son del mismo tipo y ordenada porque se puede determinar cuál es
el enésimo elemento.
24. Manejo de memoria dinámica
• En la memoria dinámica durante la ejecución del programa el tamaño de la
estructura puede cambiar.
• La memoria dinámica, es el espacio de almacenamiento que solicita una clase
o método en tiempo de ejecución. De esa manera, a medida que el proceso
requiere de más espacio se solicita al sistema operativo, sin que el proceso se
preocupe por donde serán asignados los datos, ni que espacios de memoria
nos entregara el sistema operativo.
• Así como existen estructuras de datos estáticas (arreglos), también existen
estructuras de datos dinámicas (listas y árboles).
25. Manejo de memoria dinámica
• Una lista es un conjunto de nodos que contiene información heterogénea. Los
nodos de una lista se encuentran enlazados o relacionados por medio de
direccionamientos de memoria como referencia, y se estructuran de la
siguiente manera: