UNIVERSIDAD PONTIFICIA COMILLAS Escuela Técnica Superior de Ingeniería (ICAI) Ingeniero en Informática Programación I 12 de junio de 2006 Alumno/a:___________________________________________Grupo: 1ºA Apartado 1. (1 punto). Indicar el resultado que producen sobre la pantalla los siguientes programas: a) a = 2.00 a = 7.00 a = 11.00 a = 14.00 a = 16.00 a = 17.00 a = 17.00 a = 16.00 a = 14.00 a = 11.00 a = 7.00 a = 2.00 ! " ! ## " %! # $$ &' $$ ( ) & ## * ! ! + * , 3++) b) ! - .+ , ! ! /-0 ! %1 + ! ! &2 )++3 , + * ! ! # %! * ! * ! &( & / 0 & 2 Apartado 2. (2 puntos). Codificar una función 4 5 % 6 que reciba como datos de entrada la fecha de imposición de un capital en un banco ( 5 ) y la fecha de retirada del mismo ( 5 ) y, calcule y devuelva el número total de días que dicho capital ha estado depositado en el banco. 4 Ejemplo: 5 % 75829:; 5 75829:; 5 Para una imposición el día 11/11/2004 con una retirada el día 12/06/2006 Devolverá: 578 días. Que son, 1% ! ! ! ! *75829:; 19+31 = 50 días de 2004 365 días de 2005 (año no bisiesto) 31+28+31+30+31+12 = 163 días de 2006 Total = 50 + 365 + 163 = 578 días Nota: Se sabe que un año es bisiesto si es múltiplo de 4 excepto los años múltiplos de 4 que, además, son múltiplos de 100 pero no son múltiplos de 400. Siempre se supondrá que la fecha de imposición es anterior a la fecha de retirada. 4 5 % 75829:; 5 75829:; 5 < ! 5 5 9= > 5 5 9 %! ) 4 4 5 ! !! > ! !! !! 5 ! 5 ! ) ! 5 5 ? 5 5 @ ? 5 5 ) A 5 * @ 9= C ? > ! ? %! (" + BB ( ++ + BB .33 A 5 5 5 5 5 9= ! .3 A > 5 (" 5 5 ? # + BB C 5 5 9= 5 * > 5 5 D # 5 ("++ C ! 5 ( ++ + BB # .33 # .3 ? 5 ) 1 $ ("++ C + + ## ! 4 ! > ! ! 5 * 4 5 ! !! 75829:; < ! E! ! , > ;? ! ! > ! $ ! ## F )G (" + BB ( ++ + BB ("++ C + # )H C # )I ! J "G 3G HG G # .+ ! G * * ! * ! J #. ! Apartado 3. (2 puntos) Ejercicio de ficheros. Disponemos de un fichero binario que contiene información de cada uno de los libros de una bilioteca ( G' %' ). Cada registro contiene los datos de un G' %' ejemplar de un libro. Se sabe que de un mismo libro puede haber más de un ejemplar. El fichero está ordenado por materia y dentro de cada materia por título. En este caso se sabe que no hay títulos repetidos. La estructura del registro es la siguiente: 1% K 7> ; 2 ! ! ! ! ! )+ )+ )+ ! ! ! ! ! ! *75@LTPN ! ! ! ! ! ! ! ! / 0 /)+0 /)+0 /)+0 Se pide: Codificar un programa que, a partir del fichero, saque un listado en pantalla de libros con el siguiente formato: @LM7;4N 42 2O2KE@;P2M ENP K;72PL; Q ENP 7L7R@N K ! G SSSSSSSSSSSS 7L7R@N ;R7NP SSSSSSSSSSSSSSSSSSS SSSSSSSSSSSSSSSSS 24L7NPL;@ SSSSSSSSSSSSSS 2O2KE@;P2M S SSSSSSSSSSSSSSSSSSS SSSSSSSSSSSSSSSSS 7 ! ! G SSS SSSSSSSSSSSSSS S 24L7NPL;@ SSSSSSSSSSSSSS 2O2KE@;P2M S SSSSSSSSSSSSSS S K ! G SSSSSSSSSSSS 7L7R@N ;R7NP SSSSSSSSSSSSSSSSSSS SSSSSSSSSSSSSSSSS SSSSSSSSSSSSSSSSSSS SSSSSSSSSSSSSSSSS 7 ! ! G SSS 7 ! G SSSS E! ,! G ! % 6 G 4 ; ! G 8 G 4 ! E! ,! 4 1% %! ! , %! ! 6 % ! % ! ! ! ! ! / 0 ! /)+0 ! ! /)+0 ! ! /)+0 *75@LTPN 4 ! 6 ! ! 5 ! ! / 0 ! 5 ! ! /)+0 % ! % ! 8L@2 ! 75@LTPN ! 5 ! E ! P , ! % ! 5 ! ! L U % ! 5 % ! 5 ;% ! ! ! % ! C E ! F 9 %! %! @ ! C ! + + ! & G' G'' -R@@ % ! %' '' % ! & &! & U ! ! %! ! ! , ! ! ! &' ' ' & & ! B ! @LM7;4N 42 2O2KE@;P2M ENP K;72PL; Q ENP 7L7R@N' ' & ENP 7L7R@N ' ' & %! ! ! , ! 75@LTPN ! U ! P %! ! ! , ! ! ! %1 5 ! ! ! ! ! %1 5 ! ! ! % ! M ! ! ! %! &K ! G ( ' & 5 ! ! &K %! &7L7R@N ;R7NP 24L7NPL;@ 2O2KE@;P2M' 2O2KE@;P2M' & %! &$$$$$$$$$$$$$ &$$$$$$$$$$$$$ $$$$$$$$$$$$$ $$$$$$$$$$$$$ $$$$$$$$$$ $$$$$$$$$$$$$$ $$$$$$$$ $$$$$$$$$$' $$$$$$$$$$' & @ ! $ ! %! &($ ! ! ! &($)+ ($ ($)+ ($ ($)+ & ! ! * @ ! F ! B C , U ! ! ! % ! , ! 75@LTPN 5 ! ! ! ! % ! 7! % ! ! + BB 5 ! ! ! + ## * ! % 7! 8 %! %5 ! ! % ! ! % ! & (. ' & ! ! 5 # ! ! % L ! %1 5 % ! @ %! &($ &($)+ ! ! ! % ! % %! + ! ! ! ($ ($)+ ! ! $ ($ ($)+ & ! ! ! ! * ! ! P % 8 %! % 8 ! ! & (. ' & ! 5 ! %! # ! ! # %! ! 1 , ! ! % ! % ! ! ! ! G (. ' & % ! 5 ! ! ! ! 5 ! ! & &7 &7 % ! 5 ! % ! 5 L ! %1 5 ! ! %! &K ! G ( ' &K L ! %1 5 ! ! ! %! &7L7R@N ;R7NP 2O2KE@;P2M' 24L7NPL;@ 2O2KE@;P2M' & %! &$$$$$$$$$$$ $$$$ $$ $$$$$$$$$$' &$$$$$$$$$$$$$ $$$$$$$$$$$$$$ $$$ $$$$$$$$$$ $$$$$$$$$$$ $$$$$ $$$$$$$$ $$$$$$$$$$ $$$$$$ $$$$ $$$$$$$$$$' & % ! @ ! $ ! %! &($ ($ $)+ & ! ! &($)+ ($ ($)+ ( ! ! ! * * @ ! ! B ! U ! ! ! , ! 75@LTPN 1 ! * 8 %! % 8 %! % E %! 9 ! & (. ' & ! 5 ! &7 &7 ! 5 &7 &7 !! # ! ! # ! ! % ! % ! ! ! ! G (. ' & % ! 5 ! ! ! G ( % ! ' & 5 ! % ! 5 ! * ! * %! ! + &' &' ' 2!! ! % ! ! ! & Apartado 4. (2 puntos). Listas simplemente encadenadas. Suponemos que ya existe una lista simplemente encadenada con información de las selecciones nacionales de fútbol que están participando en el campeonato mundial de fútbol de Alemania. Los elementos son de tipo 75M2@299LN75M2@299LN- que se encuentran en cualquier orden. La dirección del primer elemento de la lista se encuentra en el puntero . 1% ! ! % /)+0 ! ,! % ! ! *75M2@299LN- !/.+0 !/.+0 , Se pide: Codificar una función 75M2@299LN9! !5 5 75M2@299LNque reciba el puntero y genere una nueva lista en la que se encuentren las selecciones ordenadas por el nombre del país. La función devolverá la dirección del primer elemento de la nueva lista. Nota: En este caso debe suponerse que la memoria dinámica para los nuevos elementos se pide en la función y se libera en el main. 75M2@299LN- 9! 9! !5 4 ! 75M2@299LNL U ) -R@@ M ! !! F 5 75M2@299LN- ) C V V V) -R@@ W V ! 75M2@299LNV -R@@ %! &' 1 &' - U ! 9 % ! %1 V$ V$ % V$ V$ ,! % ! %1 V$ V$ 2 ) $ % $ ,! % ! V ! -R@@ M %! V$ V$ ! ) , M ! 75M2@299LN& V ! V -R@@ * , $ ! ! T V V) ) ) F V $ , ! V) V V V $ % C -R@@ BB V $ % V$ V$ % + , * K ! V @ V$ $ V X !! , ) , ! ! ) BB BB % ! % %! ) V $ % ! V$ V$ % + , ! V * V $ , ! % @ V $ V$ V$ !! , , % @ V$ V$ V)$ V)$ !! , , % -R@@ BB V $ % D V -R@@ V$ V$ % % + 6 * * * * * $ * ! * ! ) , % V V 6 ! Apartado 5. (1 punto). Manejo de cadenas de caracteres. Codificar una función 9 ! que reciba dos cadenas de caracteres ( y )) y las devuelva unidas (la primera seguida de la segunda) en una tercera cadena ( .) de la que se devuelve su dirección de memoria. Se sabe que cada una de las cadenas que se reciben no pueden tener más de 50 caracteres. ! ! 9 ! 4 ! ) %! ! ! , , ! ! , # ! = ! -R@@ &' 1 9 % ! + , / 0 9 % ! + ) K / , ) , ) % ! , ) # U , ! & ! ## / 0 ) / * ! ! 9 , , , E ! ! ! , * ! 9 , ## ) , # 0 Y'+Z 0 Y'+Z 6 )/ )/ 0 Apartado 6. (1 punto). Recursividad. Diseñar una función recursiva int Ackerman (int m, int n); para calcular el valor de la función de Ackerman. Se sabe que dicha función vale: Ackerman Ackerman $ Ackerman (m, ( $ Por otra parte, se conoce que: Ackerman Ackerman # + Ackerman Nota: Se supone que y $ + 1 son números enteros >= 0. ; J ! ! + ! ! * ! # + ! ; J ! $ ! ; J ! $ ! ; J ! $ + Apartado 7. (1 punto). Ejercicio de cálculo matemático. Escribir una función 9 5 ! que reciba el valor de un número entero y positivo, y devuelva cuántos números hay entre 1 y que estén formados sólo por cifras impares. En caso de recibir un número negativo, la función devolverá el valor -1. Se pide: a) Prototipo de la función. b) Código de la función. Ejemplo: Si se recibe el valor 25, devolverá 10. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 9 Prototipo: Función: 9 5 4 5 ! ! ! ! 9 %! D + ! $ ! + ! ( + () C + + !## * * ! + ## F * ! ! ! + ,