Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


Examenes, Exámenes de Informática

Asignatura: M.T.P., Profesor: Rafael Medina, Carrera: Ingeniería en Informática, Universidad: UCO

Tipo: Exámenes

Antes del 2010

Subido el 20/08/2007

ra_ules-2
ra_ules-2 🇪🇸

4.7

(6)

5 documentos

1 / 24

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
1
EXAMENES DEL SEGUNDO CUATRIMESTRE
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18

Vista previa parcial del texto

¡Descarga Examenes y más Exámenes en PDF de Informática solo en Docsity!

EXAMENES DEL SEGUNDO CUATRIMESTRE

M ETODOLOGÍA Y TECNOLOGÍA DE LA PROGRAMACIÓN

Junio 2003

  1. En un observatorio meteorológico se tienen guardados en un fichero de tipo texto denominado “Datos.txt” los valores de lluvia mensuales de un periodo de tiempo. En el primer registro del fichero están almacenados dos números enteros que se corresponden con el número de años de la serie y con el año inicial y a continuación están guardados los datos mensuales en formato float, de forma tal que cada año ocupa una línea en el fichero, tal como se refleja debajo:

25 1975 23.5 23.6 45.9 34.9 25.9 34.7 34.8 12.8 89.5 12.8 12.6 5. 34.6 45.6 56.1 32.1 1.2 23.6 7.8 7.9 15.4 16.5 12.5 17. ....... ....... Implementar un programa en C que realice de manera secuencial (sin usar menú) las siguientes acciones: a. Lectura de los datos de lluvia del fichero y almacenamiento de los mismos en una matriz dinámica. b. Almacenamiento en un vector de los datos medios mensuales de lluvia para cada uno de los meses del año. c. Almacenamiento en un vector de los datos anuales de lluvia para cada uno de los años de la serie. d. Obtención del més y del año en el cual se haya producido la precipitación máxima y la mínima. e. Almacenamiento de los datos de lluvia mensuales correspondientes a los años cuya precipitación anual se ainferior a 300 mm. en un fichero binario denominado “sequia.bin”.

Cada uno de los apartados se implementará en una función, y todas han de ser de tipo void.

  1. En una estructura tipo lista se quiere almacenar las estaturas en cm. de una muestra de personas de una población. En cada elemento de la lista se almacenará una estatura y el número de veces que ésta se repite en la muestra de personas (frecuencia). Implementar un programa en C que posea un menú con las siguientes opciones: a. Dada una estatura, insertarla en orden creciente en la lista. b. Dada una estatura, borrar un elemento de la lista con esa estatura teniendo cuenta la frecuencia de ésta. c. Listar en orden decreciente las estaturas almacenadas en la lista con sus correspondientes frecuencias. d. Cálculo de la estatura media de los elementos almacenados en la lista. e. Borrado completo de la lista.

Cada uno de los apartados se implementará en un función.

CUESTIONES:

1.- Se tiene definida una variable int x , global , y una variable int x , local en el interior del main. ¿Cuál tiene prioridad? a) La global b) La local c) Dentro del main la local y fuera del main la global

2.- Indica cual de las siguientes afirmaciones sobre los métodos de ordenación es correcta. a) El método quicksort es el más rápido de todos, independientemente del número de elementos a ordenar. b) El método de selección tiene un mejor comportamiento que el quicksort cuando el número de elementos a ordenar es relativamente pequeño. c) El método burbuja es el mejor de los métodos de orden n 2.

3.- Se tienen las siguientes declaraciones: int pepe(void); void juan(int);

¿Es correcta la expresión juan(pepe()) escrita dentro de main()? a) No, si se quiere pasar el valor que devuelve pepe a juan es necesario escribir x=pepe(); juan(x); b) Si c) Si, pero la expresión no debe estar en el main() sino en la zona de declaraciones globales.

4.- Se tienen las siguientes líneas de código. El propósito de las mismas es recoger en la dirección del campo x de la estructura, la dirección del campo y de la estructura. struct dato {int x; int y;}; struct dato x, *y; y = &x; &(x.x)=y->y;

¿Cuál es correcta entre las respuestas? a) Todo es correcto. b) Hay dos errores. No puede ser que haya una variable “x” de estructura cuando hay un campo llamado “x” en la estructura, y el valor del campo “y” es lo que se coloca en la dirección del campo “x”. c) Hay un error, ya que no se puede modificar la dirección del campo x.

