TDAs II - PowerPoint PPT Presentation

1 / 14
About This Presentation
Title:

TDAs II

Description:

Los Tipos de Datos Abstractos (TDA) sirven para simplificar el dise o y la ... del tipo de datos, ser necesario cambiar el programa para que siga funcionando. ... – PowerPoint PPT presentation

Number of Views:51
Avg rating:3.0/5.0
Slides: 15
Provided by: FelipeC2
Category:
Tags: siga | tdas

less

Transcript and Presenter's Notes

Title: TDAs II


1
TDAs (II)
  • Clase 23
  • Introducción a la Programación
  • Marcos Sepúlveda(marcos_at_ing.puc.cl)

2
Resumen de la última clase
  • Los Tipos de Datos Abstractos (TDA) sirven para
    simplificar el diseño y la implementación de los
    programas.
  • Hemos visto que permiten
  • Crear nuevos tipos de datos
  • Crear funciones que operan sobre esos tipos de
    datos
  • Creación y uso de nuevos tipos de datos
  • typedef struct
  • char nombre30
  • char NumAlumno8
  • float Nota1
  • float Nota2
  • float Nota3
  • float NotaFinal
  • Alumno
  • Declaración de variables
  • Alumno A1, A2, A3
  • Alumno A100
  • Declaración e inicializacion de variable
  • Alumno A1 "Elvira", "98231465", 6.0, 5.5,
    5.0, 5.5
  • Asignación de variables
  • strcpy(A1.Nombre, "Elvira")
  • A0.Nota1 6.2
  • Función que recibe como argumento una estructura
  • void CalculaNota(Alumno A1)
  • Función que retorna una estructura
  • Alumno NuevoAlumno(char Nombre)

3
Ejemplo implementación de operaciones con
números racionales
  • Tipo de datos
  • typedef struct    int num    int den
    Racional
  • Interfaz de la funciones a implementar
  • Racional NuevoRacional(int n, int d)   /
    Constructor /
  • int Numerador(Racional x)   / Retorna el
    numerador de x /
  • int Denominador(Racional x)  / Retorna el
    denominador de x /
  • Racional Sumar(Racional x, Racional y)        /
    Retorna xy /
  • Racional Restar(Racional x, Racional y)       /
    Retorna x-y /
  • Racional Multiplicar(Racional x, Racional y)  /
    Retorna xy /
  • Racional Dividir(Racional x, Racional y)      /
    Retorna x/y /
  • int SonIguales(Racional x, Racional y)   /
    TRUE si xy /
  • void Imprimir(Racional x)   / Imprime x en
    la pantalla /

4
Beneficios de los TDAs
  • Si tenemos que saber siempre cómo están
    implementados los tipos de datos, nuestros
    programas dependerán de esa implementación.
  • Esto quiere decir que si se producen cambios en
    la implementación del tipo de datos, será
    necesario cambiar el programa para que siga
    funcionando.
  • Los TDAs permiten olvidarse (abstraerse) de los
    detalles
  • Y si no sabemos cómo están implementados los
    tipos de datos, cómo los podemos usar?
  • Mediante una interfaz, predefinida e invariante.

Interfaz
Datos
5
Características de los TDAs
  • Los datos que componen el TDA se mantendrán
    ocultos de los programadores que lo usan.
  • La única forma de accederlos es a través de la
    interfaz.
  • La interfaz está compuesta por funciones,
    llamadas constructores y selectores.
  • Los constructores son los encargados de
    inicializar las nuevas instancias del TDA.
  • Los selectores suministran la funcionalidad que
    le da productividad al TDA.
  • Permite extraer, agregar, modificar, o eliminar
    datos a partir de una instancia del TDA.

6
EjemploManajedor de Cassettes y CDs
  • Menú con la funcionalidad deseada
  • Ingresar cassette
  • Ingresar CD
  • Eliminar cassette
  • Eliminar CD
  • Listar cassettes
  • Listar CDs
  • Listar todo
  • Buscar por titulo
  • Buscar por interprete
  • Salir

