Title: Tipos de Datos Abstractos I
1Tipos de Datos Abstractos (I)
- Clase 21
- Introducción a la Programación
2Estructuras (structs)
- Una estructura (struct) permite agrupar variables
de varios tipos bajo un mismo nombre. - De esta forma es posible crear nuevos tipos de
datos complejos, basándose en los tipos básicos
que suministra el lenguaje de programación. - Ejemplo
- Podemos crear un nuevo tipo de dato que
llamaremos TipoAlumno que tiene las siguientes
caracterÃsticas - Nombre, número de alumno, promedio acumulado,
generación. - Luego podemos definir variables de este nuevo
tipo - TipoAlumno alumno1
- Para que sirve?
- Hacer programas que de una forma simple y
ordenada trabajen con datos más complejos.
3Uso de struct, sintaxis
EJEMPLO struct Alumno char Nombre30
char NumAlumno8 float Nota1
float Nota2 float Nota3 float
NotaFinal A1, A2, A3 En este caso las
variables A1, A2 y A3 son de tipo Alumno
struct nombre componente1
componente2 ... componenteN
lista-variables
Dónde cada componente es de la forma tipo
nombre
4Otras formas de operar structs
- Uso de un campo
- estructura.componente
- Ej. A2.nombre
- Asignacion de una estructura a otra
- A2 A1
- Declaración y asinación
- struct Alumno A "Elvira", "98231465", 6.0,
5.5, 5.0, 5.5 - Función que retorna una estructura
- struct Alumno NuevoAlumno(char Nombre) ...
- Función que recibe como argumento una estructura
- void CalculaNota(struct Alumno A1) ...
5Cómo definir un arreglo de un struct
- struct Alumno char nombre30
char NumAlumno8 float Nota1 float
Nota2 float Nota3 float NotaFinal
AlumnosNUM_ALUMNOS - En este caso, el nombre del primer alumno se
referenciarÃa como - Alumnos0.Nombre
6Defición de nuevos tipos typedef
- Typedef nos permite definir un nuevo tipo de
datos - Ejemplo tipo de datos Alumno
- Ahora podemos definir variables de tipo Alumno
- Alumno alumno1, alumno2
typedef struct char nombre30
char NumAlumno8 float Nota1
float Nota2 float Nota3 float
NotaFinal Alumno
7Nuevos tipos typedef
- La definición del nuevo tipo nos evita tener que
repetir reiteradamente struct al usar
estructuras, ejemplo - Declaración de variables
- Alumno A4, A5, A6
- 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 A "Elvira", "98231465", 6.0, 5.5, 5.0,
5.5
8Ejemplo 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 /
9 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)
10 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