Soluciones a los Ejercicios Propuestos en el libro:
EMPEZAR DE CERO A PROGRAMAR EN
lenguaje C
Autor: Carlos Javier Pes Rivas (correo@carlospes.com)
Captulo 12 INSTRUCCIONES DE CONTROL ALTERNATIVAS
EJERCICIOS PROPUESTOS Alternativa doble 12.1 Nmero mltiplo de 3................................................................................................................. 2 12.2 Cunto suman dos nmeros?...................................................................................................... 3 12.3 Validar hora .............................................................................................................................. 5
Alternativa mltiple 12.4 De vocal minscula a mayscula.................................................................................................. 6 12.5 Color de un semforo.................................................................................................................. 8
Anidamiento
12.6 Nmero mayor de dos nmeros introducidos ............................................................................... 11 12.7 Nmero mayor de tres nmeros introducidos............................................................................... 12 12.8 Dgitos de un nmero entero...................................................................................................... 18 12.9 De nmero a letras ................................................................................................................... 19 12.10 La hora un segundo antes ........................................................................................................ 22 12.11 De vocal minscula a mayscula .............................................................................................. 24 12.12 Color de un semforo (con anidamiento) ................................................................................... 25
12.13 Rellenar los espacios en blanco................................................................................................ 26
carlospes.com
2 Empezar de cero a programar en lenguaje C
Carlos Javier Pes Rivas, 2006. Todos los derechos reservados. No est permitida la reproduccin total o parcial de ests pginas con fines comerciales, sin la previa autorizacin escrita del titular del copyright. Slo est permitida su impresin y utilizacin para uso personal. EJERCICIO PROPUESTO 12.1
Nmero mltiplo de 3
Solucin:
(Pseudocdigo)
Algoritmo Numero_multiplo_de_3 (ejer_pro_12_1.c)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
algoritmo Numero_multiplo_de_3
variables entero numero
inicio escribir( "Introduzca un nmero entero: " ) leer( numero )
si ( numero mod 3 = 0 ) escribir( "ES MLTIPLO DE 3" ) sino escribir( "NO ES MLTIPLO DE 3" ) fin_si fin
(Ordinograma)
INICIO FIN escribir( "Introduzca un nmero entero: " ) leer( numero ) numero mod 3 = 0 escribir( "ES MLTIPLO DE 3" ) escribir( "NO ES MTIPLO DE 3" ) SI NO
Captulo 12. Instrucciones de control alternativas 3
Carlos Javier Pes Rivas, 2006. Todos los derechos reservados. No est permitida la reproduccin total o parcial de ests pginas con fines comerciales, sin la previa autorizacin escrita del titular del copyright. Slo est permitida su impresin y utilizacin para uso personal. EJERCICIO PROPUESTO 12.2
si ( suma = resultado ) escribir( "CORRECTO" ) sino escribir( "INCORRECTO: La suma es ", resultado ) fin_si fin
(Ordinograma) INICIO FIN escribir( "Introduzca un nmero entero: " ) leer( n1 ) suma = resultado escribir( "CORRECTO" ) escribir( "INCORRECTO: La suma es: ", resultado ) SI NO escribir( "Introduzca otro nmero entero: " ) leer( n2 ) escribir( "Cunto suman?: " ) leer( suma ) resultado n1 + n2
4 Empezar de cero a programar en lenguaje C
Carlos Javier Pes Rivas, 2006. Todos los derechos reservados. No est permitida la reproduccin total o parcial de ests pginas con fines comerciales, sin la previa autorizacin escrita del titular del copyright. Slo est permitida su impresin y utilizacin para uso personal. Una segunda solucin es:
si ( suma = n1 + n2 ) escribir( "CORRECTO" ) sino escribir( "INCORRECTO: La suma es ", n1 + n2 ) fin_si fin
(Ordinograma)
INICIO FIN escribir( "Introduzca un nmero entero: " ) leer( n1 ) suma = n1 + n2 escribir( "CORRECTO" ) escribir( "INCORRECTO: La suma es: ", n1 + n2 ) SI NO escribir( "Introduzca otro nmero entero: " ) leer( n2 ) escribir( "Cunto suman?: " ) leer( suma )
Captulo 12. Instrucciones de control alternativas 5
Carlos Javier Pes Rivas, 2006. Todos los derechos reservados. No est permitida la reproduccin total o parcial de ests pginas con fines comerciales, sin la previa autorizacin escrita del titular del copyright. Slo est permitida su impresin y utilizacin para uso personal. EJERCICIO PROPUESTO 12.3
Validar hora
Solucin:
(Pseudocdigo)
Algoritmo Validar_hora (ejer_pro_12_03.c)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
algoritmo Validar_hora
variables entero h, m, s
inicio escribir( "Introduzca horas: " ) leer( h ) escribir( "Introduzca minutos: " ) leer( m ) escribir( "Introduzca segundos: " ) leer( s ) si ( h >= 0 y h <= 23 y m >= 0 y m <= 59 y s >= 0 y s <= 59 ) escribir( "HORA CORRECTA" ) sino escribir( "HORA INCORRECTA" ) fin_si fin
(Ordinograma)
INICIO FIN escribir( "Introduzca horas: " ) leer( h ) h >= 0 y h <= 23 y m >= 0 y m <= 59 y s >= 0 y s <= 59 escribir( "HORA CORRECTA" ) escribir( "HORA INCORRECTA" ) SI NO escribir( "Introduzca minutos: " ) leer( m ) escribir( "Introduzca segundos: " ) leer( s )
6 Empezar de cero a programar en lenguaje C
Carlos Javier Pes Rivas, 2006. Todos los derechos reservados. No est permitida la reproduccin total o parcial de ests pginas con fines comerciales, sin la previa autorizacin escrita del titular del copyright. Slo est permitida su impresin y utilizacin para uso personal. EJERCICIO PROPUESTO 12.4
segun_sea ( vocal ) 'a' : escribir( 'A' ) 'e' : escribir( 'E' ) 'i' : escribir( 'I' ) 'o' : escribir( 'O' ) 'u' : escribir( 'U' ) sino : escribir( "ERROR: '", vocal, "' no es una vocal minscula." ) fin_segun_sea fin
(Ordinograma)
INICIO FIN escribir( "Introduzca una vocal minscula: " ) leer( vocal ) escribir( 'A' ) vocal ... 'a' SINO ... escribir( "ERROR: '", vocal, "' no es una vocal minscula." ) 'e' escribir( 'E' )
Captulo 12. Instrucciones de control alternativas 7
Carlos Javier Pes Rivas, 2006. Todos los derechos reservados. No est permitida la reproduccin total o parcial de ests pginas con fines comerciales, sin la previa autorizacin escrita del titular del copyright. Slo est permitida su impresin y utilizacin para uso personal. Una segunda solucin es:
si ( vocal = 'a' o vocal = 'e' o vocal = 'i' o vocal = 'o' o vocal = 'u' ) escribir( mayuscula ) sino escribir( "ERROR: '", vocal, "' no es una vocal minscula." ) fin_si fin
(Ordinograma)
INICIO escribir( "Introduzca una vocal minscula: " ) leer( vocal ) vocal ... 'a' ... 'e' mayuscula 'A' mayuscula 'E' mayuscula 'U' 'u' FIN vocal = 'a' o vocal = 'e' o vocal = 'i' o vocal = 'o' o vocal = 'u' escribir( mayuscula ) SI NO escribir( "ERROR: '", vocal, "' no es una vocal minscula." )
8 Empezar de cero a programar en lenguaje C
Carlos Javier Pes Rivas, 2006. Todos los derechos reservados. No est permitida la reproduccin total o parcial de ests pginas con fines comerciales, sin la previa autorizacin escrita del titular del copyright. Slo est permitida su impresin y utilizacin para uso personal. EJERCICIO PROPUESTO 12.5
inicio escribir( "Listado de colores de un semforo:" ) escribir( "1. Rojo" ) escribir( "2. Verde" ) escribir( "3. Amarillo" ) escribir( "Introduzca nmero de color: " )
leer( numero )
segun_sea ( numero ) 1 : escribir( "Rojo significa: \"No pasar\"" ) 2 : escribir( "Verde significa: \"Adelante\"" ) 3 : escribir( "Amarillo significa: \"Precaucin\"" ) sino : escribir( "ERROR: ", numero, " no est asociado a ningn color." ) fin_segun_sea fin
(Ordinograma)
FIN escribir( "Introduzca nmero de color: " ) leer( numero ) escribir( "Rojo significa: \"No pasar\"" ) numero ... 1 SINO ... escribir( "ERROR: ", numero, " no est asociado a ningn color." ) 2 escribir( "Verde significa: \"Adelante\"" ) INICIO escribir( "Listado de colores de un semforo:" ) escribir( "1. Rojo" ) escribir( "2. Verde" ) escribir( "3. Amarillo" )
Captulo 12. Instrucciones de control alternativas 9
Carlos Javier Pes Rivas, 2006. Todos los derechos reservados. No est permitida la reproduccin total o parcial de ests pginas con fines comerciales, sin la previa autorizacin escrita del titular del copyright. Slo est permitida su impresin y utilizacin para uso personal. Una segunda solucin es:
inicio escribir( "Listado de colores de un semforo:" ) escribir( "1. Rojo" ) escribir( "2. Verde" ) escribir( "3. Amarillo" ) escribir( "Introduzca nmero de color: " )
leer( numero )
segun_sea ( numero ) 1 : color "Rojo" significado "No pasar" 2 : color "Verde" significado "Adelante" 3 : color "Amarillo" significado "Precaucin" fin_segun_sea
si ( numero >= 1 y numero <= 3 ) escribir( color, " significa: \"", significado, "\"" ) sino escribir( "ERROR: ", numero, " no est asociado a ningn color." ) fin_si fin
10 Empezar de cero a programar en lenguaje C
Carlos Javier Pes Rivas, 2006. Todos los derechos reservados. No est permitida la reproduccin total o parcial de ests pginas con fines comerciales, sin la previa autorizacin escrita del titular del copyright. Slo est permitida su impresin y utilizacin para uso personal. (Ordinograma)
escribir( "Introduzca nmero de color: " ) leer( numero ) numero ... 1 2 INICIO escribir( "Listado de colores de un semforo:" ) escribir( "1. Rojo" ) escribir( "2. Verde" ) escribir( "3. Amarillo" ) color "Rojo" escribir( color, " significa: \"", significado, "\"" ) significado "No pasar" color "Verde" significado "Adelante" color "Verde" escribir( "ERROR: ", numero, " no est asociado a ningn color." ) significado "Precaucin" FIN numero >= 1 y numero <= 3 SI NO 3
Captulo 12. Instrucciones de control alternativas 11
Carlos Javier Pes Rivas, 2006. Todos los derechos reservados. No est permitida la reproduccin total o parcial de ests pginas con fines comerciales, sin la previa autorizacin escrita del titular del copyright. Slo est permitida su impresin y utilizacin para uso personal. EJERCICIO PROPUESTO 12.6
inicio escribir( "Introduzca el primer nmero (entero): " ) leer( n1 ) escribir( "Introduzca el segundo nmero (entero): " ) leer( n2 )
si ( n1 > n2 ) escribir( "El ", n1, " es mayor." ) sino
si ( n1 < n2 ) escribir( "El ", n2, " es mayor." ) sino escribir( "SON IGUALES" ) fin_si
fin_si fin
(Ordinograma)
INICIO FIN escribir( "Introduzca el primer nmero (entero): " ) leer( n1 ) n1 > n2 escribir( "El ", n1, " es mayor." ) SI NO SI NO escribir( "El ", n2, " es mayor." ) escribir( "SON IGUALES" ) escribir( "Introduzca el segundo nmero (entero): " ) leer( n2 ) n1 < n2
12 Empezar de cero a programar en lenguaje C
Carlos Javier Pes Rivas, 2006. Todos los derechos reservados. No est permitida la reproduccin total o parcial de ests pginas con fines comerciales, sin la previa autorizacin escrita del titular del copyright. Slo est permitida su impresin y utilizacin para uso personal. EJERCICIO PROPUESTO 12.7
inicio escribir( "Introduzca el primer nmero (entero): " ) leer( n1 ) escribir( "Introduzca el segundo nmero (entero): " ) leer( n2 ) escribir( "Introduzca el tercer nmero (entero): " ) leer( n3 )
si ( n1 >= n2 y n1 >= n3 ) escribir( n1, " es el mayor." ) sino
si ( n2 > n3 ) escribir( n2, " es el mayor." ) sino escribir( n3, " es el mayor." ) fin_si
fin_si fin
Captulo 12. Instrucciones de control alternativas 13
Carlos Javier Pes Rivas, 2006. Todos los derechos reservados. No est permitida la reproduccin total o parcial de ests pginas con fines comerciales, sin la previa autorizacin escrita del titular del copyright. Slo est permitida su impresin y utilizacin para uso personal. (Ordinograma)
INICIO FIN escribir( "Introduzca el primer nmero (entero): " ) leer( n1 ) n1 >= n2 y n1 >= n3 escribir( n1, " es el mayor." ) SI NO SI NO escribir( n2, " es el mayor." ) escribir( "Introduzca el segundo nmero (entero): " ) leer( n2 ) n2 > n3 escribir( "Introduzca el tercer nmero (entero): " ) leer( n3 ) escribir( n3, " es el mayor." )
14 Empezar de cero a programar en lenguaje C
Carlos Javier Pes Rivas, 2006. Todos los derechos reservados. No est permitida la reproduccin total o parcial de ests pginas con fines comerciales, sin la previa autorizacin escrita del titular del copyright. Slo est permitida su impresin y utilizacin para uso personal. Una segunda solucin es:
variables entero numero, mayor inicio escribir( "Introduzca el primer nmero (entero): " ) leer( mayor ) escribir( "Introduzca el segundo nmero (entero): " ) leer( numero )
si ( numero > mayor ) mayor numero fin_si
escribir( "Introduzca el tercer nmero (entero): " ) leer( numero )
si ( numero > mayor ) mayor numero fin_si
escribir( mayor, " es el mayor." ) fin
Captulo 12. Instrucciones de control alternativas 15
Carlos Javier Pes Rivas, 2006. Todos los derechos reservados. No est permitida la reproduccin total o parcial de ests pginas con fines comerciales, sin la previa autorizacin escrita del titular del copyright. Slo est permitida su impresin y utilizacin para uso personal. (Ordinograma)
INICIO escribir( "Introduzca el primer nmero (entero): " ) leer( mayor ) escribir( "Introduzca el segundo nmero (entero): " ) leer( numero ) escribir( mayor, " es el mayor." ) SI NO numero > mayor mayor numero escribir( "Introduzca el tercer nmero (entero): " ) leer( numero ) SI NO numero > mayor mayor numero FIN
16 Empezar de cero a programar en lenguaje C
Carlos Javier Pes Rivas, 2006. Todos los derechos reservados. No est permitida la reproduccin total o parcial de ests pginas con fines comerciales, sin la previa autorizacin escrita del titular del copyright. Slo est permitida su impresin y utilizacin para uso personal. Una tercera solucin es:
inicio escribir( "Introduzca el primer nmero (entero): " ) leer( n1 ) escribir( "Introduzca el segundo nmero (entero): " ) leer( n2 ) escribir( "Introduzca el tercer nmero (entero): " ) leer( n3 )
si ( n1 > n2 )
si ( n1 > n3 ) mayor n1 sino mayor n3 fin_si
sino
si ( n2 > n3 ) mayor n2 sino mayor n3 fin_si
fin_si
escribir( mayor, " es el mayor." ) fin
Captulo 12. Instrucciones de control alternativas 17
Carlos Javier Pes Rivas, 2006. Todos los derechos reservados. No est permitida la reproduccin total o parcial de ests pginas con fines comerciales, sin la previa autorizacin escrita del titular del copyright. Slo est permitida su impresin y utilizacin para uso personal. (Ordinograma)
INICIO escribir( "Introduzca el primer nmero (entero): " ) leer( n1 ) SI NO SI NO escribir( "Introduzca el segundo nmero (entero): " ) leer( n2 ) n2 > n3 escribir( "Introduzca el tercer nmero (entero): " ) leer( n3 ) n1 > n2 mayor n2 mayor n3 SI NO n1 > n3 mayor n1 mayor n3 escribir( mayor, " es el mayor." ) FIN
18 Empezar de cero a programar en lenguaje C
Carlos Javier Pes Rivas, 2006. Todos los derechos reservados. No est permitida la reproduccin total o parcial de ests pginas con fines comerciales, sin la previa autorizacin escrita del titular del copyright. Slo est permitida su impresin y utilizacin para uso personal. EJERCICIO PROPUESTO 12.8
inicio escribir( "Introduzca un nmero entero: " ) leer( n )
si ( n >= -9 y n <= 9 ) escribir( "Tiene 1 dgito." ) sino si ( n >= -99 y n <= 99 ) escribir( "Tiene 2 dgitos." ) sino si ( n >= -999 y n <= 999 ) escribir( "Tiene 3 dgitos." ) sino escribir( "Tiene ms de 3 dgitos." ) fin_si fin_si fin_si fin
(Ordinograma)
INICIO escribir( "Introduzca un nmero entero: " ) leer( n ) n >= -9 y n <= 9 SI NO n >= -99 y n <= 99 escribir( "Tiene 2 dgitos." ) n >= -999 y n <= 999 SI NO SI NO escribir( "Tiene 3 dgitos." ) escribir( "Tiene 1 dgito." ) escribir( "Tiene ms de 3 dgitos." ) FIN
Captulo 12. Instrucciones de control alternativas 19
Carlos Javier Pes Rivas, 2006. Todos los derechos reservados. No est permitida la reproduccin total o parcial de ests pginas con fines comerciales, sin la previa autorizacin escrita del titular del copyright. Slo est permitida su impresin y utilizacin para uso personal. EJERCICIO PROPUESTO 12.9
sino escribir( "ERROR: El nmero debe ser >= 1 y <= 10." ) fin_si fin
(Ordinograma)
INICIO escribir( "Introduzca un nmero entero (1-10): " ) leer( numero ) numero >= 1 y numero <= 10 SI NO FIN escribir( "ERROR: El nmero debe ser >= 1 y <= 10." ) numero 1 2 10 escribir( "uno" ) escribir( "dos" ) escribir( "diez" ) ... ...
20 Empezar de cero a programar en lenguaje C
Carlos Javier Pes Rivas, 2006. Todos los derechos reservados. No est permitida la reproduccin total o parcial de ests pginas con fines comerciales, sin la previa autorizacin escrita del titular del copyright. Slo est permitida su impresin y utilizacin para uso personal. Una segunda solucin sin anidamiento, es:
INICIO escribir( "Introduzca un nmero entero (1-10): " ) leer( numero ) FIN escribir( "ERROR: El nmero debe ser >= 1 y <= 10." ) numero 1 2 SINO escribir( "uno" ) escribir( "dos" ) ... ...
Captulo 12. Instrucciones de control alternativas 21
Carlos Javier Pes Rivas, 2006. Todos los derechos reservados. No est permitida la reproduccin total o parcial de ests pginas con fines comerciales, sin la previa autorizacin escrita del titular del copyright. Slo est permitida su impresin y utilizacin para uso personal. Una tercera solucin es:
si ( numero >= 1 y numero <= 10 ) escribir( letras ) sino escribir( "ERROR: El nmero debe ser >= 1 y <= 10." ) fin_si fin
(Ordinograma)
INICIO escribir( "Introduzca un nmero entero (1-10): " ) leer( numero ) FIN numero 1 2 10 ... ... letras "uno" letras "dos" escribir( "ERROR: El nmero debe ser >= 1 y <= 10." ) letras "diez" escribir( letras ) SI NO numero >= 1 y numero <= 10
22 Empezar de cero a programar en lenguaje C
Carlos Javier Pes Rivas, 2006. Todos los derechos reservados. No est permitida la reproduccin total o parcial de ests pginas con fines comerciales, sin la previa autorizacin escrita del titular del copyright. Slo est permitida su impresin y utilizacin para uso personal. EJERCICIO PROPUESTO 12.10
inicio escribir( "Introduzca horas: " ) leer( h ) escribir( "Introduzca minutos: " ) leer( m ) escribir( "Introduzca segundos: " ) leer( s )
si ( h >= 0 y h <= 23 y m >= 0 y m <= 59 y s >= 0 y s <= 59 ) s s - 1 si ( s = -1 ) s 59 m m - 1 si ( m = -1 ) m 59 h h - 1 si ( h = -1 ) h 23 fin_si fin_si fin_si escribir( "Un segundo antes la hora era: ", h, ":", m, ":", s ) sino escribir( "ERROR: Hora incorrecta." ) fin_si fin
Captulo 12. Instrucciones de control alternativas 23
Carlos Javier Pes Rivas, 2006. Todos los derechos reservados. No est permitida la reproduccin total o parcial de ests pginas con fines comerciales, sin la previa autorizacin escrita del titular del copyright. Slo est permitida su impresin y utilizacin para uso personal. (Ordinograma)
INICIO FIN escribir( "Introduzca horas: " ) leer( h ) h >= 0 y h <= 23 y m >= 0 y m <= 59 y s >= 0 y s <= 59 escribir( "ERROR: Hora incorrecta." ) SI NO escribir( "Introduzca minutos: " ) leer( m ) escribir( "Introduzca segundos: " ) leer( s ) s s - 1 SI NO s = -1 s 59 m m - 1 SI NO m = -1 m 59 h h - 1 SI NO s = -1 h 23 escribir( "Un segundo antes la hora era: ", h, ":", m, ":", s )
24 Empezar de cero a programar en lenguaje C
Carlos Javier Pes Rivas, 2006. Todos los derechos reservados. No est permitida la reproduccin total o parcial de ests pginas con fines comerciales, sin la previa autorizacin escrita del titular del copyright. Slo est permitida su impresin y utilizacin para uso personal. EJERCICIO PROPUESTO 12.11
De vocal minscula a mayscula
Solucin:
(Pseudocdigo)
Algoritmo De_vocal_minuscula_a_mayuscula (mltiple en doble) (ejer_pro_12_11.c)
sino escribir( "ERROR: '", vocal, "' no es una vocal minscula." ) fin_si fin
(Ordinograma) INICIO escribir( "Introduzca una vocal minscula: " ) leer( vocal ) FIN vocal = 'a' o vocal = 'e' o vocal = 'i' o vocal = 'o' o vocal = 'u' SI NO escribir( "ERROR: '", vocal, "' no es una vocal minscula." ) vocal ... 'a' ... 'e' mayuscula 'A' mayuscula 'E' mayuscula 'U' 'u' escribir( mayuscula )
Captulo 12. Instrucciones de control alternativas 25
Carlos Javier Pes Rivas, 2006. Todos los derechos reservados. No est permitida la reproduccin total o parcial de ests pginas con fines comerciales, sin la previa autorizacin escrita del titular del copyright. Slo est permitida su impresin y utilizacin para uso personal. EJERCICIO PROPUESTO 12.12
Color de un semforo
Solucin:
(Pseudocdigo)
Algoritmo Color_de_un_semaforo (mltiple en doble) (ejer_pro_12_12.c)
inicio escribir( "Listado de colores de un semforo: " ) escribir( "1. Rojo" ) escribir( "2. Verde" ) escribir( "3. Amarillo" ) escribir( "Introduzca nmero de color: " )
leer( numero )
si ( numero >= 1 y numero <= 3 )
segun_sea ( numero ) 1 : color "Rojo" significado "No pasar" 2 : color "Verde" significado "Adelante" 3 : color "Amarillo" significado "Precaucin" fin_segun_sea escribir( color, " significa: \"", significado, "\"" )
sino escribir( "ERROR: ", numero, " no est asociado a ningn color." ) fin_si fin
26 Empezar de cero a programar en lenguaje C
Carlos Javier Pes Rivas, 2006. Todos los derechos reservados. No est permitida la reproduccin total o parcial de ests pginas con fines comerciales, sin la previa autorizacin escrita del titular del copyright. Slo est permitida su impresin y utilizacin para uso personal. (Ordinograma)
FIN SI NO escribir( "Introduzca nmero de color: " ) leer( numero ) INICIO escribir( "Listado de colores de un semforo:" ) escribir( "1. Rojo" ) escribir( "2. Verde" ) escribir( "3. Amarillo" ) numero >= 1 y numero <= 3 escribir( "ERROR: ", numero, " no est asociado a ningn color." ) escribir( color, " significa: \"", significado, "\"" ) numero ... 1 2 color "Rojo" significado "No pasar" color "Verde" significado "Adelante" color "Verde" significado "Precaucin" 3