Unidad Didáctica 25 Estructuras Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión 1.0.0 Estructuras (struct) Permiten definir tipos de datos más complejos formados por la unión de varios elementos o campos. Los campos pueden ser de distintos tipos. Definición typedef struct { T1 c1; T2 c2; ... Tn cn; } Tr; Declaración de variables Tr r1; r1.c1 = v1; r1.c2 = v2; … r1.cn = vn; Tr r2 = {v1, v2,…,vn}; UD25: Estructuras Estructura Persona Definir un tipo struct que tenga los campos nombre, apellidos, edad y sexo para el tipo persona. #define MAXCAR 256 typedef struct { char nombre[MAXCAR]; char apellidos[MAXCAR]; int edad char sexo; } Persona; Punteros a estructuras: typedef Persona *PersonaP; UD25: Estructuras Acceso a los campos con . y -> Persona p; leePersona(&p); p.edad++; strcpy(p.nombre, “María”); void leePersona(PersonaP pp) { scanf(“%s”, pp->nombre); scanf(“%s”, pp->apellidos); scanf(“%c”, &pp->sexo); scanf(“%d”, &pp->edad); } escribePersona(p); void escribePersona(const Persona p) { printf(“%s, %s”, p.apellidos, p.nombre); printf(“%c %d”, p.sexo, p.edad); } UD25: Estructuras Ejercicios – Punto (I) Escriba un fichero de cabecera Punto.h con las definiciones necesarias para trabajar con el tipo Punto. Defina en el mismo fichero un tipo Poligono como un array de tipo Punto. Añada la definición de un tipo enumerado que contenga los nombres de los cuatro cuadrantes y la palabra Ejes para aquellos puntos que estén sobre los ejes. Añada las definiciones de los siguientes métodos para el tipo Punto: double distanciaAlOrigen(Punto p) Punto masCercanoAlOrigen(const Poligono pol) Cuadrante cuadrante(Punto p) UD25: Estructuras Ejercicios – Punto (II) Punto sumaPuntos(Punto p1, Punto p2) Punto leePunto() void leePoligono(Poligono *pol) Escriba el fichero Punto.c con el código necesario. Escriba un fichero PruebaPunto.c que contenga un método main donde se invoquen todos los métodos anteriores y se impriman los resultados en pantalla. Intente imprimir por pantalla el resultado de invocar el método cuadrante. ¿Qué especificador de formato habrá que usar? Implemente un nuevo método que devuelva una cadena de texto a partir de un parámetro de tipo Cuadrante. UD25: Estructuras Ejercicios – Album (I) Escriba en un fichero Album.h las definiciones de tipos y estructuras necesarias para trabajar con los siguientes tipos: Cancion: título, intérprete, duración, año Album: nombre, género musical, array de canciones Un álbum tendrá un máximo de 100 canciones. El género musical de un álbum debe ser uno de los siguientes: pop, rock, jazz, salsa, flamenco. Defina también el tipo AlbumP como un tipo puntero del tipo Album. UD25: Estructuras Ejercicios – Album (II) Añada al fichero Album.h las declaraciones de los siguientes métodos: leeCancion. Lee la información de una canción por teclado. leeAlbum. Lee desde teclado la información de un álbum. duracionTotal. Calcula la duración total de todas las canciones de un álbum. masAntigua. Devuelve la canción más antigua de un álbum. numeroDeCanciones. Devuelve el número de canciones de un intérprete determinado en un álbum. muestraCanciones. Muestra por pantalla la información de todas las canciones de un álbum, cada canción en una línea. UD25: Estructuras Ejercicios – Album (III) anyadeCancion. Añade una nueva canción a un álbum. En caso de que el álbum esté lleno se devolverá el valor -1. En otro caso devolverá 0. subAlbum. Devuelve un álbum con aquellas canciones correspondientes a un año determinado. Escriba en un fichero Album.c las implementaciones de todos los métodos anteriores. Escriba un fichero PruebaAlbum.c que contenga un método main donde se invoquen todos los métodos anteriores y se impriman los resultados en pantalla. UD25: Estructuras