Ejercicios resueltos PDF

Title Ejercicios resueltos
Course Programación 1
Institution Universidad de Málaga
Pages 120
File Size 2.3 MB
File Type PDF
Total Downloads 18
Total Views 125

Summary

Libro con ejercicios hechos ...


Description

Programación I UNIVERSIDAD DE MÁLAGA Dpto. Lenguajes y CC. Computación E.T.S.I. Telecomunicación

Relación de Ejercicios y Soluciones Sonido e Imagen

Contenido Tema 2: Conceptos Básicos de Programación Práctica 1. Programa, Variables y Expresiones . . . . . . . . . . . . . . . . . . . . . . . .

2 2

Laboratorio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2

Ejercicios Complementarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

6

Práctica 2. Estructuras de Control. Selección . . . . . . . . . . . . . . . . . . . . . . . . .

9

Laboratorio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

9

Ejercicios Complementarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

12

Práctica 3. Estructuras de Control. Iteración . . . . . . . . . . . . . . . . . . . . . . . . .

14

Laboratorio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

14

Ejercicios Complementarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

18

Ejercicios de Autoevaluación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

25

Tema 3: Diseño Descendente. Subprogramas

26

Práctica 4. Subprogramas (I) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

26

Laboratorio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

26

Ejercicios Complementarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

31

Práctica 5-1. Buffer de Teclado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

38

Laboratorio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

38

Ejercicios Complementarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

41

Práctica 5-2. Subprogramas (II) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

43

Laboratorio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

43

Ejercicios Complementarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

46

Ejercicios de Autoevaluación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

49

Tema 4: Tipos de Datos Estructurados Práctica 6. Registros y Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

50 50

Laboratorio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

50

Ejercicios Complementarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

56

Práctica 7. Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

59

Laboratorio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

59

Ejercicios Complementarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

66

Práctica 8. Estructuras de Datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

91

Laboratorio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

91

Ejercicios Complementarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

96

Ejercicios de Autoevaluación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 Tema 5: Búsqueda y Ordenación 110 Ejercicios Complementarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 Ejercicios de Autoevaluación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 1 cc Esta obra se encuentra bajo una licencia Reconocimiento-NoComercial-CompartirIgual 4.0 Internacional (CC BY-NC-SA 4.0) de 

Nota: en la solución a los ejercicios, se ha utilizado el tipo array de TR1, que ha sido incorporado a la biblioteca de C++ en el estándar de 2011. Si su biblioteca estándar no contiene la definición del tipo array, puede descargarla desde la siguiente dirección: http://www.lcc.uma.es/%7Evicente/docencia/cpplibs/array_tr1.zip

Tema 2: Conceptos Básicos de Programación Práctica 1. Programa, Variables y Expresiones Laboratorio 1. Estudie el “Entorno del programación” a utilizar durante el curso en el documento http://www.lcc.uma.es/%7Evicente/docencia/cppide/ep_anex_entprog_cpp.pdf Además, puede conocer más comandos del terminal de Linux en el documento http://www.lcc.uma.es/%7Evicente/docencia/docencia/ep_anex_unix.pdf 2. El siguiente programa escrito en C++ calcula la cantidad bruta y neta a pagar por un trabajo realizado en función de las horas y días trabajados. Contiene errores, encuéntrelos y corríjalos. # in clude < i o s t re am > u si ng n✎☞ a m e sp a c e s td ; c on s t ✐ t as a :✐2 5 .0 ; ✍✌ c on s t ✐ PR ECI O_H OR A = 6 0 .0 ; i nt m a in ( ) { double h or as , di as , to ta l , ne t o ; cout < < " I n t r od uz ca l as h or a s t r a b a j a da s : " ; c in > dia s ; h or as * dia s * P R E C I O _ H O R A ✐ = to t a l ; ✒✑ n eto = tota l - TASA ; cout >✐ > " E l v a lo r to t a l a pa g a r es : " >✐ >✓✏ t ot a l >✐ > en dl ; cout < < " El va l or n et o a p a ga r es : " < < NETO < < en dl ; ✒✑ }



Solución