5.- ¿Cual de las siguientes afirmaciones es correcta con relacion al siguiente esquema? for (i=0;i;i=i+3) { i=i-3; } a) El esquema nunca finaliza, es infinito. b) No se entra en el esquema. c) Se entra la primera vez y se abandona tras la primera iteración.

6.- La instrucción “ break ” dentro de un switch a) Sirve para abandonar el esquema switch en cuanto se encuentra. b) Es obligatorio su uso dentro de cada “ case ”. c) Si no se utiliza el esquema switch funciona como un esquema iterativo.

7.- El anidamiento de esquemas condicionales del tipo if-else dentro de un programa a) Tiene como límite máximo 50 anidaciones dentro del mismo esquema. b) No tiene ningún límite en cuanto al número de anidaciones. c) Existe un límite en el número de anidaciones que depende del compilador que se utilice, aunque este límite es tan alto que en la practica no hay que preocuparse.

8.- Si x es una variable de tipo int y p es una variable de tipo int * , la instrucción &(&x)=p ; a) No es correcta porque debe ser p=&(&x); b) No es correcta. c) Es correcta.

9.- Una función debe recibir un parámetro que es un número real, para utilizarlo sin modificarlo, y un vector de enteros, para modificarlo. ¿Cual es el prototipo correcto? a) void funcion(float, int *); b) void funcion(double, int *); c) a) y b) son correctas.

10.- El algoritmo Algoritmo p(n) Inicio Si n< X<- 1 Y<- 2 Devolver (x*y) Sino X<- 1 Y<- 2 Devolver p(n-1) Finsi Fin Tiene como tiempo de ejecución a) 2(n+1) b) 2n^2 c) n + 2

CUESTIONES

  1. Describe brevemente como se organiza la memoria en tiempo de ejecución en un programa en C.
  2. Indica en qué casos el quicksort no es el método de ordenación más rápido justificando tu respuesta.
  3. Deducir el orden de complejidad del tiempo de ejecución del siguiente algoritmo: Algoritmo recursivo(n; ;) Inicio Si (n<=1) devolver 4 Sino Devolver recursivo(n-1) + recursivo(n-1) Finsi Fin
  4. Se tiene un programa en C, con los siguiente archivos: principal.c, f1.c, f2.c y f3.c, cada uno de ellos tiene su archivo de cabecera (principal.h, f1.h, f2.h y f3.h). Se sabe que hay funciones en f1.c que invocan a funciones que están en f2.c, y que hay funciones en f2.c que invocan a funciones que están en f3.c y que el principal invoca a funciones de f1, f2 y f3. Implementa un makefile para este programa, de forma tal que se obtenga un ejecutable llamado programa.x.
  5. Obtener el mismo ejecutable del apartado 4 creando una librería con las funciones (sin usar makefile).

Septiembre 2004

Se desean recoger los datos de ventas de móviles de una tienda comercial. Por cada teléfono vendido se desea guardar la marca del móvil, el modelo, el precio de venta, el precio de coste y el nombre del Operador de TELEFONIA en el que se da de alta. Defínase un tipo de datos denominado teléfono que conste de los campos: marca y modelo de tipo carácter con 15 de longitud, precioventa y preciocoste de tipo real y operador de tipo carácter con una longitud de 10.