7
Manejador de CDs y cassettes (2)Definición TDA
Registro
  • Cada registro almacenará los datos de una
    grabación. La interfaz del TDA Registro está
    compuesta por las siguientes funciones
  • CrearRegistro
  • Parámetros titulo (string) e inteprete (string)
  • Valor de retorno R (Registro)
  • Descripción Se crea un registro con el título e
    intérprete suministrados.
  • TituloRegistro
  • Parámetros R (Registro)Valor de retorno
    titulo (string) Descripción Retorna el título
    almacenado en un registro.
  • InterpreteRegistro
  • Parámetros R (Registro)Valor de retorno
    interprete (string) Descripción Retorna el
    interprete almacenado en un registro.
  • RegistroVacio
  • Parámetros R (Registro)Valor de retorno 1 si
    el registro está vacio, 0 en caso contrario
    Descripción Indica si el registro está vacio.
  • ImprimirRegistro
  • Parámetros R (Registro)Valor de retorno no
    tiene Descripción Despliega en pantalla el
    título de la grabación y el intérprete encerrado
    entre paréntesis.

8
Manejador de CDs y cassettes (3)Definición TDA
Lista
  • Los elementos de la lista tienen asociado un
    identificador único de tipo Id. La constante FIN,
    también de tipo Id, se emplea para ciertos
    propósitos. La interfaz del TDA Lista está
    compuesta por las siguientes funciones
  • CrearLista
  • Parámetros No tiene
  • Valor de retorno L (Lista)
  • Descripción Se crea la lista vacía L
  • Insertar
  • Parámetros L (Lista), R (Registro)Valor de
    retorno L (Lista) modificada
  • Descripción Agrega un nuevo registro R a la
    lista L.
  • Primero
  • Parámetros L (Lista) Valor de retorno
    Identificador de elemento (Id)Descripción
    Retorna el identificador del primer elemento de
    la lista L, o la constante FIN en caso que la
    lista esté vacía.
  • Siguiente Parámetros L (Lista), id
    (identificador) Valor de retorno Identificador
    de elemento (Id) Descripción Retorna el
    identificador del siguiente elemento en la lista
    L, a partir del elemento id, o la constante FIN
    en caso que ya no existan más elementos.

9
Manejador de CDs y cassettes (4)Definición TDA
Lista
  • Imprimir Parámetros L (Lista), id
    (identificador)Valor de retorno No tiene
    Descripción Despliega en la pantalla el
    elemento de L cuyo identificador fue suministrado
    (id).
  • BuscarT Parámetros L (Lista), id (Id), titulo
    (string) Valor de retorno Identificador de
    elemento (Id) Descripción Busca el primer
    elemento de la lista L cuyo titulo sea igual al
    parámetro suministrado y retorna su
    identificador, o la constante FIN si no se
    encuentra. La búsqueda empezará a partir del
    elemento cuyo identificador se pasó como
    parámetro (id).
  • BuscarI Parámetros L (Lista), id (Id),
    intérprete (string) Valor de retorno
    Identificador de elemento (Id) Descripción
    Busca el primer elemento de la lista L cuyo
    intérprete sea igual al parámetro suministrado y
    retorna su identificador, o la constante FIN si
    no se encuentra. La búsqueda empezará a partir
    del elemento cuyo identificador se pasó como
    parámetro (id).
  • Borrar Parámetros L (Lista), id (Id) Valor de
    retorno L (Lista) modificadaDescripción Borra
    de la lista L el elemento cuyo identificador se
    pasó como parámetro (id).

10
Manejador de CDs y cassettes (5)Declaración de
estructuras de datos
  • Especificación del algoritmo  
  • 1. Crear lista LKCT
  • 2. Crear lista LCD
  • 3. Iterar hasta que el usuario seleccione salir
  • 3.1. Desplegar menú y pedir opción al usuario
  • 3.2. Dependiendo de la opción seleccionada,
    ejecutar una cierta acción