# in clude < i o s t re am > u si ng n a m e sp a c e s td ; //−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− c on s t d o ub l e TASA = 25.0; c on s t d o ub l e P R E C I O _H O R A = 6 0 .0 ; //−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− i nt m a in ( ) { double h or as , d ia s , t ot al , n et o ; cout < < " I n t r od uz ca l as h or a s t r a b a j a da s : " ; c in > > h o ra s ; cout < < " I n t r od u zc a l os d i a s t r a b a ja do s : " ; c in > > dia s ; t ot a l = h or a s * dia s * P R E C I O_ HO RA ; n eto = tota l - TASA ; cout < < " E l v a lo r to t a l a pa g a r es : " < < t ot a l < < en dl ; cout < < " El va l or n et o a p a ga r es : " < < n eto < < en dl ; }





3. Desarrolle un programa que lea dos números de tipo int de teclado y posteriormente los escriba en pantalla. Ejecútelo introduciendo dos números de tipo int válidos (por ejemplo 1234 y 5678). Posteriormente ejecútelo introduciendo por teclado un primer número de tipo int (por ejemplo 1234) e introduciendo por teclado un segundo dato que no pertenezca al tipo int (por ejemplo hola). Finalmente ejecútelo introduciendo por teclado un primer dato que no pertenezca al tipo int (por ejemplo hola). Evalúe las diferencias entre ambas ejecuciones del mismo programa. Creative Commons. Véase http://creativecommons.org/licenses/by-nc-sa/4.0/deed.es_ES

2



Solución



# in clude < i o s t re am > u si ng n a m e sp a c e s td ; i nt m a in ( ) { i nt d at o1 , d a to 2 ; cout < < " I n t r o du z ca un n úm e r o e n t er o : " ; c in > > d a to 1 ; cout < < " I n t r o du z ca o tr o nú me r o e nt er o : " ; c in > > d a to 2 ; cout < < " E l va l o r de l p r im e r n ú m er o i n t r o d u c i do e s : " < < d a to 1 < < en dl ; cout < < " E l va l o r de l s e gu n d o n ú m er o i n t ro d u c i d o es : " < < d a t o2 < < en dl ; } //−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− // Cuando s e i n t r o d u c e p or t e c l a d o un v a l o r a d ec ua do a l t i p o d e l a // v a r i a b l e q ue s e e s t á l e y e nd o , l a l e c t u r a s e ha ce c o r re c t a m e n t e . // S in e mba rgo , s i s e i n t ro d u c e p o r t e c l a d o un v a l o r NO a de c uad o a l // t i p o d e l a v a r i a b l e q ue s e e s t á le y e nd o , e nt o n c e s la o p e ra c i ó n d e // l e c t u r a f a l l a , l a v a r i a b l e m a ntie ne e l v a l o r q ue t u v i e s e // a nt e ri o rm e nt e ( e n e s t e c a s o como la v a r i a b l e no ha s id o // i n i c i a l i z a d a , t e nd rá un v a l o r INESPECIFICADO) , y e l f l u j o de // e nt r a d a ( CIN) s e p o nd rá en modo e rró ne o , p o r l o q ue c u a l q u i e r o t r a // o p e r a c i ó n de e nt ra d a q ue s e r e a l i c e p o s t e r io r m e nt e t a m b ién f a l l a r á .





4. Desarrolle un programa que sólo declare variables de tipo int. El programa deberá leer dos números enteros desde el teclado, posteriormente los sumará, almacenando el resultado en una variable, y finalmente escribirá por pantalla el resultado de la suma. Ejecute dicho programa introduciendo como datos de entrada los siguientes números y analice los resultados obtenidos. a) -20 y 30.

d ) 200000000 y 2000000000.

b) 20 y -30.

e) 1 y 2147483647.

c) 147483647 y 2000000000.

f ) 1 y 3000000000.



Solución