a) Realizar un menú simple que tenga las siguientes opciones: “Introducir móvil”, “Visualizar móviles”, “Cargar fichero”, “Calcular beneficios” y “Salir”. El programa sólo deberá finalizar si señala la opción Salir, por lo que tras ejecutar cualquier opción deberá presentarse de nuevo el menú. (1 punto) b) Para la opción “Introducir móviles” codificar una función llamada lista que se encargue de permitir introducir los datos de un solo móvil. Esta función se implementará mediante la creación-inserción en una lista doblemente enlazada. Cada vez que el usuario quiera introducir datos de un móvil deberá acceder desde el menú a esta opción. Tras introducir los datos de un móvil la función deberá mostrar todos los datos de móviles introducidos hasta ese momento comenzando por el primero.(2 puntos) c) La opción “Visualizar móviles” deberá mostrar todos los datos de la lista comenzando por el último móvil introducido y finalizando por el primero. Esta función deberá, después de mostrar los datos, preguntar al usuario si desea generar un fichero o no, para guardar esos datos. En caso de respuesta afirmativa se deberá llamar a una función denominada “Crear_fichero” que genere un fichero de tipo binario que se llame “telefonos.bin” en el que se almacenen las informaciones de la lista. (2 puntos) d) La opción “Cargar fichero” deberá comprobar que existe un fichero denominado “telefonos.bin” y sólo podrá ser utilizada si previamente existe ese fichero. Si ese fichero no existe aún, deberá indicarlo mediante un mensaje. Si existe ese fichero, leerá los registros cargando sólo el dato de marca de cada uno de los teléfonos, en un vector dinámico en el que cada elemento sea de tipo cadena, y los de preciocoste y precioventa en una matriz de dos columnas y con tantas filas como teléfonos existan en el fichero. Debes mostrar el vector y la matriz por pantalla. Si deseas probar esta opción y las de los apartados anteriores no te funcionan puedes hacer uso del fichero denominado “ejemplo.bin” que te proporcionamos.(2, puntos) e) La opción “Calcular beneficios” deberá preguntar al usuario por una marca de teléfono y calcular el beneficio que esa marca de móviles ha proporcionado. Para ello deberás hacer uso del vector y la matriz generados en el apartado anterior, detectando por tanto que si el vector o la matriz no existen esta opción deberá indicarlo y no hacer nada. (2,5 puntos)

Junio y Septiembre 2005

PROBLEMAS

La famosa productora de cine MTP PICTURES S.A. está preparando una nueva película: "Pánico en las aulas X", que estrenará este próximo otoño. Ante el desastre de su última película "Pánico en las aulas IX", ha decidido contratar a los mejores actores y actrices del panorama mundial. Con este fin el becario de la productora ha recabado diferente información sobre los actores y la ha almacenado en un fichero binario llamado actores.bin ubicado en /home/in1lurom/PUBLICO. Los registros de este fichero tienen la siguiente estructura:

  • campo nombre de 50 caracteres
  • campo cache de tipo real (sueldo del actor)
  • campo humano de tipo entero (1 si el actor es humano y 0 si no lo es)
  • campo color de 15 caracteres (color de la piel)

Con el fin de agilizar los trámites de elección de actores, la productora ha contratado a un programador ( ) para que realice un programa en C que contenga 3 archivos ( principal.c, fichero.c y lista.c ). Para los archivos fichero.c y lista.c se han de crear su correspondiente ficheros de cabecera (.h).

Para la realización del programa se deberá tener en cuenta lo siguiente: a) El programa invocará de manera secuencial (no hay que hacer menú) a las siguientes funciones: a. Se quiere saber cuántos actores componen el fichero. Implementa una función que determine el número de registros que el becario ha introducido en el fichero, sin leer todos los registros del mismo. ( 0.5 puntos ) b. Para que el proceso se agilice, se prefiere trabajar con los datos en memoria. Crea una función que lea todos los registros del fichero y los almacene en un vector dinámico cuyo tamaño se obtiene usando la función del apartado 1. ( 1 punto ) c. Función que muestre por pantalla todos los actores que participan en el casting, visualizando para ello todos los elementos del vector. ( 0.5 puntos ) d. La productora no quiere gastarse mucho dinero, así que ha decido contratar a los actores más baratos. Crear una función que ordene el vector de forma creciente de acuerdo al valor de cache de cada actor, utilizando para ello cualquier método de ordenación. ( 2 puntos ) e. Para el protagonista, el director busca un actor que no se humano. Crea una función que reciba el vector de estructuras del apartado 4 y almacene en una lista simplemente enlazada aquellos actores que cumplan esta condición (campo humano igual 0). ( 2 puntos ) f. Por último, para que toda la información se pueda visualizar correctamente, vuelca la lista en un fichero de texto "casting.txt". Este fichero almacenará en cada fila los datos de un actor, separándolos por un *. Si por cualquier razón la lista estuviera vacía, el fichero contendrá el mensaje "LISTA VACÍA" ( 2 puntos )

Formato del fichero de texto Pedro Picapiedra * 15000 * 1 * naranja Abeja Maya * 1000 * 0 * amarilla

b) El ejecutable del programa se llamará productora. Para ello, implementa un makefile de forma que se obtenga el ejecutable productora. El ejecutable se podrá obtener creando una librería con las funciones ( 1 punto ) o sin crearla ( 0. puntos ). c) Los nombres de los ficheros que utilizará el programa (actores.bin y casting.txt), se le pasarán como parámetros en la línea de ordenes. ( 1 punto ).