11
Manejador de CDs y cassettes (6)Declaración de
estructuras de datos
  • a. Opción Ingresar cassette
  • 1. Pedir al usuario TITULO e INTERPRETE
  • 2. reg Crear Registro(TITULO, INTERPRETE)
  • 3. LKCT Insertar(LKCT, reg)
  • b. Opción Ingresar CD
  • 1. Pedir al usuario TITULO e INTERPRETE
  • 2. reg Crear Registro(TITULO, INTERPRETE)
  • 3. LCD Insertar(LCD, reg)
  • c. Opción Eliminar cassette
  • 1. Pedir al usuario TITULO que desea borrar
  • 2. regId BuscarT(LKCT, Primero(LKCT), TITULO)
  • 3. Si regId es distinto de FIN
  • LKCT Borrar(LKCT, regId)
  • 4. Si por el contrario regId es igual a FIN
  • Desplegar mensaje de error pues el título no se
    encontró
  • d. Opción Eliminar CD

12
Manejador de CDs y cassettes (7)Declaración de
estructuras de datos
  • e. Opción Listar cassettes
  • 1. regId Primero(LKCT)
  • 2. Itere mientras regId sea distinto de FIN
  • 2.1. Imprimir(LKCT, regId)
  • 2.2. regId Siguiente(LKCT, regId)
  • f. Opción Listar CDs
  • 1. regId Primero(LCD)
  • 2. Itere mientras regId sea distinto de FIN
  • 2.1. Imprimir(LCD, regId) 2.2. regId
    Siguiente(LCD, regId)
  • g. Opción Listar todo
  • 1. regId Primero(LKCT)
  • 2. Itere mientras regId sea distinto de FIN
  • 2.1. Imprimir(LKCT, regId) 2.2. regId
    Siguiente(LKCT, regId)
  • 3. regId Primero(LCD)
  • 4. Itere mientras regId sea distinto de FIN
  • 4.1. Imprimir(LCD, regId) 4.2. regId
    Siguiente(LCD, regId)

13
Manejador de CDs y cassettes (8)Declaración de
estructuras de datos
  • h. Opción Buscar por titulo
  • 1. Pedir al usuario TITULO a buscar
  • 2. regId BuscarT(LKCT, Primero(LKCT), TITULO)
  • 3. Si regId es distinto de FIN
  • 3.1. Imprimir(LKCT, regId)
  • 4. Si por el contrario, regId es igual a FIN
  • 4.1. regId BuscarT(LCD, Primero(LCD), TITULO)
    4.2. Si regId es distinto de FIN
  • 4.2.1 Imprimir(LCD, regId)
  • 4.3. Si por el contrario, regId es igual a FIN
  • 4.3.1. Desplegar mensaje no se encontró el
    título

14
Manejador de CDs y cassettes (9)Declaración de
estructuras de datos
  • typedef struct
  • char tituloLARGO_STR
  • char interpreteLARGO_STR
  • Registro
  • typedef struct
  • Registro ListaMAX_LISTA
  • Lista

15
Ejemplo paso por valor
  • Racional PreguntarNuevosValores(Racional x)
  • int num, den
  • printf("Ingrese primer numero racional\n")
  • printf("Numerador ")
  • scanf("d", num)
  • printf("Denominador ")
  • scanf("d", den)
  • x.num num
  • x.den den
  • return x
  • void PreguntarNuevosValoresMalo(Racional x)
  • int num, den

16
Ejemplo paso por valor
  • main()
  • int num, den
  • Racional r1, r2
  • printf("Ingrese primer numero racional\n")
  • printf("Numerador ")
  • scanf("d", num)
  • printf("Denominador ")
  • scanf("d", den)
  • r1 NuevoRacional(num,den)
  • printf("Ingrese segundo numero racional\n")
  • printf("Numerador ")
  • scanf("d", num)
  • printf("Denominador ")
  • scanf("d", den)
  • r2 NuevoRacional(num,den)
  • printf("Numeros racionales ingresados ")

17
Ejemplo paso por valor
  • printf("Multiplicacion es ")
  • Imprimir(Multiplicar(r1,r2))
  • printf("\n")
  • printf("Division es ")
  • Imprimir(Dividir(r1,r2))
  • printf("\n")
  • printf("Son iguales ? ")
  • if (SonIguales(r1,r2))
  • printf("si\n")
  • else
  • printf("no\n")
  • printf("Cambiar el valor de un racional\n")
  • printf("- Valor del racional antes de
    cambiarlo ")
  • Imprimir(r1)
  • printf("\n")
Write a Comment
User Comments (0)
About PowerShow.com