# in clude < i o s t re am > u si ng n a m e sp a c e s td ; i nt m a in ( ) { i nt d at o _1 , d a to _2 ; cout < < " I n t r o du z ca el p ri me r nú me ro e nt er o : " ; c in > > da to_1 ; cout < < " I n t r o du z ca el s eg un do n ú me r o e nt er o : " ; c in > > da to_2 ; i nt suma = da to_1 + da to_2 ; cout < < " El va l or r es u l t ad o e s : " < < suma < < en dl ; } //−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− // El t i p o INT s e r e p r e s e n t a co n 32 b i t s en l a s m áq uinas a c t u a le s , p o r // l o q ue e l menor número q ue p ue d e r e p r e s e n t a r e s e l −2147483648 // ( −2^31) y e l mayor número q ue p ued e r e p r e s e n t a r e s 2147483647 // ( 2^ 31 −1). Por l o t a n t o en l o s p rim e ro s c a s o s , t a nt o l o s número s // l e í d o s como e l r e s u l t a d o d e l a o p e ra c i ó n pue de n s e r r e p re s e n t a d o s // p o r e l t i p o INT , s i n em bargo en e l c ua rt o y q u in t o c a s o s e l // r e s u l t a d o de l a o p e ra c i ó n ( 22 00000000 y 21474836 48) no p ued e s e r // re p re s e nt a d o , y en e l s e x t o c as o , i n c l u s o e l s e g und o número l e í d o // ( 30 00 00 00 00 ) t am poc o p ue d e s e r r e p r e s e n t a d o p o r e l t i p o INT .





5. Desarrolle un programa que lea de teclado una determinada cantidad de euros, calcule y escriba su equivalente en pesetas, considerando que 1 C son 166.386 pts. ✞

Solución

# in clude < i o s t re am > u si ng n a m e sp a c e s td ; //−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− c on s t d o ub l e EU R _PTS = 1 6 6 .3 8 6 ; //−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

3



i nt m a in ( ) { cout < < " I n t r o d uz c a l a c a n t id ad de e ur o s : " ; double e ur os ; c in > > e u ro s ; double pts = e ur o s * EU R _PTS ; cout < < e u ro s < < " e ur o s s o n " < < p ts < < " p ts " < < en dl ; }





6. Desarrolle un programa que calcule y escriba la media aritmética de 3 números enteros leídos de teclado. Compruebe que la media aritmética de los números 3, 5 y 8 es 5.33333 ✞

Solución



# in clude < i o s t re am > u si ng n a m e sp a c e s td ; //−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− c on s t i nt N_V ALOR ES = 3 ; //−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− i nt m a in ( ) { cout < < " I n t r o du zc a 3 n ú m e ro s e n t er os : " ; i nt n1 , n2 , n3 ; c in > > n 1 > > n2 > > n 3 ; double m ed i a = double ( n 1 + n 2 + n3 ) / double ( N _V AL O R E S ) ; cout < < " M e di a " < < m ed i a < < en dl ; }





7. Desarrolle un programa que lea de teclado una cierta cantidad de segundos y muestre su equivalente en semanas, días, horas, minutos y segundos, según el formato de los siguientes ejemplos: 2178585 segundos equivalen a [

3] semanas, 4 dias, 05:09:45

9127145 segundos equivalen a [ 15] semanas, 0 dias, 15:19:05



Solución

# in clude < i o s t re am > # in clude < ioma n ip > u si ng n a m e sp a c e s td ; //−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− c on s t i nt SEG_M I N = 6 0; c on s t i nt M I N _ H OR A = 6 0; c on s t i nt H OR AS_D I A = 2 4; c on s t i nt D I AS_SEM ANA = 7 ; //−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− c on s t i nt S E G _ H OR A = SEG_M I N * M I N _ H OR A ; c on s t i nt SEG_D I A = S E G _ H OR A * H O R A S _D IA ; c on s t i nt S E G _ S E M AN A = SEG_D I A * D I A S _ S E M AN A ; //−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− i nt m a in ( ) { cout < < " I n t r o du zc a l os s eg un do s : " ; i nt s e g u n d o s _ t o t a l e s ; c in > > s e g u n d o s _ t o t a l e s ; //−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− i nt sema n a s = s e g u n d o s _ t o t a l e s / S E G _ S EM AN A ; i nt r e st o = s e g u n d o s _ t o t a l e s % SEG_SEM ANA ; //−−−−−−−−−−−−− i nt dia s = r e st o / SEG_D I A ; r es t o = r es t o % SEG_D I A ; //−−−−−−−−−−−−− i nt h o ra s = r e st o / S E G _ HO RA ; r es t o = r es t o % S E G _H OR A ; //−−−−−−−−−−−−− i nt min utos = r e st o / SEG_M I N ; i nt s e g u nd o s = r e st o % SEG_M I N ; //−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− cout < < s e g u n d o s _ t ot a l e s < < " s e g u n do s e q u iv a l e n a " < < " [ " < < setfill ( ' ' ) < < setw (3 ) < < sema n a s < < " ] s e ma n as , " < < dia s < < " d ia s "