La función main se implementará en el archivo principal.c , las funciones de los apartados 1, 2, 3, 4 se implementarán en el archivo fichero.c y las funciones de los apartados 5 y 6 se implementarán en el archivo lista.c

Ejercicio para subir nota

  • Implementa una función extra que borre toda la lista de forma recursiva ( 1 punto ). Se recomienda volcar la lista borrada a un fichero de texto (vacia.txt) para probar el funcionamiento correcto de esta función.

NOTA:

  • Si no consigues hacer los apartados 1 y 2, podrás realizar el resto del examen pidiendo el número de actores y sus datos por teclado e insertándolos en el vector. De hacerlo así restarás un punto a tu nota final (Los apartados 1 y 2 se considerarán mal hechos).
  • No se podrá hacer uso de variables globales.
  • Si los nombres de los archivos no se corresponden con los indicados en el enunciado del examen restarás un punto de tu nota final. Si además, no estructuras el examen en los archivos indicados, restarás otro punto más a tu nota final.

CUESTIONES

  1. Describe brevemente el modelo de organización de memoria que utiliza el lenguaje C, indicando la utilidad de cada una de las zonas de memoria.
  2. Calcula la complejidad del siguiente algoritmo Algoritmo recursivo(n;;) Inicio si n<=1 entonces devolver 2 sino devolver recursivo(n-1) + recursivo(n-1) finsi fin
  3. Compara los distintos métodos de ordenación estudiados, ordenándolos de menor a mayor eficiencia e indicando las ventajas e inconvenientes de cada uno de ellos.
  4. Comenta brevemente los objetivos que se pretenden conseguir con las pruebas de la caja blanca

Junio 2006

PROBLEMAS

La empresa ganadera “Paco Nejoel Del Campo S.A.” que se dedica a la cría y venta de conejos, dispone de un fichero binario, denominado conejos2006.bin y que está ubicado en la cuenta, con los datos de los conejos criados en el año 2006. Los registros del fichero poseen la siguiente estructura:

  • Código del conejo (cadena de 6 caracteres).
  • Edad del conejo (en días) de tipo entero.
  • Peso del conejo (en g.) de tipo double. La empresa ha detectado, que debido al peso, no todos los conejos pueden ser vendidos, ya que los que no sobrepasan un determinado peso, no son deseados por los consumidores; y los que sobrepasan un determinado peso tienen un exceso de grasa y no son muy aptos para el consumo. Implementad un programa en C, que realice secuencialmente las siguientes operaciones:
  1. Paso de los registros del fichero a una lista simplemente enlazada.( 2 puntos ).
  2. Cálculo del peso medio m de los conejos utilizando la lista.( 1 punto ).
  3. Pasar de la lista doble a un vector dinámico aquellos conejos cuyo peso se superior a m -300 , e inferior a m + 300 , contando previamente los elementos que cumplen esta condición. Siendo m el peso medio.( 2 puntos ).
  4. Ordenación de los elementos del vector en orden decreciente del peso, por el método que quieras.( 1 punto )
  5. Almacenamiento de los elementos del vector en un fichero de texto denominado conejosSeleccionados2006.txt .( 1 punto ).

Para la obtención del ejecutable se creará un Makefile (1.5 puntos), y el código fuente se implementará usando los siguientes archivos (1.5 puntos): un archivo principal.c, que contendrá a la función main , y los archivos ficheros.c, listas.c, y vectores.c, que contendrán las funciones correspondientes a ficheros, listas y vectores respectivamente. En caso de que una función afecte a más de un tipo (por ejemplo ficheros y listas, o listas y vectores), se puede incluir en cualquiera de los dos. Cada uno de estos tres archivos llevará su correspondiente archivo de cabecera ( .h ). Los tipos de datos para la lista simple y el vector, se implementarán en un archivo de cabecera denominado tipos.h.

Nota:

  • El ejecutable se denominará examen.exe.
  • La creación del makefile (1.5 puntos) y la división en ficheros del programa (1.5 puntos) sólo se valorará si se han hecho y funcionan correctamente los tres primeros apartados.
  • No se podrá hacer uso de variables globales.
  • Si los nombres de los archivos no se corresponden con los indicados en el enunciado del examen restarás un punto de tu nota final. Si además, no estructuras el examen en los archivos indicados, restarás dos puntos más a tu nota final.

