estructura de datos unidad 1 tipo abstracto de datos tad

26
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

Upload: jose-antonio-sandoval-acosta

Post on 13-Apr-2017

106 views

Category:

Engineering


4 download

TRANSCRIPT

Page 1: Estructura de Datos Unidad 1 Tipo abstracto de datos TAD

Ingeniería en Sistemas Computacionales

Estructura de DatosUnidad 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

Page 2: Estructura de Datos Unidad 1 Tipo abstracto de datos TAD

Unidad IIntroducción a las Estructuras de Datos

Competencia de la UnidadRepresentar y aplicar los tipos de datos abstractos por medio de un lenguaje de programación.

Page 3: Estructura de Datos Unidad 1 Tipo abstracto de datos TAD

1.1. Tipos de Datos AbstractosAlgunos 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.

Page 4: Estructura de Datos Unidad 1 Tipo abstracto de datos TAD

• 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:

Page 5: Estructura de Datos Unidad 1 Tipo abstracto de datos TAD

Trabajando con Tipos Abstractos de DatosConcepto 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.

Page 6: Estructura de Datos Unidad 1 Tipo abstracto de datos TAD

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

Page 7: Estructura de Datos Unidad 1 Tipo abstracto de datos TAD
Page 8: Estructura de Datos Unidad 1 Tipo abstracto de datos TAD

• 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).

Page 9: Estructura de Datos Unidad 1 Tipo abstracto de datos TAD

• Inicialización de variables de tipo estructura: Las variables de tipo estructura las podemos inicializar de dos formas:

Page 10: Estructura de Datos Unidad 1 Tipo abstracto de datos TAD

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

Page 11: Estructura de Datos Unidad 1 Tipo abstracto de datos TAD

• 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:

Page 12: Estructura de Datos Unidad 1 Tipo abstracto de datos TAD

Acceso a los miembros de una variable de tipo estructura:

Page 13: Estructura de Datos Unidad 1 Tipo abstracto de datos TAD

Acceso a los miembros de una variable de tipo estructura:

Page 14: Estructura de Datos Unidad 1 Tipo abstracto de datos TAD

• 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++

Page 15: Estructura de Datos Unidad 1 Tipo abstracto de datos TAD

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.

Page 16: Estructura de Datos Unidad 1 Tipo abstracto de datos TAD

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.

Page 17: Estructura de Datos Unidad 1 Tipo abstracto de datos TAD

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.

Page 18: Estructura de Datos Unidad 1 Tipo abstracto de datos TAD

• 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”).

Page 19: Estructura de Datos Unidad 1 Tipo abstracto de datos TAD

• Ejemplo:

Page 20: Estructura de Datos Unidad 1 Tipo abstracto de datos TAD

• Ejemplo: Un programa debe calcular el IVA por cada operación de una factura de 3 elementos.#include <cstdlib>#include <iostream>using namespace std;int main(int argc, char *argv[]) { float precio=0, cantidad=0, iva=0; float subtotal=0, iva_total=0, total_pago=0; cout<<"capture cantidad 1:"; cin>> cantidad; cout<<"capture Precio 1:"; cin>> precio; iva=cantidad*precio*0.16; iva_total=iva_total+iva; subtotal=subtotal+ (cantidad*precio);

cout<< "IVA: " << iva <<endl; cout<<"capture cantidad 2:"; cin>> cantidad; cout<<"capture Precio 2:"; cin>> precio; iva=cantidad*precio*0.16; iva_total=iva_total+iva; subtotal=subtotal+(cantidad*precio); cout<< "IVA: " << iva <<endl;

cout<<"capture cantidad 3:"; cin>> cantidad; cout<<"capture Precio3:"; cin>> precio; iva=cantidad*precio*0.16;

iva_total=iva_total+iva; subtotal=subtotal+(cantidad*precio); cout<< "IVA: " << iva <<endl; total_pago=subtotal+iva_total; cout<< "IVA total: " << iva_total <<endl; cout<< "Total a Pagar: " << total_pago <<endl; system("pause"); return 0;}

Page 21: Estructura de Datos Unidad 1 Tipo abstracto de datos TAD

#include <cstdlib>#include <iostream>using namespace std;

float calc_iva(float precio, float cantidad) { float iva = precio*cantidad*0.16; return iva;}

int main(int argc, char *argv[]) { float precio=0, cantidad=0, iva=0; float subtotal=0, iva_total=0, total_pago=0; cout<<"capture cantidad 1:"; cin>> cantidad; cout<<"capture Precio 1:";

cin>> precio; iva=calc_iva(precio, cantidad); iva_total=iva_total+iva; subtotal=subtotal+(cantidad*precio); cout<< "IVA: " << iva <<endl;

cout<<"capture cantidad 2:"; cin>> cantidad; cout<<"capture Precio 2:"; cin>> precio; iva=calc_iva(precio, cantidad); iva_total=iva_total+iva; subtotal=subtotal+(cantidad*precio); cout<< "IVA: " << iva <<endl;

cout<<"capture cantidad 3:";

cin>> cantidad; cout<<"capture Precio3:"; cin>> precio; iva=calc_iva(precio, cantidad); iva_total=iva_total+iva; subtotal=subtotal+(cantidad*precio); cout<< "IVA: " << iva <<endl; total_pago=subtotal+iva_total; cout<< "IVA total: " << iva_total <<endl; cout<< "Total a Pagar: " << total_pago <<endl; system("pause"); return 0;}

Page 22: Estructura de Datos Unidad 1 Tipo abstracto de datos TAD

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:ProductoCantidadPrecioUnidad de MedidaPaísIVADTAIGITotal

Nota: Cualquier otro país paga el 25% de IGI.

Page 23: Estructura de Datos Unidad 1 Tipo abstracto de datos TAD

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.

Page 24: Estructura de Datos Unidad 1 Tipo abstracto de datos TAD

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

Page 25: Estructura de Datos Unidad 1 Tipo abstracto de datos TAD

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:

Page 26: Estructura de Datos Unidad 1 Tipo abstracto de datos TAD

Bibliografía

• Joyanes, Zahonero. Estructura de Datos en C++. McGraw Hill. Madrid, España. 2007. ISBN: 978-84-481-5645-9.