4



> d a t o2 ; i nt a ux = d a to 1 ; d at o 1 = d at o2 ; d at o 2 = a ux ; cout < < " V a lo r a lm a ce n ad o e n D a t o1 : " < < d a to 1 < < en dl ; cout < < " V a lo r a lm a ce n ad o e n D a t o2 : " < < d a to 2 < < en dl ; }





2. Desarrolle un programa que lea de teclado un número entero, y escriba true si el número leído es par, y false en caso contrario. ✞

Solución



# in clude < i o s t re am > u si ng n a m e sp a c e s td ; i nt m a in ( ) { cout < < " I n t r o du zc a un nú me r o na tu r a l : " ; i nt da to ; c in > > da to ; bool es_pa r = ( da to % 2 = = 0 ); cout < < " El n úm e ro " < < da to < < " e s p ar ? " < < boola lph a < < es_pa r < < en dl ; }





3. Desarrolle un programa que lea de teclado una letra minúscula (supondremos que la entrada de datos es correcta), y escriba la letra mayúscula correspondiente a la letra minúscula leída previamente. ✞

Solución



# in clude < i o s t re am > u si ng n a m e sp a c e s td ; i nt m a in ( ) { cout < < " I n t r o du zc a u na le t r a m i n ú s cu la : " ; ch a r l e t r a _ m in u sc u la ; c in > > l e t r a _ m i n u s cu l a ; ch a r l e t r a _ m ayu s c u l a = ch a r ( in t ( ' A ' ) + ( in t ( l e t r a_ m in u sc ul a ) - i nt ( ' a ' )) ) ; cout < < l e t r a _ m i nu s c u l a < < " - > " < < l e t r a _ m a yu s c u l a < < en dl ; }





4. Desarrolle un programa que lea de teclado tres dígitos como caracteres y los almacene en tres variables de tipo char (supondremos que la entrada de datos es correcta), y calcule el valor numérico correpondiente a dichos dígitos leídos y lo almacene en una variable de tipo int. Finalmente mostrará en pantalla el valor calculado. Por ejemplo, si lee los siguientes tres caracteres ’3’, ’4’, y ’5’, deberá calcular el valor numérico correspondiente 345. ✞

Solución

# in clude < i o s t re am > u si ng n a m e sp a c e s td ;

6



i nt m a in ( ) { ch a r d1 , d2 , d 3 ; cout < < " I n t r o du zc a t r es d íg it os : " ; c in > > d 1 > > d2 > > d 3 ; i nt n um = ( i nt ( d 1 ) - in t ( '0 ' ) ) * 10 0 + ( in t ( d2 ) - in t ( ' 0 ' )) * 1 0 + ( in t ( d3 ) - in t ( ' 0 ' )) ; cout < < " v a lo r n úm er ic o : " < < n um < < en dl ; }





5. Desarrolle un programa que lea de teclado un numero entero de tres dígitos y lo almacene en una variable de tipo int (supondremos que la entrada de datos es correcta), y desglose el número leído en los tres dígitos (como caracteres) que lo componen y los almacene en tres variables de tipo char. Finalmente mostrará en pantalla el desglose de los dígitos. Por ejemplo, si lee el número 345, deberá desglosarlo en los siguientes tres caracteres ’3’, ’4’, y ’5’. ✞

Solución