TEORIA

  1. Describe cómo funciona la pila de la memoria cuando se invoca a una función recursiva.
  2. Calcula la eficiencia del siguiente algoritmo: Algoritmo Hanoi(n; i, j;) Inicio Si n > 1 entonces Hanoi(n-1; i, 6-i-j) escribir i “->”j Hanoi(n-1;6-i-j,j;) Finsi Fin
  3. Comenta por qué no siempre es aplicable el método de contabilización de las frecuencias.
  4. Define los siguientes conceptos: a. Programa correcto. b. Programa robusto. c. Programa amigable

Septiembre 2006

PROBLEMAS Se dispone de un conjunto de mensajes almacenados en un fichero binario. Los registros del fichero poseen la siguiente estructura: Prioridad : de tipo entero. To : cadena de 50 caracteres From : cadena de 50 caracteres Subject : cadena de 100 caracteres Msj : cadena de 255 caracteres. Estos mensajes ha sido analizados y procesados previamente para detectar la presencia de mensajes no deseados y de virus. Implementad un programa en C, que realice secuencialmente ( NO HAY QUE HACER MENÚ ) las siguientes operaciones:

  1. ( 1 punto ). Calcular el tamaño del fichero (en bytes) y el número de registros del fichero. Si no se muestra el resultado por pantalla no se valorará el apartado.
  2. ( 2 puntos ). Paso de los registros del fichero a una lista simplemente enlazada.
  3. ( 0.5 puntos ). Imprimir en pantalla la lista. Este apartado sólo se valorará si funciona correctamente el apartado 2.
  4. ( 1.5 puntos ). Cálculo de la longitud media de los mensajes de la lista (contenido del campo Msj ). Si no se muestra el resultado por pantalla no se valorará el apartado.
  5. ( 1 punto ). Contar por separado aquellos mensajes cuyo asunto (campo Subject) coincida con las cadenas [SPAM] o [VIRUS]. Si no se muestra el resultado por pantalla no se valorará el apartado.
  6. ( 1 punto ). Pasar aquellos elementos de la lista, cuyo asunto no tenga las cadenas [SPAM] o [VIRUS] a un fichero de texto, denominado mensajes.txt , en que cada mensaje tenga la siguiente estructura: Prioridad: To: From: Subject: Msj: Para la obtención del ejecutable se creará un Makefile ( 1.5 puntos ), y el código fuente se implementará usando los siguientes archivos ( 1.5 puntos ): un archivo principal.c, que contendrá a la función main , y los archivos ficheros.c y listas.c, que contendrán las funciones correspondientes a ficheros y listas respectivamente. En caso de que una función afecte a más de un tipo (por ejemplo ficheros y listas), se puede incluir en cualquiera de los dos. Cada uno de estos archivos llevará su correspondiente archivo de cabecera ( .h ). Los tipos de datos para la lista simple y para el fichero, se implementarán en un archivo de cabecera denominado tipos.h. Notas:
  • El ejecutable se denominará examen.exe.
  • La creación del makefile y la división en ficheros del programa sólo se valorará si se han hecho y funcionan correctamente los tres primeros apartados.
  • No se podrá hacer uso de variables globales.
  • Si los nombres de los archivos no se corresponden con los indicados en el enunciado del examen restarás un punto de tu nota final.
  • Si no estructuras el examen en los archivos indicados restarás dos puntos más a tu nota final.
  • Aquellos apartados que se implementen sin usar funciones no puntuarán, aunque funcionen correctamente.
  • Sólo se valorarán aquellos apartados que funcionen correctamente y que cumplan la nota anterior, en caso contrario no se mirará el código. TEORIA
  1. Describe cómo funciona la pila de la memoria cuando se invoca a una función recursiva.
  2. Calcula la eficiencia del siguiente algoritmo: Algoritmo Hanoi(n; i, j;) Inicio Si n > 1 entonces Hanoi(n-1; i, 6-i-j) escribir i “->”j Hanoi(n-1;6-i-j,j;) Finsi Fin
  3. Escribe una función en C, que reciba un vector de enteros y el número de elementos, y ordene el vector en orden decreciente, usando el método que quieras.
  4. Define los siguientes conceptos: a. Programa correcto. b. Programa robusto. c. Programa amigable

