Академический Документы
Профессиональный Документы
Культура Документы
13 de mayo de 2021
3 Angel Vázquez-Patiño
Facultad de Ingeniería
Universidad de Cuenca
6 Cuenca, Ecuador
angel.vazquezp arroba ucuenca.edu.ec
Contenido
1. Introducción..............................................................................................................6
2. Fundamentos.............................................................................................................7
Qué es programar......................................................................................................7
Qué es un lenguaje de programación........................................................................7
Modelización de problemas del mundo real..............................................................9
Del problema real a su solución por computadora...................................................9
Conceptos acerca de software....................................................................................9
Variables y tipos de datos.........................................................................................9
Algoritmos.................................................................................................................9
Diagramas de flujo..................................................................................................12
Pseudocódigo...........................................................................................................12
Prueba de escritorio................................................................................................13
Codificación.............................................................................................................13
Documentación y su importancia............................................................................13
3. Programación Secuencial.........................................................................................14
Miscelánea...............................................................................................................14
Respaldo de información.........................................................................................15
Cálculos espaciales básicos......................................................................................16
Cálculo de interés....................................................................................................18
Costo de llamada.....................................................................................................18
Cálculo de potencia.................................................................................................18
Área de un triángulo dadas las longitudes de los lados..........................................19
Hexágono regular....................................................................................................19
Área de un triángulo dadas las coordenadas de sus vértices..................................19
Puntos colineales.....................................................................................................20
Movimiento rectilíneo uniforme...............................................................................20
Angel Vázquez-Patiño Universidad de Cuenca
Ponderación de calificaciones..................................................................................20
Sistema de ecuaciones lineales.................................................................................20
* E2 Vuelto o cambio de una compra.....................................................................21
* E3 Transformación entre unidades de tiempo......................................................21
Cálculo de tiempo en horas, minutos y segundos...................................................21
Transformación de pies a metros.............................................................................21
Unidades de capacidad............................................................................................21
Cálculo de comisión.................................................................................................22
Cálculo de descuento...............................................................................................22
Calificación de programación..................................................................................22
Porcentaje de mujeres y hombres............................................................................23
* E4 Cálculo de la edad de una persona.................................................................23
Conversión de radianes a grados centesimales y viceversa......................................23
* E5 Conversión de temperaturas de Grados Celsius a Fahrenheit y viceversa.....23
Área y volumen de una esfera.................................................................................23
Longitud y área de un círculo.................................................................................24
Solución de ecuaciones de segundo grado...............................................................24
Intercambio de valores de variables.........................................................................24
Multiplicación de polinomios..................................................................................25
Caída de cuerpos en el vacío...................................................................................25
Ley de gravitación universal....................................................................................25
Logaritmo de un número en cualquier base............................................................25
Trabajo conjunto.....................................................................................................25
4. Estructuras de control.............................................................................................27
Miscelánea...............................................................................................................27
Estructura de decisión IF........................................................................................41
Estructura de selección...........................................................................................50
Estructura de repetición WHILE............................................................................52
Estructura de repetición DO-WHILE.....................................................................71
Estructura de repetición FOR.................................................................................88
5. Estructuras Básicas de Datos................................................................................108
Arreglos unidimensionales.....................................................................................108
Arreglos bidimensionales.......................................................................................116
6. Funciones...............................................................................................................150
Ámbito de las variables.........................................................................................150
Miscelánea.............................................................................................................150
* E24 Histograma..................................................................................................154
2
Angel Vázquez-Patiño Universidad de Cuenca
Aritmética básica...................................................................................................154
Potenciación..........................................................................................................155
* E25 Dado sesgado...............................................................................................155
Aproximación de sinh-1..........................................................................................156
Función W de Lambert.........................................................................................157
Factorial de un número con función recursiva.......................................................157
Máximo común divisor y mínimo común múltiplo................................................158
* E26 Peso adecuado.............................................................................................158
* E27 Raíces de una función.................................................................................160
E28 El método de la bisección..............................................................................160
* E29 El método de Newton.................................................................................160
Ordenamiento de n números.................................................................................162
Búsqueda lineal.....................................................................................................162
E30 Búsqueda binaria o dicotómica......................................................................163
Juego de dados entre dos.......................................................................................163
* E31 Método de la potencia.................................................................................164
7. Manejo de Caracteres y Cadenas..........................................................................168
Miscelánea.............................................................................................................168
* E33 Datos personales.........................................................................................176
Estadísticas de texto.............................................................................................176
* E34 Analizador de tweets...................................................................................177
Eliminación de n-ésima palabra............................................................................178
Cifrado por sustitución..........................................................................................179
Cifrado por transposición......................................................................................180
* E35 Manejo de una cadena con información personal.......................................181
* E36 Línea de comandos......................................................................................182
* E37 Mantenimiento de datos de personas..........................................................184
8. Búsquedas..............................................................................................................187
9. Ordenamiento........................................................................................................190
Miscelánea.............................................................................................................190
* E39 Menú, ordenamiento y búsqueda de registros.............................................195
* E40 Calificaciones de estudiantes.......................................................................196
Ordenamientos en matriz......................................................................................198
* E41 Manejo de datos de personas......................................................................199
10. Archivos...............................................................................................................201
Miscelánea.............................................................................................................201
* E43 Metro Interstate Traffic Volume Data Set..................................................201
3
Angel Vázquez-Patiño Universidad de Cuenca
4
Angel Vázquez-Patiño Universidad de Cuenca
Unidades de temperatura......................................................................................237
Círculo...................................................................................................................237
Esfera.....................................................................................................................237
Cuadrado...............................................................................................................237
Ángulos..................................................................................................................237
Ecuación de segundo grado...................................................................................237
Logaritmos.............................................................................................................238
14. Referencias...........................................................................................................239
5
Angel Vázquez-Patiño Universidad de Cuenca
1. Introducción
15 1. https://www.slideshare.net/angenio2/programacin-presentacin-del-curso
2. https://www.slideshare.net/angenio2/programacin-fundamentos-64227508
3. https://www.slideshare.net/angenio2/programacin-algoritmos
18 4. https://www.slideshare.net/secret/iu1SvB2vTa4jND
5. https://www.slideshare.net/angenio2/programacin-estructuras-de-control
6. https://www.slideshare.net/angenio2/programacin-introduccin-a-java
21 7. https://www.slideshare.net/angenio2/programacin-1-introduccin-a-c
8. https://www.slideshare.net/angenio2/programacin-tipos-de-datos-java
9. https://www.slideshare.net/angenio2/programacin-1-tipos-bsicos-de-datos-en-c
24 10. https://www.slideshare.net/angenio2/programacin-estructuras-de-datos
11. https://www.slideshare.net/angenio2/programacin-1-estructuras-de-datos-en-c
12. https://www.slideshare.net/angenio2/programacin-funciones
27 13. https://www.slideshare.net/angenio2/programacin-1-funciones-en-c
14. https://www.slideshare.net/angenio2/programacin-1-cadenas-en-c
15. https://www.slideshare.net/angenio2/programacin-bsquedas-y-ordenamientos
30 Mucha de la teoría básica necesaria para resolver los ejercicios de este documento se
la puede encontrar en la Guía de aprendizaje del MOOC de Fundamentos de Progra-
mación que fue desarrollada por el Departamento de Ciencias de la Computación de
33 la Universidad de Cuenca, parte 1 y parte 2.
Cualquier comentario, duda o sugerencia con respecto a los ejercicios o las presenta-
ciones siempre es bienvenida.
6
Angel Vázquez-Patiño Universidad de Cuenca
36 2. Fundamentos
Qué es programar
3. Pregunta
a) Eiffel
b) C#
51 c) Fortran
d) DOS
54 a) 10
b) 13
c) 32
a) 32
7
Angel Vázquez-Patiño Universidad de Cuenca
60 b) 65
c) 97
d) 126
66 c) Un valor de un tipo puede ser tratado como de otro tipo siempre que se
realice una conversión de forma explícita
a) Más cerca del lenguaje máquina que de los lenguajes de alto nivel
b) Más cerca de los lenguajes de alto nivel que del lenguaje máquina
75 a) Ada
b) C
c) Fortran
78 d) Java
c) Paradigmas de programación
84 8. Pregunta
8
Angel Vázquez-Patiño Universidad de Cuenca
c) Sentencias de control
d) Tipos de datos
102 Algoritmos
9
Angel Vázquez-Patiño Universidad de Cuenca
b) Secuencia de instrucciones
126 d) Es finito
10
Angel Vázquez-Patiño Universidad de Cuenca
8. Algoritmo para calcular la edad de una persona (tomar en cuenta sólo el año
de nacimiento y el año actual)
11. Algoritmo para calcular el valor total a pagar por dos productos incluyendo el
141 IVA y un impuesto más del 1% (se impone al valor de los productos, antes de
calcular el IVA)
12. Algoritmo para calcular la distancia entre dos puntos dadas sus coordenadas
144 cartesianas
13. Algoritmo para convertir un número de bits a bytes, KB, MB y GB. Vea la
sección Unidades de capacidad de información de este documento.
16. Algoritmo que calcule el área de un triángulo dadas las coordenadas cartesia-
150 nas de sus vértices
17. Algoritmo que calcule el valor de un cateto dados los valores de la hipotenusa
y del otro cateto de un triángulo rectángulo
153 18. Algoritmo que calcule el valor de la tangente de los lados opuestos a los cate-
tos de un triángulo rectángulo dados los valores de la hipotenusa y uno de los
catetos
156 19. Algoritmo que calcule el área de un triángulo dados los valores de los lados
(revise el concepto de semiperímetro, ecuación 3.7).
20. Algoritmo que calcule las raíces de una ecuación cuadrática cuya forma canó-
159 nica es ax2+bx+c=0
11
Angel Vázquez-Patiño Universidad de Cuenca
26. Algoritmo para calcular el total a pagar por una compra. Si la compra es de
más de $100, el descuento es de 10%, caso contrario no hay descuento.
168 27. * Algoritmo para saber cuántos dígitos tiene un número entero positivo.
29. Algoritmo para encontrar la ecuación de una recta dados dos puntos de la
171 misma.
174 32. Algoritmo que calcule la suma de los números del 1 al 10.
Diagramas de flujo
180 a) Verdadero
b) Falso
3.
Pseudocódigo
186 a) Verdadero
b) Falso
12
Angel Vázquez-Patiño Universidad de Cuenca
Prueba de escritorio
189 1. Con respecto a la prueba de escritorio se puede afirmar que (seleccione una o
más opciones según corresponda):
192 b) Es una herramienta útil que permite entender qué hace un flujograma
195 2. Pregunta
Codificación
201 2. Pregunta
Documentación y su importancia
207 2. Pregunta
13
Angel Vázquez-Patiño Universidad de Cuenca
3. Programación Secuencial
Miscelánea
14
Angel Vázquez-Patiño Universidad de Cuenca
Una vez que haya elaborado su primer algoritmo para solucionar el problema,
249 pregúntese lo siguiente: ¿cuál es el número mínimo de variables que puede uti-
lizar para resolver el problema?
Una vez que resuelva el problema con el mínimo número de variables posible,
252 conteste si el orden de las instrucciones cambiaría el resultado (i.e., ya no re-
solviera el problema).
Respaldo de información
Elaborar un algoritmo que permita calcular el número de CDs necesarios para hacer
270 una copia de seguridad de la información almacenada en un disco duro cuya capaci-
dad se conoce (es dada por el usuario). Considerar que el disco duro está lleno de in-
formación y su capacidad está expresada en GB. Cada CD que se utilizará para el
273 respaldo tiene una capacidad de 700 MB; un GB tiene 1024 MB. Represente el algo-
15
Angel Vázquez-Patiño Universidad de Cuenca
ritmo con un diagrama de flujo y pseudocódigo; además, realice las pruebas de escri-
torio necesarias para verificar el correcto funcionamiento del algoritmo.
La mayor parte de los análisis espaciales hacen uso de cálculos geométricos sencillos,
a partir de los cuales se construyen algoritmos más complejos. A continuación se
279 plantean ejercicios relacionados con cálculos básicos que constituyen los fundamentos
del análisis geométrico tanto en el plano como en el espacio. Para más detalles lea la
sección 10.3 Algunos cálculos espaciales básicos del libro de Olaya (2011).
Se tienen los puntos A(x1, y1) y B(x2, y2) en el plano cartesiano, elabore el algoritmo
que permite obtener la distancia euclidiana entre A y B. La distancia euclidiana en-
285 tre dos puntos (x1, y1) y (x2, y2) es
(3.1)
Distancia de Manhattan
(3.2)
291 Desarrolle un algoritmo que calcule la distancia de Manhattan de dos puntos A(x 1,
y1) y B(x2, y2) dados.
* Métricas Lp
294 Tanto la distancia euclidiana como la de Manhattan son casos particulares de las de-
nominadas métricas Lp que corresponden a una expresión de la forma
(3.3)
297 Con p=1 y β=1, se tiene la distancia de Manhattan y con p=2 y β=1, se tiene la dis-
tancia euclidiana. Desarrolle un algoritmo que calcule la distancia basada en métricas
Lp dadas las coordenadas de dos puntos A(x1, y1) y B(x2, y2) y los valores de las varia-
300 bles β y p.
16
Angel Vázquez-Patiño Universidad de Cuenca
Distancia ortogonal
309 (3.4)
312 (3.5)
Dado un segmento de recta definido por los extremos A(x1, y1) y B(x2, y2), y un punto
C(x3, y3), la distancia del punto C al segmento AB se calcula como la distancia del
318 punto C hasta la intersección (D) de una recta que pasa por el punto C y es perpen-
dicular al segmento AB (vea la figura 2). El punto de intersección D tiene las coorde-
nadas
17
Angel Vázquez-Patiño Universidad de Cuenca
y = y1 + u(y2 – y1)
donde u se obtiene de
324 (3.6)
Suponga que un individuo desea invertir su capital en un banco y desea saber cuánto
dinero ganará después de un mes si el banco paga a razón de 2% mensual. Realice el
330 algoritmo que permita hacer el cálculo.
Costo de llamada
Se requiere un programa para determinar el costo que tendrá realizar una llamada te-
333 lefónica con base en el tiempo que dura la llamada y en el costo por minuto. Repre-
sente la solución mediante un diagrama de flujo y pseudocódigo; además, verifique la
validez del algoritmo mediante una prueba de escritorio.
Se desea calcular la potencia eléctrica (P) del circuito de la figura 3. Realice un dia-
grama de flujo y el pseudocódigo que representen el algoritmo para resolver el proble-
339 ma. Considere que y . V, voltaje. I, corriente. R, resistencia.
18
Angel Vázquez-Patiño Universidad de Cuenca
(3.7)
345 Desarrolle un algoritmo que permita calcular el área, en cm², de un triángulo, dadas
las longitudes, en metros, de sus lados. Represente el algoritmo con un diagrama de
flujo y pseudocódigo; además, realice las pruebas de escritorio necesarias para verifi-
348 car el correcto funcionamiento del algoritmo.
Hexágono regular
x y1 1
| |
1 1
x
2 2
x3
y2 1 ,
y3 1
19
Angel Vázquez-Patiño Universidad de Cuenca
Un corolario del teorema 12 de la línea recta (Charles Lehmann, 1994, chap. 3) men-
ciona: una condición necesaria y suficiente para que tres puntos diferentes de coorde-
363 nadas (x1, y1), (x2, y2) y (x3, y3) sean colineales es que
x1 y1 1
| |
x2
x3
y 2 1 =0
y3 1
366 Proponga un algoritmo para calcular la distancia recorrida (m) por un móvil que tie-
ne velocidad constante (km/h) durante un tiempo t (s).
Ponderación de calificaciones
20
Angel Vázquez-Patiño Universidad de Cuenca
381 2. Elaborar un algoritmo que resuelva un sistema de ecuaciones lineales con tres
incógnitas.
384 Partiendo de una cantidad de dinero menor a un dólar (y mayor a cero) que se tiene
que dar de cambio (vuelto), calcular el número de monedas que hay que dar (supo-
niendo que se cuenta con todas las monedas necesarias) de 1, 5, 10, 25 y 50 centavos.
387 Debe dar la menor cantidad de monedas posible. Realice el diagrama de flujo y pseu-
docódigo del programa; además, verifique la validez del mismo realizando la prueba
de escritorio.
Dos Atletas recorren la misma distancia y se registran sus tiempos en segundos (at1-
seg) y minutos (at2min) respectivamente.
396 1. Se desea saber el tiempo total utilizado por el primer atleta en horas (at1ho-
ras), minutos (at1min) y segundos.
2. Se desea saber el tiempo total utilizado por el segundo atleta en horas (at2ho-
399 ras), minutos y segundos (at2seg).
Dada una cantidad expresada en pies y otra en metros, determinar la suma pero con-
402 vertida a pulgadas, a yardas, a metros y a millas por separado.
Unidades de capacidad
Dos tanques llenos de agua tienen expresadas sus capacidades en litros y en yardas
405 cúbicas respectivamente. De la cantidad total de agua, el 75% se dedica al consumo
doméstico y el 25% se dedica al riego. Diseñe un programa que haga lo siguiente:
21
Angel Vázquez-Patiño Universidad de Cuenca
Un vendedor recibe un sueldo base más un 10% extra por comisión de sus ventas, el
vendedor desea saber cuánto dinero obtendrá por concepto de comisiones por las tres
414 ventas que realiza en el mes y el total que recibirá en el mes tomando en cuenta su
sueldo base y comisiones.
Cálculo de descuento
417 Una tienda ofrece un descuento sobre el total de la compra y un cliente desea saber
cuánto deberá pagar finalmente por su compra.
420 2. Realice un algoritmo que calcule un descuento d (%) ingresado por el usuario.
426 • 55% del promedio de sus tres calificaciones parciales (cada una de las tres cali-
ficaciones fueron dadas sobre 20 y las tres tienen la misma ponderación)
22
Angel Vázquez-Patiño Universidad de Cuenca
441 Un maestro desea saber qué porcentaje de hombres y qué porcentaje de mujeres hay
en un grupo de estudiantes. Realice un programa que pida el número de estudiantes
mujeres, el número de estudiantes hombres y muestre el porcentaje de mujeres y el
444 porcentaje de hombres.
Realice un algoritmo que determine aproximadamente (i.e., asuma que todos los años
447 tienen 360 días y que todos los meses tienen 30 días) cuántos meses, semanas, días y
horas ha vivido una persona dada la fecha y hora (no minutos) de nacimiento. Reali-
ce el diagrama de flujo y pseudocódigo del programa; además, verifique la validez del
450 mismo realizando la prueba de escritorio.
• Realice un programa que reciba una temperatura en grados celsius y los con-
vierta a grados fahrenheit.
456 • Realice un programa que reciba una temperatura en grados fahrenheit y los
convierta a grados celsius.
Dado el radio (r) de una esfera, realizar un programa que calcule la superficie (s) y el
volumen (v) de la misma.
23
Angel Vázquez-Patiño Universidad de Cuenca
468 1. Pida al usuario ingresar dos números. El primer número se ingresará en la va-
riable var1 y el segundo número se ingresará en la variable var2. Diseñe un al-
goritmo que, al finalizar el proceso, haga que el valor de la variable var1 tenga
471 el valor de la variable var2 y viceversa. Por ejemplo, si se ingresa primero el
valor 4 y luego el valor 7, la asignación de las variables sería y
; al finalizar el algoritmo, la asignación de las variables sería
474 y .
◦ en a queda el valor de b
◦ en b queda el valor de c
◦ en d queda el valor de a
◦ en b queda el valor de c
◦ en c queda el valor de b
24
Angel Vázquez-Patiño Universidad de Cuenca
489 3. Dados cinco valores en cinco variables (var1, var2, var3, var4 y var5), realice
un algoritmo para que, luego de terminar su ejecución, los valores de las varia-
bles queden de la siguiente manera:
Multiplicación de polinomios
Dados dos polinomios de segundo grado de parte del usuario, calcular la multiplica-
501 ción de dichos polinomios.
504 (3.8)
Trabajo conjunto
510 1. Si una persona termina una obra en 3 horas y una segunda persona termina la
obra en 6 horas ¿cuánto se demoran en terminar la misma obra si trabajan
juntas?
25
Angel Vázquez-Patiño Universidad de Cuenca
513 2. Si una persona termina una obra en 3 horas, una segunda persona termina la
obra en 6 horas y una tercera persona termina la obra en 12 horas ¿cuánto se
demoran en terminar la misma obra si trabajan juntas?
516 Luego de resolver los ejercicios anteriores, realice un algoritmo que pida el tiempo
(individual) que se demoran en concluir una misma obra 4 personas diferentes y cal-
cule el tiempo que se demoran en terminar la misma obra si trabajan juntas.
26
Angel Vázquez-Patiño Universidad de Cuenca
La teoría para poder resolver los ejercicios de estructuras de control la puede encon-
trar en https://goo.gl/OMZYqA.
522 Miscelánea
a) if
b) while
537 c) for
27
Angel Vázquez-Patiño Universidad de Cuenca
540 a) if
b) for
c) while
543 5. * ¿Cuál de las siguientes estructuras utilizaría, si deseo repetir “n” veces un
bloque de acciones?
a) if
546 b) for
c) while
564 11. * Suponga que usted elabora un algoritmo donde se pide ingresar 100 números
para luego realizar alguna operación con cada uno de ellos. Para el proceso de
ingreso de esos 100 números (tenga en cuenta que podrían ser n números) us-
567 ted podría utilizar (escoja 1 opción):
28
Angel Vázquez-Patiño Universidad de Cuenca
b) un bucle (lazo) if
b) Sentencias de control
579 a) Una sentencia que permite decidir si se ejecuta o no se ejecuta una sola vez
un bloque aislado de código
b) Una sentencia que ejecuta otra sentencia que a su vez ejecuta la primera
582 sentencia
c) Una sentencia que permite ejecutar un bloque aislado de código varias ve-
ces hasta que se cumpla (o deje de cumplirse) una condición
29
Angel Vázquez-Patiño Universidad de Cuenca
15. * ¿Cuál de los siguientes algoritmos imprime en pantalla lo que está a conti-
nuación?
600 *
*****
**
603 *****
*
*****
606 **
*****
*
609 *****
a)
Proceso estrellas2
612 b1 <- 1;
b2 <- 0;
c1 <- 20;
615 Repetir
Si b1 = 1 Entonces
Si b2 = 1 Entonces
618 Escribir "**";
b2 <- 0;
Sino
621 Escribir "*";
b2 <- 1;
FinSi
624 b1 <- 3;
Sino
Escribir "*****";
627 b1 <- 1;
FinSi
c1 <- c1 + 2;
630 Hasta Que c1 < 1
FinProceso
b)
633 Proceso estrellas1
b1 <- 1;
b2 <- 0;
30
Angel Vázquez-Patiño Universidad de Cuenca
31
Angel Vázquez-Patiño Universidad de Cuenca
32
Angel Vázquez-Patiño Universidad de Cuenca
suma = suma + 1
729 n = n - 1
mostrar suma
FinMientras
33
Angel Vázquez-Patiño Universidad de Cuenca
732 FinAlgoritmo
a) 1 2 3 4 5
b) 1 1 2 3 4
735 c) 1 1 2 2 3
d) 1 2 2 4 5
c1 <- 8 - i;
762 c2 <- 0;
Mientras c2 < c1 Hacer
Escribir Sin Saltar "O";
765 c2 <- c2 + 1;
Fin Mientras
34
Angel Vázquez-Patiño Universidad de Cuenca
a) Estructuras selectivas
b) Estructuras simples
774 c) Estructura secuencial
d) Estructuras complejas
25. Ejecuta una determinada acción cuando se cumple una determinada condi-
777 ción.
a) For
b) Do-while
780 c) Repeat-until
d) If-then
26. Es aquella variable que es utilizada en un ciclo repetitivo y tiene por objetivo
783 almacenar valores cuyos incrementos o decrementos son en forma constante
por cada iteración de ciclo o bucle en cuestión.
a) Arreglo
786 b) Contador
c) Ciclo
d) Acumulador
789 e) Bucle
27. Por lo general, se emplean en los ciclos para controlar el número de iteraciones
en los mismos, o para almacenar totales de elementos.
792 a) Arreglo
b) Array
c) Ciclo
795 d) Bandera
35
Angel Vázquez-Patiño Universidad de Cuenca
e) Contador
798 a) Array
b) Contador
c) Iteración
801 d) Bucle
807 30. Puede estar compuesto de todos sus elementos de tipo cadena, otro puede te-
ner todos sus elementos de tipo entero, etc.
a) Arreglo
810 b) Contador
c) Ciclo
d) Array
813 31. Dado el siguiente pseudocódigo, ¿cuál será el valor final de la variable i?
Algoritmo valorDeI
i <- 1;
816 Leer n;
Mientras i < n Hacer
i <- i + 1;
819 Fin Mientras
FinAlgoritmo
a) 1 si el valor introducido es igual o menor que 0; el valor introducido menos
822 uno en cualquier otro caso
36
Angel Vázquez-Patiño Universidad de Cuenca
37
Angel Vázquez-Patiño Universidad de Cuenca
38
Angel Vázquez-Patiño Universidad de Cuenca
b) El algoritmo opcion_B
c) El algoritmo opcion_C
912 37. * Seleccione la(s) respuesta(s) correcta(s) respecto a las instrucciones de repe-
tición. La instrucción do-while es similar a la instrucción while, la diferencia es
que:
38. * ¿Cuál de los siguientes algoritmos NO presenta los mismos resultados que
los otros dos? a, b ∈ [0, ∞) y a > b.
39
Angel Vázquez-Patiño Universidad de Cuenca
b) El algoritmo opcion_2
c) El algoritmo opcion_3
40
Angel Vázquez-Patiño Universidad de Cuenca
40. Pregunta
Estructura de decisión IF
930 Miscelánea
3. Dados tres números indicar si cada uno es par o impar. Además, indicar si to-
936 dos los números son pares, si son impares o si están “mezclados” (no todos son
pares ni todos son impares).
41
Angel Vázquez-Patiño Universidad de Cuenca
951 6. Escriba un algoritmo para verificar si los valores de tres lados dados corres-
ponden a un triángulo.
9. El usuario ingresa tres números que representan las longitudes de los lados de
un triángulo. Indicar si se trata de un triángulo rectángulo.
960 10. Escriba un algoritmo que dado un mes del año (en letras), indique el número
de días de ese mes.
969 13. El IESS necesita clasificar a las personas que se jubilarán este año. Existen
tres tipos de jubilaciones: por edad, por antigüedad joven y por antigüedad
adulta. Las personas adscritas a la jubilación por edad deben tener 60 años o
972 más y una antigüedad en su empleo de menos de 25 años. Las personas adscri-
tas a la jubilación por antigüedad joven deben tener menos de 60 años y una
antigüedad en su empleo de 25 años o más. Las personas adscritas a la jubila-
975 ción por antigüedad adulta deben tener 60 años o más y una antigüedad en su
42
Angel Vázquez-Patiño Universidad de Cuenca
978 14. Exprese las siguientes dos líneas de código mediante estructuras condicionales
anidada usando solamente expresiones simples (i.e., sin usar operadores lógi-
cos).
981 if ( a < b && c != d ) && ( b > d || b == d ) b1 ;
if ( a < b && c != d ) && ( b > d || b == e ) b2 ;
Si usted está aprendiendo Python, le será más fácil entender lo siguiente:
984 if (a < b and c != d) and ( b > d or b == d ):
b1
if (a < b and c != d) and ( b > d or b == e ):
987 b2
15.
Aprobación de curso
Dadas las notas de dos pruebas y dos exámenes (/20), calcular el promedio de las
990 cuatro notas y si la persona tiene 12 o más, aprueba el curso, caso contrario, pierde
el año.
993 Es recomendable estar a menudo pendiente del índice de masa corporal para saber si
se mantiene un peso saludable. El índice de masa corporal (IMC) se calcula con el
peso (en kilogramos) y la talla (en metros) de una persona mediante la fórmula
996 (4.1)
• Obesidad: IMC ≥ 30
1002 Programe una calculadora de IMC que pida el peso y talla de una persona e indique
la categoría de IMC.
43
Angel Vázquez-Patiño Universidad de Cuenca
Nota alfabética
1005 El programa solicita una calificación al usuario que está en el rango [0, 20] y la trans-
forma en nota alfabética según la siguiente tabla:
Día de la semana
1011 Se pide un número de mes entre 1 y 12 al usuario y se presenta a qué estación del
año pertenece.
• Realizar un programa que verifique que el número n1 sea mayor o igual al nú-
1017 mero n2, si es así el programa debe indicar si el número n2 es divisor del nú-
mero n1, caso contrario el programa debe decir “¡ERROR! El primer número
ingresado debe ser mayor o igual al segundo.”
44
Angel Vázquez-Patiño Universidad de Cuenca
1023 • Escriba un algoritmo que dados tres números indique si el tercero es el resulta-
do de la resta entre los dos primeros: 1) el primero menos el segundo y 2) el
segundo menos el primero.
1026 • Escriba un algoritmo que dados tres números indique si el tercero es el resulta-
do de la multiplicación del primero por el segundo.
45
Angel Vázquez-Patiño Universidad de Cuenca
Puntaje en olimpiada
En una olimpiada de tiro al blanco se llega a un acuerdo entre los participantes para
1056 que el puntaje obtenido sea calculado en base al puntaje original (0 a 10) alcanzado
en el tiro efectuado, multiplicado por un factor según la siguiente tabla:
Pago en estacionamiento
Diseñe un programa que lea un número entero (positivo o negativo) de máximo 4 ci-
1068 fras (validar) y determine si tiene 1, 2, 3 o 4 cifras imprimiendo lo que corresponda.
46
Angel Vázquez-Patiño Universidad de Cuenca
En una Librería han puesto en oferta la venta de cuadernos al por mayor, obsequian-
1077 do lapiceros Lucas, Cross y/o Novo dependiendo de la cantidad de cuadernos com-
prados, de la siguiente manera:
1080 • Compra no menos que 12 pero menos que 24, obsequio: 1 Lucas por cada 4
cuadernos.
• Compra no menos que 24 pero menos que 36, obsequio: 2 Cross por cada 4
1083 cuadernos.
• Compra no menos que 36, obsequio: 3 Novo por cada 4 cuadernos. Adicional-
mente 1 Lucas y 1 Cross.
1086 Diseñe un algoritmo que determine cuántos lapiceros Lucas, Cross y Novo recibe un
cliente como obsequio.
Un banco desea calcular para uno de sus clientes el saldo actual (saldoAct), el pago
mínimo (pagoMin) y el pago para no generar intereses (pagoSinInteres). Los datos
1092 que se conocen son: saldo anterior (saldoAnt) del cliente, monto de las compras que
realizó y el pago que depositó en el corte (abono) anterior (corteAnt). Para calcular
el pago mínimo se debe considerar 15% del saldo, y para no generar intereses corres-
1095 ponde 85% del saldo. Considere que este saldo (actual) debe incluir 12% de los inte-
reses causados por no realizar el pago mínimo para no generar intereses en el corte
(abono) anterior y $200 por multa si abonó (en el corte anterior) menos del pago mí-
1098 nimo. Realice el algoritmo correspondiente e impleméntelo.
Ordenamiento de números
47
Angel Vázquez-Patiño Universidad de Cuenca
Vocales o consonantes
1107 El usuario puede ingresar un carácter y se debe indicar si el carácter es vocal, conso-
nante, número u otro.
1. Hectogramos
1113 2. Gramos
3. Decigramos
4. Centigramos
1116 5. Miligramos
* Pares o nones
Implemente el juego de manos pares o nones con la diferencia de que se podría mos-
1122 trar uno hasta todos los dedos de la mano (1-5). Uno de los jugadores es el computa-
dor y el otro es el usuario del programa. El flujo de ejecución del programa es:
48
Angel Vázquez-Patiño Universidad de Cuenca
Notas:
1137 En el lenguaje de programación Python podría utilizar la librería random para gene-
rar valores enteros aleatorios mediante la función randint. Por ejemplo, si se quiere
generar valores aleatorios en el rango [-2, 5], se usaría import random; print(random.-
1140 randint(-2, 5))
49
Angel Vázquez-Patiño Universidad de Cuenca
Estructura de selección
Miscelánea
1.
2.
Elaborar un algoritmo para leer la fecha de nacimiento (mes y día) de una persona y
muestre su signo zodiacal; si se ingresa un mes o día inconsistente se debe presentar
1152 un mensaje que diga “Fecha no reconocida.”. Tome en cuenta la siguiente informa-
ción:
50
Angel Vázquez-Patiño Universidad de Cuenca
Total de ventas
1167 Ingresar la información de personas hasta que el usuario ingrese n (no más datos).
Ingrese la nacionalidad (ecuatoriano, ecu; extranjero, ext), la talla (sma, med, lar),
sexo (masculino, mas; femenino, fem) y el importe por la venta (imp). Se calcula un
1170 descuento de acuerdo a las siguientes condiciones:
51
Angel Vázquez-Patiño Universidad de Cuenca
Miscelánea
Por ejemplo, suponga que se genera el número 4 de manera aleatoria para que
1215 sea el primer valor de la serie. Entonces la serie se forma de la siguiente mane-
ra: 4, 7, 8, 15, …. El valor 7 se obtiene de la suma de los divisores del 4: 1 + 2
+ 4 = 7.
52
Angel Vázquez-Patiño Universidad de Cuenca
N: 1 M: 2 N: 5 M: 10
1 1 1 3 6 2 6 18 35 67 128 254
1230 N: 4 M: 7 N: 3 M: 4
6 2 0 3 11 16 30 1 8 8 17
N: 2 M: 3 N: 1 M: 2
1233 1 7 8 2 2
N: 1 M: 6 N: 1 M: 2
6 6 6 6 6 6 6 6
1236 5. Elabore un algoritmo que calcule independientemente la suma de los pares y
los impares de los números entre 1 y 1000 (inclusivo).
8. Una empresa tiene N trabajadores, a cada uno de ellos se le paga un sueldo se-
gún las horas trabajadas a cierta tarifa por hora. Además a cada trabajador
1248 cuyo sueldo superó los $600 se le descuenta 10% por concepto de impuesto a
la renta. Se desea saber cuántos trabajadores gana más de $600, cuántos ga-
53
Angel Vázquez-Patiño Universidad de Cuenca
nan hasta $600 y cuánto dinero se tiene que pagar al estado por concepto de
1251 impuestos
10. Pregunta
Ingreso de 5 números
Números de n a m
Desarrolle un algoritmo que imprima en pantalla los números pares del intervalo [1 ,
1269 100].
Hacer un programa que imprima la suma de los 100 primeros números naturales. Le
1272 podría resultar de utilidad revisar la sección Acumuladores del documento https://
www.scribd.com/doc/307441670/Fundamentos-de-programacion-estructuras-de-con-
trol
Hacer un programa que imprima en pantalla los números impares del 1 hasta el 10 y
que imprima en pantalla la cantidad de números impares. Le podría resultar de utili-
54
Angel Vázquez-Patiño Universidad de Cuenca
Múltiplos de n
1281 1. Mostrar los múltiplos de 3 comprendidos entre los números 1 y 15 (inclusivo).
2. Contar los números múltiplos de 3 comprendidos entre los números 1 y 15.
3. Contar y sumar los números múltiplos de 3 comprendidos entre los números 1
1284 y 15.
4. Contar y sumar los números múltiplos de n (n>1) comprendidos entre los
números enteros m y w (m<w).
Subsidio familiar
• Las familias que tienen hasta 2 hijos, reciben $70, las que tienen entre 3 y 5
reciben $90 y las que tienen 6 o más reciben $120 mensual.
1305 • Por cada hijo en edad escolar reciben $10 adicionales. Se considera la edad es-
colar entre 6 y 18 años.
• Si la madre de familia fuera viuda, la familia recibe $20 adicionales.
55
Angel Vázquez-Patiño Universidad de Cuenca
1308 Determinar el monto mensual que recibirá una familia de acuerdo a su realidad fami-
liar.
* Factura
Repetición de series
4. Pedir el número de veces que el usuario quiere repetir una serie. Pedir el nú-
1338 mero inicial (m) y final (w) de la serie. Repetir las n veces indicadas la serie de
números desde m a w. No asuma que siempre m < w. Por ejemplo, si se indica
56
Angel Vázquez-Patiño Universidad de Cuenca
que debe repetir 3 veces la serie desde m=6 hasta w=2, el programa debe
1341 mostrar
6 5 4 3 2
6 5 4 3 2
1344 6 5 4 3 2
5. Pedir el número de veces que el usuario quiere repetir una serie (n). Pedir el
número inicial (m) y final (w) de la serie (m puede o no ser mayor que w). Pe-
1347 dir el incremento (o decremento, según sea el caso) que debe haber en la serie
(k). Repetir las n veces indicadas la serie de números desde m a w, con incre-
mentos (decrementos) k. A continuación se muestra ejemplos de ejecución del
1350 algoritmo:
m: 1
w: 10
1353 n: 3
k: 2
1 3 5 7 9
1356 1 3 5 7 9
1 3 5 7 9
m: 10
1359 w: 1
n: 4
k: 3
1362 10 7 4 1
10 7 4 1
10 7 4 1
1365 10 7 4 1
6. asdf
Encuesta a familias
• Tienen televisión o no tienen. Contar los que tienen y los que no tienen.
• Es en color o no es en color. Contarlos.
1371 • Piensan compararlos o no. Contarlos.
• Hallar el porcentaje de cada uno.
57
Angel Vázquez-Patiño Universidad de Cuenca
Conteo de votos
1374 Leer 550.000 votos otorgados a 3 candidatos (voto={1, 2, 3}) a alcalde de Cuenca e
imprimir el número del candidato y su cantidad de votos.
1377 Elabore un algoritmo que solicite la edad de n personas, y que muestre cuántos son
mayores de edad y cuántos son menores de edad. Mayores de edad son las personas
de 18 años o más.
Para que pueda verificar sus resultados, la siguiente tabla muestra valores para
1386 un capital inicial invertido de $100.
58
Angel Vázquez-Patiño Universidad de Cuenca
Los directivos de equis escuela requieren determinar cuál es la edad promedio de cada
uno de los M salones y cuál es la edad promedio de toda la escuela. Realice un algo-
1395 ritmo para determinar estos promedios y represente la solución mediante el diagrama
de flujo, el pseudocódigo y el diagrama N/S.
Trabajo conjunto
1. Si una persona termina una obra en 3 horas y una segunda persona termina la
obra en 6 horas ¿cuánto se demoran en terminar la misma obra si trabajan
1401 juntas?
2. Si una persona termina una obra en 3 horas, una segunda persona termina la
obra en 6 horas y una tercera persona termina la obra en 12 horas ¿cuánto se
1404 demoran en terminar la misma obra si trabajan juntas?
Luego de resolver los ejercicios anteriores, realice un algoritmo que pida el tiempo
(individual) que se demoran en concluir una misma obra n personas diferentes y cal-
1407 cule el tiempo que se demoran en terminar la misma obra si trabajan juntas.
Frases
• Introducir una frase por teclado. Imprimirla cinco veces en filas consecutivas,
1410 pero cada impresión debe ir desplazada cuatro columnas hacia la derecha.
• Introducir una frase por teclado. Imprimirla en el centro de la pantalla.
Tirada de dados
1413 • Simular cien tiradas de dos dados y contar las veces que entre los dos suman
10.
• Simular cien tiradas de tres dados y ver cuál es la suma que mayor frecuencia
1416 tiene.
Triángulo de números
Dado un número n, visualizar un triángulo de la siguiente manera:
1419 Con
59
Angel Vázquez-Patiño Universidad de Cuenca
1
2 3
1422 4 5 6
7 8 9 10
Con
1425 1
2 3
4 5 6
1428 7 8 9 10
11 12 13
1431 Elabore un algoritmo que pida dos fechas (día, mes y año) y muestre el número de
días que hay de diferencia entre estas dos fechas. Considerar los meses que tienen 30
días, los meses que tienen 31 días y suponga que febrero tiene 28 días siempre.
Factorial de un número
1446 …
60
Angel Vázquez-Patiño Universidad de Cuenca
Ejemplo:
A=2
1458 B=8
Series y sumatorias
1467 Puede comprobar que su algoritmo funcione usando los siguientes ejemplos.
Con n=5 y m=2 el resultado es 713.66; con n=7 y m=3 el resultado es
482443.625; con n=9 y m=4 el resultado es 815457334.7.
61
Angel Vázquez-Patiño Universidad de Cuenca
1470 • * Escriba un programa que calcule el valor del coseno de un ángulo 𝑥 usando
la suma de la serie infinita
1491 Además, genere un gráfico que muestre el peso en kilogramos (eje horizontal) vs el
IMC (eje vertical). La barra que indica el peso debe ser “dibujado” utilizando tantos
asteriscos como el peso indique (2 puntos). Para esta parte, redondee el peso a cero
1494 decimales para saber cuántos asteriscos imprimir. El título del “gráfico” debe ser
“Peso adecuado para una persona de X metros”, donde X hace referencia a la talla
ingresada por el usuario (1 punto). Ejemplos de ejecución del algoritmo que debe
1497 implementar se muestran a continuación para que quede claro lo pedido (lo que está
en negrita son valores ingresados mediante el teclado).
Talla [m]: 0.71
1500 ¡ERROR! La talla debe estar en el intervalo [0.72, 2.51].
62
Angel Vázquez-Patiño Universidad de Cuenca
63
Angel Vázquez-Patiño Universidad de Cuenca
1569 Combinatoria
64
Angel Vázquez-Patiño Universidad de Cuenca
* Dibujo de cuadrado
1578 Desarrolle un algoritmo que pida al usuario el tamaño del lado de un cuadrado y que
muestre un cuadrado hueco de ese tamaño, compuesto de asteriscos y espacios en
blanco. Su algoritmo debe funcionar con cuadrados que tengan lados de todas las
1581 longitudes entre 1 y 20 (validar). Por ejemplo, si su programa lee un tamaño de 5,
debe imprimir
*****
1584 * *
* *
* *
1587 *****
* E8 Onda cuadrada
1593 Se conoce por onda cuadrada a la onda de corriente alterna (CA) que alterna su va-
lor entre dos valores extremos sin pasar por los valores intermedios (al contrario de lo
que sucede con la onda senoidal y la onda triangular, etc.)
65
Angel Vázquez-Patiño Universidad de Cuenca
1602 Escriba un programa que genere la onda mostrada en la figura anterior (igual
al del primer punto pero se presenta de forma vertical). Los datos que deben
especificarse son:
Dados tres valores por parte del usuario, li, ls y ciclos, “dibujar” una onda trian-
gular según se muestra en los ejemplos de abajo:
66
Angel Vázquez-Patiño Universidad de Cuenca
Dados dos valores por parte del usuario, li ≥ 0 y ciclos, “dibujar” una onda de
sierra según se muestra en los ejemplos de abajo. Dependiendo del número de dígitos
1614 del último número impreso (el de abajo), se debe agregar dígitos ceros en la parte iz-
67
Angel Vázquez-Patiño Universidad de Cuenca
quierda de los primeros números, con esto, todos los números impresos deben tener la
misma cantidad de dígitos.
li = 1 li = 98
ciclos = 2 ciclos = 3
1620 (4.3)
Desarrolle un algoritmo para calcular (1+x)n utilizando la sumatoria. Para más infor-
mación vea el Álgebra elemental moderna (González y Mancill, 2009, cap. 15).
68
Angel Vázquez-Patiño Universidad de Cuenca
(4.4)
1629 para todo entero positivo n y todo entero positivo k entre 0 y n (la fórmula para cal-
cular combinaciones está en la ecuación 4.2), entonces los valores de la combinatoria
son los coeficientes del desarrollo del binomio.
69
Angel Vázquez-Patiño Universidad de Cuenca
1644 ce las pruebas de escritorio necesarias para verificar el correcto funcionamiento del al-
goritmo. Finalmente, implemente el algoritmo.
70
Angel Vázquez-Patiño Universidad de Cuenca
1647 Miscelánea
1650 2. El usuario ingresa una lista de valores numéricos. El ingreso de los números
termina cuando el usuario ingrese el valor -9999. Determinar el rango (mínimo
y máximo) y el promedio de los valores ingresados. No se debe considerar para
1653 los cálculos el número -9999.
4. El número ingresado puede tener cualquier número de dígitos y debe ser posi-
1659 tivo (validar).
71
Angel Vázquez-Patiño Universidad de Cuenca
1668 La suma de los créditos debe ser mayor o igual que 25 y menor o igual que 50.
Si al finalizar la lectura la suma de los créditos no se cumple la condición se
deberá emitir un mensaje de error y deberá comenzar nuevamente.
72
Angel Vázquez-Patiño Universidad de Cuenca
1701 Sino
Escribir Sin Saltar “>”;
FinSi
fila = fila – 1;
1707 Escribir “”;
FinMientras
FinAlgoritmo
1710 ¿Cuál sería el resultado de la ejecución si la primera instrucción (fila = 5) es
cambiada por fila = 4?
rt <- (mr+Mr1)/2;
73
Angel Vázquez-Patiño Universidad de Cuenca
1749 a. 1
b. Infinito
c. 0
1752 d. Error de compilación
e. Ninguna de las anteriores
10. Pregunta
1755 Números de n a m
Hacer un pseudocódigo que imprima los números impares entre 0 y 100. Utilice WHI-
1764 LE para realizar las iteraciones.
74
Angel Vázquez-Patiño Universidad de Cuenca
Hacer un programa que imprima la suma de los 100 primeros números. Utilice WHI-
1767 LE para hacer las iteraciones.
Hacer un programa que imprima en pantalla los números pares del 1 hasta el 10 y
1770 que imprima en pantalla la cantidad de números pares. Utilice WHILE para hacer las
iteraciones.
Codificación de caracteres
1773 Desarrolle un algoritmo que permita leer caracteres hasta que el usuario ingrese el
carácter X/x (mayúscula o minúscula). Cada vez que se ingrese un carácter, transfor-
mar su código ASCII a binario y mostrar los 1s con - (guiones) y los 0s con . (pun-
1776 tos). A continuación se muestra un ejemplo
h
104: --.-...
1779 O
79: -..----
l
1782 108: --.--..
A
65: -.....-
1785 x
Ingreso de binarios
Hacer un algoritmo que sólo nos permita introducir 0 o 1. Si se ingresa un número di-
1788 ferente, el programa termina.
Realizar un programa que lea números. Mientras el número ingresado sea positivo, el
1791 programa sigue leyendo números desde el teclado. El momento que ingresa un núme-
ro igual o menor a cero, el programa termina.
75
Angel Vázquez-Patiño Universidad de Cuenca
Conteo de frases
1794 Introducir tantas frases como queramos y contarlas. Siempre se pregunta al usuario si
desea ingresar más frases; sí=1, no=0.
1797 Dado el radio (r) de un círculo, calcular la longitud (l) y el área (a). Dado que el va-
lor del radio no debe ser negativo (sí puede ser igual a cero), valide el ingreso de di -
cho valor.
Permitir al usuario ingresar números mayores a cero hasta que el usuario ingrese un
número negativo o el cero. Luego, indicar al usuario cuántos números ingresó.
Realice un programa que luego de leer 10 números, cuente el número de números pa-
res e impares. Haga una versión utilizando while y switch; y otra versión utilizando
1809 while e if.
Imprima los números del 00000 al 99999 con la particularidad de que cada vez que
1818 debiera imprimirse el 1 (en cualquiera de los dígitos) se sustituya con A, el 3 con E,
el 5 con I, el 7 con O y el 9 con U, i.e., 00000, 0000A, 00002, … , UUUUO, UUUU8,
76
Angel Vázquez-Patiño Universidad de Cuenca
UUUUU. No utilice más de una estructura de control FOR, ni más de dos estructu-
1821 ras de control WHILE, ni más de dos estructuras de control REPEAT.
Suponga que no existe el operador potencia. Escriba un programa que lea dos valores
1824 enteros, llamados base y exponente y devuelva base elevado a la potencia exponente.
Bases y exponentes
1830 2. *E11 Escriba un programa que pida al usuario ingresar un número entero (N)
e imprima todos los pares de número enteros, raíz (r) y potencia (p), de mane-
ra tal que 0 ≤ p ≤ N, r ∈ (-N, N) y rp = N. Si no existe ningún par de en-
1833 teros, r y p, que cumplan lo pedido, se debe imprimir un mensaje adecuado
debido a tal causa. Para calcular la potencia debe realizar el código fuente
para tal efecto, i.e., no debe utilizar ninguna función ni otro operador como
1836 **. A continuación se muestra, como ejemplo, algunas ejecuciones del progra-
ma:
Bases y Exponentes Bases y Exponentes Bases y Exponentes Bases y Exponentes
------------------ ------------------ ------------------ ------------------
Ingrese N: 51 Ingrese N: 1 Ingrese N: 81 Ingrese N: 64
Ningún par cumple. 0 ^ 0 = 1 -9 ^ 2 = 81 -8 ^ 2 = 64
9 ^ 2 = 81 8 ^ 2 = 64
-3 ^ 4 = 81 4 ^ 3 = 64
3 ^ 4 = 81 -2 ^ 6 = 64
2 ^ 6 = 64
77
Angel Vázquez-Patiño Universidad de Cuenca
Un número perfecto es un entero positivo, que es igual a la suma de todos los enteros
positivos (excluido él mismo) que son divisores del número. El primer número perfec-
1848 to es 6, ya que los divisores de 6 son 1, 2, 3 y 1 + 2 + 3 = 6. Elabore un algoritmo
que lea un número entero positivo n (validar que se positivo; suponga que el número
ingresado siempre es entero) y muestre en pantalla si ese número es o no perfecto.
1851 Sólo si es perfecto, deberá sacar la suma del factorial de cada uno de los números que
son divisores (excluido él mismo).
Números primos
1854 • Un número primo es un entero cuyos divisores enteros son sólo 1 y el mismo
número. Por ejemplo, el número 7: es divisible sólo para 1 y para 7. Elabore
un algoritmo que lea un número entero positivo n (validar que se positivo; su-
1857 ponga que el número ingresado siempre es entero) y muestre en pantalla si ese
número es o no primo. Sólo si es primo, deberá sacar la suma del factorial de
cada uno de los números entre 1 y n (sin incluir 1 ni n). Por ejemplo: si se in-
1860 gresa el número cuatro, el algoritmo debe indicar que no es primo y además
presentar la suma de (8).
78
Angel Vázquez-Patiño Universidad de Cuenca
Número separado:
1869 2 unidades
3 decenas
4 centenas
1872 5 miles
Ordenamientos
Desarrolle un juego simple que pida al usuario que adivine un número en 10 intentos.
El juego termina cuando se haya adivinado el número o cuando se hayan agotado to-
1893 dos los intentos. Tenga en cuenta la función azar(n) de PseInt1 que genera un número
entero al azar en el rango [0, n−1].
1 http://pseint.sourceforge.net
79
Angel Vázquez-Patiño Universidad de Cuenca
Cara o cruz
1896 Simular el lanzamiento de una moneda al aire e imprimir si ha salido cara o cruz. El
momento que adivina, termina el algoritmo.
1899 Utilice una función para generar números aleatorios enteros en el rango [1, 6] para si-
mular el resultado del lanzamiento de un dado (e.g., en PseInt, Azar()). Realice “lan-
zamientos” hasta que tres veces seguidas salga el mismo número. Una vez que se ter-
1902 minen los lanzamientos, muestre una tabla de frecuencias que indique la cantidad de
veces que salieron los números 1, 2, … y 6. Finalmente, haga un gráfico de barras ho-
rizontales con esos datos. Por ejemplo, suponga que al azar salieron los siguientes nú-
1905 meros: 2, 4, 1, 6, 6, 2, 1, 5, 4, 1, 6, 5, 4, 4, 2, 5, 1, 3, 3, 3. El resultado en pantalla de-
bería ser:
Tabla de frecuencias
1908 1 4
2 3
3 3
1911 4 4
5 3
6 3
1914 Gráfico de barras
1 ****
2 ***
1917 3 ***
4 ****
5 ***
1920 6 ***
Series y sumatorias
80
Angel Vázquez-Patiño Universidad de Cuenca
1926 1. Indicar cuál es el valor de la siguiente sumatoria, sumando los términos hasta
que el último término sumado sea menor a 0.0001.
Reloj de 24 horas
1932 Una empresa necesita visualizar un reloj de 24 horas (00:00:00 - 23:59:59). Realice un
programa que visualice el conteo del tiempo con el formato hh:mm:ss segundo a se-
gundo. Haga versiones con todas las estructuras de repetición que conozca. Luego de
1935 desarrollar este algoritmo revise la Miscelánea de la subsección Estructura de repeti-
ción FOR (página 88) y desarrolle un ejercicio parecido con la condición de que hay
un límite en el tiempo que se muestra.
81
Angel Vázquez-Patiño Universidad de Cuenca
1953 • Elabore un algoritmo que muestre los términos de la serie de Fibonacci que
sean menores a 100000:
*E16 Aproximación de π
, (4.5)
Calcule una aproximación de con un error aproximado relativo (i.e., igual o menor)
1962 de 0.001. El error aproximado relativo está dado por
(4.6)
82
1965 Aproximación del logaritmo natural
El logaritmo natural de se puede aproximar con la serie
(4.7)
Calcule una aproximación del logaritmo natural de con un error aproximado (i.e.,
igual o menor) de 0.0001. Para saber qué es el error aproximado vea la ecuación 4.6.
Para n→∞ (en la práctica un número suficientemente alto) el arco seno de x se pue-
de calcular con la siguiente serie de Taylor:
1983 5. Para el cálculo del factorial debe utilizar la estructura de repetición Mientras.
• Escriba un programa que lea dos enteros: el primero debe ser impar (validar)
1989 y el segundo puede ser par o impar. La salida debe ser un triángulo dibujado
con el segundo número dado y de anchura máxima dada por primer entero leí-
do. Se debe presentar la multiplicación de los números de cada fila del triángu-
1992 lo. Dos ejemplos: si el primer entero es 7 y 9 y el segundo entero es 1 y 2, los
triángulos deben ser:
Angel Vázquez-Patiño Universidad de Cuenca
1 1 2 2
111 1 222 8
1998 11111 1 22222 32
1111111 1 2222222 128
222222222 512
2001 • Escriba un programa que lea dos enteros (mayores a cero, validar): el primero
de ellos necesariamente debe ser impar (validar) mientras que el segundo pue-
de ser par o impar. La salida debe ser un triángulo dibujado con el segundo
2004 número dado y de anchura máxima dada por primer entero leído. Se debe pre-
sentar la suma de los números de cada fila del triángulo. Dos ejemplos: si el
primer entero es 7 y 9 y el segundo entero es 1 y 2, los triángulos deben ser:
2007 Primer número : 7 Primer número: 9
Segundo número: 1 Segundo número: 2
1 1 2 2
2010 111 3 222 6
11111 5 22222 10
1111111 7 2222222 14
2013 222222222 18
Menú
Realice un algoritmo para obtener una función exponencial, la cual está dada por:
84
Angel Vázquez-Patiño Universidad de Cuenca
No se debe usar la función potencia, ni ninguna función que calcule el factorial (debe
2025 hacer el algoritmo para calcular la potencia y para calcular el factorial).
3. Terminar el Algoritmo
Opción [1-4]: _
2049 Cuando el usuario ingrese una opción fuera del intervalo [1, 4] imprima el mensaje
“¡Error! Debe ingresar una opción válida (número del 1 al 4)”. Cuando el usuario in-
dica la opción cuatro, el programa termina y antes imprime el mensaje “Saliendo...”.
2052 Si el usuario indica la opción 1 (Permutaciones) se debe presentar el submenú
85
Angel Vázquez-Patiño Universidad de Cuenca
--------------------------------
Permutaciones
2055 --------------------------------
1. Sin repetición (n!)
2. Con repetición (n!/(a!b!c!…))
2058 3. Circulares ((n-1)!)
4. Volver
Opción [1-4]: _
2061 Cuando el usuario ingrese una opción incorrecta, presente algún mensaje que indique
el error. Si el usuario escoge la opción cuatro, se vuelve al menú principal. Cuando el
usuario escoge una de las opciones del uno al tres, se piden los datos necesarios, se
2064 realizan las operaciones necesarias y se presentan los resultados; luego de presentar
los resultados se vuelve al submenú Permutaciones. Cuando se escoja una opción del
uno al tres indique con texto cuándo se utiliza esa operación (sin repetición, con re-
2067 petición, etc) y si es necesario ponga un ejemplo de uso.
86
Angel Vázquez-Patiño Universidad de Cuenca
esta opción indique con texto cuándo se utiliza esa operación y si es necesario ponga
2088 un ejemplo de uso.
87
Angel Vázquez-Patiño Universidad de Cuenca
Miscelánea
4. Desarrolle un algoritmo que lea una serie de valores que terminará cuando se
lea el valor cero y que imprima la suma de aquellos que son negativos. Siem-
2118 pre el usuario ingresa al menos un valor diferente a cero.
5. Desarrolle un algoritmo que pregunte una contraseña, el usuario sólo tiene de-
recho a 3 intentos. Cuando el usuario escriba la contraseña correcta se impri-
2121 mirá "¡Enhorabuena!" y terminará el algoritmo. En caso de no escribir la
contraseña correcta se imprimirá “Lo siento, contraseña equivocada”. Si se
88
Angel Vázquez-Patiño Universidad de Cuenca
2139 8. Una persona recopila ciertos datos aplicando encuestas para el último Censo
Nacional de Población y Vivienda. Desea obtener de todas las personas que al-
cance a encuestar en un día, qué porcentaje tiene estudios de primaria, secun-
2142 daria, carrera técnica, profesional y posgrado. Desarrolle el algoritmo que le
permita calcular esa información.
89
Angel Vázquez-Patiño Universidad de Cuenca
nal que el cliente deberá pagar por su compra. Se sabe que sólo hay bolitas de
los colores mencionados.
2151 10. Se leen los nombres, edad y sueldo de 5000 personas y se desea saber el monto
total que la empresa pagará a las personas que son mayores de 35 años y que
perciben un sueldo mensual mayor o igual a $500.
2154 11. Una cadena de 754 tiendas reporta sus ventas brutas y sus costos de venta
mensuales. Desarrolle un algoritmo que lea los costos y ventas, que calcule e
imprima la utilidad neta de cada tienda, y que informe cuántas tiendas obtu-
2157 vieron utilidad neta superior a los $50000 mensuales.
13. Mostrar la tabla de cuadrados y cubos de los números desde el 1 hasta el valor
ingresado por el usuario. El siguiente es un ejemplo donde el usuario ingresó el
2166 número 5:
1 1 1
2 4 8
2169 3 9 27
4 16 64
5 25 125
2172 14. *E20 Desarrolle un algoritmo que muestre el tiempo (en formato 24h00) se-
gundo a segundo desde 00:00:00 hasta una hora (con sus minutos y segundos)
dada por el usuario. Por ejemplo 00:00:00, 00:00:01, 00:00:02,…, 20:20:17. An-
2175 tes de realizar este ejercicio desarrolle el ejercicio Reloj de 24 horas de la pági-
na 81.
15. Desarrolle un algoritmo que reciba un número entero positivo (validar) y que
2178 retorne un nuevo número con sus cifras invertidas.
90
Angel Vázquez-Patiño Universidad de Cuenca
17. Crear un programa que muestre en pantalla un diamante formado por asteris-
2196 cos, dado un valor de número de asteriscos máximo en el punto central del
diamante. Por ejemplo, si el valor en el punto central es 5 el rombo sería
**
2199 ****
******
********
2202 **********
********
******
2205 ****
**
18. *E21 Dado el siguiente código fuente en lenguaje C, cuya salida se muestra
2208 como “Solución actual” en la parte derecha superior de la tabla siguiente:
SOLUCIÓN ACTUAL
91
Angel Vázquez-Patiño Universidad de Cuenca
SOLUCIÓN REQUERIDA
modifique el código de manera que la salida del programa sea similar que la
mostrada como “Solución requerida” en la parte derecha inferior de la tabla,
2211 es decir, que en lugar de mostrar asteriscos en forma de una letra X se mues-
tren numeradas ascendentemente desde arriba hasta el centro de la X y desde
el centro de la X hacia abajo, en forma descendente.
92
Angel Vázquez-Patiño Universidad de Cuenca
cuenta<-1
repetir
2232 Escribir "Ingrese un numero:"
leer numero
respuesta←verSiEsPar(numero) // 1, par; 0, impar
2235 segun (respuesta) hacer
1: i<-1
Mientras i<=numero hacer
2238 Mientras (i*100 mod valor) >
(numero*potencia(numero, i)
diagnostico(numero, valor)
2241 FinMientras
verSiDivisores(numero)
i<-i+1
2244 fin mientras
2: verSiEsPositivo(numero)
3:
2247 verSiEsNegativo(numero)
De Otro Modo:
Escribir "El número es cero"
2250 FinSegun
cuenta<-cuenta+1
Hasta Que cuenta>MAXIMO
2253 Escribir "Desea repetir el proceso?"
leer usuarioDiga
Hasta Que usuarioDiga="N"
2256 FinAlgoritmo
20. Realice la prueba de escritorio del siguiente código en C y seleccione la res-
puesta correcta.
2259 #include <stdio.h>
int main(int argc, char **argv)
{
2262 int i = 10, j;
for(j=i==10; j<=10 ; j++)
93
Angel Vázquez-Patiño Universidad de Cuenca
printf("\n%d", j);
2265 return 0;
}
¿Cuántas veces se ejecutará el bucle incluido en el código fuente?
2268 a. 1
b. 10
c. 11
2271 d. Error de compilación
e. Ninguna de las anteriores
21. Pregunta
Desarrollar un algoritmo que pida el nombre del usuario, el día, mes y año actual y el
día, mes y año de nacimiento del usuario. En base a esos datos el algoritmo indica el
2277 signo zodiacal, la edad en horas y segundos y número de suerte del usuario. El núme-
ro de suerte se calcula sumando los dígitos de su año de nacimiento, si el número es
mayor a nueve se resta nueve de manera que el valor esté entre 1 y 9 1. El signo zodia-
2280 cal se calcula en base a la siguiente información:
Series y sumatorias
1 Si necesita mayor explicación resuelva primero el ejercicio * Prueba del nueve de la división
(página 101).
94
Angel Vázquez-Patiño Universidad de Cuenca
• Si n=7 genere 7, 6, 5, 4, 3, 2 y 1.
2304 Ejemplos
N-ésimo término a mostrar: 5
Término: 8
Dados dos números enteros, li y ls (li<ls, validar), ingresados por el usuario, im-
primir la serie de números desde li hasta ls, inclusivo. Luego, haga una nueva serie
2313 desde la mitad hasta el final de la serie anterior e imprímala. Luego, haga una nueva
serie desde el comienzo hasta la mitad de la serie anterior e imprímala. Haga estos
pasos hasta que la serie ya no tenga números. A continuación se muestra ejemplos de
2316 ejecución del programa que le dejarán claro cómo tomar el número medio de la serie:
li: -5 li: -9
ls: 5 ls: 0
-5 -4 -3 -2 -1 0 1 2 3 4 5 -9 -8 -7 -6 -5 -4 -3 -2 -1 0
0 1 2 3 4 5 -5 -4 -3 -2 -1 0
0 1 2 -5 -4 -3
1 2 -4 -3
1 -4
95
Angel Vázquez-Patiño Universidad de Cuenca
li: 1
ls: 20
2319 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
10 11 12 13 14 15 16 17 18 19 20
10 11 12 13 14 15
2322 12 13 14 15
12 13
12 13
2325 12
* Impresión de patrones
Dado un número entero positivo en el intervalo [2, 9], mostrar en pantalla una X for-
2328 mada de números. Por ejemplo, con N=5:
1. Ingresar número
2. Mostrar media
2334 3. Mostrar menor
4. Mostrar mayor
5. Salir
96
Angel Vázquez-Patiño Universidad de Cuenca
Manejo contable
* Factorización de trinomio
2367 Ejemplo
Ecuación: x2 + 7x + 12; b = 7, c = 12
Salida:
97
Angel Vázquez-Patiño Universidad de Cuenca
Ecuación: x2 + 6x + 10; b = 6, c = 10
Salida:
Desarrolle un algoritmo que pida un número positivo de tres dígitos o más (se pide
2376 un solo valor); si no cumple esta condición, debe mostrar el mensaje “¡El número
debe ser positivo de más de dos dígitos!” y volver a pedir un número. Luego, muestre
la suma, producto, media, máximo y mínimo de los dígitos del número ingresado. Fi-
2379 nalmente, muestre la suma, producto, media, máximo y mínimo de los dígitos del nú-
mero ingresado elevados a un exponente igual a la cantidad de dígitos. A continua-
ción se muestra un ejemplo de ejecución (así exactamente debe mostrar los resulta-
2382 dos):
Número a analizar: 27
¡El número debe ser positivo de más de dos dígitos!
2388 Suma: 1 + 5 + 4 + 2 + 3 = 15
Producto: 1 × 5 × 4 × 2 × 3 = 120
Media: (1 + 5 + 4 + 2 + 3) / 5 = 3
2391 Máximo: max(1, 5, 4, 2, 3) = 5
Mínimo: min(1, 5, 4, 2, 3) = 1
*******************************************************
2394 Suma: 1^5 + 5^5 + 4^5 + 2^5 + 3^5 = 4425
Producto: 1^5 × 5^5 × 4^5 × 2^5 × 3^5 = 24883200000
Media: (1^5 + 5^5 + 4^5 + 2^5 + 3^5) / 5 = 885
2397 Máximo: max(1^5, 5^5, 4^5, 2^5, 3^5) = 3125
Mínimo: min(1^5, 5^5, 4^5, 2^5, 3^5) = 1
* Serie de Leibniz
2400 La serie de Leibniz o Gregory-Leibniz es una serie infinita cuya suma de términos
converge a π/4:
98
Angel Vázquez-Patiño Universidad de Cuenca
(4.8)
2403 Calcule una aproximación de con un error aproximado (i.e., igual o menor) de
0.0001. El error aproximado está dado por
(4.9)
* Examen de manejo
Desarrolle un algoritmo que lea el número de estudiantes del curso (n), imprima el
2418 número total de parejas que pueden haber para el examen final e imprima todas esas
posibles parejas. Quizá le sea útil saber que el número de permutaciones que se pue-
den realizar con m elementos tomados de k en k es m!/(m−k)!.
99
Angel Vázquez-Patiño Universidad de Cuenca
1 https://youtu.be/zeB_zArHc2Y
2 En el vídeo se muestra un algoritmo que no toma en cuenta la consideración de que un caballo no
puede ir más atrás del punto de partida.
100
Angel Vázquez-Patiño Universidad de Cuenca
Realizar un algoritmo para realizar la prueba del 9 de la división entre dos números.
Solicitar al usuario que ingrese dos números enteros, el dividendo y el divisor, tal que
2478 dividendo > divisor. Realizar la división entre los dos números y la prueba del 9 para
comprobar si el resultado de la división es correcto. A continuación se da un ejemplo
de cómo se realiza la prueba del nueve.
Mostrar todos los triángulos rectángulos cuyas longitudes de sus lados no sobrepasan
2484 un valor dado y son valores enteros; además, indicar la cantidad de dichos triángulos.
Por ejemplo, si el usuario ingresa 10, el algoritmo deberá mostrar todas las tripletas
para las cuales las longitudes del cateto 1, cateto 2 e hipotenusa son números enteros
2487 y ninguno de ellos es mayor que 10. A continuación se muestra un ejemplo del resul-
tado de la ejecución del algoritmo.
Valor máximo:> 20
101
Angel Vázquez-Patiño Universidad de Cuenca
* Número triangular
( √ 8 N +1 ) − 1
M=
2
2508 Crear un programa que solicite un número entero N al usuario, y solamente si el nú-
mero ingresado es triangular mostrar en pantalla el triángulo de lado M generado.
Por ejemplo: el número 10 es un número triangular porque si colocamos 10 objetos en
2511 forma triangular, éstos generan un triángulo equilátero de lado 4
*
* *
2514 * * *
* * * *
La diagonal de Cantor
Georg Cantor fue un matemático ruso que es considerado como uno de los padres de
la teoría de conjuntos. Entre otras muchas contribuciones a las matemáticas, Cantor
2520 usó un argumento conocido como el argumento de la diagonal para demostrar que el
conjunto de números reales es no-numerable. En este ejercicio vamos a considerar
una simplificación del argumento de Cantor para proponer un algoritmo que ejecute
2523 la siguiente tarea.
102
Angel Vázquez-Patiño Universidad de Cuenca
El usuario ingresa una lista de n números enteros. Cada uno de estos números debe
tener un número de dígitos igual a n. Una forma de ver la lista de números ingresa-
2526 dos es como una matriz de n filas (n = número de valores ingresados) por n columnas
(n = número de dígitos de los números). Evidentemente, cada celda de esta matriz
contendrá un dígito decimal (0 - 9). En el ejemplo que se muestra a continuación n =
2529 4, lo que significa que el usuario ingresó 4 números enteros de 4 dígitos cada uno.
1234
4815
2532 1623
4211
El resultado que debe mostrar el algoritmo es un número entero de n dígitos, para el
2535 cual el primer dígito es distinto del primer dígito del primero número, el segundo dí-
gito es distinto del segundo dígito del segundo número, el tercer dígito es diferente al
tercer dígito del tercer número y así sucesivamente. Como una ilustración, para el
2538 ejemplo mostrado arriba, el resultado de una ejecución válida del algoritmo sería el
número entero 2932. La única información que se le deberá solicitar al usuario será la
lista de números enteros a considerar. En particular, NO se deberá solicitar cuántos
2541 números se van a ingresar.
Random walks
Realizar la suma de dos números positivos de hasta 4 cifras, cifra por cifra. No nece-
sariamente los dos números tienen el mismo número de cifras. Por ejemplo:
Número 1: 1325 Número 1: 789 Número 1: 99
Número 2: 4794 Número 2: 5689 Número 2: 999
11 111 11
1325 789 99
103
Angel Vázquez-Patiño Universidad de Cuenca
Escriba un programa que lea dos números enteros positivos, los convierta en números
binarios y los sume dígito por dígito (vea el ejercicio * Suma de dos números decima-
2556 les). Muestre los dos números binarios y el resultado obtenido de la suma. Por ejem-
plo, para los números 34 y 45, el programa debe imprimir
100010
2559 101101
-------
1001111, que equivale a 79 en decimal.
Implemente un programa que lea un número entero positivo N y que encuentre su va-
lor en base a la suma de números consecutivos (no menores a 0 ni mayores a N). Por
2565 ejemplo:
104
Angel Vázquez-Patiño Universidad de Cuenca
105
Angel Vázquez-Patiño Universidad de Cuenca
106
Angel Vázquez-Patiño Universidad de Cuenca
107
Angel Vázquez-Patiño Universidad de Cuenca
Los arreglos podrían ser llamados de diferentes maneras. En general, hacen referencia
a un conjunto de elementos (en algunos lenguajes de programación estos elementos
2577 no solamente son números) bajo un mismo nombre, que se diferencian entre ellos me-
diante un índice. Por ejemplo, se los puede llamar vectores o matrices (de una dimen-
sión en este caso). Dependiendo del lenguaje de programación que utilice para imple-
2580 mentar los algoritmos, puede utilizar estructuras de datos con otros nombres. Por
ejemplo, si utiliza Python, se pueden utilizar listas o arreglos de la librería numpy.
Miscelánea
2583 Algunos de los ejercicios están basados en los libros de Pinales Delgado y Velázquez
Amador (2014), Alcalde Lancharro y García López (1992), Chaves Torres (2012) y
Parra Terrazos (n.d.).
2595 4. Implemente un programa que genere aleatoriamente los sueldos de 200 em-
pleados de una empresa en un arreglo y determine el menor sueldo, el mayor
sueldo, el sueldo promedio y el total a pagar por parte de la empresa.
2598 5. Implemente un programa que ingrese los sueldos de N empleados de una em-
presa en un arreglo con capacidad máxima para 100 empleados. Imprima lue-
go un listado de los sueldos superiores al sueldo promedio.
2601 6. Implemente un programa que lea 5000 notas de un examen en un arreglo y de-
termine: a) la nota promedio, b) la mayor nota, c) la menor nota, d) el núme-
108
Angel Vázquez-Patiño Universidad de Cuenca
7. Implemente un algoritmo que lea los nombres y las edades de diez estudiantes,
y que almacene los datos en dos arreglos. Con base en esto se debe imprimir el
2607 nombre del estudiante con la mayor edad.
10. Implemente una función que reciba como parámetros un arreglo de enteros A
y un número entero n, y devuelva un nuevo arreglo B que sea igual al arreglo
2619 A pero desplazado n posiciones hacia la izquierda. Tenga en cuenta que los n
primeros elementos en el arreglo A al ser desplazados hacia la izquierda pasan
a ser los últimos elementos del arreglo B. Por ejemplo, con n = 3:
2622 A={1, 2, 3, 4, 5, 6, 7}
B={4, 5, 6, 7, 1, 2, 3}
2628 12. Una empresa requiere controlar la existencia de diez productos, los cuales se
almacenan en un arreglo A, mientras que los pedidos de los clientes de estos
productos se almacenan en un arreglo B. Se requiere generar un tercer arreglo
2631 C, con base en los anteriores, que represente lo que se requiere comprar para
mantener la existencia de inventario. Para este fin se considera lo siguiente: si
los valores correspondientes de los arreglos A y B son iguales, se almacena este
2634 mismo valor; si el valor de B es mayor que el de A, se almacena el doble de la
diferencia entre B y A; si se da el caso de que A es mayor que B, se almacena
109
Angel Vázquez-Patiño Universidad de Cuenca
2643 14. Para facturar el servicio de energía la empresa eléctrica cuenta con una lista
de usuarios almacenada en un arreglo y las lecturas del mes anterior (en KW)
en un segundo arreglo. Se requiere un algoritmo que lea el costo de cada KW,
2646 tome la lectura actual de cada usuario y la registre en un tercer arreglo, calcu-
le el consumo del mes por diferencia de lecturas y muestre para cada usuario:
nombre, consumo y valor a pagar.
2649 15. * Desarrolle un programa que genere dos arreglos de cien elementos con núme-
ros al azar y que calcule la suma de éstos (elemento a elemento) guardando su
resultado en otro arreglo, el cual se debe presentar en pantalla junto con los
2652 dos arreglos generados.
17. Realice un algoritmo que lea un vector de cien elementos y que calcule su
2658 magnitud y represéntelo mediante diagrama de flujo y pseudocódigo.
18. Implemente un algoritmo que calcule el producto de dos vectores. Uno de ellos
es de una fila con diez elementos y el otro con una columna de diez elementos.
2661 19. Cree un arreglo de 20 elementos con nombres de personas. Visualice los ele-
mentos de la lista debiendo ir cada uno en una fila distinta.
110
Angel Vázquez-Patiño Universidad de Cuenca
2670 23. Lea un arreglo de N elementos y luego imprima cuántos y cuáles elementos
(i.e., número de índice) son múltiplos de 6.
25. Generar con números aleatorios dos arreglos A y B de 45 elementos cada uno,
sumar el elemento uno del arreglo A con el elemento uno del arreglo B y así
2676 sucesivamente hasta 45, almacenar el resultado en un arreglo C, e imprimir el
arreglo resultante.
26. Desarrolle un programa que lea un arreglo de N elementos y rote todas sus
2679 componentes un lugar hacia su derecha. Teniendo en cuenta que la última
componente se ha de desplazar al primera lugar.
27. Dado un número entero positivo de 10 cifras, desarrolle un programa que com-
2682 pruebe si el número es capicúa utilizando un arreglo de 10 componentes. La
palabra capicúa (en matemáticas, número palíndromo) se refiere a cualquier
número que se lee igual de izquierda a derecha que de derecha a izquierda.
2685 Ejemplos: 161, 2992, 3003, 2882.
31. * Desarrolle un programa que genere los números de la serie Fibonacci y los
guarde en un arreglo de 55 elementos (debe generar 55 términos de la serie).
111
Angel Vázquez-Patiño Universidad de Cuenca
Manejo de arreglos
2724 1. Generar un arreglo llamado angles que contenga los ángulos múltiplos de 30°
entre 30° y 360°.
2. Extraer del arreglo los elementos cuyo índice es par y guardarlos en un arreglo
2727 llamado evenAngles.
3. Extraer del arreglo los elementos cuyo índice es impar y guardarlos en un arre-
glo llamado oddAngles.
112
Angel Vázquez-Patiño Universidad de Cuenca
* Eliminación de duplicados
2733 Use una arreglo para resolver el siguiente problema: Escriba una aplicación que per-
mita el ingreso de n números, cada uno en el rango [10, 100]. Cada vez que un núme-
ro sea leído, muéstrelo sólo si no es un duplicado de un número ya ingresado. Prever
2736 el “peor caso”, en el que todos los n números son diferentes. Use el arreglo más pe-
queño posible para resolver este problema. Muestre el conjunto completo de valores
únicos ingresados después de que el usuario ingrese cada nuevo valor.
Dados dos vectores, encontrar el ángulo entre ellos. Dar los resultados en radianes y
en grados sexagesimales.
Graficación de frecuencias
113
Angel Vázquez-Patiño Universidad de Cuenca
Gráfica
2772 1 *************************
2 **********
3 *****
2775 4 **********
5 ******************************
6 ********************
2778 • Simular el lanzamiento de dos dados al mismo tiempo en 100 ocasiones. En un
arreglo guardar el número de veces que la suma de los valores de los dados
salió con el número respectivo de índice del arreglo (el índice desde dos). Por
2781 último, mostrar la tabla de frecuencias y un gráfico de las mismas.
Criba de Eratóstenes
2784 Un número primo es cualquier entero mayor que 1 que es divisible solamente para sí
mismo y para 1. La criba de Eratóstenes es un método para encontrar números pri-
mos. Esta opera de la siguiente manera:
2787 1. Se crea un arreglo de tipo primitivo booleano con todos los elementos iniciali-
zados con el valor TRUE. Los elementos del arreglo cuyos índices correspon-
den a un número primo se mantendrán con el valor TRUE. Todos los demás
2790 elementos eventualmente contendrán el valor FALSE.
114
Angel Vázquez-Patiño Universidad de Cuenca
2793 como FALSE todo elemento cuyo índice es múltiplo del índice para el elemen-
to con valor TRUE. Entonces, se continúa el proceso con el siguiente elemento
con valor TRUE. Para el índice 2 del arreglo, todos los elementos más allá del
2796 elemento 2 en el arreglo, que tengan índices que sean múltiplos de 2 (índices 4,
6, 8, 10, etc.), serán establecidos como FALSE; para el índice 3 del arreglo, to-
dos los elementos más allá del elemento 3 en el arreglo, que tengan índices que
2799 sean múltiplos de 3 (índices 6, 9, 12, 15, etc.), serán establecidos como FALSE;
y así en adelante.
Cuando este proceso termina, los elementos del arreglo que tienen el valor TRUE in-
2802 dican que el índice de ese elemento corresponde a un número primo. Estos índices de-
ben ser visualizados. Una animación del proceso se puede encontrar en Wikipedia
https://goo.gl/6w5Atn. A continuación se muestra el proceso para encontrar los nú-
2805 meros primos entre 2 y 20.
Escriba una aplicación que use un arreglo para encontrar y mostrar los números pri-
mos entre 2 y 1000. Ignore los elementos con índices menores que 2.
Implemente una función cuyo parámetro sea un arreglo con una serie de números en-
teros no negativos (el cero sí es aceptado) que puede estar ordenado o no, y devuelva
2811 True si la serie corresponde a una serie gráfica o False en caso de que la serie no co-
rresponda a una serie gráfica. Vea la explicación del algoritmo mediante el siguiente
enlace https://youtu.be/-prrZd_NJqQ.
115
Angel Vázquez-Patiño Universidad de Cuenca
Miscelánea
Algunos de los siguientes ejercicios se basan en los libros de Pinales Delgado y Veláz-
2817 quez Amador (2014), Alcalde Lancharro and García López (1992) y Chaves Torres
(2012).
1. Cree una matriz de N×M (leer N y M por teclado). Imprima los cuatro valores
2820 que se encuentran en los vértices de la matriz (mat[0][0], etc.).
2823 3. Desarrolle un programa que genere una matriz de cinco filas y diez columnas
con números enteros aleatorios, los imprima e indique los valores máximo y
mínimo y sus posiciones dentro de la matriz.
2826 4. Desarrolle un programa que genere e imprima una matriz unitaria de orden N.
Una matriz unitaria de orden N es la que tiene N filas y N columnas con todas
sus componentes iguales a 0, excepto las de su diagonal principal, que son
2829 iguales a 1.
5. Implemente una función para determinar si dos matrices (enviadas como argu-
mentos) contienen los mismos elementos. La función tiene un tercer parámetro
2832 para indicar si se desea que la función actúe 1) comparando las dos matrices
elemento a elemento o 2) comparando las dos matrices aunque los elementos
no se presenten en el mismo orden.
2835 6. Implemente una función que construya y devuelva matrices cuadradas de cual-
quier dimensión mayor o igual a 1, cuyos elementos sigan el patrón mostrado
en la tabla 1 (cada elemento es la suma de sus índices). La dimensión se pasa-
2838 rá como parámetro a la función. El resultado se imprimirá desde el
programa/función principal.
116
Angel Vázquez-Patiño Universidad de Cuenca
0 1 2 3
1 2 3 4
2 3 4 5
3 4 5 6
7. Dada la matriz Letras[20][20], llenar de caracteres del alfabeto, calcular la
2841 frecuencia absoluta y la frecuencia relativa para cada una de las vocales.
2844 9. Implemente un algoritmo para obtener una matriz como el resultado de la res-
ta de dos matrices de orden N×M.
11. Se tiene una matriz de seis filas y ocho columnas y se sabe que se tiene un ele-
2850 mento negativo. Realice un algoritmo que indique la posición que ese elemento
ocupa en el arreglo (en la fila y la columna en la que se encuentra ese elemen-
to).
2853 12. Se tienen dos matrices cuadradas (de 12 filas y 12 columnas cada una). Reali-
ce un algoritmo que lea las matrices y que determine si la diagonal principal
de la primera es igual a la diagonal principal de la segunda. (Diagonal princi-
2856 pal es donde los subíndices i y j son iguales).
13. * Se tiene una matriz de 12 filas por 19 columnas y se desea tener un progra-
ma para encontrar todos sus elementos negativos y para que los cambie por un
2859 cero. Desarrolle el programa que haga eso.
14. Realice un algoritmo que lea una matriz de seis filas y seis columnas y que
cuente los elementos negativos que contiene y los elementos de la diagonal
2862 principal que son igual a cero.
117
Angel Vázquez-Patiño Universidad de Cuenca
15. Una compañía de transporte cuenta con cinco chóferes, de los cuales se cono-
ce: nombre, horas trabajadas cada día de la semana (seis días) y sueldo por
2865 hora. Realice un algoritmo que:
2871 16. Indurama cuenta con N chóferes, de los cuales se conoce el nombre y los kiló-
metros que conducen durante cada día de la semana; esa información se guar-
da en un arreglo de Nx6. Se requiere un programa que capture esa informa-
2874 ción y genere un arreglo con el total de kilómetros que recorrió cada chófer du-
rante la semana. Al final se debe presentar un reporte donde se muestre el
nombre del chófer, los kilómetros recorridos cada día y el total de éstos, como
2877 se muestra en la tabla. Adicionalmente, se debe mostrar un reporte con el chó-
fer que ha recorrido más kilómetros en un día determinado de la semana y el
número de kilómetros recorridos por todos los chóferes en un día de la semana.
2880 La información del día de la semana será solicitada al usuario.
18. Implemente un algoritmo que calcule el valor que se obtiene al multiplicar en-
tre sí los elementos de la diagonal principal de una matriz de 5 por 5 elemen-
2886 tos.
118
Angel Vázquez-Patiño Universidad de Cuenca
21. Cargar en una matriz las notas de los alumnos de un colegio en función del
número de cursos (filas) y del número de alumnos por curso (columnas). Pre-
2895 sentar la mediana de cada curso.
-5 0 2
10 11 99
Para que no tenga que ingresar datos en cada prueba que haga de su algorit-
2901 mo, desarrolle una función que devuelva una matriz de f filas y c columnas
con número aleatorios (no ordenados).
2907 24. Dadas dos matrices A y B intercambiar los mínimos de A con los máximos de
B.
Para que no tenga que ingresar datos en cada prueba que haga de su algorit-
2916 mo, desarrolle una función igenerarMatriz3D(int p, int f, int c) que
devuelva una matriz de p páginas, f filas y c columnas con número aleatorios.
26. Una empresa guarda en arreglo multidimensional de 3×12×4 las ventas realiza-
2919 das por sus tres representantes a lo largo de doce meses de sus cuatro produc-
119
Angel Vázquez-Patiño Universidad de Cuenca
27. Desarrolle un programa que lea una matriz cuadrada de orden 3 y calcule e
2925 imprima su potencia N-ésima, siendo N un dato de entrada. Vea https://goo.-
gl/NYT4Xi
28. * Implemente un algoritmo que lea una matriz de n×m, en la cual se registra
2928 números. El proceso de llenado de la matriz debe realizarse en una función.
Sobre esta matriz se pide calcular la media y mediana de cada fila. Los resul-
tados de la media y mediana deben ser almacenados en arreglos independien-
2931 tes. Los cálculos de la media y mediana deben ser realizados en funciones dis-
tintas. El programa debe mostrar los resultados de la media y mediana en fun-
ciones independientes.
2934 29. * Desarrolle un programa que, ingresadas por parte del usuario dos matrices,
A y B, de diferentes dimensiones, intercambie los tres mínimos números de A
con los tres máximos números de B. El intercambio tiene que darse en orden
2937 inverso, es decir, el mínimo número de A con el máximo de B y así sucesiva-
mente. El programa debe mostrar en pantalla las matrices ingresadas por el
usuario y las matrices luego del intercambio.
120
Angel Vázquez-Patiño Universidad de Cuenca
Como sugerencia, usted podría utilizar dos matrices que indiquen las posicio-
2943 nes de los mínimos y máximos, así (los índices de filas y columnas comienzan
en cero en este ejemplo específico):
30. * Desarrolle una función que dada una matriz A de n×m devuelva una matriz
2946 B de m×n que sea formada leyendo la matriz en el sentido mostrado a conti-
nuación:
← 8 ← 4← 9 ← 5 5 9 4
A= → 2 → 1 → 7 → 4 8 2 1
B=
← 3 ← 5← 6 ← 2 7 4 2
6 5 3
31. Pregunta
Pedir al usuario el número de filas y columnas de dos matrices que ingresará. Ingre-
sar las dos matrices. Calcular la suma de las dos matrices y guardar el resultado en
2952 una matriz resultado. Calcular la resta de las dos matrices y guardar el resultado en
una segunda matriz resultado. Mostrar al usuario las dos matrices resultado.
2955 Pedir al usuario el número de filas y columnas de una matriz que ingresará. Ingresar
dicha matriz. Ingresar un número escalar. Multiplicar el escalar por la matriz y mos-
trar el resultado al usuario.
121
Angel Vázquez-Patiño Universidad de Cuenca
es simétrica si se cumple que A(f, c)=A(c, f), F = {f: fєℕ ^ 1 ≤f≤n} y C = {c: cєℕ ^
2970 1≤c≤n}. Implemente un programa que emplee funciones para determinar si una ma-
triz es simétrica. Trate de implementar una solución que reduzca el número de opera-
ciones, una vez que hay cualquier información que indique que la matriz no es simé-
2973 trica.
Producto de matrices
Pedir al usuario el número de filas y columnas de dos matrices que ingresará. Ingre-
2979 sar las dos matrices. Calcular el producto de las matrices y presentarla al usuario.
122
Angel Vázquez-Patiño Universidad de Cuenca
1. Se dice que una matriz tiene un punto de silla si algún elemento de la matriz
2982 es el menor valor de su fila y a la vez el mayor de su columna. Escribir un pro-
grama que genere una matriz de números enteros aleatorios (el usuario debe
ingresar las dimensiones) y calcule la posición de un punto de silla (si es que
2985 existe).
Tablero de ajedrez
Visualice en pantalla un tablero de ajedrez: los peones con el número 1, las torres con
2991 el 7, los caballos con 0, los alfiles con 4, el rey con 8 y la reina con 2.
* Distancia de Chebyshov
123
Angel Vázquez-Patiño Universidad de Cuenca
* El cuadrado latino
Este problema puede ser resuelto también sin matrices (así fue tomado en la prueba
3009 1 del semestre marzo-agosto 2018).
1 2 3 4
4 1 2 3
3 4 1 2
2 3 4 1
1. Un cuadrado mágico 3×3 es una matriz de 3×3 formada por números del 1 al 9
donde la suma de sus filas, sus columnas y sus diagonales son idénticas. Crear
124
Angel Vázquez-Patiño Universidad de Cuenca
3018 un programa que permita introducir una matriz cuadrada de 3×3 por teclado
y determine si este cuadrado es mágico o no. El programa deberá comprobar
que los números introducidos son correctos, es decir, están entre el 1 y el 9;
3021 además, se debe comprobar que los números no se repitan en el ingreso.
8 1 6
3 5 7
4 9 2
Para generar un cuadrado mágico siga estos pasos:
3030 3. Si un número generado cae en una casilla ocupada, no aplique la regla an-
terior, sino que debe colocarlo en la casilla de la fila posterior e igual co-
lumna.
* Lotería en Cuenca
3036 Por las fiestas de Cuenca, la Junta de Beneficencia de Guayaquil hará un sorteo espe-
cial de lotería. Imprimirá 243 boletos para cada una de las 27 parroquias más pobla-
das de Cuenca. Los boletos serán de cuatro dígitos (9⁴ = 6561 boletos en total); cada
3039 dígito está en el intervalo [0, 9]. La Junta de Beneficencia desea tener una idea bas-
tante clara de dónde y qué persona compró el boleto ganador.
Implemente un programa que utilice una matriz de 27 filas (parroquias) y 243 colum-
3042 nas (boletos por parroquia) para guardar los números de los boletos que imprimirá la
Junta de Beneficencia para el sorteo. Los números serán generados al azar y no habrá
ninguna posibilidad de que hayan dos o más ganadores. Para simular en qué parro-
3045 quia y qué número de comprador ganó, genere un número aleatorio que represente un
número ganador e indique la parroquia en la se vendería el boleto y el número de
125
Angel Vázquez-Patiño Universidad de Cuenca
comprador del boleto (asuma que cada persona compra un sólo boleto en el orden de-
3048 terminado por el número de columna de la matriz). A continuación se muestra los re-
sultados de dos ejecuciones del programa:
Cadena de ADN
3057 Una cadena de ADN se representa como una secuencia circular de bases (adenina, ti-
mina, citosina y guanina) que es única para cada ser vivo, por ejemplo
A T G
T C
A T G
Esta cadena se puede representar como un arreglo de caracteres recorriéndola en sen-
3060 tido horario desde la parte superior izquierda:
A T G C G T A T
Se pide diseñar una función que devuelva true si dos cadenas de ADN, enviadas como
parámetros, coinciden.
3063 Muy importante: la secuencia de ADN es cíclica, por lo que puede comenzar en
cualquier posición. Por ejemplo, las dos secuencias siguientes coinciden:
A T G C G T A T
A T A T G C G T
Gimnasia cerebral
126
Angel Vázquez-Patiño Universidad de Cuenca
b. Nivel intermedio
c. Nivel avanzado
3075 d. Salir
______________________
Opción[a-d]:
3078 ======================
Para el nivel básico se debe imprimir el alfabeto de izquierda a derecha y de arriba
hacia abajo en una matriz de 5x5. No tome en cuenta la letra ñ ni w. Debajo de cada
3081 letra del abecedario se debe imprimir la letra I o D o J de manera aleatoria pero sólo
se pueden repetir dos veces seguidas las letras I y D pero no la J (viendo la matriz de
izquierda a derecha y de arriba hacia abajo). Un ejemplo se muestra a continuación:
3084 A B C D E
I D J I D
F G H I J
3087 I I J D J
K L M N O
D D I J I
3090 P Q R S T
I J I I J
U V X Y Z
3093 D I J D D
Para el nivel intermedio se debe imprimir el alfabeto de izquierda a derecha y de arri-
ba hacia abajo en una matriz de 5x5 pero en orden inverso, i.e., de la zeta hasta la a.
3096 No tome en cuenta la letra ñ ni w. Debajo de cada letra del abecedario se debe im-
primir la letra I o D o J de manera aleatoria pero sólo se pueden repetir dos veces se-
guidas las letras I y D pero no la J (viendo la matriz de izquierda a derecha y de
3099 arriba hacia abajo). Un ejemplo se muestra a continuación:
Z Y X V U
I D J I D
3102 T S R Q P
I I J D J
O N M L K
3105 D D I J I
127
Angel Vázquez-Patiño Universidad de Cuenca
J I H G F
I J I I J
3108 E D C B A
D I J D D
Para el nivel avanzado se debe imprimir el alfabeto de arriba hacia abajo y de iz -
3111 quierda a derecha en una matriz de 5x5. No tome en cuenta la letra ñ ni w. Debajo
de cada letra del abecedario se debe imprimir la letra I o D o J de manera aleatoria
pero sólo se pueden repetir dos veces seguidas las letras I y D pero no la J (viendo la
3114 matriz de izquierda a derecha y de arriba hacia abajo). Un ejemplo se muestra a con-
tinuación:
A F K P U
3117 I D J I D
B G L Q V
I I J D J
3120 C H M R X
D D I J I
D I N S Y
3123 I J I I J
E J O T Z
D I J D D
Los siguientes ejercicios se basan en el capítulo 10.3 Algunos cálculos espaciales bási-
cos del libro de Olaya (2011).
Cuando se utilizan imágenes raster pueden definirse distintos tipos de distancias con-
siderando principalmente el número de celdas por las que debe pasarse para ir de una
3132 celda a otra. Por ejemplo, si se permite el movimiento en todas direcciones, las ocho
celdas aledañas a un píxel tienen una distancia de uno, puesto que se necesita un úni-
co paso para llegar a cualquiera de ellas. Por similitud a la forma en que uno puede
128
Angel Vázquez-Patiño Universidad de Cuenca
3135 moverse en un tablero de ajedrez, este tipo de distancia se conoce como distancia de
tablero de ajedrez.
129
Angel Vázquez-Patiño Universidad de Cuenca
3150 1. Genere una matriz de 8 filas y 8 columnas con números enteros aleatorios en
el rango [1, 32]. Se deben generar dos celdas (de las 64) con el mismo número
y sólo dos celdas pueden tener el mismo número (por eso el rango [1, 32]).
3153 Como ejemplo vea la siguiente matriz generada.
1 2 3 4 5
1 2 8 7 8 9
2 13 1 15 17 20
3 14 16 14 3 22
4 24 25 11 26 1
5 2 18 29 30 31
Figura 7: Matriz de 8×8 (se muestran sólo 25 celdas) con números enteros
aleatorios en el rango [1, 32]. Sólo dos celdas tienen el mismo número.
Con una matriz en donde se tiene como campos el número, apellido 1, apellido 2,
nombre 1 y nombre 2 de cada estudiante, implemente un programa que genere gru-
130
Angel Vázquez-Patiño Universidad de Cuenca
3171 pos de trabajo con estudiantes escogidos al azar. Para generar los grupos de trabajo
el usuario indica el número de estudiantes de cada grupo a generar. Es posible que
algún grupo quede con un número inferior al indicado por el usuario; en ese caso so-
3174 lamente se debe indicar en pantalla cuál es el grupo que tiene menos estudiantes que
el pedido (ver el segundo ejemplo de ejecución).
Grupo 2
3189 1. Dayana Isabel Agudo Güiracocha
2. Moisés Santiago Arévalo Angamarca
El siguiente es un segundo ejemplo de ejecución del programa en donde hay un grupo
3192 que tiene menos estudiantes de los pedidos por el usuario:
Número de estudiantes por grupo: 3
Grupo 1
3195 1. Moisés Santiago Arévalo Angamarca
2. Dayana Isabel Agudo Güiracocha
3. Julio César Andrade Carchi
131
Angel Vázquez-Patiño Universidad de Cuenca
Grupo 1
3207 1. Julio César Andrade Carchi
Grupo 2
1. Carlos Daniel Abad Sigcho
3210 Grupo 3
1. Dayana Isabel Agudo Güiracocha
2. Moisés Santiago Arévalo Angamarca
3213 Puesto que el objetivo de este ejercicio es el manejo de matrices, se presenta a conti-
nuación una solución para leer el archivo en el lenguaje de programación Java. En su
programa, para cargar los datos a una matriz (la matriz lista en el código presenta-
3216 do), debe usar la función String[][] cargarLista(String rutaArchivo,
int numEstudiantes); rutaArchivos es la ruta absoluta del archivo que contiene
la lista de estudiantes y numEstudiantes es el número total de estudiantes.
3219 import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
3222 import java.util.Arrays;
BufferedReader br = null;
3237 try {
br = new BufferedReader(new
132
Angel Vázquez-Patiño Universidad de Cuenca
FileReader(rutaArchivo));
3240 String line = br.readLine();
int i = 0;
while (null!=line) {
3243 String [] campos = line.split(SEPARADOR);
//System.out.println(Arrays.toString(campos));
} catch (Exception e) {
3252 System.out.println(e.getMessage());
} finally {
try{
3255 br.close();
}catch(IOException e){
System.out.println(e.getMessage());
3258 }
}
return lista;
3261 }
* Matriz de adyacencia
3273 Una de las implementaciones más frecuentes para la representación de grafos son las
matrices de adyacencia. Una matriz de adyacencia A (implementada como una ma-
triz bidimensional) determina las adyacencias entre pares de vértices de un grafo. En
3276 una matriz de adyacencia, los vértices se conciben como enteros en el conjunto {1, 2,
…, n} y las aristas como pares de tales enteros. Esto permite almacenar referencias a
133
Angel Vázquez-Patiño Universidad de Cuenca
las aristas en las celdas de una matriz bidimensional de nxn. Cada fila y cada colum-
3279 na representan un vértice del grafo y cada posición representa una arista (o la ausen-
cia de esta) cuyo vértice origen se encuentra en la fila y vértice final se encuentra en
la columna. Las siguientes figuras muestran la representación gráfica de un grafo diri-
3282 gido simple, un grafo no dirigido simple, un grafo euleriano y un multigrafo con sus
respectivas matrices de adyacencia.
◦ Si G es no dirigido, m≤n(n-1)/2
134
Angel Vázquez-Patiño Universidad de Cuenca
Craps
Un juego de azar muy popular es el juego de dados conocido como craps, el cual es
3303 jugado en casinos y callejones de todo el mundo. Las reglas del juego son muy fáciles
(Deitel and Deitel, 2012):
Usted lanza dos dados. Cada dado tiene seis caras, que contienen uno, dos,
3306 tres, cuatro, cinco y seis puntos, respectivamente. Después que los dados pa-
ran, se calcula la suma de los puntos en las dos caras que están hacia arriba.
Si la suma es 7 u 11 en el primer lanzamiento, usted gana (termina el juego).
3309 Si la suma es 2, 3 o 12 en el primer lanzamiento (llamado “craps”), usted pier-
de (es decir, la “casa” gana; termina el juego). Si la suma es 4, 5, 6, 8, 9 o 10
en el primer lanzamiento, esa suma se convierte en su “punto” (continúa el
3312 juego). Para ganar, debe continuar lanzando los dados hasta que “hace su
punto” (es decir, la suma de los puntos en las dos caras que están hacia arriba
es igual que la suma en el primer lanzamiento). Se pierde por sacar un 7 antes
3315 de que “hace su punto”.
Escriba una aplicación que ejecute 1'000.000 de juegos de craps y conteste las si-
guientes preguntas:
3324 3. ¿Cuáles son las probabilidades de ganar en el juego de craps? Nota: debe des-
cubrir que el juego de craps es uno de los juegos de casino más justos; ¿Qué
cree que esto significa?
135
Angel Vázquez-Patiño Universidad de Cuenca
3339 1. Si está sobre una celda blanca, cambia el color de la celda, gira noventa grados
a la derecha y avanza una celda.
2. Si está sobre una celda negra, cambia el color de la celda, gira noventa grados
3342 a la izquierda y avanza una celda.
1. Genere una matriz de 100×100 con 5000 celdas blancas (valor 1) y 5000 celdas
3345 negras (valor 0). Las celdas deben ser “pintadas” al azar.
3. Haga que la homiga camine hasta que llegue a los límites de la matriz.
3348 4. Cada vez que la hormiga se mueva una celda, muestre la información de la
matriz como se muestra en la figura 8.
136
Angel Vázquez-Patiño Universidad de Cuenca
3351 Este problema clásico en ciencias de la computación fue propuesto por René Estrella.
Este problema consiste en ubicar ocho reinas en un tablero de ajedrez de tal manera
que no se ataquen entre sí. Por lo tanto, la solución requiere que no existan dos
3354 reinas que se encuentren en la misma fila, columna o diagonal. En este sentido, una
configuración candidata consiste en una forma específica de ubicar las ocho reinas en
el tablero (que pueden o no atacarse entre sí), mientras que una solución es una
3357 configuración candidata que cumple el requerimiento de que las reinas no se ataquen
entre sí. Se sabe que este problema tiene 92 soluciones distintas, es decir, existen 92
formas de ubicar las ocho reinas en el tablero de forma que el requerimiento del
3360 problema se cumpla (vea https://goo.gl/fFo9WL). En la siguiente figura se muestra
una de las posibles soluciones:
1. Generar solución
137
Angel Vázquez-Patiño Universidad de Cuenca
1. Generar solución
3372 El programa genera una configuración candidata y verifica si esa configuración co-
rresponde a una solución. Si este es el caso, muestra la solución en pantalla simulan-
do un tablero de ajedrez e indicando la ubicación de las ocho reinas. Si la configura-
3375 ción generada no corresponde a una solución, se descarta y se repite el proceso, vol-
viéndose a generar otra configuración candidata.
3378 Cuando el usuario escoge esta opción se le solicita que ingrese ocho pares de coorde-
nadas numéricas que indiquen la ubicación de las reinas en el tablero. Cada coorde-
nada será un número entero en el rango [1, 8], considerando que el par de coordena-
3381 das (1, 1) corresponde a la casilla superior izquierda del tablero y la coordenada (8,
8) corresponde a la casilla inferior derecha. A continuación, el programa mostrará la
configuración ingresada en forma de un tablero con la ubicación de las ocho reinas e
3384 indicando si se trata de una solución o no. Por ejemplo, si el usuario ingresa las si-
guientes coordenadas:
Coordenadas Reina 1: 1, 3
3387 Coordenadas Reina 2: 2, 6
Coordenadas Reina 3: 3, 4
Coordenadas Reina 4: 4, 2
3390 Coordenadas Reina 5: 5, 8
Coordenadas Reina 6: 6, 5
Coordenadas Reina 7: 7, 7
3393 Coordenadas Reina 8: 8, 1
La configuración resultante sería la que se muestra en la figura 9, la cual evidente-
mente corresponde a una solución del problema.
3396 3. Salir
138
Angel Vázquez-Patiño Universidad de Cuenca
* Recorridos de matriz
Genere una matriz de n filas y m columnas (pueden ser números pares o impares),
con números aleatorios enteros en el intervalo [0, n+m); y muestre la matriz en pan-
3402 talla. Lea la matriz en forma de espiral comenzando por el último elemento, hacia
arriba, como se muestra en la figura 10. A medida que vaya leyendo la matriz, llene
un arreglo unidimensional que contenta los números que se van leyendo, y muestre el
3405 arreglo en pantalla. Usando el arreglo, extraiga el número que se encuentra en la últi-
ma posición y almacénelo en la variable nro_a. Además, extraiga el número que se
encuentra en la posición correspondiente a nro_a y almacénelo en la variable
3408 nro_b. Con estos números forme una matriz en donde la primera columna tenga la
cantidad de números menores, mayores e iguales a nro_a; y la segunda columna ten-
ga la cantidad de números menores, mayores e iguales a nro_b (en la figura se asu-
3411 me que el primer elemento es el de subíndice cero). Finalmente muestre la última
matriz.
3414 Genere una matriz de n filas y n columnas, siendo n impar (validar), con números
aleatorios enteros en el intervalo [0, n+n); y muestre la matriz en pantalla. Lea la ma-
triz en forma de espiral comenzando por el elemento central, como se muestra en la
3417 figura 11. A medida que vaya leyendo la matriz, llene un arreglo unidimensional que
139
Angel Vázquez-Patiño Universidad de Cuenca
contenta los números que se van leyendo, y muestre el arreglo en pantalla. Ordene los
números del arreglo ascendentemente y muestre el arreglo en pantalla. Usando el
3420 arreglo ordenado, extraiga el número que se encuentra en la última posición y alma-
cénelo en la variable nro_a. Además, extraiga el número que se encuentra en la posi-
ción correspondiente a nro_a y almacénelo en la variable nro_b. Con estos números
3423 forme una matriz en donde la primera columna tenga la cantidad de números meno-
res, mayores e iguales a nro_a; y la segunda columna tenga la cantidad de números
menores, mayores e iguales a nro_b (en la figura se asume que el primer elemento es
3426 el de subíndice cero). Finalmente muestre la última matriz.
* Datos de estudiantes
Escriba un programa que forme una matriz de n×5 elementos (n debe ser un entero
3429 positivo, ingresado por el usuario), bajo el siguiente esquema:
• La primera columna debe ser ingresada por el usuario y debe ser numérica de
dos cifras. Esta columna representa el código del alumno y debe ser validado
3432 para que sea único dentro de los datos ingresados en la columna.
140
Angel Vázquez-Patiño Universidad de Cuenca
• La quinta columna debe ser calculada como el promedio de las tres columnas
de calificaciones, redondeada como el entero más cercano al valor promedio
3438 calculado.
Forme una segunda matriz, de n×3 elementos. La primera columna lleva los códigos
de estudiantes ingresados para la primera matriz. La segunda columna lleva la equi-
3441 valencia de las calificaciones en base al siguiente cuadro:
01-09 R Regular
10-12 B Buena
13-17 A Aceptable
18-20 S Sobresaliente
Determine cuántos alumnos aprobarán el curso con Buena, cuántos con Aceptable y
cuántos con Sobresaliente.
3447 Se deben mostrar las dos matrices para verificar los resultados obtenidos.
* Datos de personas
El programa va a almacenar registros en una matriz. Para ello se debe hacer lo si-
3450 guiente:
Solicite al usuario que ingrese uno a uno los campos de una matriz que almacenará
3453 los registros y cree un índice que asocie el campo a una columna de la matriz. Luego,
cree la matriz que almacenará los registros.
Ejemplo
3456 cédula
nombre
apellido
3459 edad
141
Angel Vázquez-Patiño Universidad de Cuenca
...
Índice
cédula 0
nombre 1
apellido 2
edad 3
... ...
2. Ingreso de datos
3462 Una vez ingresados los campos con los que se va a trabajar, pida al usuario que in -
grese los registros como cadenas, de la siguiente manera (en base a los campos pues-
tos en el ejemplo anterior):
3465 apellido:cevallos;edad:22;cedula:0104132548
cedula:0108562554;edad:25;nombre:juan;apellido:malo
Nóte que los registros no necesariamente contienen todos los campos, ni se ingresan
3468 los datos en orden de acuerdo a los campos ingresados en el punto 1.
Cada vez que se ingresa un registro, éste se debe pasar a la matriz de datos. Para
ello, procese la cadena que representa cada registro y basado en el índice creado en el
3471 punto 1 guarde cada campo en la columna correspondiente de la matriz. Después de
cada ingreso, muestre la matriz de datos.
0104132548 cevallos 22
0108562554 juan malo 25
3474 Si un registro contiene un campo que inicialmente no se consideró, el programa debe-
rá indicar con una mensaje que el campo no fue encontrado. Por ejemplo, si se ingre-
sa el siguiente registro, el programa deberá mostrar un mensaje de error y la matriz
3477 de datos resultante.
cedula:0305677824;teléfono:4023568;nombre:sara;apellido:abril
¡Advertencia! El campo teléfono no existe pero se ingresa el registro.
142
Angel Vázquez-Patiño Universidad de Cuenca
0104132548 cevallos 22
0108562554 juan malo 25
0305677824 sara abril
3480 3. Búsquedas
El programa debe permitir buscar un registro por cualquier campo. Es decir, se pre-
gunta al usuario por qué campo desea buscar, se busca ese registro utilizando la bús-
3483 queda binaria y se muestran los datos de ese registro. Además, se muestra la matriz
antes y después de cada búsqueda. Por ejemplo:
¿Por qué campo desea buscar?
3486 apellido
Ingrese el valor a buscar: malo
El programa deberá mostrar la matriz antes y después de la búsqueda y los datos del
3489 registro si existe.
cédula: 0108562554
nombre: juan
3492 apellido: malo
edad: 25
143
Angel Vázquez-Patiño Universidad de Cuenca
Ejemplo
• Código: emp3
• Código: emp3
• Nombre: Elecaustro
Código Nombre
emp1 Marcimex
emp2 Etapa
emp3 Elecaustro
3. Listar los empleados de una empresa en particular ordenados de forma descen-
dente según el salario.
• Código: emp1
Empresa: Marcimex
Empleado Salario
Juan 1500
Edgar 1200
Pedro 1100
Jaime 900
144
Angel Vázquez-Patiño Universidad de Cuenca
3537 Ejemplo
Número de datos: 20
1 2 3 3 7 7 6 9 8 6 10 12 13 15 17 18 18 19 20 20
Número de rangos: 4
1 5 4
6 10 7
11 15 3
16 20 6
Nota: las columnas de esta matriz representan, de izquierda a derecha, el límite infe-
rior, el límite superior y la frecuencia de cada rango.
145
Angel Vázquez-Patiño Universidad de Cuenca
#
# #
# #
# # #
# # # #
# # # #
# # # #
1-5 6-10 11-15 16-20
* Cifrado básico 1
Escriba un programa que lea una frase y que la almacene en una matriz siguiendo el
3549 esquema mostrado en la figura 12. Luego debe mostrarse la matriz leyéndola en las
filas impares de izquierda a derecha y en las filas pares de derecha a izquierda. Las
columnas que no contienen información, no deben ser consideradas en la visualización
3552 de la matriz.
Por ejemplo, la frase: “hola mundo, que tal? Hoy es viernes 26 de enero.” se almacena
en la matriz como se muestra en la figura 12.
146
Angel Vázquez-Patiño Universidad de Cuenca
3555 La matriz se debe leer siguiendo el sentido especificado, según la fila sea par o impar
dará como resultado:
Implemente una función que reciba una frase y la devuelva cifrada. El cifrado a utili-
zar es básico y sigue el siguiente algoritmo:
3561 1. Se utiliza una matriz cuadrada cuyo orden permita tener un número de ele-
mentos igual o mayor al total de caracteres de la frase. Pero, la matriz no
debe tener más elementos de los necesarios de manera que no se utilice memo-
3564 ria innecesaria. Por ejemplo, si la longitud de la frase es 9, el orden de la ma-
triz cuadrada es 3; o si la longitud de la frase es 17, el orden de la matriz es 5.
2. Los caracteres de la frase deben ser asignados a los elementos de la matriz co-
3567 menzando desde el elemento de la primera fila y primera columna. Luego, el
siguiente carácter de la frase debe ser asignado al elemento de la matriz cuya
fila sea una menos a la anterior y cuya columna sea una más a la anterior
3570 (“diagonal ascendente”). Si la fila es la primera, la siguiente debe ser la última
147
Angel Vázquez-Patiño Universidad de Cuenca
Figura 13: Asignación de caracteres de una frase en una matriz cuadrada que
es usada para cifrar el texto. Los subíndices indican número de carácter de la
3579 frase. El subguión indica un espacio.
3585 Para efectos de verificación se debe mostrar la matriz cuadrada; parecida a la figura
13 pero sin los subíndices. Usted puede verificar el correcto funcionamiento de su pro-
grama utilizando las siguientes frases:
148
Angel Vázquez-Patiño Universidad de Cuenca
Vea https://youtu.be/DyRh5UhtVvw
Algoritmo de Floyd-Warshall
149
Angel Vázquez-Patiño Universidad de Cuenca
6. Funciones
1. * ¿Cómo se conocen a las variables que son creadas dentro del programa y
fuera de cualquier función?
3600 a) Estáticas
b) Globales
c) Instancia
3603 d) Locales
2. ¿Cuál es la diferencia entre una llamada de función por valor y una llamada
de función por referencia?
3606 3. ¿Cómo se conocen a las variables que son declaradas dentro de una función o
bloque de código que pueden ser usadas sólo por sentencias que están dentro
de esa función o bloque y no pueden ser conocidas por funciones fuera de don-
3609 de fueron declaradas?
6. ¿Cuando una variable global y una variable local tienen el mismo nombre cuál
3615 tiene prioridad dentro de la función donde se declaró la variable local?
7.
Miscelánea
Algunos de los siguientes ejercicios son tomados del libro de Pérez Montes (2010) o
3618 del libro de la Editorial Macro (2001).
1. Implemente una función que imprima en pantalla el doble del valor que se le
pasa como parámetro.
3621 2. Implemente una función que reciba como parámetro un número N, y muestre
por pantalla N veces el mensaje “Función ejecutándose”. Validar N para que
sea mayor o igual a cero.
150
Angel Vázquez-Patiño Universidad de Cuenca
3624 3. Implemente una función que devuelva el valor absoluto de cualquier número
real dado.
4. Implemente una función que indique si un año es bisiesto o no. Un año es bi-
3627 siesto si es múltiplo de 4 (por ejemplo 1984). Sin embargo, los años múltiplos
de 100 sólo son bisiestos si a la vez son múltiplos de 400 (por ejemplo, 1800 no
fue bisiesto, mientras que 2000 sí lo fue).
3630 5. Implemente una función que calcule la distancia euclídea entre dos puntos.
7. Implemente una función que sume los 137 primeros números pares (>0).
8. Implemente una función que sume los n primeros números impares (>0).
3636 9. Implemente una función que genere un número aleatorio real entre un rango
enviado como parámetro.
10. Implemente una función que imprima en pantalla un número dado de asteris-
3639 cos indicado en el parámetro recibido. El argumento indica el número de aste-
riscos del cateto del triángulo rectángulo que se “dibuja”. Por ejemplo, para un
triángulo rectángulo de cateto 8, se imprimiría en pantalla
3642 *
* *
* * *
3645 * * * *
* * * * *
* * * * * *
3648 * * * * * * *
* * * * * * * *
11. Implemente una función que reciba dos números y que devuelva el número ma-
3651 yor.
12. Implemente una función que reciba tres números y que devuelva el máximo.
13. Implemente una función que tenga como parámetro un arreglo de números
3654 reales y que devuelva el máximo de los números.
151
Angel Vázquez-Patiño Universidad de Cuenca
14. Implemente una función que tenga como parámetro una matriz de números
reales y que devuelva el mínimo de los números.
3657 15. Implemente una función que reciba dos enteros y muestre todos los números
comprendidos entre ellos (de manera ascendente, desde el número menor hasta
el número mayor), inclusive. Los números pueden ser ingresados en orden as-
3660 cendente o descendente.
17. Implemente una función que calcule la suma (debe escribir también la función
3663 para realizar la potencia)
18. Implemente una función que transforme a binario un número entre 0 y 255.
3669 20. Implemente una función que reciba como parámetros una cadena de caracteres
y un carácter; la función devuelve el número de veces que se encuentra el ca-
rácter en la cadena.
3672 21. Implemente una función que indique si un número entero es primo.
3675 23. Implemente una función que indique si dos números enteros positivos son ami-
gos. Dos números amigos son dos números enteros positivos a y b tales que la
suma de los divisores propios de uno es igual al otro número y viceversa, es
3678 decir SD(a)=b y SD(b)=a, donde SD(n) es igual a la suma de los divisores de
n, sin incluir a n. Vea https://is.gd/KHBfs1.
24. Implemente una función que calcule el máximo común divisor de dos números.
3681 25. Implemente una función que calcule el máximo común divisor de tres números.
26. Implemente una función que calcule el mínimo común múltiplo de dos núme-
ros.
152
Angel Vázquez-Patiño Universidad de Cuenca
3684 27. Implemente una función que calcule el mínimo común múltiplo de tres núme-
ros.
28. Implemente una función que voltee un número entero positivo dado. Por ejem-
3687 plo, si se ingresa 98786, se devuelve 68789.
29. Implemente una función que reciba un arreglo de números enteros y devuelva
el máximo común divisor de esos números.
3690 30. Implemente una función que reciba un arreglo de números enteros y devuelva
el mínimo común múltiplo de esos números.
31. Implemente una función que reciba como parámetros dos arreglos. La primera
3693 con los 6 números de una apuesta de la primitiva y la segunda con los 6 núme-
ros ganadores. La función debe devolver el número de aciertos.
32. Implemente una función que reciba un arreglo que debe rellenar. Se leerá por
3696 teclado una serie de números hasta que el usuario escriba “PARAR” o hasta
que el arreglo se llene: guarde sólo los pares e ignore los impares. Se devuelve
la cantidad de impares ignorados.
3699 33. Implemente una función que reciba una matriz de enteros y un número, e indi-
que si el número se encuentra en la matriz.
34. Implemente una función que devuelva el valor máximo de una matriz.
3702 35. Implemente una función que devuelva, en un arreglo, el área y el volumen de
un cilindro. Hemos de pasarle a la función el radio y la altura.
36. Implemente una función que recibe un número entero y devuelve, en un arre-
3705 glo, los divisores primos que tiene.
38. Implemente una función que calcule el n-ésimo término de la serie de Fibonac-
3711 ci. En esta serie el n-ésimo valor se calcula sumando los dos valores anteriores.
Es decir fibonacci(n) = fibonacci(n-1) + fibonacci(n-2), siendo fibonacci(0) =
1 y fibonacci(1) = 1.
153
Angel Vázquez-Patiño Universidad de Cuenca
3714 39. Igual que el ejercicio anterior, pero pudiendo configurar los valores de los dos
primeros términos de la serie.
40. Implemente una función que reciba una matriz de enteros, representando un
3717 tablero de ajedrez. Disponemos de las constantes PB (peón blanco), TN (torre
negra), etc. (P, T, C, A, R, D). La función debe devolver un valor booleano,
que indique si el rey negro está amenazado.
3720 41. Igual que el ejercicio anterior, pero indicando si existe jaque mate a las negras.
42.
* E24 Histograma
Se han definido los siguientes rangos: 0-50, 51-100, 101-150, 151-200 y 201-250.
Se debe mostrar el número de datos que está en cada uno de los rangos especificados
3726 (frecuencias), separados por un TAB. Además, se debe mostrar un histograma. Por
ejemplo:
Tabla de valores por rango
3729 ---------------------------------------------------------------------------
0-50 51-100 101-150 151-200 201-250
---------------------------------------------------------------------------
3732 17 8 10 5 32
---------------------------------------------------------------------------
Histograma
3735 |-----------------------------------------------------------------
0-50 | *******************
51-100 | *********
3738 101-150 | ***********
151-200 | *****
201-250 | ****************************************************
3741 |-----------------------------------------------------------------
Aritmética básica
154
Angel Vázquez-Patiño Universidad de Cuenca
2. Resta
3. Multiplicación
3747 4. División
5. Salir
Opción [1-5]: _
3750 Si no se ingresa un número del 1 al 5, se debe mostrar un error que lo indique y debe
pedir el ingreso de una opción válida. Opción 1: suma dos números, el primero en el
rango [-1000, -1] y el segundo en el rango [1, 1000]. Opción 2: resta dos números, el
3753 primero en el rango [-1000, 1] y el segundo en el rango [-1, 1000]. Opción 3: multipli-
ca dos números, el primero en el rango [100, 200] y el segundo en el rango [-10, 2].
Opción 4: división del primer número entre el segundo; el primero en el rango [-10,
3756 10] y el segundo en el rango [-5, -1] U [1, 5].
Potenciación
Desarrolle un programa que pida dos números. Se debe calcular la potencia tomando
3759 como base el primer número y como exponente el segundo número dado. El resulta-
do, luego de visualizarlo, debe elevarlo al cubo, ese resultado, luego de visualizarlo,
debe elevarlo al cuadrado (se debe presentar este último resultado también).
Para resolver este ejercicio no puede usar la función choices del módulo random (Py-
thon).
3765 1. Escriba una función que devuelva una lista de seis números aleatorios. Los nú-
meros aleatorios son números de un decimal cuya suma es igual a uno.
2. Escriba una función para normalizar los números de una lista (lista con núme-
3768 ros mayores iguales a cero). Normalizar en este contexto se debe entender
como que los elementos de la lista que devuelve la función, luego de ser suma-
dos, dan igual a uno. Por ejemplo, si la función se llama normalizar, normali-
3771 zar([1, 3]) devuelve la lista [0.25, 0.75].
155
Angel Vázquez-Patiño Universidad de Cuenca
3777 con el valor igual a uno, esto es, devuelve una lista con solamente un valor de
lanzamiento). Por ejemplo, si la función se llama dado, dado([0.3, 0.4, 0.1, 0.1,
0.1, 0.0])1 devuelve una lista con un valor de lanzamiento (quizá2 [1]). Las pro-
3780 babilidades de que salga 1 es 0.3, la probabilidad de que salga 2 es 0.4, la pro-
babilidad de que salga 3 es 0.1, etc. Como otro ejemplo, dado([0.1, 0.1, 0.3,
0.3, 0.1, 0.1], 5) devuelve una lista con cinco valores de lanzamiento (quizá [3,
3783 4, 3, 4, 1]).
4. Genere muchos lanzamientos de dados con su “dado” sesgado. Con los resulta-
dos de todos sus lanzamientos haga una gráfica (stem) como la que se muestra
3786 como ejemplo a continuación.
Aproximación de sinh-1
156
Angel Vázquez-Patiño Universidad de Cuenca
Función W de Lambert
3804 La función W de Lambert o también conocida como función Omega o log producto,
es la función inversa de f(w)=wew donde ew es la función exponencial natural y w es
cualquier número complejo. Para n→∞ (en la práctica un número suficientemente
3807 alto) la función W de Lambert de x se puede calcular con la siguiente serie de Taylor:
Desarrolle un programa que pida los valores de x (cualquier número real) y n (cual-
3810 quier número entero) para calcular el valor de la función W de Lambert de x con n
términos de la serie de Taylor. El programa debe hacer uso de una función desarrolla-
da por usted mismo llamada funcionW. No se pueden usar funciones predetermina-
3813 das de ningún lenguaje de programación para calcular el factorial o la potencia de un
número (tampoco se puede usar el acento circunflejo, ^); esto quiere decir que debe
desarrollar las funciones para calcular la potencia (llámela miPotencia) y el factorial
3816 (llámela miFactorial) de un número. Además, debe validar el valor de x como se indi-
ca en la serie de Taylor; para este fin, desarrolle una función llamada xValido (de-
vuelve verdadero o falso de acuerdo a la validación) y una función miABS (devuelve
3819 el valor absoluto de cualquier número real).
157
Angel Vázquez-Patiño Universidad de Cuenca
3825 Desarrolle un programa que calcule el máximo común divisor (MCD) y el mínimo co-
mún múltiplo (MCM) de dos números ingresados por el usuario. El programa deberá
manejar un menú con las siguientes opciones.
3828 1. Ingreso de datos (Se pide al usuario que ingrese los dos números)
2. Máximo Común Divisor (Calcula el MCD)
3. Mínimo Común Múltiplo (Calcula el MCM)
3831 4. Salir
Ejemplo:
1. Ingreso de datos
3834 número1: 12
número2: 30
El MCD de 12 y 30 es: 6
3837 El MCM de 12 y 30 es: 60
Escriba un programa, usando funciones, que determine cuántas personas (el número
3840 de personas es indicado por el usuario) están con un peso adecuado o no, según su
estatura. Para ello, considere la tabla 1.
158
Angel Vázquez-Patiño Universidad de Cuenca
El programa debe tener registrado en una matriz, los pesos y las estaturas correspon-
3843 dientes según lo mostrado en la tabla 1. El usuario debe indicar los datos de cuántas
personas va a ingresar y a continuación ingresar los valores de peso, estatura y sexo
de cada persona. Estos valores ingresados se deben almacenar en arreglos separados
3846 de pesos, de estaturas y de sexo. El programa debe verificar si esos valores están de
acuerdo a la tabla anterior. En base a la verificación las personas deben clasificarse
como:
3849 • A: si el peso de la persona está por debajo del rango considerado ideal.
• B: si el peso de la persona está en el rango de peso considerado ideal.
• C: si el peso de la persona está por debajo del rango considerado ideal.
159
Angel Vázquez-Patiño Universidad de Cuenca
A ValorA_m ValorA_h
B ValorB_m ValorB_h
3861 C ValorC_m ValorC_h
============================================================
Implemente una función que utilice el método de la bisección (vea Quarteroni et al.,
3873 2014, pp. 43–47) para encontrar uno de los dos ceros de la función en
el rango indicado por el usuario.
3876 El método de Newton es un algoritmo iterativo que permite encontrar los ceros (i.e.,
cortes con el eje de las abscisas) de una función f(x). El método trabaja con los valo-
res de f(x) y f'(x) (i.e., la derivada de la función). Las aproximaciones del cero de la
3879 función están dadas por la fórmula iterativa
que permite calcular una secuencia de valores x(k) (las aproximaciones del cero de la
función) comenzando con un valor inicial x(0). El algoritmo termina cuando el valor
3882 absoluto de la diferencia entre una aproximación (x(k+1)) y la anterior (x(k)) es menor
a un valor llamado tolerancia o cuando se cumple un número máximo de iteraciones.
En la siguiente figura se pueden apreciar las primeras iteraciones generadas por el
3885 método de Newton con un valor inicial x(0) para la función f(x) = x + ex + 10/(1 +
x2) - 5.
160
Angel Vázquez-Patiño Universidad de Cuenca
3897 4. Escriba una función newton(x0, tol, nmax) que devuelva en una matriz los
resultados del método. x0, tol y nmax son respectivamente x(0), tolerancia y
número máximo de iteraciones.
Por ejemplo, la función podría devolver una matriz (los valores no necesaria-
mente reflejan la salida de una ejecución del programa; sólo se pretende acla-
3909 rar el número de columnas que tendría cada fila)
161
Angel Vázquez-Patiño Universidad de Cuenca
Ordenamiento de n números
3921 • Diseñe una función que ordene los números de un arreglo que se le pasa. Se
devuelve un arreglo con los números ordenados.
• Diseñe una función que ordene los números de una matriz que se le pasa. Se
3924 devuelve una matriz con los números ordenados.
Búsqueda lineal
• Diseñe una función que realice la búsqueda lineal de un arreglo. La función de-
3927 vuelve el índice (del arreglo original) en donde se encuentra el número busca-
do; si no se encuentra el número, la función devuelve -1. Una explicación de la
búsqueda lineal se puede encontrar en la sección 6.2 del libro de Alcalde Lan-
3930 charro y García López (1992).
• Diseñe una función que realice la búsqueda lineal de una matriz. La función
devuelve el índice (de la matriz original) en donde se encuentra el número bus-
3933 cado; si no se encuentra el número, la función devuelve (-1, -1). Una explica-
ción de la búsqueda lineal en matrices se puede encontrar en la sección 6.2.3
del libro de Alcalde Lancharro y García López (1992).
162
Angel Vázquez-Patiño Universidad de Cuenca
3945 En el juego cada jugador tiene dos dados (hay cuatro dados en total). En cada turno
los dos jugadores lanzan los dos dados al mismo tiempo. El juego termina cuando la
suma de los valores de ambos jugadores es igual, e.g., el un jugador saca 3 y 5 (su -
3948 man 8), y el segundo jugador saca 6 y 2 (suman 8). El ganador es la persona cuya
suma de valores de lanzamientos sea mayor. Por ejemplo, en la siguiente tabla se
muestra un juego que concluye en el turno 4 (pues la suma es igual); el ganador es el
3951 jugador 2.
En el caso de que la suma total sea igual para ambos jugadores, se debe continuar el
juego; nuevamente, termina cuando la suma de los valores de ambos jugadores es
3954 igual. Esto significa que siempre uno y sólo uno de los jugadores es ganador.
Se debe ir mostrando los valores sacados por los dos jugadores en cada turno. Por
ejemplo, lo siguiente es una ejecución del programa:
3957 Inicia el juego.
Jugador 1 Jugador 2
Turno Dados 1 y 2 Suma Dados 1 y 2 Suma
3960 1 1 y 3 4 2 y 2 4
2 4 y 1 5 3 y 5 8
3 6 y 6 12 2 y 4 6
163
Angel Vázquez-Patiño Universidad de Cuenca
3963 4 5 y 4 9 6 y 3 9
Finaliza el juego.
3969 2. Implemente una función que devuelva la suma (como número entero) de dos
números al azar en el rango [1, 6]. En esta función tiene que utilizar la función
implementada en el punto anterior.
3972 3. Debe mostrar los valores sacados en cada turno mediante una función. Debe
utilizar secuencias de escape para poder presentar la información con las tabu-
laciones pertinentes que presenten los resultados como se mostró en el ejemplo
3975 de ejecución del programa (i.e., perfectamente alineados).
2. Para k = 0, 1, 2, 3, …
a) Calcular Axk.
Para la mayoría de vectores x0, la secuencia {uk} se aproxima al valor propio domi-
3987 nante y la secuencia {xk} se aproxima al correspondiente vector propio.
En el desarrollo de este ejercicio utilice una lista de números como un vector (esto es
obligatorio). Por ejemplo, la lista v = [1, 2, 3] haría referencia al vector
164
Angel Vázquez-Patiño Universidad de Cuenca
3990 .
Así mismo, utilice una lista de listas de números como una matriz (esto es obligato-
rio). Por ejemplo, la lista A = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] haría referencia a la matriz
3993 .
Realice lo siguiente:
2. Programe una función que multiplique una matriz por un vector (esos son los
parámetros de la función) y devuelva el resultado.
4002 3. Programe una función que devuelva el resultado de multiplicar un escalar por
un vector. Los parámetros son el escalar y el vector.
4011 Las iteraciones del algoritmo se realizan hasta que el error aproximado relativo
sea menor o igual a 0.0000000001. El error aproximado relativo está dado por
165
Angel Vázquez-Patiño Universidad de Cuenca
5. Las primeras diez aproximaciones del valor y vector propio deben ser mostra-
4017 das y, al final, también la última aproximación (que está condicionada por el
error aproximado relativo).
4020 Un ejemplo de ejecución del programa usando la función del método de la potencia
para la matriz A = [[6, 5], [1, 2]] es (recuerde que x0 es aleatorio)1:
Valor propio aproximado 0 : 9.3
4023 Vector propio aproximado 0: [1.0, 0.66]
1 Los puntos suspensivos indican que hay más resultados intermedios. No se los muestra pues usan
mucho más espacio y los resultados mostrados dejan claro el funcionamiento del programa.
166
Angel Vázquez-Patiño Universidad de Cuenca
4044 .
.
Valor propio aproximado 8 : 6.559193444859399
4047 Vector propio aproximado 8: [0.9999999999999999, 0.22782416900328784,
0.20785577545585915, 0.006234275172933884]
167
Angel Vázquez-Patiño Universidad de Cuenca
Miscelánea
1. Dada una cadena, presentar de manera vertical cada letra de la cadena con su
4059 respectivo valor ASCII (primera columna la letra, segunda columna el valor).
4062 3. Hacer un programa que ingrese una cadena de caracteres y determine el núme-
ro de mayúsculas y el número de minúsculas.
4065 5. Muestre el número de veces que aparecen las letras a, o y e en la cadena “Ma-
ñana es sábado y voy a irme a pasear por los hermosos parques de Cuenca”.
Además, si el número de veces que se repite la a es superior a 10 debe apare-
4068 cer el mensaje “Exceso de a”, si el número de veces que se repite la o es supe-
rior a 5 debe mostrarse “Exceso de o” y si se repite más de 3 veces la letra e
debe mostrarse “Exceso de e”.
4071 6. Implemente una función que devuelva una cadena sin los espacios en blanco.
10. Solicitar el ingreso del apellido, nombre y edad de dos personas como cadenas
4080 (validar que sea una edad correcta entre 0 y 130 años). Mostrar el nombre de
la persona con mayor edad.
11. Leer una cadena y decir si es un número entero o real válido. Asuma que el
4083 usuario ingresa solamente números (0-9) y puntos (.).
168
Angel Vázquez-Patiño Universidad de Cuenca
12. Contar cuántas palabras tiene una cadena. Escribir dos versiones del progra-
ma:
4086 a) Asumir que cada palabra está separada por un sólo espacio en blanco.
b) No se sabe cómo están separadas las palabras: pueden estar separadas por
más de un espacio en blanco.
4089 13. Escriba un programa que lea una frase y a continuación visualice cada palabra
de la frase en columnas, seguida del número de letras que tiene cada palabra.
14. Ingresar una frase y modificarla convirtiendo el primer carácter de cada pala-
4092 bra, si esta fuera una letra, de minúsculas a mayúsculas. Cada palabra está se-
parada por uno o más espacios o comas.
18. El usuario ingresa una frase y el programa debe mostrar cuántas palabras de
4098 una letra, de dos letras, de tres letras, de cuatro letras y de cinco o más letras
existen en el texto ingresado. Asuma que no hay signos de puntuación ni inte-
rrogación (i.e. sólo se ingresan letras). Ejemplo:
4101 Ingrese una frase
4104 Resultados
1 letra : 0 palabras
2 letras: 3 palabras
4107 3 letras: 2 palabras
4 letras: 3 palabras
5+ letras: 8 palabras
4110 19. Dada la cadena “En mi próxima vida, creeré en la reencarnación”, mostrar lo
siguiente:
a) Su longitud
4113 b) El carácter asociado al índice 7
c) La subcadena “creeré”
169
Angel Vázquez-Patiño Universidad de Cuenca
20. Verificar si una cadena de texto almacenada en la cadena nif, es un NIF co-
rrecto o no. Si lo es, se imprimirá en pantalla su parte numérica; si no lo es, se
4125 mostrará el mensaje “NIF no válido”. Se tendrá en cuenta lo siguiente: Supo-
ner que los NIFs tienen 8 dígitos y, a continuación, una letra (no importa que
sea mayúscula o minúscula).
4128 Pista: dos condiciones que debe cumplir el NIF: tener 9 caracteres y que el úl-
timo sea una letra. Comprobado esto, verificar que el resto de caracteres son
dígitos.
4131 21. Solicitar el ingreso del nombre y edad de dos personas. Validar el nombre in-
gresado: 1) que no hayan espacios o caracteres diferentes a las vocales (vocales
con tildes o diéresis también), consonantes, o la ñ (u otros caracteres usados
4134 en nombres en español) y 2) que sólo la primera letra del nombre esté en ma-
yúscula (si no lo está, transformar el nombre a un formato donde la primera
letra sea mayúscula y las demás minúsculas). Validar que sea una edad correc-
4137 ta: 1) que no hayan caracteres que no sean números y 2) verificar que la edad
esté entre 0 y 150 años. Mostrar el nombre de la persona con mayor edad.
22. Invertir las palabras de una cadena. Por ejemplo, si la cadena es “Esta es una
4140 prueba de programación”, el resultado es “programación de prueba una es
Esta”.
23. Implemente un programa que reciba una cadena S y una letra X, y coloque en
4143 mayúsculas cada ocurrencia de X en S (el programa debe modificar la variable
S).
24. Ingresar una cadena de caracteres formadas por números y letras (en ese or-
4146 den) y obtenga otra cadena donde aparezca cada letra tantas veces como lo in-
dique el número que lo precede. Por ejemplo, si la cadena es 2w4r5f se debe
obtener la siguiente cadena: wwrrrrfffff.
170
Angel Vázquez-Patiño Universidad de Cuenca
4149 25. Leer una frase y encontrar la palabra de mayor longitud. El programa debe
imprimir la palabra y el número de caracteres de la misma.
26. Ingresar una cadena de caracteres y obtener otra con todos los caracteres de
4152 las posiciones impares de la cadena.
27. Hacer un programa que al recibir como dato una cadena de caracteres que re-
presente una fecha en formato (dd/mm/aa), genere otra cadena con la misma
4155 fecha pero con formato (dd de nombre del mes de aaaa). E.g. si se ingresa la
cadena 20/11/2006 la otra cadena será 20 de Noviembre de 2006.
4161 29. Escribir un programa que al recibir como datos dos cadenas de caracteres for-
me una tercera cadena intercalando los caracteres de las palabras de las cade-
nas recibidas.
4164 30. Implementar una función cuya entrada sea una cadena S y un factor de multi-
plicación N, y genere la cadena N veces. Por ejemplo:
Hola, 3 se convertirá en Hola Hola Hola.
4167 31. Contar cuántas veces se encuentra una subcadena dentro de una cadena.
32. Hacer un programa que elimine todas las ocurrencias de una subcadena dentro
de una cadena.
4170 33. Ingrese un texto e indique qué caracteres alfanuméricos no han aparecido en el
texto.
34. Ingrese un texto e indique el porcentaje de palabras que tiene menos de 5 ca-
4173 racteres y el porcentaje de palabras con 5 o más caracteres.
35. Escriba un programa que lea una frase y sustituya todas las secuencias de dos
o varios blancos por un solo blanco y visualizar la frase obtenida.
4176 36. Escriba un programa que calcule la frecuencia de aparición de las vocales de
un texto proporcionado por el usuario. Esta solución se debe presentar en for-
ma de histograma, e.g.:
171
Angel Vázquez-Patiño Universidad de Cuenca
4179 a 15 ***************
e 8 ********
i 5 *****
4182 o 1 *
u 6 ******
37. Dada una cadena de caracteres. Realizar lo siguiente:
4197 38. Un grupo de inteligencia militar desea codificar los mensajes secretos de tal
forma que no puedan ser interpretados con una lectura directa, para lo cual
han establecido las siguientes reglas:
39. Dada una palabra (una sola palabra) indicar si es palíndromo. Puede ver más
4206 información en https://goo.gl/NkkZw.
40. Dada una frase (una o más palabras) indicar si es palíndromo. Ignore mayús-
culas y minúsculas, signos de puntuación y espacios en blanco.
4209 41. El usuario ingresa una hora como cadena de caracteres; la hora no necesaria-
mente cumple con el formato hh:mm:ss (e.g., 01:09:04) sino que puede estar
expresada, por ejemplo, de la siguiente manera: 1:09:4, 1:9:4, 01:09:4, etc
4212 (siempre primero la hora, segundo los minutos y luego los segundos). El pro-
172
Angel Vázquez-Patiño Universidad de Cuenca
42. * Escribir una función llamada terminaEnVocal que verifique si una palabra
termina en vocal independientemente de si está en mayúsculas o minúsculas.
4221 También escribir una función denominada manipulacionDeCadenas que reciba
como parámetro una frase y visualice en pantalla (una en cada línea) las pala-
bras de la misma y el número total de palabras que terminan en vocal. La fun-
4224 ción de verificación de si termina en vocal o no, debe ser utilizada para contar
el número total de palabras que terminan en vocal. A continuación se muestra
un ejemplo:
4227 Entrada
Ingrese la frase: HolA mundo cruel
Salida
4230 HolA
mundo
cruel
4245 Menú
173
Angel Vázquez-Patiño Universidad de Cuenca
1. Promedio
2. Máximo
4248 3. Mínimo
4. Salir
Menú
1. Promedio
4254 2. Máximo
3. Mínimo
4. Salir
Menú
4260 1. Promedio
2. Máximo
3. Mínimo
4263 4. Salir
4266 Menú
1. Promedio
2. Máximo
4269 3. Mínimo
4. Salir
4275 Ejemplo:
174
Angel Vázquez-Patiño Universidad de Cuenca
45. Escribir un programa que elimine la k-ésima palabra de una cadena. Debe es-
4284 cribir una función para realizar esto. La función recoge como parámetros la ca-
dena y k, y devuelve la cadena de resultado.
46. Construir una función para que busque una subcadena en una cadena a partir
4287 de una determinada posición y que devuelva la posición donde se encuentra la
subcadena en caso contrario que devuelva cero.
47. Escriba un programa que cuente el número de palabras que tengan al menos
4290 cuatro vocales diferentes dado un párrafo. Luego, escribir una función que re-
coja como parámetros un párrafo y el número mínimo de vocales diferentes
que deben tener las palabras a buscar; la función devuelve el número de pala-
4293 bras en el párrafo con el mínimo de vocales indicado. Finalmente, edite la fun-
ción para que recoja un parámetro más que indique si el número mínimo es de
vocales o consonantes; la función devuelve el número de palabras en el párrafo
4296 que tiene mínimo el número de vocales o consonantes de acuerdo a lo que se
indique.
48. Implemente una función que voltee una palabra (cadena) dada. Por ejemplo, si
4299 se ingresa arepa, se devuelve apera. Además, indicar si esas dos palabras son
iguales.
49. * E32 Un anagrama es una palabra o frase formada intercambiando (en cual-
4302 quier orden) las letras de otra palabra o frase. Por ejemplo Esponja es un ana-
grama de Japonés. Escriba una función que determine si una cadena es un
anagrama de otra (“las palabras poseen las mismas letras, con la misma canti-
4305 dad de apariciones, pero en un orden diferente”). Ignore mayúsculas y minús-
culas, signos de puntuación y espacios en blanco. Puede ver más información
en https://goo.gl/hXM1vS.
4308 50. Dada una cadena de caracteres, escriba una función que imprima en pantalla
todas las permutaciones de los caracteres de la cadena de entrada.
175
Angel Vázquez-Patiño Universidad de Cuenca
Ejemplo:
4311 permutaciones(“abc”)
imprime: {“abc”, “acb”, “bac”, “bca”, “cab”, “cba”}
51. Ejercicio
Por ejemplo:
4326 Nombres: Juan
Apellidos: Pérez Torres
Profesión: Ingeniero
4329 Edad: 37
Vive en: Cuenca
Estadísticas de texto
4338 El usuario ingresa un texto. El programa muestra las siguientes estadísticas acerca
del texto ingresado:
176
Angel Vázquez-Patiño Universidad de Cuenca
1. conteo de vocales
4341 2. conteo de consonantes
3. conteo de dígitos
4. conteo de caracteres especiales
4344 5. conteo de mayúsculas
6. conteo de minúsculas
7. conteo de palabras categorizadas por longitud
4347 8. conteo total de palabras
Ejemplo:
El usuario ingresa:
4350 Náufrago (título original en inglés: Cast Away) es una película dirigida por
el cineasta estadounidense Robert Zemeckis, protagonizada por Tom Hanks y
estrenada en el año 2000.
4353 El programa muestra:
Vocales: 59
Consonantes: 78
4356 Dígitos: 4
Caracteres especiales: 10
Mayúsculas: 7
4359 Minúsculas: 130
Palabras categorizadas por número de caracteres:
1: 1
4362 2: 5
3: 5
4: 2
4365 5 o más: 14
Total palabras: 27
El ejemplo ilustra los siguientes aspectos:
4368 1. Las vocales tildadas se cuentan como caracteres especiales, y no como vocales.
2. El conteo de vocales y consonantes considera tanto mayúsculas y minúsculas.
Por ejemplo, el número de consonantes (78), corresponde a 6 mayúsculas y 72
4371 minúsculas.
177
Angel Vázquez-Patiño Universidad de Cuenca
4377 1. Número y lista de cuentas de twitter mencionadas (las cuentas de twitter em-
piezan con @)
2. Número y lista de hashtags mencionados (los hashtags empiezan por #)
4380 3. Conteo de palabras según el número de letras: número de palabras con una le-
tra, con dos letras, con tres letras, con cuatro letras, con cinco letras, y con
más de cinco letras. Este conteo incluye cuentas y hashtags.
4383 Ejemplo
Tweet:
Sigue las últimas noticias de #Cuenca, #Ecuador y el Mundo en @eltiempocuenca
4386 #marcandodiferencia @IGecuador
Resultados
2 cuentas:
4389 eltiempocuenca
IGecuador
3 hashtags:
4392 Cuenca,
Ecuador
marcandodiferencia
4404 El usuario ingresa un texto, una palabra y un entero n. El programa elimina la n-ési-
ma ocurrencia de la palabra en el texto y muestra el texto resultante. No se conside-
ra distinción entre mayúsculas y minúsculas.
178
Angel Vázquez-Patiño Universidad de Cuenca
4407 Ejemplo:
“En un sistema de cifrado por sustitución, cada letra o grupo de letras se reemplazan
por otra letra o grupo de letras para disfrazarla. Uno de los sistemas de cifrado más
4422 viejos conocido es el sistema de cifrado de César, atribuido a Julio César. En este
método, a se vuelve D, b se vuelve E, c se vuelve F, ... , y z se vuelve C. Por ejemplo,
ataque se vuelve DWDTXH.” (Tanenbaum y Wetherall, 2012, p. 662)
4425 1. Escribir un programa que permita codificar mensajes secretos de forma que no
puedan ser interpretados con una lectura directa. Se debe utilizar las siguien-
tes reglas:
4428 a) Se debe reemplazar cada letra por la siguiente más uno, es decir en lugar
de la “a” iría la “c”, excepto las letras “y” y “z”, que se deberá reemplazar
con la letra “a” y “b” respectivamente.
4431 b) De la cadena resultante en el numeral 1 se deberá remplazar las letras vo-
cales por los números 0,1,2,3,4, respectivamente.
c) El mensaje resultante debe contener la primera letra de cada palabra del
4434 mensaje en mayúscula.
179
Angel Vázquez-Patiño Universidad de Cuenca
4440 fijo]. En este caso, k se convierte en una clave del método general de alfabetos
desplazados circularmente.” (Tanenbaum y Wetherall, 2012, p. 662) Si k=2,
por ejemplo, sustituiremos la “a” por la “c”, la “b” por la “e”, y así
4443 sucesivamente. El problema que aparece en las últimas “k” letras del alfabeto
tiene fácil solución: en el ejemplo, la letra “y” se sustituirá por la “a” y la
letra “z” por la “b”. La sustitución debe aplicarse a las letras minúsculas y
4446 mayúsculas y a los dígitos de igual manera: el “0” se sustituye por el “2”, el
“1” por el “3” y así hasta llegar al “9”, que se sustituye por el “1”.
Escriba un programa que lea un texto y el valor de k, y muestre su versión en-
4449 criptada.
Los sistemas de cifrado por sustitución (vea el ejercicio llamado Cifrado por sustitu-
ción, página 179) conservan el orden de los símbolos de texto plano, pero los disfra-
4455 zan. En contraste, los sistemas de cifrado por transposición reordenan las letras pero
no las disfrazan. En la figura 14 se presenta un sistema de cifrado por transposición
común, la transposición columnar. La clave del sistema de cifrado es una palabra o
4458 frase que no contiene letras repetidas. En este ejemplo, la clave es MEGABUCK. El
propósito de la clave es ordenar las columnas; la columna 1 está bajo la letra clave
más cercana al inicio del alfabeto, y así sucesivamente. El texto plano se escribe de
4461 manera horizontal, en filas, las cuales se rellenan para completar la matriz si es nece-
sario. El texto cifrado se lee por columnas, comenzando por la columna cuya letra
clave es la más baja.
180
Angel Vázquez-Patiño Universidad de Cuenca
4464 Desarrolle un programa de cifrado y descifrado por transposición. Una de las funcio-
nes que se desarrollen (cifrar) en el programa debe tener como parámetros el texto
a cifrar y la clave, y debe devolver el texto cifrado. Otra de las funciones que se desa-
4467 rrollen (descifrar) en el programa debe tener como parámetros el texto cifrado y
la clave, y debe devolver el texto descifrado.
4470 a) Escriba un programa con funciones que permita al usuario ingresar una línea de
texto en el siguiente formato:
NOMBRE APELLIDO, EDAD; NOMBRE APELLIDO, EDAD; NOMBRE APELLIDO, EDAD; NOMBRE
4473 APELLIDO, EDAD.
Por ejemplo:
Pedro Pérez, 35; Lara Muñoz, 45; José Calle, 20; María Cárdenas, 22; Clara
4476 Arévalo, 65.
El programa debe encontrar la persona que tiene mayor edad. Debe mostrar al usua-
rio los datos de la persona con mayor edad, de la siguiente forma:
Por ejemplo:
NOMBRE: nombre ingresado NOMBRE: Clara
APELLIDO: apellido ingresado APELLIDO: Arévalo
EDAD: edad ingresada EDAD: 65
4479 b) Escriba un programa utilizando funciones, que permita al usuario ingresar una lí-
nea de texto en el siguiente formato:
NOMBRE APELLIDO, SUELDO; NOMBRE APELLIDO, SUELDO; NOMBRE APELLIDO, SUELDO;
4482 NOMBRE APELLIDO, SUELDO.
Por ejemplo:
Pedro Pérez, 3500; Luis Muñoz, 2450; José Calle, 1200; María Cárdenas, 2200;
4485 Clara Arévalo, 3650.
El programa debe encontrar la persona que tiene menor sueldo. Debe mostrar al
usuario los datos de la persona con menor sueldo, de la siguiente forma:
Por ejemplo:
NOMBRE: nombre ingresado NOMBRE: José
APELLIDO: apellido ingresado APELLIDO: Calle
SUELDO: sueldo ingresado SUELDO: 1200
181
Angel Vázquez-Patiño Universidad de Cuenca
Simule una terminal que ejecute comandos para operaciones aritméticas básicas (su-
mar, restar, multiplicar, dividir) y de información de uso. Los comandos sumar, res-
4491 tar, multiplicar, dividir y estadísticas (sólo hay cinco comandos) tienen la siguiente
sintaxis y funcionalidad:
• Sumar num1,num2,num3,…,numN
4494 Uno se ingresa mediante el teclado el comando sumar (cualquier carácter del coman-
do puede ser minúscula o mayúscula), un espacio y la lista de números (pueden ser
reales; el separador de decimales es el punto) a sumar; todo en una misma línea. Lue-
4497 go de “dar enter” el resultado en la línea siguiente de la pantalla es Suma: valor de la
suma. Si hay un error en la sintaxis, el programa debe mostrar un error; por ejemplo
si se ingresa suma 1;3,4, el programa debe decir “Hubo un error de sintaxis en el co-
4500 mando ingresado.”
• Restar num1,num2
Uno se ingresa mediante el teclado el comando restar (cualquier carácter del coman-
4503 do puede ser minúscula o mayúscula), un espacio y dos (2) números (pueden ser rea-
les; el separador de decimales es el punto) a restar; todo en una misma línea. Luego
de “dar enter” el resultado en la línea siguiente de la pantalla es Resta: valor de la
4506 resta (la resta es num1-num2). Si hay un error en la sintaxis, el programa debe mos-
trar un error; por ejemplo si se ingresa restar 1,3,4, el programa debe decir “Hubo un
error de sintaxis en el comando ingresado.”
Uno se ingresa mediante el teclado el comando multiplicar (cualquier carácter del co-
mando puede ser minúscula o mayúscula), un espacio y la lista de números (pueden
4512 ser reales; el separador de decimales es el punto) a multiplicar; todo en una misma lí-
nea. Luego de “dar enter” el resultado en la línea siguiente de la pantalla es Multipli-
cación: valor de la multiplicación. Si hay un error en la sintaxis, el programa debe
4515 mostrar un error; por ejemplo si se ingresa multiplicar 1;3.2,4.2, el programa debe de-
cir “Hubo un error de sintaxis en el comando ingresado.”
• Dividir num1,num2
4518 Uno se ingresa mediante el teclado el comando dividir (cualquier carácter del coman-
do puede ser minúscula o mayúscula), un espacio y dos (2) números (pueden ser rea-
182
Angel Vázquez-Patiño Universidad de Cuenca
les; el separador de decimales es el punto) a dividir; todo en una misma línea. Luego
4521 de “dar enter” el resultado en la línea siguiente de la pantalla es División: valor de la
división (la división es num1/num2). Si hay un error en la sintaxis, el programa debe
mostrar un error; por ejemplo si se ingresa dividir 1,3,4,5, el programa debe decir
4524 “Hubo un error de sintaxis en el comando ingresado.”
• Estadísticas
Uno se ingresa mediante el teclado el comando estadísticas (cualquier carácter del co-
4527 mando puede ser minúscula o mayúscula, o tener la letra i con tilde o sin tilde). Lue -
go de “dar enter” el resultado en la línea siguiente de la pantalla es
Número de veces que se utilizó correctamente cada comando
4530 Sumar: num veces
Restar: num veces
Multiplicar: num veces
4533 Dividir: num veces
Si el número de veces es 1, debe decir 1 vez (y no 1 veces).
• Salir
4536 Uno se ingresa mediante el teclado el comando salir (cualquier carácter del comando
puede ser minúscula o mayúscula) y se termina la ejecución del programa.
Nota: antes del comando y después de los números que necesita el comando (en los
4539 comandos sumar, restar, multiplicar y dividir) no importa si se ingresan espacios en
blanco; con que no haya un error en la sintaxis (entre el comando y los números que
necesita el comando sólo debe haber un espacio), no debería haber ningún mensaje
4542 de error. Por ejemplo: espacio espacio espacio suMaR 1,2,3,4,5,6 espacio espacio no
debería dar ningún error de sintaxis. Utilice/cree funciones donde se necesite.
183
Angel Vázquez-Patiño Universidad de Cuenca
Los registros (un registro es el conjunto de valores de una misma persona) se deben
4575 ingresar en forma de cadena. La coma es el separador de valores de los campos (cam-
po es cada dato del registro: cédula, nombre, apellido y edad) y el punto y coma es el
separador de registros. La información de la tabla del ejemplo se representaría con la
4578 siguiente cadena:
01064634657,Juan,Pérez,23;01064636638,Víctor,Guzmán,21;01064688644,Pedro,Flor
es,20;
4581 El programa debe permitir, mediante un menú:
184
Angel Vázquez-Patiño Universidad de Cuenca
4590 Este ejercicio pretende mejorar sus destrezas para usar funciones, por eso, usted debe
implementar las funciones que considere necesarias.
Una restricción con la que debe cumplir su programa es que utilice una variable glo-
4593 bal para la cadena de datos de personas y para el número total de personas.
Ejemplo:
Ingreso
4602 Se le pide al usuario que ingrese una cédula existente y los nuevos valores del resto de
campos
Cédula: 01064634657
4605 Nombre: Diego
Apellido: Sarmiento
Edad: 25
4608 Si la cédula que se busca no se encuentra en la cadena que contiene la información de
todas las personas, se muestra un mensaje de error: “La persona no ha sido registra-
da.”.
4611 Para este ejemplo, el resultado de la actualización de la cadena que contiene la infor-
mación de las personas es:
01064634657,Diego,Sarmiento,25;01064636638,Víctor,Guzmán,21;01064688644,Pedro
4614 ,Flores,20;
185
Angel Vázquez-Patiño Universidad de Cuenca
Eliminación
• Cédula: 01064634657
Listar
Cédula: 01064688644
Nombre: Pedro
4638 Apellido: Flores
Edad: 20
Promedio de edades
4641 Se calcula y muestra el promedio de las edades de todas las personas que estén en ese
momento en la lista.
186
Angel Vázquez-Patiño Universidad de Cuenca
8. Búsquedas
4644 Algunos de los siguientes ejercicios son basados en el libro de Gómez Fuentes y Cer-
vantes Ojeda (2013).
4650 2. Implemente una función llamada busquedaSecuencial que tenga como paráme-
tros un arreglo y un elemento a buscar en el arreglo. La función debe regresar
la posición índice del elemento si se encuentra en el arreglo y -1 si no lo en-
4653 cuentra en el arreglo.
187
Angel Vázquez-Patiño Universidad de Cuenca
4707 ---------------------------------------------------------------
Algoritmo # comparaciones Tiempo [seg.]
promedio promedio
4710 --------- --------------- -------------
Algoritmo 1 ## ##
188
Angel Vázquez-Patiño Universidad de Cuenca
Algoritmo 2 ## ##
4713 ... ... ...
---------------------------------------------------------------
=======================================
4716 Histograma para comparación de métricas
=======================================
-----------------------------------------------------------------
4719 Algoritmo 1 |
# comparaciones (prom) |▬▬▬▬▬▬▬▬▬▬ ##
Tiempo [seg.] (prom) |▬▬▬▬▬▬▬ ##
4722 |
Algoritmo 2 |
# comparaciones (prom) |▬▬▬▬▬▬▬ ##
4725 Tiempo [seg.] (prom) |▬▬▬▬▬▬▬▬ ##
|
. | . .
4728 . | . .
. | . .
-----------------------------------------------------------------
4731 e) De acuerdo a los datos, discuta la eficiencia de los métodos estudiados.
¿Qué método es el mejor y por qué?, ¿Qué método es el peor y por qué?,
¿Cuándo utilizaría cada método?, etc.
4734 6. Ejercicio
189
Angel Vázquez-Patiño Universidad de Cuenca
9. Ordenamiento
Miscelánea
4737 Algunos de los siguientes ejercicios son basados en el libro de Joyanes Aguilar et al.
(2003).
a) Inserción
4743 b) Selección
c) Burbuja
d) Ninguna de las anteriores
4746 2. Dada la lista de números {-5, 18, -12, 17, -6, -20, -4, -8}, escribir cómo evolu-
cionaría dicha lista hasta quedar completamente ordenada de manera descen-
dente mediante: a) ordenamiento de burbuja, b) algoritmo de selección y c) al-
4749 goritmo de inserción.
4. Dado un arreglo de números reales, escriba un método que ordene los elemen-
4755 tos del arreglo de tal forma que los números pares aparezcan antes que los nú-
meros impares. Además, los números pares deberán estar ordenados de forma
ascendente, mientras que los números impares deberán estar ordenados de for-
4758 ma descendente. Esto es, el arreglo {1,2,3,4,5,6} quedará como {2,4,6,5,3,1}.
190
Angel Vázquez-Patiño Universidad de Cuenca
E02 *
4767 E03 **
Iteración 1:
E01 *
4770 E02 *****
E03 **
Iteración 2:
4773 E01 *
E02 **
E02 *****
191
Angel Vázquez-Patiño Universidad de Cuenca
10. Implemente una función que permita ordenar por fechas y de mayor a menor
4806 una matriz de N elementos (filas N <= 40). Cada fila de la matriz es un regis-
tro, con los campos, de tipo entero, día (columna 1), mes (columna 2), año
(columna 3) y número de contrato (columna 4). Damos por supuesto que la
4809 introducción de datos fue correcta, pudiendo existir diversos contratos con la
misma fecha, pero no números de contrato repetidos.
11. Realizar una función que permita ordenar por fechas y de mayor a menor una
4812 matriz de N elementos (filas N <= 40). Cada fila de la matriz es un registro,
con los campos, de tipo entero, día (columna 1), mes (columna 2), año (colum-
na 3) y número de contrato (columna 4). Damos por supuesto que la introduc-
4815 ción de datos fue correcta, pudiendo existir diversos contratos con la misma fe-
cha, pero no números de contrato repetidos. Luego, dada la lista ordenada en
forma decreciente, diseñar una función que devuelva el número de contratos
4818 realizados en una determinada fecha.
192
Angel Vázquez-Patiño Universidad de Cuenca
---------------------------------------------------------------------
# comparaciones # intercambios Tiempo [seg.]
4866 Algoritmo promedio promedio promedio
--------- --------------- -------------- -------------
Algoritmo 1 ## ## ##
4869 Algoritmo 2 ## ## ##
Algoritmo 3 ## ## ##
193
Angel Vázquez-Patiño Universidad de Cuenca
... .. .. ..
4872 ---------------------------------------------------------------------
=======================================
Histograma para comparación de métricas
4875 =======================================
-----------------------------------------------------------------
Algoritmo 1 |
4878 # comparaciones (prom) |▬▬▬▬▬▬▬▬▬▬ ##
# intercambios (prom) |▬▬▬▬▬▬▬▬▬▬▬▬ ##
Tiempo [seg.] (prom) |▬▬▬▬▬▬▬ ##
4881 |
Algoritmo 2 |
# comparaciones (prom) |▬▬▬▬▬▬▬ ##
4884 # intercambios (prom) |▬▬▬▬▬▬▬▬▬▬▬ ##
Tiempo [seg.] (prom) |▬▬▬▬▬▬▬▬ ##
|
4887 Algoritmo 3 |
# comparaciones (prom) |▬▬▬▬▬▬▬▬▬▬▬▬▬▬ ##
# intercambios (prom) |▬▬▬▬▬▬▬▬▬ ##
4890 Tiempo [seg.] (prom) |▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬ ##
|
. | . .
4893 . | . .
. | . .
-----------------------------------------------------------------
4896 e) De acuerdo a los datos, discuta la eficiencia de los métodos estudiados.
¿Qué método es el mejor y por qué?, ¿Qué método es el peor y por qué?,
¿Cuándo utilizaría cada método?, etc.
194
Angel Vázquez-Patiño Universidad de Cuenca
4908 f) Con las dos mitades ordenadas, aplique el método de la inserción para or-
denar el arreglo completo.
Nota 1: Dentro del método principal (main) solamente deben haber el arreglo
4911 generado con n elementos y máximo un arreglo auxiliar (dos arreglos en total).
4929 Nota 1: Dentro del método principal (main) solamente deben haber el arreglo
generado con n elementos y máximo un arreglo auxiliar (dos arreglos en total).
16. Pregunta
195
Angel Vázquez-Patiño Universidad de Cuenca
4941 Los datos de cada estudiante son: el nombre y apellido y la nota promedio (entre 1 y
20 puntos, inclusivo). Por ejemplo:
Nombre : Juan
4944 Apellido : Pérez
Promedio : 18
Se debe almacenar los datos en una matriz. Si hay más de un estudiante con el ape -
4947 llido buscado, se debe mostrar todos los estudiantes que coinciden con el apellido es-
pecificado.
1. Escribir una función f1 que permita ingresar los datos de los estudiantes.
196
Angel Vázquez-Patiño Universidad de Cuenca
Nombres Calificaciones
Juan 16
Andrés 18
Pedro 15
María 11
Xavier 10
Ximena 17
Fernando 19
... ...
Jaime 5
2. Escribir una función f2 que reciba los dos arreglos ingresados en f1 y devuelva
4962 una matriz con los nombres y calificaciones de forma ascendente, por nombre.
Andrés 18
Fernando 19
Jaime 5
Juan 16
A= María 11
Pedro 15
Xavier 10
... ...
Ximena 17
3. Escribir una función f3 que reciba como entrada la matriz generada en f2 y de-
vuelva una matriz con la calificación mínima y calificación máxima.
Jaime 5
B=
Fernando 19
197
Angel Vázquez-Patiño Universidad de Cuenca
4965 4. Escribir una función f4 que reciba como entrada la matriz generada en f2 y de-
vuelva una matriz con las tres mayores calificaciones y las tres menores califi-
caciones.
Fernando 19
Andrés 18
Ximena 17
C=
Jaime 5
Xavier 10
María 11
Desarrolle un programa que pida al usuario ingresar las dimensiones (nxm) de una
matriz y rellene los elementos de dicha matriz con números enteros aleatorios en un
4971 rango dado por el mismo usuario. Muestre la matriz generada y luego, realice los si-
guientes ordenamientos:
198
Angel Vázquez-Patiño Universidad de Cuenca
m: 4
Matriz generada
4995 8 4 9 5
2 1 7 4
3 5 -1 2
4998 Resultados
==========
Luego de ordenadas las columnas
5001 2 5 -1 5
3 4 7 4
8 1 9 2
Escriba un programa que lea los datos de n personas (el n se pide al usuario), consi-
derando los siguientes campos:
5019 1. Nombre
2. Apellido
3. Edad
5022 4. Profesión
199
Angel Vázquez-Patiño Universidad de Cuenca
La información debe ser validada al momento de ingresar cada uno de los datos. Al-
macene la información ingresada en una estructura que considere adecuada para rea-
5025 lizar las siguientes operaciones:
b) Buscar todas las ocurrencias de un valor ingresado por el usuario. Por ejem-
plo, buscar todos los que tengan 30 años de edad, o todos lo que tengan por
5034 apellido “Pérez”.
200
Angel Vázquez-Patiño Universidad de Cuenca
Miscelánea
2. * E42 Usted recibió dos archivos de texto plano (txt). El primero tiene un
mensaje cifrado que sólo se puede leer (leer por un humano) utilizando la cla-
5046 ve del segundo archivo. La clave consiste de series de tres caracteres (siempre
tres y seguidos), de los que encontrará en el archivo cifrado, a los cuales co-
rresponde caracteres, de los que tendrá que escribir como descifrados. Por
5049 ejemplo, si el primer archivo contiene
e545ty8452w3
y el segundo archivo tiene la clave
5052 e54 h
5ty o
845 l
5055 2w3 a
el archivo que tiene que escribir, llamado descifrado.txt contendrá
hola
3.
201
Angel Vázquez-Patiño Universidad de Cuenca
5079 2. Grafique el tráfico diario por horas y muéstrelo como en el gráfico de arriba
(derecha; el gráfico usa los datos reales del archivo
Metro_Interstate_Traffic_Volume.csv). Para esto, sume el tráfico (atributo
5082 traffic_volume) por cada hora del día, sin importar la fecha. Así, en total, ten-
drá doce valores que corresponden a las sumas del tráfico de cada hora del día
(vea el gráfico).
202
Angel Vázquez-Patiño Universidad de Cuenca
Usted trabajará con un archivo CSV que tiene una lista de estudiantes. El archivo
tiene registros con ocho atributos (columnas/campos), de los cuales los más impor-
5088 tantes para este ejercicio son: Nombre, Prueba 1/ 10 y Excluir (nombre del estudian-
te, calificación de una prueba y si el registro debe excluirse de la formación de gru-
pos). Usted debe pedir la cantidad (N) de personas que habrán en cada grupo que
5091 formará. Luego de eso, mostrará los grupos con las N personas que tiene cada uno,
escogidos de manera aleatoria. Al mostrar los grupos debe mostrarlos de manera des-
cendente de acuerdo a la suma de las calificaciones de la Prueba 1 de cada grupo
5094 (suma las calificaciones de cada estudiante del grupo y esa suma es por la que debe
ordenar); pero luego de ordenar por ese criterio, los nombres de las personas de cada
grupo deben estar ordenados en forma ascendente por el primer apellido, dentro de
5097 cada grupo. Si hay un grupo que no pueda tener N personas, indicarlo con un mensa-
je y mostrar el grupo con menos de N personas.
Por ejemplo:
5103 N: 2
Grupo 1 Suma: 19
Dayanna Marcela Pacheco Fajardo 9
5106 Maite Cristina Quinde Peralta 10
Grupo 2 Suma: 17
Bryam Sebastián Arévalo Abril 9
5109 Charlee Emanuel Vintimilla Marquez 8
Grupo 3 Suma: 15
Samantha Gabriela Cabrera Nieto 7
5112 Daviel Lucas Zárate Cuenca 8
203
Angel Vázquez-Patiño Universidad de Cuenca
5124 Toda la información que se muestra en pantalla, debe ser guardada en un archivo lla-
mado grupos.txt.
5127 En este ejercicio se usa datos acerca de la resistencia del concreto de acuerdo a su
compuesto y a las cantidades utilizadas de cada componente. El conjunto de datos
está ubicado en https://archive.ics.uci.edu/ml/datasets/concrete+compressive+stren-
5130 gth. Con el fin de tener una idea más clara acerca de la influencia de los componentes
en la resistencia del concreto (dado en megapascales, mPa), se pide generar gráficas
de cada par de componentes y la resistencia correspondiente.
5133 Los componentes y/o variables de los que se cuenta con datos, y las correspondientes
unidades, son los siguientes:
1. Cemento, en kg/m3
5136 2. Escoria, en kg/m3
3. Ceniza, en kg/m3
4. Agua, en kg/m3
5139 5. Superplastificante, en kg/m3
6. Agregado grueso, en kg/m3
7. Agregado fino, en kg/m3
5142 8. Edad, en días
Haga un gráfico de dispersión (scatter) con cada par de componentes en donde cada
punto muestre la resistencia del concreto con un color en escala de grises y un tama-
5145 ño. Así, los puntos que representan concreto más resistente tendrán un color más
obscuro y serán más grandes. A continuación se muestra, como ejemplo, un par de
gráficos (se utilizaron los datos reales para generarlos), de todos los que se deben ge-
5148 nerar (son más de 55).
204
Angel Vázquez-Patiño Universidad de Cuenca
Una cosa que debe tener muy claro de las gráficas anteriores es que el color y tamaño
del punto está relacionado a la resistencia del concreto. Además, lo que se pide es que
5151 por cada par de componentes se generen dos gráficas, i.e., por ejemplo, para los com-
ponentes Cemento y Agua debe haber una gráfica y para los componentes Agua y
Cemento debe haber otra gráfica. Finalmente, el eje x hace referencia al primer com-
5154 ponente que se indica en el título y el eje y hace referencia al segundo componente
que se indica en el título (vea las gráficas de ejemplo de arriba).
No todas las gráficas tienen las mismas marcas (e.g., círculos o triángulos). Las mar-
5157 cas que se tiene que utilizar, dependiendo de qué componente esté siendo mostrado
en el eje x, son:
1. Cemento: "."
5160 2. Escoria: "v"
3. Ceniza: "1"
4. Agua: "s"
5163 5. Superplastificante: "p"
6. Agregado grueso: "P"
7. Agregado fino: "x"
5166 8. Edad: "D"
Los gráficos deben tener una barra de colores con la etiqueta que indique qué infor-
mación está mostrando y su respectiva unidad (i.e., Resistencia [mPa]). Las etiquetas
5169 de los ejes, además de indicar a qué componente hacen referencia, muestran entre
corchetes la unidad de ese componente (se indicó arriba). El título debe mostrar el
texto
205
Angel Vázquez-Patiño Universidad de Cuenca
5178 Cada gráfica generada debe ser guardada (utilizando programación y no de manera
manual) con el nombre componente1_componente2.png, donde componente1 y com-
ponente2 hacen referencia al componente del concreto que indica el eje x de la gráfica
5181 y al componente que indica el eje y de la gráfica (e.g., Edad_Superplastificante.p-
ng, Agregado grueso_Escoria.png). Fíjese que el formato del archivo es png.
206
Angel Vázquez-Patiño Universidad de Cuenca
5205 Realizar un programa que permita simular el combate entre dos pokemones a través
de las siguientes opciones del menú:
1.- Ingresar datos de los pokemones
5208 2.- Simular combate
3.- Terminar
Ingresar opción <1-3>:
5211 1)Ingresar datos de los pokemones (i.e. nombres, poder de ataque). Por ejemplo se
ingresa los pokemones: 1) Pikachu con poder de ataque 55 y 2) Jigglypuff con su po-
der de ataque 45
Se tiene que usar una función para decidir aleatoriamente qué jugador inicia la pelea.
Para ello se usará la función azar(2). Esta función devolverá 0 ó 1. Si es 0 el Juga-
5217 dor1 inicia la pelea, caso contrario inicia el Jugador2. Recuerde que una vez que se
define el jugador que tiene el primer turno, los siguientes turnos son intercalados, i.e.,
un jugador, el otro, un jugador, el otro, etc. Ambos jugadores inician sus vidas con
5220 100 puntos y se tienen que ir simulando el combate restando de la vida de los poke-
mones el poder de ataque de su contrincante, esto se hace en base al turno de ataque.
Por cada turno se debe nuevamente utilizar la función azar(2) para determinar si un
5223 jugador ataca o no. Solamente si el resultado es 1, el jugador al que le toca el turno
ataca. Recuerde que luego de definido al azar el jugador que comienza (el que tiene el
primer turno), los turnos son intercalados entre los dos.
5226 Como ejemplo, suponga que la función azar(2) devuelve 0. Por lo tanto Pikachu ini-
cia con el primer turno. Entonces se usa la función azar(2) para determinar si Pika-
chu ataca o no. Suponga que la función azar(2) devuelve 1. Cómo el resultado es 1
5229 éste ataca y en el primer turno Jigglypuff queda con 45 de vida. Luego es el turno de
Jigglypuff y suponga que la función azar(2) devuelve 0. Cómo es 0, Jigglypuffno ata-
ca. Para el siguiente turno de Pikachu la función azar(2) devuelve 1. Cómo es 1 Pika-
207
Angel Vázquez-Patiño Universidad de Cuenca
5232 chu ataca y Jigglypuff termina con -10 de vida, entonces el combate termina. Se tiene
que mostrar por cada turno: de quién fue el turno y cómo quedaron las vidas de los
dos contrincantes y al final quien ganó y en qué turno.
Combate de pokemones
1.- Ingresar datos de los pokemones
5247 2.- Simular combate
3.- Terminar
Ingresar opción <1-3>: 2
Combate de pokemones
5259 1.- Ingresar datos de los pokemones
2.- Simular combate
3.- Terminar
5262 Ingresar opción <1-3>: 3
(termina el programa)
208
Angel Vázquez-Patiño Universidad de Cuenca
La siguiente tabla muestra los símbolos válidos en el sistema de los números romanos,
y sus equivalencias en el sistema decimal.
Signo Valor
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
5280 Para la notación moderna de los números romanos se utilizan las siguientes normas:
209
Angel Vázquez-Patiño Universidad de Cuenca
• Los números se leen de izquierda a derecha empezando por los símbolos con
mayor valor, o conjunto de símbolos de mayor valor.
5283 • Un símbolo seguido de otro de igual o inferior valor, suma (e.g., X·X·I =
10+10+1 = 21), mientras que si está seguido de otro de mayor valor, ambos
símbolos forman un conjunto en el cual debe restarse el valor del primero al
5286 valor del siguiente (e.g., X·IX = 10+[10-1] = 19).
• La unidad (I) y los números con base 10 (X, C y M) pueden repetirse hasta 3
veces consecutivas como sumandos.
5289 • Los números con base 5 (V, L y D), no pueden repetirse seguidos, ya que la
suma de esos dos símbolos tiene representación con alguno de los símbolos an-
teriores.
5292 • La unidad y los símbolos de base 10 también pueden estar restando antes de
un símbolo de mayor valor, pero con las siguientes normas:
1. solo pueden aparecer restando sobre los símbolos con base 5 y 10 de valor
5295 inmediatamente superiores, pero no de otros con valores más altos (e.g.,
‘IV’ y ‘IX’, pero no ‘IL’ ni ‘IC’).
2. en el caso de estar restando, no pueden repetirse.
5298 • Los símbolos con base 5 no pueden utilizarse para restar (e.g., 45 se escribe
‘XLV’ y no ‘VL’).
• Para números con valores igual o superiores a 4000, se coloca una línea hori-
5301 zontal por encima del número, para indicar que la base de la multiplicación es
por 1000:
V 5000
X 10 000
L 50 000
C 100 000
D 500 000
M 1 000 000
210
Angel Vázquez-Patiño Universidad de Cuenca
Dígitos de un número
5304 Elaborar un algoritmo que dado un número entero positivo (>0) cualquiera (validar
para que siga ingresando números mientras no cumple la condición) nos diga el nú-
mero de dígitos que tiene.
1 2 3 4 5 4 3 2 1
1 2 3 4 3 2 1
5316 1 2 3 2 1
1 2 1
1
Se ingresan dos límites: límite inferior con un valor mínimo de 1 y límite superior con
5334 un valor máximo de 9999 (validar valores mínimos y máximos de los límites y que el
211
Angel Vázquez-Patiño Universidad de Cuenca
límite superior no sea menor al límite inferior). Se ingresa un paso (incremento) entre
1 y 1000 (validar para que siga ingresando números mientras no cumple la condi-
5337 ción). Imprimir los valores desde el límite inferior al límite superior con el paso (in-
cremento) dado por el usuario. Los números que se muestran deben tener el número
de dígitos que tenga el límite superior; es decir, los número que se van a mostrar que
5340 tienen un número de dígitos menor al número de dígitos del límite superior, deben
completar el número de dígitos con ceros a la izquierda.
Ejemplo 1:
5343 Límite inferior: 1
Límite superior: 12
Paso: 3
5346 Lo que se muestra en pantalla es:
01
04
5349 07
10
Ejemplo 2:
5352 Límite inferior: 1
Límite superior: 1500
Paso: 500
5355 Lo que se muestra en pantalla es:
0001
0501
5358 1001
212
Angel Vázquez-Patiño Universidad de Cuenca
Dados
5370 Escribir un programa que simule el lanzamiento de dos dados y muestre por pantalla
la frecuencia de los resultados de mil lanzamientos.
Búsquedas y ordenación
5373 1. Diseñar una función recursiva que realice una búsqueda binaria.
5376 Interpolación
Para resolver los siguientes ejercicios revise las páginas 80-83 del libro de Quarteroni
et al. (2014).
Integración numérica
5385 Para resolver los siguientes ejercicios revise la sección 4.3 Numerical integration del
libro de Quarteroni et al. (2014).
213
Angel Vázquez-Patiño Universidad de Cuenca
(11.1)
(11.2)
Si desea más información acerca del método puede leer la definición en el libro
de Chapra et al. (2007), páginas 719-722.
214
Angel Vázquez-Patiño Universidad de Cuenca
5412 Figura 15: Comparación de la solución analítica con una solución numérica
usando el método de Euler, para la integral dy/dx desde x0 = 0 hasta xn = 4
con un tamaño de paso h = 0.2. La condición inicial en x0 = 0 es y0 = 1.
i xi yi (aproximación)
0 0 1
1 0.2 2.7
2 0.4 3.6928
3 0.6 4.1512
4 0.8 4.2288
5 1 4.06
6 1.2 3.76
7 1.4 3.4248
8 1.6 3.1312
9 1.8 2.9368
10 2 2.88
11 2.2 2.98
12 2.4 3.2368
13 2.6 3.6312
215
Angel Vázquez-Patiño Universidad de Cuenca
i xi yi (aproximación)
14 2.8 4.1248
15 3 4.66
16 3.2 5.16
17 3.4 5.5288
18 3.6 5.6512
19 3.8 5.3928
20 4 4.6
5415 • * Implemente el método de Euler y úselo para integrar numéricamente la
ecuación
5418 desde x0 = 0 (este es un valor fijo) hasta un xn dado por el usuario (>x0) con
tamaños de paso h = {0.5, 0.33, 0.21, 0.14, 0.09}. Por ejemplo, con h = 0.21,
x0 = 0, x1 = x0 + 0.21, x2 = x1 + 0.21, x3 = x2 + 0.21, etc. La condición inicial
5421 en x0 = 0 es y0 = 1, i.e., la función y (la que se quiere aproximar) en x = 0, es
1 [y(0) = 1].
(11.3)
1. Escriba una función llamada my_range que genere una tupla de números
desde x0 a xn con un tamaño de paso dado (h). En la tupla de números siempre
5430 se incluye x0 al comienzo pero no necesariamente se incluye al final xn porque
depende del tamaño de paso (vea los ejemplos). Cuando no se indica explícita-
mente un tamaño de paso, por defecto se debe utilizar un tamaño de paso
5433 igual a uno. Recuerde cuál es la idea fundamental de usar funciones para po-
der saber qué parámetro(s) usar en la definición de la función. Comente la
función para poder saber exactamente qué hace (de la forma como se comen-
5436 tan las funciones) y en ese comentario ponga si usar tuplas, listas, diccionarios
o conjuntos es la mejor opción para devolver (return) los resultados y porqué.
Para que sepa cómo trabaja la función my_range, a continuación se muestran
5439 algunos ejemplos de su ejecución:
Desde 0 a 4 con paso 0.5: 0, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0
216
Angel Vázquez-Patiño Universidad de Cuenca
217
Angel Vázquez-Patiño Universidad de Cuenca
5472 Un ejemplo notable de los métodos explícitos multipaso para resolver ecuaciones dife-
renciales ordinarias (EDOs) es la fórmula de Adams-Bashforth (AB3), un método de
tres pasos y tercer orden (Quarteroni et al., 2014).
5478 (11.4)
218
Angel Vázquez-Patiño Universidad de Cuenca
Para comprobar sus resultados sepa que la integral analítica de la función dy/dx, con
5493 la condición inicial indicada, es y = − 0.5x4 + 4x3 − 10x2 + 8.5x + 1. Grafique la so-
lución analítica junto con la aproximación que ha calculado con la fórmula de Ada-
ms-Bashforth, como se muestra en la siguiente figura (los colores de las líneas no im-
5496 portan pero deben ser diferentes, además, tome en cuenta la leyenda) (3 puntos).
Documente su código fuente para que pueda ser fácilmente entendido (1 punto).
5499 Una de las métricas que usa Facebook para mostrar qué tan activa es una página es
el Tiempo de Respuesta. El Tiempo de Respuesta es el promedio del 90% de los tiem-
pos de respuesta más rápidos a los mensajes que recibió una página de Facebook 1. En
5502 relación a esto, se plantea el siguiente ejercicio donde debe tomar en cuenta buenas
prácticas de programación (e.g., documentación en el código para indicar qué hace
cada sección del programa).
1 En realidad el cálculo tiene más detalles pero se ha modificado para el ejercicio. Más en
https://is.gd/4cHiOQ
219
Angel Vázquez-Patiño Universidad de Cuenca
Menú
1. Datos manuales
2. Datos aleatorios
3. Salir
Opción [1-3]: _
5517 Cuando el usuario elige la opción 2, el usuario indica un número N de registros que el
computador generará al azar. Luego de ingresar el número N, debe imprimir los N re-
gistros generados al azar. Luego de eso, haga todos los pasos indicados para la opción
5520 1. Es decir, en la opción 2 del menú se hace lo mismo que para la opción 1 solamente
que los registros no son ingresados por el usuario sino que son generados aleatoria-
mente por el computador.
1 Para este ejercicio se supone que los mensajes son respondidos el mismo día. Esa es la razón para
ingresar solamente la hora y no la fecha.
220
Angel Vázquez-Patiño Universidad de Cuenca
221
Angel Vázquez-Patiño Universidad de Cuenca
var3<-0
Escribir var3
Escribir var1
5589 FinProceso
6. ¿Qué realiza o cuál es el fin del siguiente algoritmo o programa?
Proceso sin_titulo
5592 var1<-10
Leer var2
222
Angel Vázquez-Patiño Universidad de Cuenca
5613 var2<-1
var3<-11
Si var4<var3 Entonces
var3<-var4
5622 Fin Si
var2<-var2+1
Fin Mientras
223
Angel Vázquez-Patiño Universidad de Cuenca
a)
5640 Proceso sin_titulo
cont<-1
Mientras cont<=8 Hacer
5643 Para i<-1 Hasta 5 Con Paso 2 Hacer
Escribir Sin Saltar cont,'^',i,': ',cont^i, ' '
Fin Para
5646 Escribir ''
cont<-cont+4
Fin Mientras
5649 FinProceso
b)
Proceso sin_titulo
5652 cont<-1
Mientras cont<=7 Hacer
Para i<-1 Hasta 5 Con Paso 2 Hacer
5655 Escribir Sin Saltar cont,'^',i,': ',cont^i, ' '
Fin Para
Escribir ''
5658 Fin Mientras
FinProceso
c)
5661 Proceso sin_titulo
cont<-1
Mientras cont<=7 Hacer
5664 Para i<-1 Hasta 5 Con Paso 2 Hacer
Escribir Sin Saltar cont,'^',i,': ',cont^i, ' '
Fin Para
224
Angel Vázquez-Patiño Universidad de Cuenca
Lenguaje Java
a) -120
b) 0
5676 c) 60
d) Ninguna de las anteriores
public class Test {
a) 8
5691 b) 72
c) 0
d) 36
5694 public class Test {
225
Angel Vázquez-Patiño Universidad de Cuenca
resultado = i;
}
5712 }
8. * ¿Cuál es el “tiempo de vida” de una variable global?
226
Angel Vázquez-Patiño Universidad de Cuenca
5736 metodoA(matriz);
for(int i=0; i<matriz.length; i++)
System.out.print(matriz[i]++ + " ");
5739 for(int i=0; i<matriz.length; i++)
System.out.print(matriz[i] + " ");
}
5742 static void metodoA(int [] b){
for(int i=0; i<b.length;i++)
b[i]=b[i]+3;
5745 }
}
12. * ¿Cuál es la salida del siguiente programa?
5748 public class Ejercicio {
227
Angel Vázquez-Patiño Universidad de Cuenca
228
Angel Vázquez-Patiño Universidad de Cuenca
5817 17. * Dada las siguientes líneas de código del siguiente programa, identifique la
salida correcta del mismo.
public static void main(String[] args) {
5820 int arreglo[] = {2,7,8,9,4,5,2,6,8,9,3};
String cadena ="";
cadena = cadena + "\nNumeros: ";
5823 for(int i=0;i < arreglo.length;i++){
if(arreglo[i]%2!=0){
cadena = cadena +" "+ arreglo[i];
5826 }
}
System.out.println(cadena);
5829 }
229
Angel Vázquez-Patiño Universidad de Cuenca
}
5850 }
a) 4 4 7
b) 5 3 4
5853 c) 0 8 2
d) 6 3 1
230
Angel Vázquez-Patiño Universidad de Cuenca
5898 b) cade
c) cadena
d) de
5907 contador = 2;
limite = 10;
5910 do {
switch (contador % 2) {
case 0:
5913 System.out.print(contador + " es par\n");
break;
case 1:
5916 System.out.print(contador + " es impar\n");
break;
}
5919 contador += 2;
} while (contador < limite);
}
5922 }
23. Pregunta
231
Angel Vázquez-Patiño Universidad de Cuenca
Lenguaje C
5925 1. * Realice la prueba de escritorio del siguiente programa e indique qué se mues-
tra en pantalla.
#include<stdio.h>
232
Angel Vázquez-Patiño Universidad de Cuenca
5958 Interés
Interés simple
Beneficio de una inversión cuando los intereses producidos se deben solamente al ca-
5961 pital inicial, i.e., los intereses no se agregan al capital productivo en cada periodo.
Por ejemplo, si se desea invertir un capital de 100 dólares a una tasa de interés anual
(periodo anual) de 12%, a 10 años plazo, los intereses ganados al terminar cada año
5964 serían como se muestra en la siguiente tabla.
Capital
Al terminar Interés
el año [$] 100
01 12 112.00
02 12 124.00
03 12 136.00
04 12 148.00
05 12 160.00
06 12 172.00
07 12 184.00
08 12 196.00
09 12 208.00
10 12 220.00
(13.1)
Interés compuesto
5973 A diferencia del interés simple, el interés compuesto representa la acumulación de
intereses que se han generado en un período para ser considerados como capital
productivo para el siguiente período. Por ejemplo, si se desea invertir un capital de
5976 100 dólares a una tasa de interés compuesto anual (periodo anual) de 12%, a 10 años
233
Angel Vázquez-Patiño Universidad de Cuenca
plazo, los intereses ganados al terminar cada año serían como se muestra en la
siguiente tabla.
5979 Es decir, para cada periodo se calcula el interés y ese interés es aumentado al capital
para el cálculo del interés del periodo siguiente.
5982 (13.2)
234
Angel Vázquez-Patiño Universidad de Cuenca
Es decir, se saca el 12% del capital y se divide para el número de veces de composi-
ciones por periodo (12 composiciones por un periodo de un año, en el ejemplo). Ese
5994 interés se suma al capital para calcular el capital de la siguiente composición como si
se tratase de interés compuesto.
5997 (13.3)
Estadística
Media ponderada
235
Angel Vázquez-Patiño Universidad de Cuenca
6009 (13.4)
Medidas de longitud
• 1 yarda = 3 pies
• 1 pie = 12 pulgadas
• 8 bits = 1 byte
Tiempo
• 1 hora = 60 minutos
236
Angel Vázquez-Patiño Universidad de Cuenca
Unidades de temperatura
(13.5)
Círculo
6033 r: radio
l: longitud o perímetro
a: área
6036 (13.6)
(13.7)
Esfera
6039 • r: radio
• s: superficie o área
• v: volumen
6042 (13.8)
(13.9)
Cuadrado
6045 Ángulos
(13.10)
(13.11)
237
Angel Vázquez-Patiño Universidad de Cuenca
6051 (13.12)
Logaritmos
6054 (13.13)
en donde, , ; , .
238
Angel Vázquez-Patiño Universidad de Cuenca
14. Referencias
Alcalde Lancharro, E., García López, M., 1992. Metodología de la programación:
aplicaciones en COBOL y PASCAL. McGraw-Hill, Madrid.
Chapra, S.C., Canale, R.P., Enríquez Brito, J., Roa Hano, Ma. del C., 2007. Métodos
Numéricos para Ingenieros, 5th ed. McGraw-Hill Interamericana, México.
Charles Lehmann, 1994. Geometría analítica. Editorial Limusa, S.A. de C.V. Grupo
noriega editores, México D.F.
Chaves Torres, A.N., 2012. Diseño de algoritmos. Universidad Nacional Abierta y a
Distancia, Colombia.
Deitel, P.J., Deitel, H.M., 2012. Java: How to Program, 9th ed. Prentice Hall, Upper
Saddle River, N.J.
Editorial Macro, 2001. Turbo Pascal 7.0 Paso a Paso. Editorial Macro, Lima, Perú.
Gómez Fuentes, M. del C., Cervantes Ojeda, J., 2013. Inicialízate en la Programación
con C++, 1st ed. Universidad Autónoma Metropolitana, México.
Guttag, J., 2016. Introduction to computation and programming using Python: with
application to understanding data, 2nd ed. The MIT Press, Cambridge,
Massachusetts.
Joyanes Aguilar, L., Rodríguez Baena, L., Fernández Azuela, M., 2003. Fundamentos
de Programación: Libro de Problemas, 2nd ed. : McGraw-Hill, Madrid.
Lay, D.C., Lay, S.R., McDonald, J.J., 2016. Linear algebra and its applications, 5th
ed. Pearson, Boston.
Olaya, V., 2011. Sistemas de Información Geográfica.
Parra Terrazos, C., n.d. Algoritmos y estructuras de datos I. Universidad Tecnológica
del Perú, Lima, Perú.
Pérez Montes, F.M., 2010. Ejercicios de Programación en Java: Condicionales,
Bucles, Tablas y Funciones. Eduinnova, Sevilla, España.
Pinales Delgado, F.J., Velázquez Amador, C.E., 2014. Algoritmos Resueltos con
Diagramas de Flujo y Pseudocódigo. Departamento Editorial de la
Universidad Autónoma de Aguascalientes, Aguascalientes, México.
Quarteroni, A., Saleri, F., Gervasio, P., 2014. Scientific Computing with MATLAB
and Octave, 4th ed, Texts in Computational Science and Engineering.
Springer Berlin Heidelberg, Berlin, Heidelberg.
Tanenbaum, A.S., Wetherall, D.J., 2012. Redes de computadoras, 5th ed. Pearson
Educación, México D.F., México.
Vázquez Gómez, J.B., 2012. Análisis y diseño de algoritmos, 1st ed. Red tercer
milenio, Tlalnepantla, México.
239
Angel Vázquez-Patiño Universidad de Cuenca
240