Fundamentos de Informática Hoja de Problemas 7 – Repaso de todo hasta estructuras Programa 1 En la empresa WIT.S.A.almacenan de cada uno de sus empleados anualmente la siguiente información: - Nombre del empleado - DNI - Sueldo de todos los meses del año: va a ser un vector de datos de tipo real de 12 posiciones (correspondientes a los 12 meses). Realizar un programa que permita, a través de un menú (utilizando las correspondientes funciones para cada opción). - Rellenar los datos de todos los empleados de la empresa. - Calcular la media del sueldo de cada empleado en el año, rellenando un vector (con tantas posiciones como empleados existan) con la media del sueldo de cada empleado y devolviendo el índice del empleado con menor media. Se debe mostrar desde el programa principal el nombre y la media del sueldo del empleado con menor media. Evidentemente, no será posible ejecutar esta opción sin antes haber rellenado el vector con los datos de los empleados. - Ordenar el vector de empleados por orden alfabético (suponiendo las mayúsculas menores que las mayúsculas, tal y como se encuentran en la tabla ASCII). - Mostrar Empleados - Salir Antes de arrancar el menú, crear dinámicamente el vector con el número de empleados que indique el usuario. Programa 2 (Examen Abril 08) Completar el siguiente programa para analizar el número de elementos pares e impares del vector vec y guardarlos respectivamente en los vectores v_par y v_impar, una vez se les ha asignado memoria dinámica. Crear las siguientes funciones en el programa: - Función Leer(): recibe el vector vec y solicita al usuario los datos necesario para rellenarlo, devolviendo al programa principal el número de datos introducidos (no pueden existir más de 100 datos). Se finalizará la introducción de datos cuando el usuario introduzca el valor -99999. - Funcion ContarParesImpares() que recibe el vector vec con los datos introducidos y devuelve el número de valores pares e impartes encontrados. - Función RellenarVectorPares() que recibe el vector con todos los datos y rellena el vector vec_par con los valores pares. - Función RellenarVectorImpares() que recibe el vector con todos los datos y rellena el vector vec_par con los valores pares. La asignación dinámica de memoria se hará en el programa principal. #define N 100 int main(void) { int vec[N]; int n_vec; //número de elementos guardados en vec int *v_par; int n_par; //número de elementos pares int *v_impar; int n_impar; //número de elementos impares 1 Fundamentos de Informática /* Lectura de datos */ n_vec = Leer(vec); /* Contar elementos pares e impares */ ContarParesImpares( ...); /*Asignar memoria dinámicamente y RellenarVectorPares(......); RellenarVectorImpares(......); Construir vectores par e impar */ } Programa 3 (Examen Abril 08) Escribir una función (MostrarTodo) para mostrar todos los datos de un vector de estructuras de tipo T_DATOS. Esta función debe realizar llamadas a la función Mostrar() que muestra los datos de una estructura (NO se pide realizar la función Mostrar()). Suponiendo la siguiente declaración de variables en el main, indicar además cómo sería la llamada a la función MostrarTodo(). T_DATOS vec[N]; int n_vec; //vector de estructuras //longitud del vector - Llamada a la función MostrarTodo(): - Descripción y código de la función MostrarTodo(): Programa 4 (Examen Abril 08) Diseñar una función BuscarValores() que reciba como argumento de entrada un vector de 10 números reales y devuelva como resultado el valor máximo, el valor mínimo y el valor medio del vector. - Declaración de variables en el main() y llamada a la función BuscarValores(): - Descripción y código de la función BuscarValores() Programa 5 (Examen Abril 08) Dada la siguiente definición de estructura T_PERSONA, escribir el código de las dos posibles funciones de lectura Leer1 y Leer2, así como las llamadas correspondientes desde el programa principal. typedef struct persona { char nombre[N]; long int dni; } T_PERSONA; void Leer1(T_PERSONA *p); T_PERSONA Leer2(void); ------------------Programa principal: Declaración de variables: Llamada a la función Leer1(): Llamada a la función Leer2(): Función Leer1(): Función Leer2(): 2 Fundamentos de Informática Programa 6 (Examen Abril 09) Un instituto de meteorología quiere obtener las temperaturas máxima, mínima y media anual de todas las ciudades del mundo. Para ello, cuenta con un vector de estructuras de tipo T_TEMP con los registros de temperaturas de todas las ciudades. Nos piden escribir una función para crear un vector de estructuras de tipo T_TEMP_MMM. La dificultad viene por el hecho de que algunas ciudades registran la temperatura diariamente (365 datos), otras lo hacen semanalmente (53 datos), y otras mensualmente (12 datos), por lo tanto es necesario basarse en el campo n_datos para saber realmente cuántos datos de temperatura hay. Además hay que tener en cuenta que en algunas ciudades todas las temperaturas pueden ser positivas, en otras todas negativas, y en otras puede haber positivas y negativas. typedef struct { char ciudad[N]; double datos[365]; int n_datos; } T_TEMP; typedef struct { char ciudad[N]; double max; double min; double med; } T_TEMP_MMM; void GeneraMMM(T_TEMP vec[],int n, T_TEMP_MMM mmm[]); La función anterior debe llamar a la función Calcula_mmm() que recibe un vector de temperaturas, calcula y calcula la temperatura máxima, la mínima y la media: void Calcula_mmm(double t[], int n, double *pmax, double *pmin, double *pmed); Escribir el código de las funciones GeneraMMM() y Calcula_mmm() Programa 7 (Examen Abril 09) Un vector de estructuras almacena los datos de los libros de una biblioteca. La información que se almacena de cada libro es (se utilizará una estructura de datos llamada T_LIBRO): - Título del libro ( una cadena de caracteres ) - Autor ( una cadena de caracteres ) - ISBN (suponer que es un número entero) Escribir una función (BuscarLibros()) para buscar cuántos libros existen en la biblioteca que pertenezcan a un autor (el nombre del autor es un dato a enviar a la función) Escribir el prototipo y el código de la función BuscarLibros 3 Fundamentos de Informática Programa 8 (Examen Abril 09) Una tienda utiliza estructuras tipo T_TODO para gestionar sus productos y almacenes y quieren separar la información en estructuras de tipo T_PROD para definir sus productos y estructuras tipo T_ALMACEN para gestionar su almacén (de esta manera pueden tener dos partidas del mismo producto en dos localizaciones distintas del almacén). Nos piden una función que reciba una variable de tipo T_TODO y construya una de tipo T_PROD y otra tipo T_ALMACEN. typedef struct { int id; char nombre[N]; double precio; int unidades; char localizacion[M]; } T_TODO; typedef struct { int id; char nombre[N]; double precio; } T_PROD; typedef struct { int id; int unidades; char localizacion[M]; } T_ALMACEN; Escribir el prototipo y el código de la función de transformación. Programa 9 (Examen Abril 09) Realizar un programa completo que utilizando un vector estático de número reales vec_real (no mayor de 100 posiciones) construya los vectores dinámicos menores y mayores con los valores que son inferiores a la media y superiores a la media respectivamente. El programa debe seguir los siguientes pasos: Solicitar la dimensión del vector, comprobando que sea válida. Rellenar el vector vec_real utilizando la función RellenarVectorReal(). Esta función, además de rellenar el vector, debe devolver la media de los valores introducidos. Calcular cuántos elementos del vector son mayores que la media, y cuántos son menores. Reservar memoria dinámica para los vectores menores y mayores Rellenar los vectores adecuadamente utilizando las funciones RellenarMayores() y RellenarMenores() (sólo es necesario programar la función RellenarMayores()). Mostrar el contenido de todos los vectores utilizando la función: void Mostrar(double v[], int n) (que no es necesario programar). Escribir el programa principal completo (includes, prototipos…) pero no únicamente escribir las funciones: RellenarVectorReal() y RellenarMayores(). 4