EXAMENES DEL PRIMER CUATRIMESTRE

Prototipo de examen primer parcial

Realiza el siguiente ejercicio siguiendo las indicaciones concretas de cada apartado. Ejercicio.- Debes entrar en la cuenta que figura en tu examen (login y password). No puedes salir de esta cuenta durante el examen y solo puedes utilizar un editor, el compilador y el depurador. Lee con mucha atención antes de comenzar a trabajar. TIEMPO: TRES HORAS. Recuerda que debes estructurar desde el principio el programa para tener un archivo principal ( llámalo examen.c ) en el que se encuentre sólo el main(), otro auxiliar , llámalo auxiliar.c , para las funciones, y los correspondientes archivos de cabecera ( examen.h y auxiliar.h ). El nombre del ejecutable deberá ser examen.exe. Si no lo haces así restarás un punto de tu nota final. Recuerda que no debes utilizar variables globales en ningún caso. No tienes por qué hacer un menú en el programa principal. Puedes simplemente llamar a las funciones secuencialmente. Si al final tienes tiempo y haces un menú podrás sumar 1 punto más. El menú sólo te puntuará si tienes al menos dos apartados que funcionan correctamente. Al final del examen tienes un ejemplo para que vayas probando tu programa apartado a apartado. Puedes solicitar al profesor que te corrija el examen cuando lo desees, pero no podrás abandonar el aula hasta que finalice el tiempo. Define el tipo de dato denominado registro que conste de una cadena (llamada nombre ) de longitud 15, un entero (llamado edad ) y un real (float) (llamado peso ). a) En el programa principal define un vector de 5 elementos de tipo registro y llama a una función, de nombre Introducir , de tipo void para introducir los datos de los 5 elementos. Llama también a una función, de nombre Imprimir , de tipo void para imprimir los datos del vector. (1 punto) b) Codifica una función, llámala Calcular , que reciba el vector, un entero por valor y un real por valor. Esta función deberá determinar qué elementos del vector tienen peso menor que el número real recibido y edad mayor que el entero recibido. Cada vez que se encuentre un elemento de este tipo deberá imprimirlo por pantalla. (2 puntos) c) Codifica una función, llámala Datosmatriz , que reciba el vector, una matriz m de tipo float de dimensión 2 x 5 y otra m2 de tipo float de dimensión 5 x 2 y no devuelva nada. Utilizando esquemas iterativos en la primera matriz deberás colocar en la primera fila las edades y en la segunda los pesos de todos los elementos del vector. En la segunda matriz deberás colocar en la primera columna los pesos y en la segunda las edades de todos los elementos del vector. En el programa principal deberás mostrar todos los elementos de cada una de estas 2 matrices. (2 puntos) d) Codifica una función, llámala Buscacadenas , que reciba un entero y el vector y que encuentre todas las cadenas (son campos de cada elemento del vector) de los elementos del vector que tengan longitud igual al entero recibido seleccionando entre ellas la menor (orden alfabético). La función deberá devolver el elemento del vector correspondiente a la cadena encontrada, con los requisitos anteriores. El programa principal deberá imprimir este resultado.(3 puntos) e) Codifica una función, llámala Producto , que reciba las dimensiones de cada una de las matrices (4 valores enteros) y las dos matrices, pasando un puntero simple que contenga la dirección del primer elemento de cada matriz, y calcule el producto, si es posible, mostrando por pantalla el resultado. Llama a esta función desde el programa principal de forma que reciba las dos matrices del

Febrero 2004

Ejercicio.- Debes entrar en la cuenta que figura en tu examen (login y password). No puedes salir de esta cuenta durante el examen y solo puedes utilizar un editor, el compilador y el depurador. Lee con mucha atención antes de comenzar a trabajar.

TIEMPO: TRES HORAS. Recuerda que debes estructurar desde el principio el programa para tener un archivo principal ( llámalo examen.c ) en el que se encuentre sólo el main(), otro auxiliar , llámalo auxiliar.c , para las funciones, y los correspondientes archivos de cabecera ( examen.h y auxiliar.h ). El nombre del ejecutable deberá ser examen.exe. Si no lo haces así restarás un punto de tu nota final. Recuerda que no debes utilizar variables globales en ningún caso. No tienes por qué hacer un menú en el programa principal. Puedes simplemente llamar a las funciones secuencialmente. Si al final tienes tiempo y haces un menú podrás sumar 1 punto más. El menú sólo te puntuará si tienes al menos dos apartados que funcionan correctamente.

