Fundamentos de la Informática Primero de Industriales Mecánica, Química, Electricidad y Electrónica Departamento de Ingeniería Electrónica, Sistemas Informáticos y Automática PRÁCTICA 11. ESTRUCTURAS 1. Introducción Una estructura es un tipo de datos que permite agrupar bajo un mismo nombre elementos del mismo o de distinto tipo de datos, que se encuentran muy relacionados entre sí. El lenguaje C permite la creación de estructuras mediante la utilización de struct. De forma genérica una estructura se define de la siguiente forma: struct NombredelaEstructura { TipoDato_1 nombre_campo_1; TipoDato_2 nombre_campo_2; ….. TipoDato_N nombre_campo_N; }; Cuando trabajamos con una estructura es posible trabajar con toda la estructura completa o con sus campos de manera independiente. Trabajar con toda la estructura tiene sus limitaciones ya que es posible la asignación de dos variables que tengan la misma estructura, pero no su comparación. También es posible pasar una estructura o un campo de una estructura como parámetro a una función y que una función devuelva una estructura o un campo de una estructura. Un campo de una estructura puede ser de un tipo básico como char, int, etc, pero también puede ser un array, un puntero u otra estructura. 2. Ejercicios 1. Defina una estructura que permita guardar información sobre: a. Un alumno b. Un libro c. Una fecha d. Una hora determinada de un día e. Una fecha, incluyendo día, mes año y hora. f. 100 alumnos. Fundamentos de la Informática Primero de Industriales Mecánica, Química, Electricidad y Electrónica Departamento de Ingeniería Electrónica, Sistemas Informáticos y Automática 2. Dadas las siguientes definiciones de estructuras indique cómo se accede a los siguientes miembros. struct alumno{ char nombre[100];//nombre del alumno char dni[10]; //dni int curso; //curso superior en el que se encuentra int num_asignaturas[3]; //número de asignaturas por curso }; //vector de 100 posiciones en el que cada elemento es un struct alumno struct alumno vec_alumnos[100]; a) Sacar por pantalla todos los alumnos que estén en tercer curso. b) Sacar por pantalla todos los alumnos a los que le queden menos de 3 asignaturas para terminar la carrera. c) Sacar por pantalla todos los alumnos que se llamen Antonio. d) Sacar por pantalla todos los alumnos que se llamen Antonio y estén en primer curso. e) Sacar por pantalla aquellos alumnos que tengan más asignaturas de primer curso que de segundo y tercero juntas. f) Debido a un aprobado general de una asignatura de tercero, hay que reducir el número de asignaturas de tercero de todos los alumnos en 1, excepto de aquellos que ya hayan aprobado todas las de tercero. g) Guardar el dni introducido por el usuario en el alumno número 23 del vector. 3. Crear una función en C a la que se le pase una estructura alumno similar a la del ejercicio anterior y muestre la información que contiene por pantalla. 4. Crear una función en C a la que se le pase una estructura alumno vacía y la rellene con información introducida por el usuario 5. Crear una función a la que se le pase un vector de 3 alumnos y rellene la información de los tres alumnos. 6. Escriba una función que reciba dos variables struct alumno y devuelva un 1 si son iguales y un -1 si no lo son. 7. Escriba una función a la que se le pase dos struct alumno e intercambie los valores que contienen. Fundamentos de la Informática Primero de Industriales Mecánica, Química, Electricidad y Electrónica Departamento de Ingeniería Electrónica, Sistemas Informáticos y Automática 8. Dadas las siguientes definiciones de variables: struct complejo{ float real; float imaginario; }; struct complejo p1, *p2; ¿Cuál de las siguientes sentencias es correcta? a. p1=&p2; b. printf (“%i”, p1.real); c. printf (“%i”, p1->imaginario); d. printf (“%f”, p1->real): e. printf (“%f”, p2.real); 9. Dado el siguiente fragmento de programa: struct estructura{ double x; double y; }; struct estructura p1; struct estructura componentes[100] ; ¿Cuál de las siguientes sentencias es válida? a. b. c. d. componentes[5] = p1.x; componentes.x[i] = p1.x; componentes[5].x = p1->x; componentes [5].x = p1.y; 10. Defina una estructura que represente un punto del espacio bidimensional y escriba una función a la que se le pasen tres puntos y devuelva un 1 si los tres puntos están alineados y un -1 sino lo están. Fundamentos de la Informática Primero de Industriales Mecánica, Química, Electricidad y Electrónica Departamento de Ingeniería Electrónica, Sistemas Informáticos y Automática 11. Defina una estructura que permita almacenar datos referentes a un recién nacido: nombre, sexo, fecha de nacimiento, peso al nacer, y peso en cada semana de los seis primeros meses de vida. 12. A partir de la estructura siguiente: struct futbolista { char nombre[90]; int edad; char equipo[50]; char alineacion[30]; }; Definir una estructura seleccion que permita guardar los datos relativos a una selección nacional: pais, nombre del entrenador, jugadores, resultados.