# in clude < i o s t re am > u si ng n a m e sp a c e s td ; i nt m a in ( ) { i nt n um ; cout < < " I n t r o du z ca un n úm e r o e n t er o : " ; c in > > n um ; ch a r d1 = ch a r ( ( ( nu m / 100) % 10) + i n t ( '0 ' ) ); ch a r d2 = ch a r ( ( ( nu m / 10) % 1 0 ) + in t ( '0 ' ) ); ch a r d3 = ch a r ( ( ( nu m / 1 ) % 10 ) + in t ( ' 0 ') ) ; cout < < " D i gi to 1: " < < d 1 < < en dl ; cout < < " D i gi to 2: " < < d 2 < < en dl ; cout < < " D i gi to 3: " < < d 3 < < en dl ; }





6. Codifique el siguiente programa, ejecútelo y analice el resultado obtenido. # in clude < i o s t re am > u si ng n a m e sp a c e s td ; i nt m a in ( ) { bool ok = (3.0 * (0.1 / 3 .0 )) = = (( 3 .0 * 0.1) / 3.0 ) ; cout < < " R e s ul t a d o d e ( 3.0 * ( 0.1 / 3 .0) ) == ( ( 3.0 * 0 .1 ) / 3 .0) : " < < boola lph a < < ok < < en dl ; }



Solución

# in clude < i o s t re am > u si ng n a m e sp a c e s td ; i nt m a in ( ) { bool ok = (3.0 * (0.1 / 3 .0 )) = = (( 3 .0 * 0.1) / 3.0 ) ; cout < < " R e s ul t a d o d e ( 3.0 * ( 0.1 / 3 .0) ) == ( ( 3.0 * 0 .1 ) / 3 .0) : " < < boola lph a < < ok < < en dl ; } //−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− // El t i p o DOUBLE u t i l i z a una re p re s e n t a c i ó n INEXACTA y FINITA , p or l o // q ue s e p ro d uc e p é rd id a de p r e c i s i ó n en l a s o p e r a c io ne s d e coma // f l o t a n t e , d e t a l fo rm a q ue p o d rí a s uc e d e r que d os v a l o r e s q ue // m at e má t ic am e nt e s on i g u a l e s s e a n c o m p uta c io na lm e nt e l ig e r a m e n t e // d i f e r e n t e s ( un v a l o r d e c im a l muy p e qu eño ) y p o r l o t a nt o l a // c o mp a ra c ió n d e i g u a l d a d (==) e nt re núm eros r e a l e s no p ro d uz c a // l o s r e s u l t a d o s e s p e r a d o s . Por l o t a nt o , l o s núm eros r e a l e s nunca s e // d e b e rí a n d e b e r ía n c om parar po r i g ua ld a d , s i no m e d ia nt e una // o p e r a c i ó n s i m i l a r a : ( a b s ( x−y ) < 1e −9) , q ue s im p le m e nt e c om prueb a // s i do s números r e a l e s e s t á n l o s s u f i c i e n t e m e n t e c e rc a no s . // // En e s t e e j e m p lo c o nc re t o , e l r e s u l t a d o m a t em á tic o d e b e r í a s e r TRUE, // p e ro a l r e a l i z a r s e en e l o rd ena d or , do nd e e l número d e d í g i t o s d e c i m a l e s // e s l i m i t a d o , l a o p e ra c ió n 0 . 1 /3 . 0 p rod uc e como r e s u l t a d o 0. 033333 p e r i ó d i c o // q ue a l m u l t i p l i c a r s e p o r 3. 0 da como r e s u l t a d o d e l a p rime ra s u b e x p r e s i ó n // 0 . 099999 p e ri ó d i c o , m ie nt r a s que en l a s e g unda s ub e x p re s i ó n , 3. 0 ∗ 0 . 1 da

7



// como r e s u l t a d o 0 . 3 , q ue a l d i v i d i r s e e n t r e 3 . 0 e l r e s u l t a d o f i n a l e s 0 . 1 , // q ue e s d i f e r e n t e de 0. 099999 p e r ió d i c o , p o r l o q ue e l r e s u l t a d o d e l a // c o mp a ra c ió n f i n a l e s FALSE





7. Codifique el siguiente programa, que lee tres números reales desde el teclado, y posteriormente escribe true si el resultado de multiplicar los dos primeros números es igual al tercero (a * b == c), y escribe false en caso contrario. # in clude < i o s t re am > u si ng n a m e sp a c e s td ; i nt m a in ( ) { ...


Similar Free PDFs