Al final del examen tienes un ejemplo para que vayas probando tu programa apartado a apartado.

Puedes solicitar al profesor que te corrija el examen cuando lo desees, pero no podrás abandonar el aula hasta que finalice el tiempo.

Define el tipo de dato denominado registro que conste de una cadena (llamada nombre ) de longitud 15, un entero (llamado edad ) y un real (float) (llamado peso ).

f) En el programa principal define un vector de 5 elementos de tipo registro y llama a una función, de nombre Introducir , de tipo void para introducir los datos de los 5 elementos. Llama también a una función, de nombre Imprimir , de tipo void para imprimir los datos del vector. (1 punto) g) Codifica una función, llámala Calcular , que reciba el vector, un entero por valor y un real por valor. Esta función deberá determinar qué elementos del vector tienen peso menor que el número real recibido y edad mayor que el entero recibido. Cada vez que se encuentre un elemento de este tipo deberá imprimirlo por pantalla. (2 puntos) h) Codifica una función, llámala Datosmatriz , que reciba el vector, una matriz m de tipo float de dimensión 2 x 5 y otra m2 de tipo float de dimensión 5 x 2 y no devuelva nada. Utilizando esquemas iterativos en la primera matriz deberás colocar en la primera fila las edades y en la segunda los pesos de todos los elementos del vector. En la segunda matriz deberás colocar en la primera columna los pesos y en la segunda las edades de todos los elementos del vector. En el programa principal deberás mostrar todos los elementos de cada una de estas 2 matrices. (2 puntos) i) Codifica una función, llámala Buscacadenas , que reciba un entero y el vector y que encuentre todas las cadenas (son campos de cada elemento del vector) de los elementos del vector que tengan longitud igual al entero recibido seleccionando entre ellas la menor (orden alfabético). La función deberá devolver el elemento del vector correspondiente a la cadena encontrada, con los requisitos anteriores. El programa principal deberá imprimir este resultado.(3 puntos)

j) Codifica una función, llámala Producto , que reciba las dimensiones de cada una de las matrices (4 valores enteros) y las dos matrices, pasando un puntero simple que contenga la dirección del primer elemento de cada matriz, y calcule el producto, si es posible, mostrando por pantalla el resultado. Llama a esta función desde el programa principal de forma que reciba las dos matrices del apartado c). Recuerda que para multiplicar dos matrices, el elemento de la matriz producto que ocupa la fila i y la columna j se obtiene multiplicando los valores de la fila i de la primera matriz por los valores de la columna j de la segunda y sumando esos productos(2 puntos).

Caso de prueba.- Introduce como elementos del vector los siguientes: Nombre: Rafael Edad: 18 Peso: 65. Nombre: Manuel Edad: 22 Peso: 75. Nombre: Juan Luis Edad: 40 Peso: 80. Nombre: Casimiro Edad: 34 Peso: 74. Nombre: Jose Edad: 56 Peso: 68. En el apartado b) puedes probar pasando como parámetros:

  1. entero: 25, real: 70.5. Debe salir: Nombre: Jose Edad: 56 Peso: 68.
  2. entero: 35, real: 85. Deben salir: Nombre: Juan Luis Edad: 40 Peso: 80. Nombre: Jose Edad: 56 Peso: 68.
  3. entero: 20, real: 60. No debe salir ninguno. En el apartado c) las matrices que salen son: Primera: 18 22 40 34 56 Segunda: 65.4 18 65.4 75.5 80.8 74.2 68.5 75. 22

40 74.2 34

56

El apartado d) puedes probarlo con:

Parámetro entero: 6. Debe encontrar Rafael y Manuel. Como Manuel es menor que Rafael debe devolver el elemento segundo del vector y el programa principal mostrara: Nombre: Manuel Edad: 22 Peso: 75.

El apartado e) debe mostrar la siguiente matriz por pantalla: 12429.00 6700. 26703.93 12429. Si quieres probar con otros datos este apartado, observa que sean los que sean los que introduzcas en las matrices del apartado c) el resultado tiene que dar los mismos valores para los elementos de la diagonal principal.