Estructura de Datos Unidad 1 Tipo abstracto de datos TAD

Post on 13-Apr-2017

104 views 4 download

Transcript of 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

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.

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.

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

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.

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

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

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

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

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

Acceso a los miembros de una variable de tipo estructura:

Acceso a los miembros de una variable de tipo estructura:

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

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.

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.

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.

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

• Ejemplo:

• 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;}

#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;}

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.

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.

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

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:

Bibliografía

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