Title: Tipos de Datos Abstractos (II)
1Tipos de Datos Abstractos (II)
- Clase 22
- Introducción a la Programación
2Resumen 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
- Definición de una nueva estructura 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
- Función que retorna una estructura
- Alumno NuevoAlumno(char Nombre) ...
- Función que recibe como argumento una estructura
- void CalculaNota(Alumno A1) ...
- Declaración e inicializacion de variable
- Alumno A1 "Elvira", "98231465", 6.0, 5.5, 5.0,
5.5 - Asignación de variables
- A1.Nombre "Elvira"
- A0.Nombre "Elvira
3Ejemplo 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 num/den /
4 Racional NuevoRacional(int n, int d)
Racional x x.num n x.den d
return(x) int Numerador(Racional x)
return(x.num) int
Denominador(Racional x) return(x.den)
Racional Sumar(Racional x, Racional y)
Racional z z.num x.numy.den
x.deny.num z.den x.deny.den
return(z) Racional Restar(Racional x,
Racional y) Racional z z.num
x.numy.den - x.deny.num z.den
x.deny.den return(z)
5 Racional Multiplicar(Racional x, Racional y)
Racional z z.num x.numy.num
z.den x.deny.den return(z)
Racional Dividir(Racional x, Racional y)
Racional z z.num x.numy.den
z.den x.deny.num return(z)
int SonIguales(Racional x, Racional y)
return(x.numy.denx.deny.num) void
Imprimir(Racional x) printf("d/d",
x.num, x.den) return
6Beneficios 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
7CaracterÃ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.
8EjercicioestadÃsticas climáticas
- Para cada dÃa se registra
- Temperatura mÃnima
- Temperatura máxima
- Humedad
- Se desea implementar las siguientes funciones
- agregar_datos(año, mes, dÃa, tmax, tmin, hum)
- datos consultar_datos(año, mes, dÃa)
- datospromedio calcular_promedios_año(año)
- datospromedio calcular_promedios_dÃa(dÃa)
9EjemploManajedor 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
- Desconocida
10Manejador de CDs y cassettes (2)Definición TDA
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 primero
el tÃtulo de la grabación y luego el intérprete
encerrado entre paréntesis.
- 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.
11Manejador de CDs y cassettes (3)Definición TDA
Lista
- 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.
- 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.
12Manejador de CDs y cassettes (4)Definición TDA
Registro
- 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).
13Manejador de CDs y cassettes (5)Declaración de
estructuras de datos
- typedef struct
- char tituloLARGO_STR
- char interpreteLARGO_STR
- Registro
- typedef struct
- Registro ListaMAX_LISTA
- Lista
14Programación de funciones delTDA Registro
- Registro CrearRegistro(char titulo, char
interp) - Registro r
- strcpy(r.titulo, titulo)
- strcpy(r.interprete, interp)
- return r
-
- char TituloRegistro(Registro r)
- return(r.titulo)
-
- char InterpreteRegistro(Registro r)
- return(r.interprete)
-
- int RegistroVacio(Registro r)
- if (strcmp(r.titulo,"") 0) return TRUE
- else return FALSE
-
- void ImprimirRegistro(Registro r)
- printf("\ts (s)\n", r.titulo, r.interprete)
-