Ejercicios de Programación Python
Ejercicios de Programación Python
10 de febrero de 2025
3 Universidad de Cuenca
Facultad de Ingeniería
Cuenca, Ecuador
6 Angel Vázquez-Patiño
Contenido
1. Introducción............................................................................................................. 7
2. Fundamentos............................................................................................................ 8
Qué es programar....................................................................................................8
Qué es un lenguaje de programación....................................................................... 8
Modelización de problemas del mundo real...........................................................10
Del problema real a su solución por computadora.................................................10
Conceptos acerca de software................................................................................10
Variables y tipos de datos......................................................................................10
Algoritmos............................................................................................................. 11
Diagramas de flujo................................................................................................. 13
Pseudocódigo.........................................................................................................14
Prueba de escritorio............................................................................................... 14
Codificación........................................................................................................... 14
Documentación y su importancia..........................................................................14
3. Programación Secuencial........................................................................................ 16
Miscelánea 1..........................................................................................................16
E2 Los cuatro cuatros............................................................................................ 18
E3 Respaldo de información.................................................................................. 18
Cálculos espaciales básicos.....................................................................................18
Cálculo de interés..................................................................................................21
Costo de llamada...................................................................................................21
Cálculo de potencia............................................................................................... 21
Área de un triángulo dadas las longitudes de los lados..........................................21
Hexágono regular................................................................................................... 22
Angel Vázquez-Patiño Universidad de Cuenca
2
Angel Vázquez-Patiño Universidad de Cuenca
3
Angel Vázquez-Patiño Universidad de Cuenca
4
Angel Vázquez-Patiño Universidad de Cuenca
5
Angel Vázquez-Patiño Universidad de Cuenca
6
Angel Vázquez-Patiño Universidad de Cuenca
1. Introducción
1. https://www.slideshare.net/angenio2/programacin-presentacin-del-curso
24 2. https://www.slideshare.net/angenio2/programacin-fundamentos-64227508
3. https://www.slideshare.net/angenio2/programacin-algoritmos
4. https://www.slideshare.net/secret/iu1SvB2vTa4jND
27 5. https://www.slideshare.net/angenio2/programacin-estructuras-de-control
6. https://www.slideshare.net/angenio2/programacin-introduccin-a-java
7. https://www.slideshare.net/angenio2/programacin-1-introduccin-a-c
30 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
10. https://www.slideshare.net/angenio2/programacin-estructuras-de-datos
33 11. https://www.slideshare.net/angenio2/programacin-1-estructuras-de-datos-en-c
12. https://www.slideshare.net/angenio2/programacin-funciones
13. https://www.slideshare.net/angenio2/programacin-1-funciones-en-c
36 14. https://www.slideshare.net/angenio2/programacin-1-cadenas-en-c
15. https://www.slideshare.net/angenio2/programacin-bsquedas-y-ordenamientos
Mucha de la teoría básica necesaria para resolver los ejercicios de este documento se
39 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
la Universidad de Cuenca, parte 1 y parte 2.
42 Cualquier comentario, duda o sugerencia con respecto a los ejercicios o las presenta-
ciones siempre es bienvenida.
7
Angel Vázquez-Patiño Universidad de Cuenca
2. Fundamentos
45 Qué es programar
54 3. Pregunta
a) Eiffel
72 b) C#
8
Angel Vázquez-Patiño Universidad de Cuenca
c) Fortran
d) DOS
a) 10
b) 13
78 c) 32
81 a) 32
b) 65
c) 97
84 d) 126
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
93 b) Más cerca de los lenguajes de alto nivel que del lenguaje máquina
a) Ada
9
Angel Vázquez-Patiño Universidad de Cuenca
b) C
99 c) Fortran
d) Java
c) Paradigmas de programación
9. Pregunta
c) Sentencias de control
10
Angel Vázquez-Patiño Universidad de Cuenca
Algoritmos
6. ¿Qué es un algoritmo?
a) Secuencia de pasos
b) Secuencia de instrucciones
11
Angel Vázquez-Patiño Universidad de Cuenca
d) Es finito
156 6. Algoritmo para calcular el volumen de una esfera. Vea la ecuación 39.
8. Algoritmo para calcular la edad de una persona (tomar en cuenta sólo el año
159 de nacimiento y el año actual)
162 11. Algoritmo para calcular el valor total a pagar por dos productos incluyendo el
IVA y un impuesto más del 1% (se impone al valor de los productos, antes de
calcular el IVA)
165 12. Algoritmo para calcular la distancia entre dos puntos dadas sus coordenadas
cartesianas
13. Algoritmo para convertir un número de bits a bytes, KB, MB y GB. Vea la
168 sección Unidades de capacidad de información de este documento.
171 16. Algoritmo que calcule el área de un triángulo dadas las coordenadas cartesia-
nas de sus vértices
17. Algoritmo que calcule el valor de un cateto dados los valores de la hipotenusa
174 y del otro cateto de un triángulo rectángulo
12
Angel Vázquez-Patiño Universidad de Cuenca
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
177 catetos
19. Algoritmo que calcule el área de un triángulo dados los valores de los lados
(revise el concepto de semiperímetro, ecuación 8).
180 20. Algoritmo que calcule las raíces de una ecuación cuadrática cuya forma canó-
nica es ax2+bx+c=0
183 22. Algoritmo que indica si un triángulo es equilátero, isósceles o escaleno dadas
las longitudes de sus lados.
26. Algoritmo para calcular el total a pagar por una compra. Si la compra es de
189 más de $100, el descuento es de 10%, caso contrario no hay descuento.
27. * Algoritmo para saber cuántos dígitos tiene un número entero positivo.
192 29. Algoritmo para encontrar la ecuación de una recta dados dos puntos de la
misma.
Diagramas de flujo
13
Angel Vázquez-Patiño Universidad de Cuenca
a) Verdadero
b) Falso
3.
204 Pseudocódigo
a) Verdadero
b) Falso
213 a) Es una herramienta útil que permite entender qué hace un algoritmo
2. Pregunta
Codificación
219 1. En el contexto de los diferentes tipos de errores que existen al momento de co-
dificar y ejecutar un programa. Si en un lenguaje compilado usted pudo reali-
zar la compilación de su código fuente sin errores, ¿qué otros tipos de errores
222 podrían aparecer en la ejecución del programa?
2. Pregunta
Documentación y su importancia
14
Angel Vázquez-Patiño Universidad de Cuenca
2. Pregunta
15
Angel Vázquez-Patiño Universidad de Cuenca
3. Programación Secuencial
231 Miscelánea 1
16
Angel Vázquez-Patiño Universidad de Cuenca
255 3. Se piden dos números y se presentan los resultados de la suma, resta, produc-
to y división. Primero elabore un algoritmo que resuelva el problema y luego
trate de editarlo para que use la menor cantidad de variables posible.
270 Una vez que haya elaborado su primer algoritmo para solucionar el problema,
pregúntese lo siguiente: ¿cuál es el número mínimo de variables que puede uti-
lizar para resolver el problema?
273 Una vez que resuelva el problema con el mínimo número de variables posible,
conteste si el orden de las instrucciones cambiaría el resultado (i.e., ya no re-
solviera el problema).
276 7. Se ha establecido que el número máximo de latidos de corazón por minuto que
cualquier persona puede alcanzar sin correr riesgos de salud es igual a 220 me-
nos la edad de la persona en años. Asociaciones médicas recomiendan mante-
279 ner el número de latidos por minuto durante una sesión de ejercicio físico en
un rango seguro que está entre el 50 y el 85% del número máximo menciona-
do. Calcular el rango seguro de latidos por minuto usando la edad de una per-
282 sona como dato de entrada.
17
Angel Vázquez-Patiño Universidad de Cuenca
288 rio normal por hora que gana un empleado y el número de horas trabajadas
durante la semana. Mostrar el salario total semanal que gana el empleado.
291 Refiérase al capítulo VII del libro El hombre que calculaba (Tahan, 1985).
1. 44-44 5. 8.
2. 9. 4+4+4-4
6.
3. 10.
7.
4. 11.
E3 Respaldo de información
294 Implemente un script que muestre el número de CDs necesarios para hacer una copia
de seguridad de la información almacenada en un disco duro cuya capacidad se cono-
ce (es dada por el usuario). Considerar que el disco duro está lleno de información y
297 su capacidad está expresada en GB. Cada CD que se utilizará para el respaldo tiene
una capacidad de 700 MB; un GB tiene 1024 MB.
300 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
plantean ejercicios relacionados con cálculos básicos que constituyen los fundamentos
303 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).
E4 Distancia euclidiana
306 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-
tre dos puntos (x1, y1) y (x2, y2) es
309 (1)
18
Angel Vázquez-Patiño Universidad de Cuenca
Distancia de Manhattan
(2)
* Métricas Lp
Tanto la distancia euclidiana como la de Manhattan son casos particulares de las de-
318 nominadas métricas Lp que corresponden a una expresión de la forma
(3)
Con p=1 y β=1, se tiene la distancia de Manhattan y con p=2 y β=1, se tiene la dis-
321 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-
bles β y p.
330 (4)
Para una recta D definida por su ecuación reducida y = ax + b y siendo A un punto
de la forma A = (xA, yA).
333 (5)
19
Angel Vázquez-Patiño Universidad de Cuenca
336 (6)
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
342 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
y = y1 + u(y2 – y1)
donde u se obtiene de
348 (7)
20
Angel Vázquez-Patiño Universidad de Cuenca
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
354 algoritmo que permita hacer el cálculo.
Costo de llamada
Se requiere un programa para determinar el costo que tendrá realizar una llamada te-
357 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-
363 ma. Considere que y . V, voltaje. I, corriente. R, resistencia.
21
Angel Vázquez-Patiño Universidad de Cuenca
(8)
369 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-
372 car el correcto funcionamiento del algoritmo.
Hexágono regular
| |
x y1 1
1 1
x y2 1 ,
2 2
x3 y3 1
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-
387 nadas (x1, y1), (x2, y2) y (x3, y3) sean colineales es que
| |
x1 y1 1
x2 y 2 1 =0
x3 y3 1
22
Angel Vázquez-Patiño Universidad de Cuenca
390 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
405 2. Elaborar un algoritmo que resuelva un sistema de ecuaciones lineales con tres
incógnitas.
408 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.
411 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.
23
Angel Vázquez-Patiño Universidad de Cuenca
Dos Atletas recorren la misma distancia y se registran sus tiempos en segundos (at1-
seg) y minutos (at2min) respectivamente.
420 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-
423 ras), minutos y segundos (at2seg).
Dada una cantidad expresada en pies y otra en metros, determinar la suma pero con-
426 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
429 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:
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
438 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
441 Una tienda ofrece un descuento sobre el total de la compra y un cliente desea saber
cuánto deberá pagar finalmente por su compra.
24
Angel Vázquez-Patiño Universidad de Cuenca
444 2. Realice un algoritmo que calcule un descuento d (%) ingresado por el usuario.
450 • 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)
465 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
468 porcentaje de hombres.
Realice un algoritmo que determine aproximadamente (i.e., asuma que todos los años
471 tienen 360 días y que todos los meses tienen 30 días) cuántos meses, semanas, días y
25
Angel Vázquez-Patiño Universidad de Cuenca
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
474 mismo realizando la prueba de escritorio.
• Realice un programa que reciba una temperatura en grados celsius y los con-
vierta a grados fahrenheit.
480 • 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.
492 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
495 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
498 y .
26
Angel Vázquez-Patiño Universidad de Cuenca
◦ 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
513 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:
27
Angel Vázquez-Patiño Universidad de Cuenca
Multiplicación de polinomios
Dados dos polinomios de segundo grado de parte del usuario, calcular la multiplica-
525 ción de dichos polinomios.
(9)
(10)
531 Elaborar un algoritmo que pueda calcular el logaritmo de un número en cualquier ba-
se. Vea la ecuación 43.
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
537 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
540 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 4 personas diferentes y cal-
543 cule el tiempo que se demoran en terminar la misma obra si trabajan juntas.
28
Angel Vázquez-Patiño Universidad de Cuenca
4. Estructuras de control
La teoría para poder resolver los ejercicios de estructuras de control la puede encon-
546 trar en https://goo.gl/OMZYqA.
Miscelánea
549 1. * E11 ¿Qué opción utilizaría para identificar que la variable x1 sea la mayor
de 5 variables?
a) if
561 b) while
c) for
29
Angel Vázquez-Patiño Universidad de Cuenca
a) if
b) for
567 c) while
570 a) if
b) for
c) while
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
591 ingreso de esos 100 números (tenga en cuenta que podrían ser n números) us-
ted podría utilizar (escoja 1 opción):
30
Angel Vázquez-Patiño Universidad de Cuenca
c) Tipos de datos
a) Una sentencia que permite decidir si se ejecuta o no se ejecuta una sola vez
un bloque aislado de código
606 b) Una sentencia que ejecuta otra sentencia que a su vez ejecuta la primera
sentencia
c) Una sentencia que permite ejecutar un bloque aislado de código varias ve-
609 ces hasta que se cumpla (o deje de cumplirse) una condición
31
Angel Vázquez-Patiño Universidad de Cuenca
FinMientras
621 Escribir z
FinAlgoritmo
15. * ¿Cuál de los siguientes algoritmos imprime en pantalla lo que está a conti-
624 nuación?
*
*****
627 **
*****
*
630 *****
**
*****
633 *
*****
a)
636 Proceso estrellas2
b1 <- 1;
b2 <- 0;
639 c1 <- 20;
Repetir
Si b1 = 1 Entonces
642 Si b2 = 1 Entonces
Escribir "**";
b2 <- 0;
645 Sino
Escribir "*";
32
Angel Vázquez-Patiño Universidad de Cuenca
b2 <- 1;
648 FinSi
b1 <- 3;
Sino
651 Escribir "*****";
b1 <- 1;
FinSi
654 c1 <- c1 + 2;
Hasta Que c1 < 1
FinProceso
657 b)
Proceso estrellas1
b1 <- 1;
660 b2 <- 0;
33
Angel Vázquez-Patiño Universidad de Cuenca
FinSi
675 FinPara
FinProceso
c)
678 Proceso estrellas3
b1 <- 1;
b2 <- 0;
681 c1 <- 10;
34
Angel Vázquez-Patiño Universidad de Cuenca
17. * E15 Con respecto a las estructuras de repetición estudiadas en el curso, cuál
717 de las siguientes proposiciones es verdadera:
35
Angel Vázquez-Patiño Universidad de Cuenca
729 j = i + 1;
Mientras j < 4 Hacer
Escribir j – 1;
732 j = j + 1;
FinMientras
FinPara
735 FinAlgoritmo
36
Angel Vázquez-Patiño Universidad de Cuenca
i = i + 1;
744 FinPara
FinProceso
a) 1 2 3 4 5
759 b) 1 1 2 3 4
c) 1 1 2 2 3
d) 1 2 2 4 5
762 22. * Implementar el mismo algoritmo utilizando las estructuras de control While
y Repeat (una versión usando While y otra versión usando Repeat).
Proceso estrellas
765 Definir b1 Como Entero;
b1 <- 1;
Para i <- 10 Hasta 100 Con Paso 10 Hacer
768 Si b1 = 1 Entonces
Escribir “*”;
37
Angel Vázquez-Patiño Universidad de Cuenca
b1 <- 0;
771 Sino
Escribir “*****”;
b1 <- 1;
774 FinSi
FinPara
FinProceso
786 c1 <- 8 - i;
c2 <- 0;
Mientras c2 < c1 Hacer
789 Escribir Sin Saltar "O";
c2 <- c2 + 1;
Fin Mientras
795 24. Se utilizan para tomar decisiones lógicas. Esta es la razón que se suelan deno-
minar también estructuras de decisión, condicionales o alternativas.
38
Angel Vázquez-Patiño Universidad de Cuenca
a) Estructuras selectivas
798 b) Estructuras simples
c) Estructura secuencial
d) Estructuras complejas
801 25. Ejecuta una determinada acción cuando se cumple una determinada condi-
ción.
a) For
804 b) Do-while
c) Repeat-until
d) If-then
807 26. Es aquella variable que es utilizada en un ciclo repetitivo y tiene por objetivo
almacenar valores cuyos incrementos o decrementos son en forma constante
por cada iteración de ciclo o bucle en cuestión.
810 a) Arreglo
b) Contador
c) Ciclo
813 d) Acumulador
e) Bucle
27. Por lo general, se emplean en los ciclos para controlar el número de iteraciones
816 en los mismos, o para almacenar totales de elementos.
a) Arreglo
b) Array
819 c) Ciclo
d) Bandera
e) Contador
a) Array
39
Angel Vázquez-Patiño Universidad de Cuenca
b) Contador
825 c) Iteración
d) Bucle
30. Puede estar compuesto de todos sus elementos de tipo cadena, otro puede te-
ner todos sus elementos de tipo entero, etc.
834 a) Arreglo
b) Contador
c) Ciclo
837 d) Array
40
Angel Vázquez-Patiño Universidad de Cuenca
41
Angel Vázquez-Patiño Universidad de Cuenca
42
Angel Vázquez-Patiño Universidad de Cuenca
906 FinAlgoritmo
933 36. * ¿Cuál de los siguientes algoritmos NO hace lo mismo que los otros dos?
43
Angel Vázquez-Patiño Universidad de Cuenca
a) El algoritmo opcion_A
b) El algoritmo opcion_B
38. * ¿Cuál de los siguientes algoritmos NO presenta los mismos resultados que
945 los otros dos? a, b ∈ [0, ∞) y a > b.
44
Angel Vázquez-Patiño Universidad de Cuenca
a) El algoritmo opcion_1
b) El algoritmo opcion_2
45
Angel Vázquez-Patiño Universidad de Cuenca
40. Pregunta
Miscelánea
1. E16 Implemente un script que indique si un número dado es par o impar. Vea
957 https://goo.gl/SRuAY2
960 3. Dados tres números indicar si cada uno es par o impar. Además, indicar si to-
dos los números son pares, si son impares o si están “mezclados” (no todos son
pares ni todos son impares).
46
Angel Vázquez-Patiño Universidad de Cuenca
Opción [1-3]: _
969 El usuario ingresa una de las opciones y de acuerdo a la ingresada (1-3) escri-
be en pantalla “Opción 1: Archivo.”, “Opción 2: Buscar.” u “Opción 3: Salir.”.
En caso de que el usuario no indique ninguna de las opciones, se debe mostrar
972 el mensaje de error “Debe ingresar una opción correcta.”.
978 7. Escriba un algoritmo para verificar si los ángulos de los vértices de un triángu-
lo cumplen con la condición para formar un triángulo.
9. El usuario ingresa tres números que representan las longitudes de los lados de
984 un triángulo. Indicar si se trata de un triángulo rectángulo.
10. Escriba un algoritmo que dado un mes del año (en letras), indique el número
de días de ese mes.
987 11. Escriba un algoritmo para ingresar un número y verificar si es divisible para 5
y para 11.
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
996 adulta. Las personas adscritas a la jubilación por edad deben tener 60 años o
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
999 antigüedad en su empleo de 25 años o más. Las personas adscritas a la jubila-
47
Angel Vázquez-Patiño Universidad de Cuenca
ción por antigüedad adulta deben tener 60 años o más y una antigüedad en su
empleo de 25 años o más. Determinar en qué tipo de jubilación quedará ads-
1002 crita una persona.
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-
1005 cos).
if ( a < b && c != d ) && ( b > d || b == d ) b1 ;
if ( a < b && c != d ) && ( b > d || b == e ) b2 ;
1008 Si usted está aprendiendo Python, le será más fácil entender lo siguiente:
if (a < b and c != d) and ( b > d or b == d ):
b1
1011 if (a < b and c != d) and ( b > d or b == e ):
b2
15.
Aprobación de curso
1014 Dadas las notas de dos pruebas y dos exámenes (/20), calcular el promedio de las
cuatro notas y si la persona tiene 12 o más, aprueba el curso, caso contrario, pierde
el año.
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
1020 peso (en kilogramos) y la talla (en metros) de una persona mediante la fórmula
(11)
48
Angel Vázquez-Patiño Universidad de Cuenca
Programe una calculadora de IMC que pida el peso y talla de una persona e indique
la categoría de IMC.
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:
1041 • Realizar un programa que verifique que el número n1 sea mayor o igual al nú-
mero n2, si es así el programa debe indicar si el número n2 es divisor del nú-
49
Angel Vázquez-Patiño Universidad de Cuenca
mero n1, caso contrario el programa debe decir “¡ERROR! El primer número
1044 ingresado debe ser mayor o igual al segundo.”
1053 • Escriba un algoritmo que dados tres números indique si el tercero es el resto
de la división entre los dos primeros: 1) el primero para el segundo y 2) el se-
gundo para el primero. Valide su algoritmo para que se evite un error de divi-
1056 sión para cero, mostrando, antes de que se dé dicho error, que el divisor es ce-
ro.
1068 2. Determine el menor valor de 3 números, indicando además en qué orden fue
ingresado (i.e., si fue el primero en ser ingresado, si fue el segundo o si fue el
tercero). En caso de que el menor valor se repita, el algoritmo debería actuar
1071 de la siguiente manera. Si los números ingresados fueran el 14, 19, y 14, el re-
50
Angel Vázquez-Patiño Universidad de Cuenca
sultado debe ser “El menor valor ingresado fue 14 y corresponde al 3° número
ingresado”.
1074 3. Determine el menor valor de 5 números, indicando además en qué orden fue
ingresado. En caso de que el menor valor se repita, el algoritmo debería actuar
de la siguiente manera. Si los números ingresados fueran: 14, 19, 14, 16, 19. El
1077 resultado debe ser: “El menor valor ingresado fue 14 y corresponde al 3° nú-
mero ingresado”.
Puntaje en olimpiada
1080 En una olimpiada de tiro al blanco se llega a un acuerdo entre los participantes para
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
1086 En un estacionamiento cobran $2 por hora o fracción los días Lunes, Martes y
Miércoles, $2.5 los días Jueves y Viernes, $3 los días Sábado y Domingo. Se considera
fracción de hora cuando haya pasado de 5 minutos. Diseñe un programa que determi-
1089 ne cuánto debe pagar un cliente por su estacionamiento en un solo día de la semana.
Si el día ingresado es incorrecto imprima un mensaje de error.
1092 Diseñe un programa que lea un número entero (positivo o negativo) de máximo 4 ci-
fras (validar) y determine si tiene 1, 2, 3 o 4 cifras imprimiendo lo que corresponda.
51
Angel Vázquez-Patiño Universidad de Cuenca
1101 En una Librería han puesto en oferta la venta de cuadernos al por mayor, obsequian-
do lapiceros Lucas, Cross y/o Novo dependiendo de la cantidad de cuadernos com-
prados, de la siguiente manera:
• Compra no menos que 12 pero menos que 24, obsequio: 1 Lucas por cada 4
cuadernos.
1107 • Compra no menos que 24 pero menos que 36, obsequio: 2 Cross por cada 4
cuadernos.
• Compra no menos que 36, obsequio: 3 Novo por cada 4 cuadernos. Adicional-
1110 mente 1 Lucas y 1 Cross.
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
1116 mínimo (pagoMin) y el pago para no generar intereses (pagoSinInteres). Los datos
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
1119 el pago mínimo se debe considerar 15% del saldo, y para no generar intereses corres-
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
1122 (abono) anterior y $200 por multa si abonó (en el corte anterior) menos del pago mí-
nimo. Realice el algoritmo correspondiente e impleméntelo.
52
Angel Vázquez-Patiño Universidad de Cuenca
Ordenamiento de números
Restricción de ingreso
1137 1. Hectogramos
2. Gramos
3. Decigramos
1140 4. Centigramos
5. Miligramos
1143 El usuario ingresa 10 números y el programa muestra el menor y el mayor de los nú-
meros ingresados.
1146 Implemente el juego de manos pares o nones con la diferencia de que se podría mos-
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:
53
Angel Vázquez-Patiño Universidad de Cuenca
Notas:
54
Angel Vázquez-Patiño Universidad de Cuenca
1167 Miscelánea
1.
2.
Signo zodiacal
Elaborar un algoritmo para leer la fecha de nacimiento (mes y día) de una persona y
1176 muestre su signo zodiacal; si se ingresa un mes o día inconsistente se debe presentar
un mensaje que diga “Fecha no reconocida.”. Tome en cuenta la siguiente informa-
ción:
55
Angel Vázquez-Patiño Universidad de Cuenca
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),
1194 sexo (masculino, mas; femenino, fem) y el importe por la venta (imp). Se calcula un
descuento de acuerdo a las siguientes condiciones:
56
Angel Vázquez-Patiño Universidad de Cuenca
1212 Miscelánea
1230 Nota: obtendrá una pista al solucionar primero el ejercicio 16 (p. 46).
3. E21 Implemente un script que muestre la suma de todos los números divisores
de un número positivo dado. Por ejemplo, la suma de los números divisores
1233 del 8 es 15 (1+2+4+8).
1 Si aún no sabe cómo generar números aleatorios podría usted mismo dar el número inicial.
57
Angel Vázquez-Patiño Universidad de Cuenca
1239 Por ejemplo, suponga que se genera el número 4 de manera aleatoria para que
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
1242 + 4 = 7.
N: 1 M: 2 N: 5 M: 10
1254 1 1 1 3 6 2 6 18 35 67 128 254
N: 4 M: 7 N: 3 M: 4
6 2 0 3 11 16 30 1 8 8 17
1257 N: 2 M: 3 N: 1 M: 2
1 7 8 2 2
N: 1 M: 6 N: 1 M: 2
1260 6 6 6 6 6 6 6 6
58
Angel Vázquez-Patiño Universidad de Cuenca
1269 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
cuyo sueldo superó los $600 se le descuenta 10% por concepto de impuesto a
1272 la renta. Se desea saber cuántos trabajadores gana más de $600, cuántos ga-
nan hasta $600 y cuánto dinero se tiene que pagar al estado por concepto de
impuestos
E24 Números de n a m
1287 5. Hacer un programa que imprima los números enteros de m a n (n < m).
1293 2. Implemente un script que lea N números, donde N es dado por el usuario.
59
Angel Vázquez-Patiño Universidad de Cuenca
Simule un lanzamiento de moneda, si sale cara, muestre los números pares del inter-
1299 valo [1 , 100]. Si sale cruz, muestre los números impares del intervalo [1 , 100].
Hacer un programa que imprima en pantalla los números impares del 1 hasta el 100
1302 y que imprima en pantalla la cantidad de números impares. Le podría resultar de uti-
lizar revisar la sección contadores del documento https://www.scribd.com/doc/
307441670/Fundamentos-de-programacion-estructuras-de-control.
Hacer un programa que imprima la suma de los 100 primeros números naturales. Le
podría resultar de utilidad revisar la sección Acumuladores del documento https://
1314 www.scribd.com/doc/307441670/Fundamentos-de-programacion-estructuras-de-con-
trol
1317 Implemente un script que calcule, independientemente, la suma de los pares y los im-
pares de los números entre 1 y 10000 (inclusivo).
60
Angel Vázquez-Patiño Universidad de Cuenca
1320 1. Pedir 5 números al usuario y mostrar la suma y promedio de los números in-
gresados.
Ingreso de binarios
Hacer un algoritmo que sólo nos permita introducir 0 o 1. Si se ingresa un número di-
1326 ferente, el programa termina.
Realizar un programa que lea números. Mientras el número ingresado sea positivo, el
1329 programa sigue leyendo números desde el teclado. El momento que ingresa un núme-
ro igual o menor a cero, el programa termina.
1332 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ó.
1335 Implemente un script que lea el número de miembros de familias. El script deja de
leer números cuando se ingresa un número negativo. Antes de terminar, el script pre-
senta la cantidad de familias que tiene un miembro, dos miembros, tres miembros,
1338 cuatro miembros, cinco miembros y las familias que tienen más de seis miembros.
Elabore un algoritmo que pida números hasta que se introduzca un número negativo.
1341 De todos los números introducidos calcular la suma de todos los números pares, la
suma de todos los números impares y el promedio de todos los números introducidos.
61
Angel Vázquez-Patiño Universidad de Cuenca
1344 Implemente un script que permita leer caracteres hasta que el usuario ingrese el ca-
rácter X/x (mayúscula o minúscula). Cada vez que se ingrese un carácter, transfor-
mar su código ASCII a binario, mostrando los 1s con - (guiones) y los 0s con . (pun-
1347 tos). A continuación se muestra un ejemplo
h
104: --.-...
1350 O
79: -..----
l
1353 108: --.--..
A
65: -.....-
1356 x
Dado el radio (r) de un círculo, calcular la longitud (l) y el área (a). Dado que el va-
1359 lor del radio no debe ser negativo (sí puede ser igual a cero), valide el ingreso de di-
cho valor.
1362 Se sabe que la media geométrica y la media aritmética se calculan mediante las si-
guientes fórmulas:
62
Angel Vázquez-Patiño Universidad de Cuenca
1371 3. Contar y sumar los números múltiplos de 3 comprendidos entre los números 1
y 15.
4. Contar y sumar los números múltiplos de n (n>1) comprendidos entre los
1374 números enteros m y w (m<w).
1383 E40 El usuario ingresa una lista de valores numéricos. El ingreso de los números ter-
mina cuando el usuario ingrese el valor -9999. Determinar el rango (mínimo y máxi-
mo) y el promedio de los valores ingresados. No se debe considerar para los cálculos
1386 el número -9999.
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.
1392 • 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.
1395 Determinar el monto mensual que recibirá una familia de acuerdo a su realidad fami-
liar.
63
Angel Vázquez-Patiño Universidad de Cuenca
* E41 Factura
1419 2. Pedir el número de veces que el usuario quiere repetir la serie de números del
1 al 6. Repetir las n veces la serie.
3. Pedir el número de veces (n) que el usuario quiere repetir una serie. Pedir el
1422 límite inferior (m) y superior (w) de la serie. Repetir las n veces indicadas la
serie de números desde m a w. Asuma que m < w.
4. Pedir el número de veces que el usuario quiere repetir una serie. Pedir el nú-
1425 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
que debe repetir 3 veces la serie desde m=6 hasta w=2, el programa debe
1428 mostrar
6 5 4 3 2
6 5 4 3 2
64
Angel Vázquez-Patiño Universidad de Cuenca
1431 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-
1434 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
1437 algoritmo:
m: 1
w: 10
1440 n: 3
k: 2
1 3 5 7 9
1443 1 3 5 7 9
1 3 5 7 9
m: 10
1446 w: 1
n: 4
k: 3
1449 10 7 4 1
10 7 4 1
10 7 4 1
1452 10 7 4 1
6. asdf
1455 Implemente un script que imprima los números del 00000 al 99999 con la particulari-
dad de que cada vez que debiera imprimirse el 1 (en cualquiera de los dígitos) se sus-
65
Angel Vázquez-Patiño Universidad de Cuenca
Encuesta a familias
1461 • Tienen televisión o no tienen. Contar los que tienen y los que no tienen.
• Es en color o no es en color. Contarlos.
• Piensan compararlos o no. Contarlos.
1464 • Hallar el porcentaje de cada uno.
Elabore un algoritmo que solicite la edad de n personas, y que muestre cuántos son
1470 mayores de edad y cuántos son menores de edad. Mayores de edad son las personas
de 18 años o más.
1473 1. Una pareja desea invertir su dinero en un banco, el cual otorga el 2% de inte-
rés anual. ¿Cuál será la cantidad de dinero que esta persona tendrá al cabo de
un año si la ganancia de cada mes es reinvertida? Vea la sección Composición
1476 periódica o Capitalización continua, página 285.
Para que pueda verificar sus resultados, la siguiente tabla muestra valores para
un capital inicial invertido de $100.
66
Angel Vázquez-Patiño Universidad de Cuenca
1479 2. Un cliente de un banco deposita equis cantidad de dólares cada mes en una
cuenta de ahorros. La cuenta percibe un interés fijo durante un año de 10%
anual. Realice un algoritmo para determinar el total de la inversión final de
1482 cada año en los próximos N años.
1485 Los directivos de equis escuela requieren determinar cuál es la edad promedio de ca-
da uno de los M salones y cuál es la edad promedio de toda la escuela. Realice un al-
goritmo para determinar estos promedios y represente la solución mediante el diagra-
1488 ma de flujo, el pseudocódigo y el diagrama N/S.
Trabajo conjunto
1491 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?
1494 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?
67
Angel Vázquez-Patiño Universidad de Cuenca
1497 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-
cule el tiempo que se demoran en terminar la misma obra si trabajan juntas.
1500 Frases
• Introducir una frase por teclado. Imprimirla cinco veces en filas consecutivas,
pero cada impresión debe ir desplazada cuatro columnas hacia la derecha.
1503 • Introducir una frase por teclado. Imprimirla en el centro de la pantalla.
Con
1512 1
2 3
4 5 6
1515 7 8 9 10
Con
1
1518 2 3
4 5 6
7 8 9 10
1521 11 12 13
68
Angel Vázquez-Patiño Universidad de Cuenca
Elabore un algoritmo que pida dos fechas (día, mes y año) y muestre el número de
1524 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.
1527 Una empresa necesita visualizar un reloj de 24 horas (00:00:00 - 23:59:59). Realice un
programa que muestre en pantalla el conteo del tiempo con el formato hh:mm:ss, se-
gundo a segundo.
5 × 10^3 = 5000
1545 4 × 10^2 = 400
3 × 10^1 = 30
69
Angel Vázquez-Patiño Universidad de Cuenca
2 × 10^0 = 2
1548 ----
5432
1551 Nota: se sugiere desarrollar antes los ejercicios 29 (pág. 60), 49 (pág. 69) y 50.
70
Angel Vázquez-Patiño Universidad de Cuenca
1572 2. Dado un número n, indique todos los pares de números con amistad cuadráti-
ca que resulten de los números reversibles que existan desde el 1 hasta el n.
1575 El número 220 es divisible exactamente por los números: 1, 2, 4, 5, 10, 11, 20,
22, 44, 55 y 110. Estos son los divisores de 220 menores que 220. El número 284
es -a su vez- divisible exactamente por los siguientes números: 1, 2, 4, 71 y 142.
1578 Son esos los divisores de 284 menores que 284.
Pues bien. Hay entre esos números relaciones notables. Si sumamos los divisores
de 220, arriba indicados, obtenemos una suma igual a 284; si sumamos los divi-
1581 sores de 284, el resultado es, precisamente, 220. […]. De esa relación los matemá-
ticos llegaron a la conclusión de que los números 220 y 284 son “amigos”; es de-
cir, que cada uno de ellos parece existir para servir, alegrar, defender u honrar
1584 al otro.
Implemente un script que imprima en pantalla todos los pares de números (enteros)
1587 amigos que sean mayores a cero y menores o iguales a 10000.
1593 Imagine un caminante aleatorio con eventos {0, 1} (en un tiempo t cualquiera: 0, no
camina; 1, camina un paso) y probabilidad P(0) = 0,5 y P(1) = 0,5. Realice un algo-
ritmo que imprima la trayectoria del caminante aleatorio en los tiempos [1, 20] como
1596 se muestra en el vídeo https://youtu.be/S_YUVIUIW60.
71
Angel Vázquez-Patiño Universidad de Cuenca
1605 Elabore un algoritmo que permita solucionar el siguiente enunciado: se ingresan por
el teclado del computador dos números enteros positivos, encontrar la suma y el pro-
medio de todos los factoriales de los números pares comprendidos entre esos dos nú-
1608 meros ingresados. Mostrar la suma y el promedio.
1611 Ejemplo:
A=2
B=8
72
Angel Vázquez-Patiño Universidad de Cuenca
1620 • Indicar cuántos términos hay que sumar (cuál es el valor de n) de la siguiente
serie para que la suma sea mayor o igual a 1000.
1626 Los siguientes son resultados para diferentes valores de . Los puede utilizar pa-
ra verificar que su script hace lo pedido.
n Resultado
1629 5 5.416666666666666
15 5.43656365691646
30 5.436563656918091
1632 50 5.436563656918091
75 5.436563656918091
73
Angel Vázquez-Patiño Universidad de Cuenca
1644 calculando el coseno del ángulo 𝑥. Debe mostrarse un mensaje que indique al
usuario el resultado obtenido con la serie del coseno y con la función del
coseno. Por ejemplo, en el lenguaje C, puede usar la función cos(𝑥) que viene
1647 incluida en math.h.; en el lenguaje Python, puede usar la función cos(x) que
viene incluida en el módulo math (import math; print(math.cos(0.5))).
1650 Antes de desarrollar este ejercicio revise el ejercicio E17 de la página 48.
74
Angel Vázquez-Patiño Universidad de Cuenca
75
Angel Vázquez-Patiño Universidad de Cuenca
76
Angel Vázquez-Patiño Universidad de Cuenca
20.0 **********************************************************
20.5 ***********************************************************
1728 21.0 *************************************************************
21.5 **************************************************************
22.0 ****************************************************************
1731 22.5 *****************************************************************
23.0 ******************************************************************
23.5 ********************************************************************
1734 24.0 *********************************************************************
24.5 ***********************************************************************
25.0 ************************************************************************
1737 Peso [kg]
E62 Combinatoria
(12)
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
1749 blanco. Su algoritmo debe funcionar con cuadrados que tengan lados de todas las
longitudes entre 1 y 20 (validar). Por ejemplo, si su programa lee un tamaño de 5,
debe imprimir
1752 *****
* *
* *
77
Angel Vázquez-Patiño Universidad de Cuenca
1755 * *
*****
1758 Dado un valor N, muestre un cuadrado de lado 2N con un rombo en el centro. Por
ejemplo
Ingrese N: 5 Ingrese N: 6 Ingrese N: 3
********** ************ ******
**** **** ***** ***** ** **
*** *** **** **** * *
** ** *** *** * *
* * ** ** ** **
* * * * ******
** ** * *
*** *** ** **
**** **** *** ***
********** **** ****
***** *****
************
1761 Nota: antes de desarrollar este ejercicio, es buena idea solucionar primero el ejercicio
129 (página 176).
Implemente un script que pida al usuario, mediante el teclado, un valor n. Debe vali-
1764 dar la entrada de manera tal que si el número ingresado no es un número entero im-
par en el intervalo [1, 29], se muestre un error hasta que el usuario ingrese un número
que cumple la condición. Una vez que se ingresa un número correcto, dibuje dos
1767 triángulos de altura n siguiendo la disposición que se muestra en los ejemplos siguien-
tes.
78
Angel Vázquez-Patiño Universidad de Cuenca
n: 3 n: 5 n: 7 n: 9
* * * *
** ** ** **
*** *** *** ***
** **** **** ****
* ***** ***** *****
* **** ****** ******
** *** ******* *******
*** ** ****** ********
** * ***** *********
* * **** ********
** *** *******
*** ** ******
**** * *****
***** * ****
**** ** ***
*** *** **
** **** *
* ***** *
****** **
******* ***
****** ****
***** *****
**** ******
*** *******
** ********
* *********
********
79
Angel Vázquez-Patiño Universidad de Cuenca
*******
******
*****
****
***
**
*
1770 Implemente un script que pida al usuario, mediante el teclado, un valor n. Debe vali-
dar la entrada de manera tal que si el número ingresado no es un número entero im-
par en el intervalo [3, 999999], se muestre un error hasta que el usuario ingrese un
1773 número que cumple la condición (asuma que el usuario siempre ingresa un número
entero). Una vez que se ingresa un número correcto, dibuje dos triángulos de altura n
siguiendo la disposición que se muestra en los ejemplos siguientes.
n: 3 n: 5 n: 7
* * *
*** *** ***
********** ***** *****
*** ******* *******
* ****************** *********
******* ***********
***** **************************
*** ***********
* *********
*******
*****
80
Angel Vázquez-Patiño Universidad de Cuenca
***
*
Se conoce por onda cuadrada a la onda de corriente alterna (CA) que alterna su va-
1779 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.)
1782 Escriba un programa que genere la onda mostrada en la figura anterior. Los
datos que deben especificarse son:
81
Angel Vázquez-Patiño Universidad de Cuenca
1794 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:
li: -9 li: 0 li: 10 li: 0
ls: -1 ls: 5 ls: 11 ls: 1
ciclos: 2 ciclos: 1 ciclos: 3 ciclos: 4
-9 0 10 0
-8 1 11 1
-7 2 10 0
-6 3 11 1
-5 4 10 0
-4 5 11 1
-3 4 10 0
-2 3 11 1
-1 2 10 0
-2 11 1
-3 10 0
-4 11 1
-5 10 0
-6 11 1
-7 10 0
-8 11 1
82
Angel Vázquez-Patiño Universidad de Cuenca
-9 10 0
11 1
10 0
11 1
10 0
11 1
10 0
11 1
10 0
1
0
1
0
1
0
1
0
* Onda de sierra
1797 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
del último número impreso (el de abajo), se debe agregar dígitos ceros en la parte iz-
1800 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
83
Angel Vázquez-Patiño Universidad de Cuenca
08 105
09 106
10 107
16 15 14 13 12 11 113 112 111 110 109 108
17 114
18 115
19 116
20 117
21 123 122 121 120 119 118
124
125
126
127
128
(13)
1806 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).
Nota: antes de realizar este ejercicio le resultará de mucha utilidad desarrollar los
1809 ejercicios E58-E60 (página 73).
Antes de realizar este ejercicio revise el ejercicio E62 Combinatoria de la página 77.
84
Angel Vázquez-Patiño Universidad de Cuenca
1815 (14)
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 12), entonces los valores de la combinatoria
1818 son los coeficientes del desarrollo del binomio.
1821 2. se escriben una serie de números en las casillas situadas en sentido diagonal
descendente, a ambos lados, del siguiente modo: se suman las parejas de cifras
situadas horizontalmente (1 + 1), y el resultado (2) se escribe debajo de di-
1824 chas casillas; el proceso continúa escribiendo en las casillas inferiores la suma
de las dos cifras situadas sobre ellas (1 + 2 = 3), etc.
85
Angel Vázquez-Patiño Universidad de Cuenca
86
Angel Vázquez-Patiño Universidad de Cuenca
Miscelánea
1842 El anterior es un ejemplo con 3 asignaturas, recuerde que los estudiantes pue-
den llevar un número variable de asignaturas.
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
1848 deberá emitir un mensaje de error y deberá comenzar nuevamente.
87
Angel Vázquez-Patiño Universidad de Cuenca
88
Angel Vázquez-Patiño Universidad de Cuenca
Sino
Escribir Sin Saltar “>”;
1881 FinSi
columna = columna + 1;
FinMientras
rt <- (mr+Mr1)/2;
89
Angel Vázquez-Patiño Universidad de Cuenca
mr <- rt;
rt <- (rt + Mr1)/2;
1905 FinSi
Si rt*rt > num Entonces
Mr1 <- rt;
1908 rt <- (rt + mr)/2;
FinSi
FinMientras
1911 Escribir "El resultado de ", num, " es: ", rt;
FinAlgoritmo
a. 1
b. Infinito
1929 c. 0
d. Error de compilación
e. Ninguna de las anteriores
90
Angel Vázquez-Patiño Universidad de Cuenca
1932 7. Pregunta
Suponga que no existe el operador potencia. Escriba un programa que lea dos valores
1935 enteros, llamados base y exponente y devuelva base elevado a la potencia exponente.
Bases y exponentes
1941 2. * E70 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 ma-
nera tal que 0 ≤ p ≤ N, r ∈ (-N, N) y rp = N. Si no existe ningún par de
1944 enteros, 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 pa-
ra tal efecto, i.e., no debe utilizar ninguna función ni otro operador como **.
1947 A continuación se muestra, como ejemplo, algunas ejecuciones del programa:
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
91
Angel Vázquez-Patiño Universidad de Cuenca
*E71 Factorial
1956 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-
to es 6, ya que los divisores de 6 son 1, 2, 3 y 1 + 2 + 3 = 6. Elabore un algoritmo
1959 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.
Sólo si es perfecto, deberá sacar la suma del factorial de cada uno de los números que
1962 son divisores (excluido él mismo).
Números primos
92
Angel Vázquez-Patiño Universidad de Cuenca
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-
1983 dos los intentos.
Cara o cruz
Utilice una función para generar números aleatorios enteros en el rango [1, 6] para si-
1989 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-
minen los lanzamientos, muestre una tabla de frecuencias que indique la cantidad de
1992 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ú-
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-
1995 bería ser:
Tabla de frecuencias
1 4
1998 2 3
3 3
4 4
2001 5 3
93
Angel Vázquez-Patiño Universidad de Cuenca
6 3
Gráfico de barras
2004 1 ****
2 ***
3 ***
2007 4 ****
5 ***
6 ***
2028 • Elabore un algoritmo que muestre los términos de la serie de Fibonacci que
sean menores a 100000:
94
Angel Vázquez-Patiño Universidad de Cuenca
, (15)
*E76 Aproximación de π
2040 , (16)
2043 Calcule una aproximación de con un error aproximado relativo (i.e., igual o menor)
de 0.001. El error aproximado relativo está dado por
(17)
2049 (18)
Calcule una aproximación del logaritmo natural de con un error aproximado (i.e.,
2052 igual o menor) de 0.0001. Para saber qué es el error aproximado vea la ecuación 17.
95
Angel Vázquez-Patiño Universidad de Cuenca
Para n→∞ (en la práctica un número suficientemente alto) el arco seno de x se pue-
2055 de calcular con la siguiente serie de Taylor:
Realizar lo siguiente:
2070 • Escriba un programa que lea dos enteros: el primero debe ser impar (validar)
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í-
2073 do. Se debe presentar la multiplicación de los números de cada fila del triángu-
lo. Dos ejemplos: si el primer entero es 7 y 9 y el segundo entero es 1 y 2, los
triángulos deben ser:
2076 Primer número : 7 Primer número: 9
Segundo número: 1 Segundo número: 2
1 1 2 2
2079 111 1 222 8
96
Angel Vázquez-Patiño Universidad de Cuenca
11111 1 22222 32
1111111 1 2222222 128
2082 222222222 512
• 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-
2085 de 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 pre-
sentar la suma de los números de cada fila del triángulo. Dos ejemplos: si el
2088 primer entero es 7 y 9 y el segundo entero es 1 y 2, los triángulos deben ser:
Primer número : 7 Primer número: 9
Segundo número: 1 Segundo número: 2
2091 1 1 2 2
111 3 222 6
11111 5 22222 10
2094 1111111 7 2222222 14
222222222 18
Menú
2097 • Introducir dos números por teclado y mediante un menú, calcule su suma, su
resta, su multiplicación o su división; se sale del programa luego de seleccionar
la opción salir del menú.
2100 • Hacer un programa que permita introducir un número por teclado y sobre él
se realicen las siguientes operaciones: comprobar si es primo, hallar su factorial
o imprimir su tabla de multiplicar de acuerdo a lo seleccionado en un menú; se
2103 sale del programa luego de seleccionar la opción salir del menú.
Función exponencial
Realice un algoritmo para obtener una función exponencial, la cual está dada por:
97
Angel Vázquez-Patiño Universidad de Cuenca
2106 No se debe usar la función potencia, ni ninguna función que calcule el factorial (debe
hacer el algoritmo para calcular la potencia y para calcular el factorial).
2109 Reciba dos números enteros, el primero representa un número y el segundo represen-
ta la base de numeración. Proponga un algoritmo para retornar el número expresado
en dicha base de numeración.
2115 1. Ingresar un Número: pide un número positivo mayor a cero; si no cumple esta
condición, debe mostrar el mensaje “¡El número debe ser positivo mayor a ce-
ro!” y vuelve a pedir un número
3. Terminar el Algoritmo
98
Angel Vázquez-Patiño Universidad de Cuenca
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-
2133 dica la opción cuatro, el programa termina y antes imprime el mensaje “Saliendo...”.
Si el usuario indica la opción 1 (Permutaciones) se debe presentar el submenú
--------------------------------
2136 Permutaciones
--------------------------------
1. Sin repetición (n!)
2139 2. Con repetición (n!/(a!b!c!…))
3. Circulares ((n-1)!)
4. Volver
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
2145 usuario escoge una de las opciones del uno al tres, se piden los datos necesarios, se
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
2148 uno al tres indique con texto cuándo se utiliza esa operación (sin repetición, con re-
petición, etc) y si es necesario ponga un ejemplo de uso.
Opción [1-3]: _
99
Angel Vázquez-Patiño Universidad de Cuenca
Cuando el usuario ingrese una opción incorrecta, presente algún mensaje que indique
2160 el error. Si el usuario escoge la opción tres, se vuelve al menú principal. Cuando el
usuario escoge una de las opciones del uno al dos, se piden los datos necesarios, se
realizan las operaciones necesarias y se presentan los resultados; luego de presentar
2163 los resultados se vuelve al submenú Variaciones. Cuando se escoja la opción uno o
dos indique con texto cuándo se utiliza esa operación (sin repetición, con repetición,
etc) y si es necesario ponga un ejemplo de uso.
100
Angel Vázquez-Patiño Universidad de Cuenca
2172 Miscelánea
2196 3. Desarrolle un algoritmo que lea N valores de números positivos y que imprima
la suma de aquellos que sean impares y menores a 200.
101
Angel Vázquez-Patiño Universidad de Cuenca
4. Desarrolle un algoritmo que lea una serie de valores que terminará cuando se
2199 lea el valor cero y que imprima la suma de aquellos que son negativos. Siem-
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-
2202 recho a 3 intentos. Cuando el usuario escriba la contraseña correcta se impri-
mirá "¡Enhorabuena!" y terminará el algoritmo. En caso de no escribir la
contraseña correcta se imprimirá “Lo siento, contraseña equivocada”. Si se
2205 cumplen los 3 intentos y el usuario no escribe la contraseña correcta se impri-
mirá “Oportunidades Agotadas” y finaliza la ejecución del algoritmo.
2214 7. N miembros de un club contra la obesidad desean saber cuánto han bajado o
subido de peso desde la última vez que se reunieron. Para esto es necesario
que cada uno se pese en 10 básculas distintas y después obtener el promedio
2217 de su peso. Si existe diferencia positiva entre el peso promedio y el peso de la
última reunión significa que subieron. Si la diferencia es negativa, significa que
bajaron. Desarrolle un algoritmo que informe a cada persona si subió o bajó
2220 de peso y qué cantidad de Kilos.
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-
2223 cance a encuestar en un día, qué porcentaje tiene estudios de primaria, secun-
102
Angel Vázquez-Patiño Universidad de Cuenca
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
2235 perciben un sueldo mensual mayor o igual a $500.
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
2238 imprima la utilidad neta de cada tienda, y que informe cuántas tiendas obtu-
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
2247 ingresado por el usuario. El siguiente es un ejemplo donde el usuario ingresó el
número 5:
1 1 1
2250 2 4 8
3 9 27
4 16 64
2253 5 25 125
103
Angel Vázquez-Patiño Universidad de Cuenca
14. * E80 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)
2256 dada por el usuario. Por ejemplo 00:00:00, 00:00:01, 00:00:02,…, 20:20:17. An-
tes de realizar este ejercicio desarrolle el ejercicio Reloj de 24 horas de la pági-
na 69.
2259 15. Desarrolle un algoritmo que reciba un número entero positivo (validar) y que
retorne un nuevo número con sus cifras invertidas.
c) Con el primer número impar que se ingrese se muestra una “cruz” de lado
igual al número impar. Por ejemplo con el impar 5
2271 x
x
xxxxx
2274 x
x
2277 17. Crear un programa que muestre en pantalla un diamante formado por asteris-
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
2280 **
****
******
104
Angel Vázquez-Patiño Universidad de Cuenca
2283 ********
**********
********
2286 ******
****
**
2289 18. *E81 Dado el siguiente código fuente en lenguaje C, cuya salida se muestra co-
mo “Solución actual” en la parte derecha superior de la tabla siguiente:
SOLUCIÓN ACTUAL
SOLUCIÓN REQUERIDA
modifique el código de manera que la salida del programa sea similar que la
2292 mostrada como “Solución requerida” en la parte derecha inferior de la tabla,
es decir, que en lugar de mostrar asteriscos en forma de una letra X se mues-
105
Angel Vázquez-Patiño Universidad de Cuenca
cuenta<-1
2313 repetir
Escribir "Ingrese un numero:"
leer numero
2316 respuesta←verSiEsPar(numero) // 1, par; 0, impar
segun (respuesta) hacer
1: i<-1
2319 Mientras i<=numero hacer
Mientras (i*100 mod valor) >
(numero*potencia(numero, i)
106
Angel Vázquez-Patiño Universidad de Cuenca
107
Angel Vázquez-Patiño Universidad de Cuenca
a. 1
b. 10
2352 c. 11
d. Error de compilación
e. Ninguna de las anteriores
2355 21. Pregunta
Desarrollar un algoritmo que pida el nombre del usuario, el día, mes y año actual y el
2358 día, mes y año de nacimiento del usuario. En base a esos datos el algoritmo indica el
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
2361 mayor a nueve se resta nueve de manera que el valor esté entre 1 y 9 1. El signo zodia-
cal se calcula en base a la siguiente información:
Series y sumatorias
• Si n=7 genere 7, 6, 5, 4, 3, 2 y 1.
108
Angel Vázquez-Patiño Universidad de Cuenca
Ejemplos
N-ésimo término a mostrar: 5
2388 Término: 8
2391 • Pregunta
Realice un programa que muestre en pantalla el conteo del tiempo con el formato
2394 hh:mm:ss, segundo a segundo, hasta la hora, minuto y segundo indicado por el usua-
rio. Nota: primero realice el ejercicio 48 (pág. 69).
2397 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
desde la mitad hasta el final de la serie anterior e imprímala. Luego, haga una nueva
2400 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
ejecución del programa que le dejarán claro cómo tomar el número medio de la serie:
li: -5 li: -9
109
Angel Vázquez-Patiño Universidad de Cuenca
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
2403 li: 1
ls: 20
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
2406 10 11 12 13 14 15 16 17 18 19 20
10 11 12 13 14 15
12 13 14 15
2409 12 13
12 13
12
Dado un número entero positivo en el intervalo [2, 9], mostrar en pantalla una X for-
mada de números. Por ejemplo, con N=5:
110
Angel Vázquez-Patiño Universidad de Cuenca
Opción [1-5]:
111
Angel Vázquez-Patiño Universidad de Cuenca
La opción 3 del menú muestra el saldo que se tiene en ese momento. La opción 4 ter-
mina la ejecución del programa.
Ejemplo
Salida:
Salida:
Desarrolle un algoritmo que pida un número positivo de tres dígitos o más (se pide
un solo valor); si no cumple esta condición, debe mostrar el mensaje “¡El número de-
2463 be 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. Final-
mente, muestre la suma, producto, media, máximo y mínimo de los dígitos del núme-
2466 ro ingresado elevados a un exponente igual a la cantidad de dígitos. A continuación
se muestra un ejemplo de ejecución (así exactamente debe mostrar los resultados):
Número a analizar: 27
2469 ¡El número debe ser positivo de más de dos dígitos!
112
Angel Vázquez-Patiño Universidad de Cuenca
Suma: 1 + 5 + 4 + 2 + 3 = 15
Producto: 1 × 5 × 4 × 2 × 3 = 120
2475 Media: (1 + 5 + 4 + 2 + 3) / 5 = 3
Máximo: max(1, 5, 4, 2, 3) = 5
Mínimo: min(1, 5, 4, 2, 3) = 1
2478 *******************************************************
Suma: 1^5 + 5^5 + 4^5 + 2^5 + 3^5 = 4425
Producto: 1^5 × 5^5 × 4^5 × 2^5 × 3^5 = 24883200000
2481 Media: (1^5 + 5^5 + 4^5 + 2^5 + 3^5) / 5 = 885
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
2487 (19)
2490 (20)
113
Angel Vázquez-Patiño Universidad de Cuenca
2502 Desarrolle un algoritmo que lea el número de estudiantes del curso (n), imprima el
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-
2505 den realizar con m elementos tomados de k en k es m!/(m−k)!.
* Carrera de caballos
114
Angel Vázquez-Patiño Universidad de Cuenca
aquel que primero llegue a la meta (o que la pase) ubicada a diez metros del punto
2526 de partida. Si por algún motivo el caballo, estando en el punto de partida, quiere re-
troceder un metro, se entiende que el caballo se queda en el punto de partida (i.e., no
sigue retrocediendo más atrás del punto de partida). El vídeo Carrera de caballos1
2529 (Carrera de caballos, 2016) muestra la simulación con cinco y dos caballos2. El si-
guiente resultado muestra un instante de la carrera de cinco caballos en donde el
quinto caballo queda a cuatro metros del punto de partida luego de haber retrocedi-
2532 do un metro.
**********************************************************
Turno: caballo 5
2535 >
Metros avanzados por el caballo 5: -1
**********************************************************
2538 ------------------------
Caballo 1 X
------------------------
2541 ------------------------
Caballo 2 X
------------------------
2544 ------------------------
Caballo 3 X X X X X X
------------------------
2547 ------------------------
Caballo 4 X X X X X
------------------------
2550 ------------------------
Caballo 5 X X X X
------------------------
2553 *********************************************************
Número de Armstrong
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.
115
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.
2562 Solicitar al usuario que ingrese dos números enteros, el dividendo y el divisor, tal que
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
2565 de cómo se realiza la prueba del nueve.
2568 Mostrar todos los triángulos rectángulos cuyas longitudes de sus lados no sobrepasan
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
2571 para las cuales las longitudes del cateto 1, cateto 2 e hipotenusa son números enteros
y ninguno de ellos es mayor que 10. A continuación se muestra un ejemplo del resul-
tado de la ejecución del algoritmo.
2574 Valor máximo:> 20
116
Angel Vázquez-Patiño Universidad de Cuenca
( √ 8 N +1 ) − 1
M=
2
Georg Cantor fue un matemático ruso que es considerado como uno de los padres de
2604 la teoría de conjuntos. Entre otras muchas contribuciones a las matemáticas, Cantor
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
2607 una simplificación del argumento de Cantor para proponer un algoritmo que ejecute
la siguiente tarea.
117
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
2610 tener un número de dígitos igual a n. Una forma de ver la lista de números ingresa-
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
2613 contendrá un dígito decimal (0 - 9). En el ejemplo que se muestra a continuación n =
4, lo que significa que el usuario ingresó 4 números enteros de 4 dígitos cada uno.
1234
2616 4815
1623
4211
2619 El resultado que debe mostrar el algoritmo es un número entero de n dígitos, para el
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
2622 tercer dígito del tercer número y así sucesivamente. Como una ilustración, para el
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
2625 lista de números enteros a considerar. En particular, NO se deberá solicitar cuántos
números se van a ingresar.
2628 Antes de desarrollar este algoritmo, revise el algoritmo pedido en el ejercicio llamado
E54 Simple random walks.
Realizar la suma de dos números positivos de hasta 4 cifras, cifra por cifra. No nece-
2637 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
118
Angel Vázquez-Patiño Universidad de Cuenca
Escriba un programa que lea dos números enteros positivos, los convierta en números
2640 binarios y los sume dígito por dígito (vea el ejercicio *E92 Suma de dos números de-
cimales). Muestre los dos números binarios y el resultado obtenido de la suma. Por
ejemplo, para los números 34 y 45, el programa debe imprimir
2643 100010
101101
-------
2646 1001111, que equivale a 79 en decimal.
Implemente un programa que lea un número entero positivo N y que encuentre su va-
2649 lor en base a la suma de números consecutivos (no menores a 0 ni mayores a N). Por
ejemplo:
119
Angel Vázquez-Patiño Universidad de Cuenca
120
Angel Vázquez-Patiño Universidad de Cuenca
121
Angel Vázquez-Patiño Universidad de Cuenca
2661 Dado un recinto2 en que tiene una forma rectangular y una cantidad de pares or-
denados, genere esa cantidad de pares ordenados dentro del recinto y muéstrelos en
pantalla. Las coordenadas de los pares ordenados deben ser valores reales con hasta
2664 dos decimales. Una forma de indicar el recinto con forma rectangular es mediante dos
puntos, y , que corresponden a las esquinas inferior izquierda y
superior derecha del recinto. Por ejemplo, si se indica un recinto mediante los puntos
2667 y y se indica que se generen 10 pares ordenados al azar en ese re-
cinto, un posible conjunto de pares ordenados mostrados en pantalla sería el que si-
gue.
2670 (0.03, 3.51), (-0.85, 7.34), (0.06, 4.59), (-0.29, 0.49), (-1.01, 0.94),
(0.87, 1.9), (1.25, 6.22), (0.45, 2.28), (-1.84, 7.97), (-0.38, 6.75)
2673 Luego de terminado su script, usted podrá ser capaz de aproximar la integral de
cualquier función. Sin embargo, en este ejercicio utilizaremos específicamente la fun-
ción . Entonces, genere pares ordenados en el recinto rec-
2676 tangular definido por y y cuente cuántos de ellos “caen” por enci-
ma de la gráfica de la función y cuántos por debajo (o que
están exactamente en la curva). Ya que el área del rectángulo correspondiente al re-
2679 cinto es 32 unidades (4 de base por 8 de altura), la fracción de pares ordenados que
están por debajo de la gráfica de la función, multiplicada por 32, es la aproximación
de , cuyo valor exacto es . Muestre en pantalla la aproximación.
2682 Nota: las siguientes figuras no las debe generar usted sino que sirven solamente para
darle una idea de lo que se pide. Los puntos negros están por debajo de la gráfica de
y los grises por encima. La fracción de puntos negros multiplicada por 32 debe
2685 acercarse a la integral, mientras más pares ordenados genere.
122
Angel Vázquez-Patiño Universidad de Cuenca
123
Angel Vázquez-Patiño Universidad de Cuenca
124
Angel Vázquez-Patiño Universidad de Cuenca
Arreglos unidimensionales
2688 Los arreglos podrían ser llamados de diferentes maneras. En general, hacen referencia
a una colección de elementos (en algunos lenguajes de programación estos elementos
no solamente son números) bajo un mismo nombre, que se diferencian entre ellos me-
2691 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-
mentar los algoritmos, puede utilizar estructuras de datos con otros nombres. Por
2694 ejemplo, si utiliza Python, se pueden utilizar listas o arreglos de la librería numpy.
Miscelánea
Algunos de los ejercicios están basados en los libros de Pinales Delgado y Velázquez
2697 Amador (2014), Alcalde Lancharro y García López (1992), Chaves Torres (2012) y
Parra Terrazos (n.d.).
125
Angel Vázquez-Patiño Universidad de Cuenca
2718 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
nombre del estudiante con la mayor edad.
2730 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
A pero desplazado n posiciones hacia la izquierda. Tenga en cuenta que los n
2733 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:
A={1, 2, 3, 4, 5, 6, 7}
2736 B={4, 5, 6, 7, 1, 2, 3}
12. Una empresa requiere controlar la existencia de diez productos, los cuales se
2742 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
C, con base en los anteriores, que represente lo que se requiere comprar para
2745 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
mismo valor; si el valor de B es mayor que el de A, se almacena el doble de la
2748 diferencia entre B y A; si se da el caso de que A es mayor que B, se almacena
126
Angel Vázquez-Patiño Universidad de Cuenca
2751 13. Se tiene un arreglo de 15 filas y 12 columnas. Realice un algoritmo que permi-
ta leer el arreglo y que calcule y presente los resultados siguientes: el menor
elemento del arreglo; la suma de los elementos de las cinco primeras filas del
2754 arreglo; y el total de elementos negativos en las columnas de la quinta a la
nueve.
14. Para facturar el servicio de energía la empresa eléctrica cuenta con una lista
2757 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,
tome la lectura actual de cada usuario y la registre en un tercer arreglo, calcu-
2760 le el consumo del mes por diferencia de lecturas y muestre para cada usuario:
nombre, consumo y valor a pagar.
15. *E95 Desarrolle un programa que genere dos arreglos de cien elementos con
2763 números al azar y que calcule la suma de éstos (elemento a elemento) guar-
dando su resultado en otro arreglo, el cual se debe presentar en pantalla junto
con los dos arreglos generados.
2766 16. Se tiene un arreglo de cien elementos representando calificaciones de los estu-
diantes de una escuela. Realice un algoritmo que lea el arreglo y calcule la ca-
lificación promedio del grupo, además, que cuente los estudiantes que obtuvie-
2769 ron calificaciones arriba del promedio del grupo.
17. Realice un algoritmo que lea un vector de cien elementos y que calcule su
magnitud y represéntelo mediante diagrama de flujo y pseudocódigo.
2772 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.
19. Cree un arreglo de 20 elementos con nombres de personas. Visualice los ele-
2775 mentos de la lista debiendo ir cada uno en una fila distinta.
2778 21. Hacer un programa que genere de manera aleatoria 10 calificaciones entre 0 y
100, muestre las calificaciones y permita buscar una nota en el arreglo (devuel-
ve la posición en el arreglo).
127
Angel Vázquez-Patiño Universidad de Cuenca
2781 22. Elabore un diccionario simple de inglés a español utilizando dos arreglos de ti-
po cadena con 20 palabras como mínimo.
2787 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í
sucesivamente hasta 45, almacenar el resultado en un arreglo C, e imprimir el
2790 arreglo resultante.
26. Desarrolle un programa que lea un arreglo de N elementos y rote todas sus
componentes un lugar hacia su derecha. Teniendo en cuenta que la última
2793 componente se ha de desplazar al primera lugar.
27. Dado un número entero positivo de 10 cifras, desarrolle un programa que com-
pruebe si el número es capicúa utilizando un arreglo de 10 componentes. La
2796 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.
Ejemplos: 161, 2992, 3003, 2882.
2811 31. * E96 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 se-
128
Angel Vázquez-Patiño Universidad de Cuenca
2829 33. Generar un arreglo con 100 números aleatorios enteros en el rango [1, 2020],
sin que se repitan dichos números. En un segundo arreglo guardar la palabra
sí, en la posición correspondiente del arreglo uno donde el número represente
2832 un año bisiesto, caso contrario guardar la palabra no. Mostrar los valores de
los dos arreglos de manera vertical (en columnas):
Año Bisiesto
2835 1563 No
4 Sí
Manejo de arreglos
2838 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
2841 llamado evenAngles.
129
Angel Vázquez-Patiño Universidad de Cuenca
3. Extraer del arreglo los elementos cuyo índice es impar y guardarlos en un arre-
glo llamado oddAngles.
2847 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
2850 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.
130
Angel Vázquez-Patiño Universidad de Cuenca
Graficación de frecuencias
Gráfica
2886 1 *************************
2 **********
3 *****
2889 4 **********
5 ******************************
6 ********************
Criba de Eratóstenes
131
Angel Vázquez-Patiño Universidad de Cuenca
2898 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:
2901 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
2904 elementos eventualmente contendrán el valor FALSE.
Cuando este proceso termina, los elementos del arreglo que tienen el valor TRUE in-
2916 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ú-
2919 meros primos entre 2 y 20.
132
Angel Vázquez-Patiño Universidad de Cuenca
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
2925 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.
Evalúe una función en los valores del dominio iguales a los elementos de la lista gene-
rada en la parte 1. Una vez terminado su script, podría graficar cualquier función.
2943 Sin embargo, aquí específicamente utilizará la función . Los resul-
tados se deben mostrar de manera tabulada con el siguiente formato.
Número ordinal del valor de x Valor de x Valor de f(x)
133
Angel Vázquez-Patiño Universidad de Cuenca
Por ejemplo, si el inicio del intervalo es -5, el fin del intervalo es 5 y la cantidad de
valores es 21, los resultados de la evaluación de se mostrarán como
2949 sigue.
# x f(x)
1 -5.0 2.14
2952 2 -4.5 2.07
3 -4.0 1.51
4 -3.5 0.66
2955 5 -3.0 -0.24
6 -2.5 -0.95
7 -2.0 -1.29
2958 8 -1.5 -1.22
9 -1.0 -0.84
10 -0.5 -0.34
2961 11 0.0 0.0
12 0.5 0.34
13 1.0 0.84
2964 14 1.5 1.22
15 2.0 1.29
16 2.5 0.95
2967 17 3.0 0.24
18 3.5 -0.66
19 4.0 -1.51
2970 20 4.5 -2.07
21 5.0 -2.14
2973 Con los datos de la parte 2, genere la gráfica de la función. La gráfica debe tener co-
mo título f(x)=abs(x)^(1/2)*Sen(x), como etiqueta del eje horizontal x y co-
mo etiqueta del eje vertical y. Por ejemplo, si el inicio del intervalo es -5, el fin del in-
134
Angel Vázquez-Patiño Universidad de Cuenca
2976 tervalo es 5 y la cantidad de valores es 21, la gráfica que debe generarse es la siguien-
te.
A continuación se muestra otro ejemplo en donde se escogió como inicio del intervalo
2979 -20, como fin del intervalo 20 y como cantidad de valores 100.
135
Angel Vázquez-Patiño Universidad de Cuenca
Arreglos bidimensionales
Miscelánea
2982 Algunos de los siguientes ejercicios se basan en los libros de Pinales Delgado y Veláz-
quez Amador (2014), Alcalde Lancharro and García López (1992) y Chaves Torres
(2012).
2985 1. Cree una matriz de N×M. Imprima los cuatro valores que se encuentran en los
vértices de la matriz.
3. E99 Desarrolle un programa que genere una matriz de cinco filas y diez colum-
nas con números enteros aleatorios, los imprima e indique los valores máximo
2991 y mínimo y sus posiciones dentro de la matriz.
5. E100 Implemente un script que indique si dos matrices son iguales. Dos matri-
2997 ces son iguales si son de las mismas dimensiones y son iguales elemento a ele-
mento.
3000 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-
3003 rá como parámetro a la función. El resultado se imprimirá desde el
programa/función principal.
136
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
3006 frecuencia absoluta y la frecuencia relativa para cada una de las vocales.
3009 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-
3015 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).
3018 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-
3021 pal es donde los subíndices i y j son iguales).
13. *E101 Se tiene una matriz de 12 filas por 19 columnas y se desea tener un
programa para encontrar todos sus elementos negativos y para que los cambie
3024 por un 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
3027 principal que son igual a cero.
137
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
3030 hora. Realice un algoritmo que:
3036 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-
3039 ción y genere un arreglo con el total de kilómetros que recorrió cada chófer
durante 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
3042 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.
3045 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-
3051 tos.
138
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-
3060 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-
3066 mo, desarrolle una función que devuelva una matriz de f filas y c columnas
con número aleatorios (no ordenados).
3072 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-
3081 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-
3084 das por sus tres representantes a lo largo de doce meses de sus cuatro produc-
139
Angel Vázquez-Patiño Universidad de Cuenca
27. Desarrolle un programa que lea una matriz cuadrada de orden 3 y calcule e
3090 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
3093 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-
3096 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.
3099 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
3102 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.
140
Angel Vázquez-Patiño Universidad de Cuenca
Como sugerencia, usted podría utilizar dos matrices que indiquen las posicio-
3108 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
3111 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-
3117 sar las dos matrices. Calcular la suma de las dos matrices y guardar el resultado en
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.
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-
3123 trar el resultado al usuario.
141
Angel Vázquez-Patiño Universidad de Cuenca
3135 es simétrica si se cumple que A(f, c)=A(c, f), F = {f: fєℕ ^ 1≤f≤n} y C = {c: cєℕ ^
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-
3138 ciones, una vez que hay cualquier información que indique que la matriz no es simé-
trica.
Producto de matrices
3144 Pedir al usuario el número de filas y columnas de dos matrices que ingresará. Ingre-
sar las dos matrices. Calcular el producto de las matrices y presentarla al usuario.
142
Angel Vázquez-Patiño Universidad de Cuenca
3147 1. *E1031 Se dice que una matriz tiene un punto de silla si algún elemento de la
matriz es el menor valor de su fila y a la vez el mayor de su columna. Imple-
mente un script que genere una matriz de números enteros aleatorios (el usua-
3150 rio debe ingresar las dimensiones) en el intervalo [-10, 10] y que imprima en
pantalla la(s) posición(es) de un(los) punto(s) de silla (si es que existe(n)).
Tablero de ajedrez
3156 Visualice en pantalla un tablero de ajedrez: los peones con el número 1, las torres con
el 7, los caballos con 0, los alfiles con 4, el rey con 8 y la reina con 2.
143
Angel Vázquez-Patiño Universidad de Cuenca
3171 Escriba un programa que muestre las distancias de Chebyshov, como en la figura 5,
desde una casilla del tablero de ajedrez dada por el usuario.
1 2 3 4
4 1 2 3
3 4 1 2
2 3 4 1
Nota: si programa en Python, le podría ser de gran utilidad la función roll de la
3180 librería numpy. Si usa la función roll, implemente un script usando dicha función y
otro en donde no la use en absoluto.
1 Este problema puede ser resuelto también sin matrices (así fue tomado en la prueba 1 del semestre
marzo-agosto 2018). Fuente: (Alcalde Lancharro and García López, 1992).
144
Angel Vázquez-Patiño Universidad de Cuenca
El cuadrado mágico
3183 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
un programa que permita introducir una matriz cuadrada de 3×3 por teclado
3186 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;
además, se debe comprobar que los números no se repitan en el ingreso.
8 1 6
3 5 7
4 9 2
3. Genere un cuadrado mágico dado el orden N (validar). Un cuadrado mágico es
una matriz cuadrada de orden impar N que contiene números enteros desde 1
3198 hasta N2. La suma de los números que figuran en cada fila, cada columna y ca-
da diagonal son iguales. Un ejemplo es:
8 1 6
3 5 7
4 9 2
Para generar un cuadrado mágico siga estos pasos:
3204 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.
145
Angel Vázquez-Patiño Universidad de Cuenca
3210 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 (94 = 6561 boletos en total); cada
3213 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-
3216 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-
3219 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
comprador del boleto (asuma que cada persona compra un sólo boleto en el orden de-
3222 terminado por el número de columna de la matriz). A continuación se muestra los re-
sultados de dos ejecuciones del programa:
3231 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-
3234 tido horario desde la parte superior izquierda:
A T G C G T A T
146
Angel Vázquez-Patiño Universidad de Cuenca
Se pide diseñar una función que devuelva true si dos cadenas de ADN, enviadas como
parámetros, coinciden.
3237 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
147
Angel Vázquez-Patiño Universidad de Cuenca
F G H I J
3261 I I J D J
K L M N O
D D I J I
3264 P Q R S T
I J I I J
U V X Y Z
3267 D I J D D
3276 T S R Q P
I I J D J
O N M L K
3279 D D I J I
J I H G F
I J I I J
3282 E D C B A
148
Angel Vázquez-Patiño Universidad de Cuenca
D I J D D
Para el nivel avanzado se debe imprimir el alfabeto de arriba hacia abajo y de iz-
3285 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
3288 matriz de izquierda a derecha y de arriba hacia abajo). Un ejemplo se muestra a con-
tinuación:
A F K P U
3291 I D J I D
B G L Q V
I I J D J
3294 C H M R X
D D I J I
D I N S Y
3297 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
3306 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-
149
Angel Vázquez-Patiño Universidad de Cuenca
co paso para llegar a cualquiera de ellas. Por similitud a la forma en que uno puede
3309 moverse en un tablero de ajedrez, este tipo de distancia se conoce como distancia de
tablero de ajedrez.
150
Angel Vázquez-Patiño Universidad de Cuenca
3324 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]). Co-
3327 mo 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.
151
Angel Vázquez-Patiño Universidad de Cuenca
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-
3345 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-
3348 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
3363 1. Dayana Isabel Agudo Güiracocha
2. Moisés Santiago Arévalo Angamarca
152
Angel Vázquez-Patiño Universidad de Cuenca
Una vez que pueda generar los grupos dado el número de estudiantes que se desean
3375 en cada grupo, haga otro programa que genere los grupos dado el número total de
grupos que se desean hacer (analice muy bien cuál es la diferencia con el primer pro-
grama realizado). Por ejemplo, el siguiente es una ejecución del segundo programa en
3378 donde el usuario quiso generar tres grupos:
Número de grupos: 3
Grupo 1
3381 1. Julio César Andrade Carchi
Grupo 2
1. Carlos Daniel Abad Sigcho
3384 Grupo 3
1. Dayana Isabel Agudo Güiracocha
2. Moisés Santiago Arévalo Angamarca
3387 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-
3390 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.
3393 import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
3396 import java.util.Arrays;
153
Angel Vázquez-Patiño Universidad de Cuenca
BufferedReader br = null;
3411 try {
br = new BufferedReader(new
FileReader(rutaArchivo));
3414 String line = br.readLine();
int i = 0;
while (null!=line) {
3417 String [] campos = line.split(SEPARADOR);
//System.out.println(Arrays.toString(campos));
154
Angel Vázquez-Patiño Universidad de Cuenca
line = br.readLine();
3423 }
} catch (Exception e) {
3426 System.out.println(e.getMessage());
} finally {
try{
3429 br.close();
}catch(IOException e){
System.out.println(e.getMessage());
3432 }
}
return lista;
3435 }
3447 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 un arreglo
bidimencional) determina las adyacencias entre pares de vértices de un grafo. En una
155
Angel Vázquez-Patiño Universidad de Cuenca
3450 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 las
aristas en las celdas de un arreglo bidimensional de n ⨉ n. Cada fila y cada columna
3453 representan un vértice del grafo y cada elemento representa una arista (o la ausencia
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 dirigi-
3456 do simple, un grafo no dirigido simple, un grafo euleriano y un multigrafo con sus
respectivas matrices de adyacencia.
Implemente las funciones que se detallan a continuación. Todas las funciones reciben
3459 como entrada el grafo representado mediante su matriz de adyacencia:
156
Angel Vázquez-Patiño Universidad de Cuenca
◦ Si G es no dirigido, m≤n(n-1)/2
◦ Si G es dirigido, m≤n(n-1)
(21)
3483 . (22)
Un juego de azar muy popular es el juego de dados conocido como craps, el cual es
jugado en casinos y callejones de todo el mundo. Las reglas del juego son muy fáciles
3489 (Deitel and Deitel, 2012):
Usted lanza dos dados. Cada dado tiene seis caras, que contienen uno, dos,
tres, cuatro, cinco y seis puntos, respectivamente. Después que los dados pa-
3492 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).
Si la suma es 2, 3 o 12 en el primer lanzamiento (llamado “craps”), usted pier-
3495 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
juego). Para ganar, debe continuar lanzando los dados hasta que “hace su
3498 punto” (es decir, la suma de los puntos en las dos caras que están hacia arriba
157
Angel Vázquez-Patiño Universidad de Cuenca
3501 Escriba una aplicación que ejecute 1'000.000 de juegos de craps y conteste las si-
guientes preguntas:
3. ¿Cuáles son las probabilidades de ganar en el juego de craps? Nota: debe des-
3510 cubrir que el juego de craps es uno de los juegos de casino más justos; ¿Qué
cree que esto significa?
1. Si está sobre una celda blanca, cambia el color de la celda, gira noventa grados
3525 a la derecha y avanza una celda.
2. Si está sobre una celda negra, cambia el color de la celda, gira noventa grados
a la izquierda y avanza una celda.
158
Angel Vázquez-Patiño Universidad de Cuenca
1. Genere una matriz de 100×100 con 5000 celdas blancas (valor 1) y 5000 celdas
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.
Este problema clásico en ciencias de la computación fue propuesto por René Estrella.
3537 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
reinas que se encuentren en la misma fila, columna o diagonal. En este sentido, una
3540 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
configuración candidata que cumple el requerimiento de que las reinas no se ataquen
3543 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
problema se cumpla (vea https://goo.gl/fFo9WL). En la siguiente figura se muestra
3546 una de las posibles soluciones:
159
Angel Vázquez-Patiño Universidad de Cuenca
1. Generar solución
Cuando el usuario escoge esta opción se le solicita que ingrese ocho pares de coorde-
3564 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-
160
Angel Vázquez-Patiño Universidad de Cuenca
das (1, 1) corresponde a la casilla superior izquierda del tablero y la coordenada (8,
3567 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
indicando si se trata de una solución o no. Por ejemplo, si el usuario ingresa las si-
3570 guientes coordenadas:
Coordenadas Reina 1: 1, 3
Coordenadas Reina 2: 2, 6
3573 Coordenadas Reina 3: 3, 4
Coordenadas Reina 4: 4, 2
Coordenadas Reina 5: 5, 8
3576 Coordenadas Reina 6: 6, 5
Coordenadas Reina 7: 7, 7
Coordenadas Reina 8: 8, 1
3. Salir
3585 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-
talla. Lea la matriz en forma de espiral comenzando por el último elemento, hacia
3588 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
arreglo en pantalla. Usando el arreglo, extraiga el número que se encuentra en la últi-
3591 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
nro_b. Con estos números forme una matriz en donde la primera columna tenga la
3594 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-
161
Angel Vázquez-Patiño Universidad de Cuenca
Genere una matriz de n filas y n columnas, siendo n impar (validar), con números
3600 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
figura 11. A medida que vaya leyendo la matriz, llene un arreglo unidimensional que
3603 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
arreglo ordenado, extraiga el número que se encuentra en la última posición y alma-
3606 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
forme una matriz en donde la primera columna tenga la cantidad de números meno-
3609 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
el de subíndice cero). Finalmente muestre la última matriz.
162
Angel Vázquez-Patiño Universidad de Cuenca
Escriba un programa que forme una matriz de n×5 elementos (n debe ser un entero
positivo, ingresado por el usuario), bajo el siguiente esquema:
3615 • 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
para que sea único dentro de los datos ingresados en la columna.
3621 • 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
calculado.
3624 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-
valencia de las calificaciones en base al siguiente cuadro:
01-09 R Regular
163
Angel Vázquez-Patiño Universidad de Cuenca
10-12 B Buena
13-17 A Aceptable
18-20 S Sobresaliente
3627 La tercera columna lleva un 1 si el alumno aprueba el curso, considerando que deben
obtener 10 puntos o más para aprobarlo. Lleva un 0, si ha obtenido menos de 10 pun-
tos.
3630 Determine cuántos alumnos aprobarán el curso con Buena, cuántos con Aceptable y
cuántos con Sobresaliente.
Se deben mostrar las dos matrices para verificar los resultados obtenidos.
El programa va a almacenar registros en una matriz. Para ello se debe hacer lo si-
guiente:
Solicite al usuario que ingrese uno a uno los campos de una matriz que almacenará
los registros y cree un índice que asocie el campo a una columna de la matriz. Luego,
3639 cree la matriz que almacenará los registros.
Ejemplo
cédula
3642 nombre
apellido
edad
3645 ...
164
Angel Vázquez-Patiño Universidad de Cuenca
Índice
cédula 0
nombre 1
apellido 2
edad 3
... ...
2. Ingreso de datos
Una vez ingresados los campos con los que se va a trabajar, pida al usuario que in-
3648 grese los registros como cadenas, de la siguiente manera (en base a los campos pues-
tos en el ejemplo anterior):
apellido:cevallos;edad:22;cedula:0104132548
3651 cedula:0108562554;edad:25;nombre:juan;apellido:malo
Nóte que los registros no necesariamente contienen todos los campos, ni se ingresan
los datos en orden de acuerdo a los campos ingresados en el punto 1.
3654 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
punto 1 guarde cada campo en la columna correspondiente de la matriz. Después de
3657 cada ingreso, muestre la matriz de datos.
0104132548 cevallos 22
0108562554 juan malo 25
Si un registro contiene un campo que inicialmente no se consideró, el programa debe-
3660 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
de datos resultante.
3663 cedula:0305677824;teléfono:4023568;nombre:sara;apellido:abril
¡Advertencia! El campo teléfono no existe pero se ingresa el registro.
165
Angel Vázquez-Patiño Universidad de Cuenca
0104132548 cevallos 22
0108562554 juan malo 25
0305677824 sara abril
3. Búsquedas
3666 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-
queda binaria y se muestran los datos de ese registro. Además, se muestra la matriz
3669 antes y después de cada búsqueda. Por ejemplo:
¿Por qué campo desea buscar?
apellido
3672 Ingrese el valor a buscar: malo
El programa deberá mostrar la matriz antes y después de la búsqueda y los datos del
registro si existe.
3675 cédula: 0108562554
nombre: juan
apellido: malo
3678 edad: 25
166
Angel Vázquez-Patiño Universidad de Cuenca
Ejemplo
• Código: emp3
• Nombre: Elecaustro
Código Nombre
emp1 Marcimex
emp2 Etapa
emp3 Elecaustro
3705 3. Listar los empleados de una empresa en particular ordenados de forma descen-
dente según el salario.
167
Angel Vázquez-Patiño Universidad de Cuenca
Empleado Salario
Juan 1500
Edgar 1200
Pedro 1100
Jaime 900
4. Mostrar un listado de empresas con el salario promedio de los empleados de la
misma. (Tenga en cuenta que los datos pueden tener decimales)
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
168
Angel Vázquez-Patiño Universidad de Cuenca
1 5 4
6 10 7
11 15 3
16 20 6
3729 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.
#
# #
# #
# # #
# # # #
# # # #
# # # #
1-5 6-10 11-15 16-20
Escriba un programa que lea una frase y que la almacene en una matriz siguiendo el
esquema mostrado en la figura 12. Luego debe mostrarse la matriz leyéndola en las fi-
3735 las impares de izquierda a derecha y en las filas pares de derecha a izquierda. Las co-
lumnas que no contienen información, no deben ser consideradas en la visualización
de la matriz.
3738 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.
169
Angel Vázquez-Patiño Universidad de Cuenca
La matriz se debe leer siguiendo el sentido especificado, según la fila sea par o impar
3741 dará como resultado:
3744 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:
1. Se utiliza una matriz cuadrada cuyo orden permita tener un número de ele-
3747 mentos igual o mayor al total de caracteres de la frase. Pero, la matriz no de-
be tener más elementos de los necesarios de manera que no se utilice memoria
innecesaria. Por ejemplo, si la longitud de la frase es 9, el orden de la matriz
3750 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-
menzando desde el elemento de la primera fila y primera columna. Luego, el
3753 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
(“diagonal ascendente”). Si la fila es la primera, la siguiente debe ser la última
170
Angel Vázquez-Patiño Universidad de Cuenca
3762 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
frase. El subguión indica un espacio.
171
Angel Vázquez-Patiño Universidad de Cuenca
Nota: antes de solucionar este ejercicio solucione el ejercicio 110 (página 155).
3783 Dado un arreglo bidimensional que contiene las posiciones de una partícula en el es-
pacio, en diferentes tiempos , genere un arreglo unidimensio-
nal que contenga la aproximación de la velocidad de la partícula,
3786 . Por ejemplo, la velocidad es la razón entre la distancia
recorrida por la partícula desde el tiempo al tiempo y el tiempo transcurrido (
). El arreglo bidimensional tiene la información de la siguiente manera (la ca-
3789 becera no está dentro del arreglo bidimensional),
⠇ ⠇ ⠇ ⠇
172
Angel Vázquez-Patiño Universidad de Cuenca
3. Use los n vectores linealmente independientes para generar una matriz . Ca-
3798 da vector corresponde a una columna de . Haga una copia de llamada .
algoritmo.
3801 para k = 1, …, n-1
para i = k+1, …, n
,
3804 para j = k+1, …, n
5. Genere una matriz identidad y copie los valores que están por de-
bajo de la diagonal principal de en (en las mismas posiciones). Genere
3807 una matriz de ceros y copie los valores de A desde la diagonal prin-
cipal hacia arriba en (en las mismas posiciones).
173
Angel Vázquez-Patiño Universidad de Cuenca
174
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?
3819 a) Estáticas
b) Globales
c) Instancia
3822 d) Locales
2. ¿Cuál es la diferencia entre una llamada de función por valor y una llamada
de función por referencia?
3825 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-
3828 de fueron declaradas?
6. ¿Cuando una variable global y una variable local tienen el mismo nombre cuál
3834 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
3837 del libro de la Editorial Macro (2001).
1. Implemente una función que imprima en pantalla el doble del valor que se le
pasa al parámetro.
3840 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.
175
Angel Vázquez-Patiño Universidad de Cuenca
3843 3. Implemente una función que devuelva el valor absoluto de cualquier número
real dado.
4. Implemente una función que reciba dos números y que devuelva el número ma-
3846 yor.
6. E126 Implemente una función que indique si un año es bisiesto o no. Un año
3849 es bisiesto si es múltiplo de 4 (por ejemplo 1984). Sin embargo, los años múlti-
plos 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).
3852 7. E127 Implemente una función de devuelva el producto de dos números com-
plejos. Nota: vea la nota 2 del ejercicio 111 (pág. 157).
8. E128 Implemente una función que calcule la distancia euclidiana entre dos
3855 puntos. Nota: implemente primero el ejercicio 4 (pág. 18).
10. Implemente una función que sume los 137 primeros números pares (>0).
11. Implemente una función que sume los n primeros números impares (>0).
13.
14. Implemente una función que calcule la suma (debe escribir también la función
para realizar la potencia)
15.
3864 16. Implemente una función que genere un número aleatorio real entre un rango
enviado como parámetro.
17. E129 Implemente una función que imprima en pantalla un número dado de as-
3867 teriscos indicado en el parámetro recibido. El argumento indica el número de
asteriscos del cateto del triángulo rectángulo que se “dibuja”. Por ejemplo, pa-
ra un triángulo rectángulo de cateto 8, se imprimiría en pantalla
3870 *
176
Angel Vázquez-Patiño Universidad de Cuenca
* *
* * *
3873 * * * *
* * * * *
* * * * * *
3876 * * * * * * *
* * * * * * * *
Nota: una vez que desarrolle este ejercicio, podría resolver el ejercicio 64 (pági-
3879 na 78).
18. Implemente una función que tenga como parámetro un arreglo de números
reales y que devuelva el máximo de los números.
3882 19. 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.
20. Implemente una función que reciba dos enteros y muestre todos los números
3885 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-
cendente o descendente.
3888 21. Implemente una función que transforme a binario un número entre 0 y 255.
23. Implemente una función que reciba como parámetros una cadena de caracteres
3894 y un carácter; la función devuelve el número de veces que se encuentra el ca-
rácter en la cadena.
3897 25. Implemente una función a la que se le pasa un número entero y devuelve el
número (i.e., la cantidad) de divisores primos que tiene.
26. E130 Implemente una función que indique si dos números enteros positivos
3900 son amigos. Dos números amigos son dos números enteros positivos a y b tales
177
Angel Vázquez-Patiño Universidad de Cuenca
que la suma de los divisores propios de uno es igual al otro número y vicever-
sa, es decir SD(a)=b y SD(b)=a, donde SD(n) es igual a la suma de los diviso-
3903 res de n, sin incluir a n. Vea https://is.gd/KHBfs1.
27. Implemente una función que calcule el máximo común divisor de dos números.
3906 28. Implemente una función que calcule el máximo común divisor de tres números.
29. Implemente una función que calcule el mínimo común múltiplo de dos núme-
ros.
3909 30. Implemente una función que calcule el mínimo común múltiplo de tres núme-
ros.
31. Implemente una función que voltee un número entero positivo dado. Por ejem-
3912 plo, si se ingresa 98786, se devuelve 68789.
32. Implemente una función que reciba un arreglo de números enteros y devuelva
el máximo común divisor de esos números.
3915 33. 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.
34. Implemente una función que reciba como parámetros dos arreglos. La primera
3918 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.
35. Implemente una función que reciba un arreglo que debe rellenar. Se leerá por
3921 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.
3924 36. 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.
37. E131 Implemente una función que devuelva el valor máximo de una matriz.
3927 38. 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.
39. Implemente una función que recibe un número entero y devuelve, en un arre-
3930 glo, los divisores primos que tiene.
178
Angel Vázquez-Patiño Universidad de Cuenca
41. E132 Implemente una función que calcule el n-ésimo término de la serie de Fi-
3936 bonacci. En esta serie, el n-ésimo valor se calcula sumando los dos valores an-
teriores. Es decir fibonacci(n) = fibonacci(n-1) + fibonacci(n-2), siendo fibo-
nacci(0) = 1 y fibonacci(1) = 1. Nota: antes de realizar este ejercicio, realice
3939 el ejercicio 74 (pág. 94).
42. E133 Implemente una función que devuelva el n-ésimo término de la serie de
3942 . Luego, obtenga cada uno de los 100 primeros términos de la se-
rie de Fibonacci usando la función escrita y la función del ejercicio 132 (pág.
179), y muestre en pantalla la diferencia entre lo devuelto por la una y la otra
3945 función.
43. Igual que el ejercicio anterior, pero pudiendo configurar los valores de los dos
primeros términos de la serie.
3948 44. Implemente una función que reciba una matriz de enteros, representando un
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,
3951 que indique si el rey negro está amenazado.
45. Igual que el ejercicio anterior, pero indicando si existe jaque mate a las negras.
46. E134 Implemente una función para determinar si dos matrices (enviadas como
3954 argumentos) contienen los mismos elementos. La función tiene un tercer pará-
metro para indicar si se desea que la función actúe 1) comparando las dos ma-
trices elemento a elemento o 2) comparando las dos matrices aunque los ele-
3957 mentos no se presenten en el mismo orden. Nota: primero resuelva el ejercicio
100 (pág. 136).
47.
179
Angel Vázquez-Patiño Universidad de Cuenca
*E135 Histograma
3960 Implemente un programa, usando funciones, que lea N números de enteros positivos
entre 0 y 250 (validar).
Se han definido los siguientes rangos: 0-50, 51-100, 101-150, 151-200 y 201-250.
3963 Se debe mostrar el número de datos que está en cada uno de los rangos especificados
(frecuencias), separados por un TAB. Además, se debe mostrar un histograma. Por
ejemplo:
3966 Tabla de valores por rango
---------------------------------------------------------------------------
0-50 51-100 101-150 151-200 201-250
3969 ---------------------------------------------------------------------------
17 8 10 5 32
---------------------------------------------------------------------------
3972 Histograma
|-----------------------------------------------------------------
0-50 | *******************
3975 51-100 | *********
101-150 | ***********
151-200 | *****
3978 201-250 | ****************************************************
|-----------------------------------------------------------------
Aritmética básica
180
Angel Vázquez-Patiño Universidad de Cuenca
5. Salir
Potenciación
3996 Desarrolle un programa que pida dos números. Se debe calcular la potencia tomando
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,
3999 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-
4002 thon).
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.
4005 2. Escriba una función para normalizar los números de una lista (lista con núme-
ros mayores iguales a cero). Normalizar en este contexto se debe entender co-
mo que los elementos de la lista que devuelve la función, luego de ser suma-
4008 dos, dan igual a uno. Por ejemplo, si la función se llama normalizar, normali-
zar([1, 3]) devuelve la lista [0.25, 0.75].
181
Angel Vázquez-Patiño Universidad de Cuenca
lanzamiento). Por ejemplo, si la función se llama dado, dado([0.3, 0.4, 0.1, 0.1,
4017 0.1, 0.0])1 devuelve una lista con un valor de lanzamiento (quizá2 [1]). Las pro-
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,
4020 0.3, 0.1, 0.1], 5) devuelve una lista con cinco valores de lanzamiento (quizá [3,
4, 3, 4, 1]).
4. Genere muchos lanzamientos de dados con su “dado” sesgado. Con los resulta-
4023 dos de todos sus lanzamientos haga una gráfica (stem) como la que se muestra
como ejemplo a continuación.
182
Angel Vázquez-Patiño Universidad de Cuenca
4035 Desarrollar un programa que calcule el valor de la función sinh-1 de un valor x dado.
Las funciones para calcular el factorial y la potencia deben ser realizadas por usted
(i.e., no utilizar ninguna función predefinida de ningún lenguaje de programación).
4038 La serie de Taylor nos da el valor de la función sinh-1 de x en radianes, el algoritmo
que usted proponga debe mostrar el valor en radianes y en grados sexagesimales (i.e.,
escribir una función que pase radianes a grados sexagesimales). Tenga en cuenta que
4041 1 radián es igual a 57.2958 grados sexagesimales.
Función W de Lambert
4047
Desarrolle un programa que pida los valores de x (cualquier número real) y n (cual-
quier número entero) para calcular el valor de la función W de Lambert de x con n
4050 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-
das de ningún lenguaje de programación para calcular el factorial o la potencia de un
4053 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
(llámela miFactorial) de un número. Además, debe validar el valor de x como se indi-
4056 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
el valor absoluto de cualquier número real).
183
Angel Vázquez-Patiño Universidad de Cuenca
Desarrolle un programa que calcule el máximo común divisor (MCD) y el mínimo co-
4065 mún múltiplo (MCM) de dos números ingresados por el usuario. El programa deberá
manejar un menú con las siguientes opciones.
1. Ingreso de datos (Se pide al usuario que ingrese los dos números)
4068 2. Máximo Común Divisor (Calcula el MCD)
3. Mínimo Común Múltiplo (Calcula el MCM)
4. Salir
4071 Ejemplo:
1. Ingreso de datos
número1: 12
4074 número2: 30
El MCD de 12 y 30 es: 6
El MCM de 12 y 30 es: 60
Escriba un programa, usando funciones, que determine cuántas personas (el número
de personas es indicado por el usuario) están con un peso adecuado o no, según su
4080 estatura. Para ello, considere la tabla 1.
184
Angel Vázquez-Patiño Universidad de Cuenca
El programa debe tener registrado en una matriz, los pesos y las estaturas correspon-
dientes según lo mostrado en la tabla 1. El usuario debe indicar los datos de cuántas
4083 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
de pesos, de estaturas y de sexo. El programa debe verificar si esos valores están de
4086 acuerdo a la tabla anterior. En base a la verificación las personas deben clasificarse
como:
185
Angel Vázquez-Patiño Universidad de Cuenca
============================================================
4098 A ValorA_m ValorA_h
B ValorB_m ValorB_h
C ValorC_m ValorC_h
4101 ============================================================
Implemente una función que utilice el método de la bisección (vea Quarteroni et al.,
2014, pp. 43–47) para encontrar uno de los dos ceros de la función en
4113 el intervalo indicado por el usuario.
El método de Newton es un algoritmo iterativo que permite encontrar los ceros (i.e.,
4116 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). Las aproximaciones del cero de la función están dadas por la fór-
mula iterativa
4119 (23)
que permite calcular una secuencia de valores x(k) (las aproximaciones del cero de la
función) comenzando con un valor inicial . El algoritmo termina cuando el valor
4122 absoluto de la diferencia entre una aproximación ( ) y la anterior ( ) es me-
nor a un valor llamado tolerancia o cuando se cumple un número máximo de iteracio-
nes. En la siguiente figura se pueden apreciar las primeras iteraciones generadas por
186
Angel Vázquez-Patiño Universidad de Cuenca
4125 el método de Newton con un valor inicial para la función f(x) = x + ex + 10/(1
+ x2) - 5.
4137 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.
187
Angel Vázquez-Patiño Universidad de Cuenca
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-
4149 rar el número de columnas que tendría cada fila)
1.023 0.002 31.000 0.001
-0.010 2.100 1.200 1.010 0.900 ... 1.019 1.022 1.023
Si en algún momento el valor de f'(x) llega a ser cero, escribir en pantalla “La
derivada de la función fue cero en m” (m es el valor de x donde se evaluó la
4152 derivada de la función) y use un valor de 0.0000001 para la derivada en esa
iteración.
Ordenamiento de n números
4161 • 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
4164 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-
4167 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-
4170 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-
4173 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).
188
Angel Vázquez-Patiño Universidad de Cuenca
4185 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-
4188 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
4191 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
4194 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:
4197 Inicia el juego.
Jugador 1 Jugador 2
Turno Dados 1 y 2 Suma Dados 1 y 2 Suma
4200 1 1 y 3 4 2 y 2 4
189
Angel Vázquez-Patiño Universidad de Cuenca
2 4 y 1 5 3 y 5 8
3 6 y 6 12 2 y 4 6
4203 4 5 y 4 9 6 y 3 9
Finaliza el juego.
1. Implemente una función que devuelva un número entero al azar en el rango [1,
6].
4209 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.
4212 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
4215 de ejecución del programa (i.e., perfectamente alineados).
2. Para k = 0, 1, 2, 3, …
a) Calcular Axk.
190
Angel Vázquez-Patiño Universidad de Cuenca
Para la mayoría de vectores x0, la secuencia {uk} se aproxima al valor propio domi-
4227 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
4230 .
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
4233 .
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.
4242 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.
191
Angel Vázquez-Patiño Universidad de Cuenca
4251 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
5. Las primeras diez aproximaciones del valor y vector propio deben ser mostra-
4257 das y, al final, también la última aproximación (que está condicionada por el
error aproximado relativo).
4260 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
4263 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.
192
Angel Vázquez-Patiño Universidad de Cuenca
Un ejemplo de ejecución del programa para la matriz A = [[6, 5, -3, 7], [0, 2, 8, -2],
[0, 0, 9, 1], [0, 0, 0, 4]] es:
4278 Valor propio aproximado 0 : 12.3
Vector propio aproximado 0: [1.0, 0.56, -0.07, 0.47]
Hay muchas normas de vector posibles. Aquí usará la norma de vector definida
para un vector como
193
Angel Vázquez-Patiño Universidad de Cuenca
4299 . (24)
4305 (26)
4308 1. Implemente una función que devuelva una lista de n números aleatorios que
represente un vector en de norma igual a 1 (vea la Ecuación 24). (2 pun-
tos)
4311 2. Implemente una función que devuelva una lista de listas que represente una
matriz en cuyos elementos sean números enteros aleatorios en el interva-
lo [-9, 9]. (1 punto)
Miscelánea
4323 1. Dada una cadena, presentar de manera vertical cada letra de la cadena con su
respectivo valor ASCII (primera columna la letra, segunda columna el valor).
194
Angel Vázquez-Patiño Universidad de Cuenca
4329 4. Sustituir todos los espacios en blanco de una frase por un asterisco.
6. Implemente una función que devuelva una cadena sin los espacios en blanco.
4338 8. Solicitar el ingreso de los apellidos de dos personas. Mostrar un mensaje indi-
cando si son iguales o distintos.
4344 10. Solicitar el ingreso del apellido, nombre y edad de dos personas como cadenas
(validar que sea una edad correcta entre 0 y 130 años). Mostrar el nombre de
la persona con mayor edad.
4347 11. Leer una cadena y decir si es un número entero o real válido. Asuma que el
usuario ingresa solamente números (0-9) y puntos (.).
12. Contar cuántas palabras tiene una cadena. Escribir dos versiones del progra-
4350 ma:
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
4353 más de un espacio en blanco.
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.
195
Angel Vázquez-Patiño Universidad de Cuenca
4356 14. Ingresar una frase y modificarla convirtiendo el primer carácter de cada pala-
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.
4359 15. Contar el número de letras del alfabeto español de un texto ingresado.
4362 18. El usuario ingresa una frase y el programa debe mostrar cuántas palabras de
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-
4365 rrogación (i.e. sólo se ingresan letras). Ejemplo:
Ingrese una frase
Resultados
1 letra : 0 palabras
4371 2 letras: 3 palabras
3 letras: 2 palabras
4 letras: 3 palabras
4374 5+ letras: 8 palabras
4377 a) Su longitud
b) El carácter asociado al índice 7
c) La subcadena “creeré”
4380 d) El índice que ocupa el carácter ‘x’, desde la izquierda
e) El índice que ocupa el carácter ‘x’, desde la derecha
f) La cadena transformada a mayúsculas
4383 g) La cadena transformada a minúsculas
196
Angel Vázquez-Patiño Universidad de Cuenca
20. Verificar si una cadena de texto almacenada en la cadena nif, es un NIF co-
4389 rrecto o no. Si lo es, se imprimirá en pantalla su parte numérica; si no lo es, se
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
4392 sea mayúscula o minúscula).
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
4395 dígitos.
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
4398 con tildes o diéresis también), consonantes, o la ñ (u otros caracteres usados
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
4401 letra sea mayúscula y las demás minúsculas). Validar que sea una edad correc-
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.
4404 22. Invertir las palabras de una cadena. Por ejemplo, si la cadena es “Esta es una
prueba de programación”, el resultado es “programación de prueba una es Es-
ta”.
4407 23. Implemente un programa que reciba una cadena S y una letra X, y coloque en
mayúsculas cada ocurrencia de X en S (el programa debe modificar la variable
S).
4410 24. Ingresar una cadena de caracteres formadas por números y letras (en ese or-
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
4413 obtener la siguiente cadena: wwrrrrfffff.
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.
197
Angel Vázquez-Patiño Universidad de Cuenca
4416 26. Ingresar una cadena de caracteres y obtener otra con todos los caracteres de
las posiciones impares de la cadena.
27. Hacer un programa que al recibir como dato una cadena de caracteres que re-
4419 presente una fecha en formato (dd/mm/aa), genere otra cadena con la misma
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.
4422 28. Escriba un programa para ingresar un número telefónico en formato de cadena
y que luego lo convierta de la siguiente manera:
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-
4428 nas recibidas.
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:
4431 Hola, 3 se convertirá en Hola Hola Hola.
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
4434 de una cadena.
4437 34. Ingrese un texto e indique el porcentaje de palabras que tiene menos de 5 ca-
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
4440 o varios blancos por un solo blanco y visualizar la frase obtenida.
198
Angel Vázquez-Patiño Universidad de Cuenca
4446 i 5 *****
o 1 *
u 6 ******
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
4464 han establecido las siguientes reglas:
4470 39. Dada una palabra (una sola palabra) indicar si es palíndromo. Puede ver más
información en https://goo.gl/NkkZw.
40. Dada una frase (una o más palabras) indicar si es palíndromo. Ignore mayús-
4473 culas y minúsculas, signos de puntuación y espacios en blanco.
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
4476 expresada, por ejemplo, de la siguiente manera: 1:09:4, 1:9:4, 01:09:4, etc
(siempre primero la hora, segundo los minutos y luego los segundos). El pro-
grama debe mostrar la hora en formato de cadena de caracteres luego de un
199
Angel Vázquez-Patiño Universidad de Cuenca
42. * Escribir una función llamada terminaEnVocal que verifique si una palabra
4485 termina en vocal independientemente de si está en mayúsculas o minúsculas.
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-
4488 bras de la misma y el número total de palabras que terminan en vocal. La fun-
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
4491 un ejemplo:
Entrada
Ingrese la frase: HolA mundo cruel
4494 Salida
HolA
mundo
4497 cruel
200
Angel Vázquez-Patiño Universidad de Cuenca
Menú
1. Promedio
4512 2. Máximo
3. Mínimo
4. Salir
Menú
4518 1. Promedio
2. Máximo
3. Mínimo
4521 4. Salir
4524 Menú
1. Promedio
2. Máximo
4527 3. Mínimo
4. Salir
201
Angel Vázquez-Patiño Universidad de Cuenca
Menú
1. Promedio
4533 2. Máximo
3. Mínimo
4. Salir
44. Dados dos números en forma de arreglo de caracteres, implemente una función
4539 que genere el arreglo suma.
Ejemplo:
4548 45. Escribir un programa que elimine la k-ésima palabra de una cadena. Debe es-
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.
4551 46. Construir una función para que busque una subcadena en una cadena a partir
de una determinada posición y que devuelva la posición donde se encuentra la
subcadena en caso contrario que devuelva cero.
4554 47. Escriba un programa que cuente el número de palabras que tengan al menos
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
4557 que deben tener las palabras a buscar; la función devuelve el número de pala-
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
4560 vocales o consonantes; la función devuelve el número de palabras en el párrafo
202
Angel Vázquez-Patiño Universidad de Cuenca
4563 48. Implemente una función que voltee una palabra (cadena) dada. Por ejemplo, si
se ingresa arepa, se devuelve apera. Además, indicar si esas dos palabras son
iguales.
4566 49. *E145 Un anagrama es una palabra o frase formada intercambiando (en cual-
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
4569 anagrama de otra (“las palabras poseen las mismas letras, con la misma canti-
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
4572 en https://goo.gl/hXM1vS.
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.
4575 Ejemplo:
permutaciones(“abc”)
imprime: {“abc”, “acb”, “bac”, “bca”, “cab”, “cba”}
Los valores entre punto y comas pueden estar formados por letras, números o espa-
4584 cios en blanco.
Por ejemplo:
Juan;Pérez Torres;Ingeniero;37;Cuenca
4587 Karen Susana;López Alvear;Economista;32;Loja
El programa debe separar de cada cadena de caracteres, cada valor entre punto y co-
ma y mostrarlos como resultado en líneas separadas:
203
Angel Vázquez-Patiño Universidad de Cuenca
Estadísticas de texto
Ejemplo:
204
Angel Vázquez-Patiño Universidad de Cuenca
El programa muestra:
Vocales: 59
4620 Consonantes: 78
Dígitos: 4
Caracteres especiales: 10
4623 Mayúsculas: 7
Minúsculas: 130
Palabras categorizadas por número de caracteres:
4626 1: 1
2: 5
3: 5
4629 4: 2
5 o más: 14
Total palabras: 27
205
Angel Vázquez-Patiño Universidad de Cuenca
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
4647 más de cinco letras. Este conteo incluye cuentas y hashtags.
Ejemplo
Tweet:
4650 Sigue las últimas noticias de #Cuenca, #Ecuador y el Mundo en @eltiempocuenca
#marcandodiferencia @IGecuador
Resultados
4653 2 cuentas:
eltiempocuenca
IGecuador
4656 3 hashtags:
Cuenca,
Ecuador
4659 marcandodiferencia
Conteo de palabras:
1 letra: 1
4662 2 letras: 3
3 letras: 1
4 letras: 0
4665 5 letras: 2
5+ letras: 7
206
Angel Vázquez-Patiño Universidad de Cuenca
Ejemplo:
“En un sistema de cifrado por sustitución, cada letra o grupo de letras se reemplazan
4686 por otra letra o grupo de letras para disfrazarla. Uno de los sistemas de cifrado más
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,
4689 ataque se vuelve DWDTXH.” (Tanenbaum y Wetherall, 2012, p. 662)
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
4695 con la letra “a” y “b” respectivamente.
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.
4698 c) El mensaje resultante debe contener la primera letra de cada palabra del
mensaje en mayúscula.
207
Angel Vázquez-Patiño Universidad de Cuenca
4716 La información acerca de los sistemas de cifrado por transposición se basa en el libro
de Tanenbaum y Wetherall (2012).
Los sistemas de cifrado por sustitución (vea el ejercicio llamado Cifrado por sustitu-
4719 ción, página 207) conservan el orden de los símbolos de texto plano, pero los disfra-
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
4722 común, la transposición columnar. La clave del sistema de cifrado es una palabra o
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
4725 más cercana al inicio del alfabeto, y así sucesivamente. El texto plano se escribe de
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
4728 clave es la más baja.
208
Angel Vázquez-Patiño Universidad de Cuenca
a) Escriba un programa con funciones que permita al usuario ingresar una línea de
texto en el siguiente formato:
4737 NOMBRE APELLIDO, EDAD; NOMBRE APELLIDO, EDAD; NOMBRE APELLIDO, EDAD; NOMBRE
APELLIDO, EDAD.
Por ejemplo:
4740 Pedro Pérez, 35; Lara Muñoz, 45; José Calle, 20; María Cárdenas, 22; Clara
Arévalo, 65.
El programa debe encontrar la persona que tiene mayor edad. Debe mostrar al usua-
4743 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
b) Escriba un programa utilizando funciones, que permita al usuario ingresar una lí-
nea de texto en el siguiente formato:
209
Angel Vázquez-Patiño Universidad de Cuenca
4746 NOMBRE APELLIDO, SUELDO; NOMBRE APELLIDO, SUELDO; NOMBRE APELLIDO, SUELDO;
NOMBRE APELLIDO, SUELDO.
Por ejemplo:
4749 Pedro Pérez, 3500; Luis Muñoz, 2450; José Calle, 1200; María Cárdenas, 2200;
Clara Arévalo, 3650.
El programa debe encontrar la persona que tiene menor sueldo. Debe mostrar al
4752 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
Simule una terminal que ejecute comandos para operaciones aritméticas básicas (su-
4755 mar, restar, multiplicar, dividir) y de información de uso. Los comandos sumar, res-
tar, multiplicar, dividir y estadísticas (sólo hay cinco comandos) tienen la siguiente
sintaxis y funcionalidad:
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
4761 reales; el separador de decimales es el punto) a sumar; todo en una misma línea. Lue-
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
4764 si se ingresa suma 1;3,4, el programa debe decir “Hubo un error de sintaxis en el co-
mando ingresado.”
• Restar num1,num2
4767 Uno se ingresa mediante el teclado el comando restar (cualquier carácter del coman-
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
4770 de “dar enter” el resultado en la línea siguiente de la pantalla es Resta: valor de la
resta (la resta es num1-num2). Si hay un error en la sintaxis, el programa debe mos-
210
Angel Vázquez-Patiño Universidad de Cuenca
trar un error; por ejemplo si se ingresa restar 1,3,4, el programa debe decir “Hubo un
4773 error de sintaxis en el comando ingresado.”
• Multiplicar num1,num2,num3,…,numN
Uno se ingresa mediante el teclado el comando multiplicar (cualquier carácter del co-
4776 mando 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 multiplicar; todo en una misma lí-
nea. Luego de “dar enter” el resultado en la línea siguiente de la pantalla es Multipli-
4779 cación: valor de la multiplicación. Si hay un error en la sintaxis, el programa debe
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.”
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-
4785 les; el separador de decimales es el punto) a dividir; todo en una misma línea. Luego
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
4788 mostrar un error; por ejemplo si se ingresa dividir 1,3,4,5, el programa debe decir
“Hubo un error de sintaxis en el comando ingresado.”
• Estadísticas
4791 Uno se ingresa mediante el teclado el comando estadísticas (cualquier carácter del co-
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
4794 Número de veces que se utilizó correctamente cada comando
Sumar: num veces
Restar: num veces
4797 Multiplicar: num veces
Dividir: num veces
4800 • Salir
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.
211
Angel Vázquez-Patiño Universidad de Cuenca
4803 Nota: antes del comando y después de los números que necesita el comando (en los
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
4806 necesita el comando sólo debe haber un espacio), no debería haber ningún mensaje
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.
4809 A continuación se muestra un ejemplo de ejecución del programa. Las líneas en negri-
ta son los comandos (y los respectivos números que necesita el mismo) que se ingre-
san por parte del usuario.
4812 sumar 1, 2, 4
Suma: 7
RestaR 3,4
4815 Resta: -1
MultiPlicar 4,5,3,2,4
Multiplicación: 480
4818 Dividir 4,3
División: 1,333333333
ReSTar 5,4
4821 Resta: 1
Suma 4,5,6,12,13,5,8,7
Hubo un error de sintaxis en el comando ingresado.
4824 EstAdísticAS
Número de veces que se utilizó correctamente cada comando
Sumar: 1 vez
4827 Restar: 2 veces
Multiplicar: 1 vez
Dividir: 1 vez
4830 Salir
212
Angel Vázquez-Patiño Universidad de Cuenca
4839 Los registros (un registro es el conjunto de valores de una misma persona) se deben
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
4842 separador de registros. La información de la tabla del ejemplo se representaría con la
siguiente cadena:
01064634657,Juan,Pérez,23;01064636638,Víctor,Guzmán,21;01064688644,Pedro,Flor
4845 es,20;
Este ejercicio pretende mejorar sus destrezas para usar funciones, por eso, usted debe
implementar las funciones que considere necesarias.
213
Angel Vázquez-Patiño Universidad de Cuenca
4857 Una restricción con la que debe cumplir su programa es que utilice una variable glo-
bal para la cadena de datos de personas y para el número total de personas.
Ejemplo:
4860 Ingreso
4866 Actualización
Se le pide al usuario que ingrese una cédula existente y los nuevos valores del resto de
campos
4869 Cédula: 01064634657
Nombre: Diego
Apellido: Sarmiento
4872 Edad: 25
Eliminación
• Cédula: 01064634657
214
Angel Vázquez-Patiño Universidad de Cuenca
Visualización
Listar
Cédula: 01064688644
4902 Nombre: Pedro
Apellido: Flores
Edad: 20
Se calcula y muestra el promedio de las edades de todas las personas que estén en ese
momento en la lista.
215
Angel Vázquez-Patiño Universidad de Cuenca
4908 8. Búsquedas
Algunos de los siguientes ejercicios son basados en el libro de Gómez Fuentes y Cer-
vantes Ojeda (2013).
216
Angel Vázquez-Patiño Universidad de Cuenca
d) Genere 1000 arreglos que cumplan con las condiciones del literal b. En ca-
da uno de los arreglos generados se debe buscar un elemento al azar (que
4956 debe estar en el arreglo) utilizando la función del literal a. De cada búsque-
da se debe ir guardando el número de comparaciones y el tiempo de cálcu-
lo utilizado. Finalmente, presente una tabla con estadísticas de eficiencia
4959 (estos datos son empíricos) de los algoritmos y un histograma para repre-
sentar las mismas (el histograma presenta los valores normalizados; los dos
signos de numeral en el histograma significa que debe poner los números
4962 que representa cada barra):
================================================
Tabla de comparación para algoritmos de búsqueda
4965 ================================================
217
Angel Vázquez-Patiño Universidad de Cuenca
azar) con todos los métodos; así en cada uno de los 1000 arreglos (en
4971 cada nuevo arreglo se eligió un nuevo elemento al azar para buscarlo).
---------------------------------------------------------------
Algoritmo # comparaciones Tiempo [seg.]
4974 promedio promedio
--------- --------------- -------------
Algoritmo 1 ## ##
4977 Algoritmo 2 ## ##
... ... ...
---------------------------------------------------------------
4980 =======================================
Histograma para comparación de métricas
=======================================
4983 -----------------------------------------------------------------
Algoritmo 1 |
# comparaciones (prom) |▬▬▬▬▬▬▬▬▬▬ ##
4986 Tiempo [seg.] (prom) |▬▬▬▬▬▬▬ ##
|
Algoritmo 2 |
4989 # comparaciones (prom) |▬▬▬▬▬▬▬ ##
Tiempo [seg.] (prom) |▬▬▬▬▬▬▬▬ ##
|
4992 . | . .
. | . .
. | . .
4995 -----------------------------------------------------------------
218
Angel Vázquez-Patiño Universidad de Cuenca
6. Ejercicio
219
Angel Vázquez-Patiño Universidad de Cuenca
9. Ordenamiento
5001 Miscelánea 1
Algunos de los siguientes ejercicios son basados en el libro de Joyanes Aguilar et al.
(2003).
5007 a) Inserción
b) Selección
c) Burbuja
5010 d) Ninguna de las anteriores
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-
5013 dente mediante: a) ordenamiento de burbuja, b) algoritmo de selección y c) al-
goritmo de inserción.
5019 4. Dado un arreglo de números reales, escriba un método que ordene los elemen-
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
5022 ascendente, mientras que los números impares deberán estar ordenados de for-
ma descendente. Esto es, el arreglo {1,2,3,4,5,6} quedará como {2,4,6,5,3,1}.
220
Angel Vázquez-Patiño Universidad de Cuenca
5031 E02 *
E03 **
Iteración 1:
5034 E01 *
E02 *****
E03 **
5037 Iteración 2:
E01 *
E02 **
5040 E02 *****
221
Angel Vázquez-Patiño Universidad de Cuenca
5070 10. Implemente una función que permita ordenar por fechas y de mayor a menor
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
5073 (columna 3) y número de contrato (columna 4). Damos por supuesto que la
introducción de datos fue correcta, pudiendo existir diversos contratos con la
misma fecha, pero no números de contrato repetidos.
5076 11. Realizar una función que permita ordenar por fechas y de mayor a menor una
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-
5079 na 3) y número de contrato (columna 4). Damos por supuesto que la introduc-
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
5082 forma decreciente, diseñar una función que devuelva el número de contratos
realizados en una determinada fecha.
5088 13. El siguiente es un programa que le permitirá tener una idea de la eficiencia de
los métodos de ordenamiento en cuanto al número de comparaciones e inter-
cambios que se llevan a cabo en cada algoritmo de ordenamiento y el tiempo
5091 que se demora cada uno en la ejecución.
222
Angel Vázquez-Patiño Universidad de Cuenca
d) Genere 9999 arreglos que cumplan con las condiciones del literal b. Cada
5115 uno de los arreglos generados deben ser ordenados utilizando la función del
literal a. De cada arreglo ordenado debe ir guardando el número de compa-
raciones, el número de intercambios y el tiempo de cálculo en segundos. Fi-
5118 nalmente, presente una tabla con estadísticas de eficiencia de los métodos y
un histograma para representar las mismas (el histograma presenta los va-
lores normalizados; los dos signos de numeral en el histograma significa que
5121 debe poner los números que representa cada barra):
====================================================
Tabla de comparación para algoritmos de ordenamiento
5124 ====================================================
223
Angel Vázquez-Patiño Universidad de Cuenca
---------------------------------------------------------------------
5130 # comparaciones # intercambios Tiempo [seg.]
Algoritmo promedio promedio promedio
--------- --------------- -------------- -------------
5133 Algoritmo 1 ## ## ##
Algoritmo 2 ## ## ##
Algoritmo 3 ## ## ##
5136 ... .. .. ..
---------------------------------------------------------------------
=======================================
5139 Histograma para comparación de métricas
=======================================
-----------------------------------------------------------------
5142 Algoritmo 1 |
# comparaciones (prom) |▬▬▬▬▬▬▬▬▬▬ ##
# intercambios (prom) |▬▬▬▬▬▬▬▬▬▬▬▬ ##
5145 Tiempo [seg.] (prom) |▬▬▬▬▬▬▬ ##
|
Algoritmo 2 |
5148 # comparaciones (prom) |▬▬▬▬▬▬▬ ##
# intercambios (prom) |▬▬▬▬▬▬▬▬▬▬▬ ##
Tiempo [seg.] (prom) |▬▬▬▬▬▬▬▬ ##
5151 |
224
Angel Vázquez-Patiño Universidad de Cuenca
Algoritmo 3 |
# comparaciones (prom) |▬▬▬▬▬▬▬▬▬▬▬▬▬▬ ##
5154 # intercambios (prom) |▬▬▬▬▬▬▬▬▬ ##
Tiempo [seg.] (prom) |▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬ ##
|
5157 . | . .
. | . .
. | . .
5160 -----------------------------------------------------------------
5175 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).
225
Angel Vázquez-Patiño Universidad de Cuenca
b) Implemente una función que devuelva una palabra cuyo número de letras
sea dado como parámetro. Cada letra de la palabra es generada individual-
5184 mente al azar; las letras deben ser sólo minúsculas.
c) Genere un arreglo de n elementos, donde n es un número aleatorio entre 25
y 50.
5187 d) Llene el arreglo con palabras aleatorias de m letras, donde m es un número
aleatorio entre 3 y 5.
e) La mitad (si n/2 no es entero, trúnquelo) del arreglo ordénelo con el méto-
5190 do de la burbuja.
f) La otra mitad del arreglo ordénelo con el método de la selección.
g) Con las dos mitades ordenadas, aplique el método de la inserción para or-
5193 denar el arreglo completo.
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).
5196 Nota 2: Cada método de ordenamiento debe estar implementado en una fun-
ción diferente.
16. Pregunta
Los datos de cada estudiante son: el nombre y apellido y la nota promedio (entre 1 y
20 puntos, inclusivo). Por ejemplo:
5211 Se debe almacenar los datos en una matriz. Si hay más de un estudiante con el ape-
llido buscado, se debe mostrar todos los estudiantes que coinciden con el apellido es-
pecificado.
226
Angel Vázquez-Patiño Universidad de Cuenca
1. Escribir una función f1 que permita ingresar los datos de los estudiantes.
Nombres Calificaciones
Juan 16
Andrés 18
Pedro 15
María 11
Xavier 10
Ximena 17
Fernando 19
... ...
Jaime 5
5226 2. Escribir una función f2 que reciba los dos arreglos ingresados en f1 y devuelva
una matriz con los nombres y calificaciones de forma ascendente, por nombre.
227
Angel Vázquez-Patiño Universidad de Cuenca
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-
5229 vuelva una matriz con la calificación mínima y calificación máxima.
Jaime 5
B=
Fernando 19
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-
5232 caciones.
Fernando 19
Andrés 18
Ximena 17
C=
Jaime 5
Xavier 10
María 11
Ordenamientos en matriz
Desarrolle un programa que pida al usuario ingresar las dimensiones (nxm) de una
5235 matriz y rellene los elementos de dicha matriz con números enteros aleatorios en un
228
Angel Vázquez-Patiño Universidad de Cuenca
rango dado por el mismo usuario. Muestre la matriz generada y luego, realice los si-
guientes ordenamientos:
5238 • Las columnas pares ordénelas de manera descendente con el método de inser-
ción y las columnas impares ordénelas de manera ascendente con el método de
selección. Muestre la matriz original luego de aplicados estos cambios.
5241 • Las filas pares ordénelas de manera ascendente y las filas impares ordénelas de
manera descendente; este ordenamiento de filas, en ambos casos, debe realizar-
se con el método de ordenamiento de burbuja. Muestre la matriz original lue-
5244 go de aplicados estos cambios.
• Las “diagonales derecha-izquierda” ordénelas de manera ascendente con el mé-
todo de inserción; muestre la matriz original luego de aplicados estos cambios.
5247 Las "diagonales izquierda–derecha" ordénelas de manera descendente con el
método de selección; muestre la matriz original luego de aplicados estos cam-
bios.
Resultados
229
Angel Vázquez-Patiño Universidad de Cuenca
==========
5265 Luego de ordenadas las columnas
2 5 -1 5
3 4 7 4
5268 8 1 9 2
Escriba un programa que lea los datos de n personas (el n se pide al usuario), consi-
5283 derando los siguientes campos:
1. Nombre
2. Apellido
5286 3. Edad
4. Profesión
230
Angel Vázquez-Patiño Universidad de Cuenca
La información debe ser validada al momento de ingresar cada uno de los datos. Al-
5289 macene la información ingresada en una estructura que considere adecuada para rea-
lizar las siguientes operaciones:
b) Buscar todas las ocurrencias de un valor ingresado por el usuario. Por ejem-
5298 plo, buscar todos los que tengan 30 años de edad, o todos lo que tengan por
apellido “Pérez”.
231
Angel Vázquez-Patiño Universidad de Cuenca
10. Archivos
Miscelánea
a) Empty or full
b) End of file
5307 c) End of floop
d) Las anteriores respuestas no son correctas
2. *E156 Usted recibió dos archivos de texto plano (txt). El primero tiene un
5310 mensaje cifrado que sólo se puede leer (leer por un humano) utilizando la cla-
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-
5313 rresponde caracteres, de los que tendrá que escribir como descifrados. Por
ejemplo, si el primer archivo contiene
e545ty8452w3
3. Dado un archivo csv con el formato (los datos pueden ser más, esto sólo indica
el formato)
5325 Número 1, Número 2
1, 2
2, 5
5328 ,
232
Angel Vázquez-Patiño Universidad de Cuenca
Implemente un script que escriba un archivo txt con una tercera columna lla-
mada Factorial, que tenga el resultado del producto del factorial del número 1
5331 con el factorial del número 2 (a más de las dos otras columnas del archivo csv):
Número 1, Número 2, Factorial
1, 2, 2
5334 2, 5, 240
, ,
5349 ,
5. asdf
233
Angel Vázquez-Patiño Universidad de Cuenca
5361 2. Cambie la resolución temporal a horaria. Es decir, por cada hora del día (hay
datos de tres días) saque la media de las observaciones de esa hora (ese pro-
medio es el que le corresponde como dato a esa hora).
5364 3. Escriba tres archivos con resolución horaria. Un archivo para el 15 de noviem-
bre (que tenga datos sólo de ese día), un archivo para el 16 de noviembre y un
archivo para el 17 de noviembre.
Nota: el archivo DB.csv no debe contener comas sin valores al final de la filas.
234
Angel Vázquez-Patiño Universidad de Cuenca
5382 referencia pero recuerde que debe poner etiquetas en los ticks del eje horizontal para
saber a qué grupo de edades corresponde cada diagrama de caja.
235
Angel Vázquez-Patiño Universidad de Cuenca
5394 La columna Obs. tiene los datos del archivo. Como la longitud de la ventana es de 5,
se van tomando los datos cada cinco filas y se va aplicando cada operación pedida
(i.e., mínimo, media, mediana y máximo). Los resultados de cada ventana se mues-
5397 tran en las últimas cuatro columnas. Recuerde que la imagen mostrada solamente se
muestra para explicar el procedimiento, no se pide que imprima algo así en la conso-
la.
5400 Con los resultados de las operaciones se debe generar una gráfica parecida a la si-
guiente. Los estilos de líneas, marcas y colores con los que se muestra la información
de cada columna del esquema anterior (i.e., Obs., Mínimo, Media, Mediana y Máxi-
5403 mo) deben ser diferentes. La figura se debe guardar siguiendo todos los parámetros
que hagan que la imagen sea de la máxima calidad, tanto técnica como en la claridad
en la que se muestra la información.
236
Angel Vázquez-Patiño Universidad de Cuenca
Mínimo
5 Media
4 Mediana
3 Máximo
2
1
0
0 2 4 6 8 10 12
Tiempo
5406 En el caso de que la longitud de la ventana escogida haga que la última ventana no
contenga el número de valores igual a la longitud de la ventana, no haga nada con los
datos de esa última ventana, pero sí debe indicar que eso pasó mediante la impresión
5409 de un mensaje en la consola. Por ejemplo, si se escogiera una longitud de ventana
igual a cuatro con los datos anteriores, los resultados de los cálculos y la figura serían
los siguientes.
237
Angel Vázquez-Patiño Universidad de Cuenca
Mínimo
5 Media
4 Mediana
3 Máximo
2
1
0
0 2 4 6 8 10 12
Tiempo
5412 Para que pruebe su script puede utilizar el archivo que se le proveyó en el examen,
llamado Examen interciclo datos de ejemplo.csv; ejemplos de resultados
con diferentes ventanas se muestran a continuación.
238
Angel Vázquez-Patiño Universidad de Cuenca
El juego comienza generando una letra del alfabeto (incluyendo la letra ñ) de manera
aleatoria. Con esa primera letra, el jugador 1 debe escribir una palabra. El jugador 2
5418 debe escribir una siguiente palabra que comience con la letra con la que termina la
palabra del jugador 1. Esa palabra debe ser una que no haya sido escrita antes por
ningún jugador. De la misma manera, el jugador 1 debe escribir una nueva palabra
239
Angel Vázquez-Patiño Universidad de Cuenca
5421 que comience con la última letra de la última palabra escrita por el jugador 2. Esa
palabra debe ser una que no haya sido escrita antes por ningún jugador. Se repite es-
tos pasos hasta que termine el juego. El juego termina cuando los dos jugadores, de
5424 manera sucesiva, no son capaces de escribir palabras diferentes (i.e., que no hayan si-
do ingresadas antes por cualquiera de los dos jugadores) o siguiendo la regla del jue-
go (e.g., cuando el jugador escribe una palabra que no comienza con la última letra
5427 de la última palabra escrita). Un jugador tiene la posibilidad de indicar que no puede
escribir una palabra válida presionando la tecla Enter sin antes escribir ningún carác-
ter; cuando en dos jugadas sucesivas se presiona Enter, se termina el juego. Gana el
5430 juego la persona que haya escrito el mayor número de caracteres (se suma la cantidad
de caracteres de todas las palabras ingresadas por cada jugador); se lo debe indicar
cuando termina el juego. Al finalizar el juego, todas las palabras (una palabra es una
5433 cadena de al menos un carácter) diferentes ingresadas por los jugadores deben ser es-
critas en un archivo junto con el puntaje de cada jugador.
Si usa Python, la siguiente línea de código le ayuda a generar las letras del abeceda-
5436 rio: import string; print(string.ascii_lowercase).
240
Angel Vázquez-Patiño Universidad de Cuenca
i z
241
Angel Vázquez-Patiño Universidad de Cuenca
Dado un intervalo inicial [a, b] para buscar una raíz de una función , donde
5448 (en este ejercicio asuma que esta condición siempre se cumple), éste se
divide en tres partes iguales. Por ejemplo, los puntos que indican los límites de los
subintervalos podrían ser a, mi, md, y b (mi de punto medio izquierdo y md de punto
5451 medio derecho). Se verifica si la raíz está en el subintervalo [a, m i], [mi, md] o [md, b];
si está en el intervalo [a, mi], la aproximación de la raíz es (a+m i)/2, si está en el in-
tervalo [mi, md], la aproximación de la raíz es (m i+md)/2, si está en el intervalo [m d,
5454 b], la aproximación de la raíz es (md+b)/2 (cuando se verifican los subintervalos por
primera vez, la aproximación constituye la aproximación uno, ). Si se verifica que
en alguno de los subintervalos está la raíz, se vuelve a aplicar el mismo procedimiento
5457 pero tomando como intervalo de búsqueda, el subintervalo en donde se verifica que
esté la raíz. Si no se puede verificar que la raíz está en uno de esos subintervalos, es
posible que la raíz sea mi o md, lo cual se tiene que analizar también. Este procedi-
5460 miento se realiza tantas veces como sean necesarias hasta que el error aproximado re-
lativo sea menor a una tolerancia dada; en este ejercicio use una tolerancia de
0.000001.
242
Angel Vázquez-Patiño Universidad de Cuenca
5472
5475 .
Note que en la serie de Maclaurin la sumatoria tiene infinitos términos, usted utilice
solamente 50 para calcular la aproximación de . Realizar esta aproxima-
5478 ción significa que NO se tiene que utilizar ninguna función de ninguna librería que
calcule directamente el seno de un número cualquiera.
Todas las aproximaciones que se realicen con el método de la trisección, desde la pri-
5481 mera hasta cuando se cumple la tolerancia, deben ser guardadas en un archivo de ex-
tensión CSV. Esas aproximaciones deben ser guardadas en forma de columna junto
con el número de aproximación. Un ejemplo del archivo que se genera al utilizar el
5484 método de la trisección con un intervalo inicial de búsqueda [-19, 3.5] se muestra a
continuación (así debe escribirse su archivo, ¡con los valores correctos de las aproxi-
maciones!).
5487 Aproximación, Valor
0,-7.75
1,-0.25
5490 2,2.25
3,1.4166666666666667
4,1.1388888888888888
5493 5,1.2314814814814814
6,1.2006172839506173
243
Angel Vázquez-Patiño Universidad de Cuenca
7,1.2109053497942388
5496 8,1.2109053497942388
244
Angel Vázquez-Patiño Universidad de Cuenca
Usted trabajará con un archivo CSV que tiene una lista de estudiantes. El archivo
5526 tiene registros con ocho atributos (columnas/campos), de los cuales los más impor-
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-
5529 pos). Usted debe pedir la cantidad (N) de personas que habrán en cada grupo que
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-
5532 cendente de acuerdo a la suma de las calificaciones de la Prueba 1 de cada grupo (su-
ma las calificaciones de cada estudiante del grupo y esa suma es por la que debe or-
denar); pero luego de ordenar por ese criterio, los nombres de las personas de cada
5535 grupo deben estar ordenados en forma ascendente por el primer apellido, dentro de
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.
245
Angel Vázquez-Patiño Universidad de Cuenca
5538 Una cosa muy importante es que si un estudiante tiene en la columna “Excluir” el
valor “Sí”, esa persona no debe tomarse en cuenta para generar grupos sino que se lo
lista al final.
Grupo 2 Suma: 17
5547 Bryam Sebastián Arévalo Abril 9
Charlee Emanuel Vintimilla Marquez 8
Grupo 3 Suma: 15
5550 Samantha Gabriela Cabrera Nieto 7
Daviel Lucas Zárate Cuenca 8
5559 Tome en cuenta que los grupos estás ordenados descendentemente por la suma de las
calificaciones de las personas que los componen. Luego, dentro de cada grupo, los
nombres están ordenados de manera ascendente, por el primer apellido. Finalmente,
5562 se listan las personas que deben excluirse de la generación de grupos.
246
Angel Vázquez-Patiño Universidad de Cuenca
Toda la información que se muestra en pantalla, debe ser guardada en un archivo lla-
mado grupos.txt.
Los componentes y/o variables de los que se cuenta con datos, y las correspondientes
unidades, son los siguientes:
Haga un gráfico de dispersión (scatter) con cada par de componentes en donde cada
5583 punto muestre la resistencia del concreto con un color en escala de grises y un tama-
ñ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
5586 gráficos (se utilizaron los datos reales para generarlos), de todos los que se deben ge-
nerar (son más de 55).
247
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
5589 del punto está relacionado a la resistencia del concreto. Además, lo que se pide es que
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
5592 Cemento debe haber otra gráfica. Finalmente, el eje x hace referencia al primer com-
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).
5595 No todas las gráficas tienen las mismas marcas (e.g., círculos o triángulos). Las mar-
cas que se tiene que utilizar, dependiendo de qué componente esté siendo mostrado
en el eje x, son:
Los gráficos deben tener una barra de colores con la etiqueta que indique qué infor-
5607 mación está mostrando y su respectiva unidad (i.e., Resistencia [mPa]). Las etiquetas
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
5610 texto
248
Angel Vázquez-Patiño Universidad de Cuenca
5637 Los números que están entre paréntesis hacen referencia al número de puntos mínimo
y máximo de las gráficas generadas.
249
Angel Vázquez-Patiño Universidad de Cuenca
Se pide responder
5655 2. ¿Cuál fue el número de personas que asistieron sólo un día al congreso? De
esos asistentes, ¿cuál es el número de mujeres y de hombres? ¿cuál es el núme-
ro de estudiantes y de profesionales? Si es posible, ¿cuántos fueron de Cuenca
5658 y cuántos de fuera de Cuenca?
3. ¿Cuál fue el número de personas que asistieron sólo dos días al congreso? De
esos asistentes, ¿cuál es el número de mujeres y de hombres? ¿cuál es el núme-
5661 ro de estudiantes y de profesionales? Si es posible, ¿cuántos fueron de Cuenca
y cuántos de fuera de Cuenca?
4. ¿Cuál fue el número de personas que asistieron los tres días del congreso? De
5664 esos asistentes, ¿cuál es el número de mujeres y de hombres? ¿cuál es el núme-
ro de estudiantes y de profesionales? Si es posible, ¿cuántos fueron de Cuenca
y cuántos de fuera de Cuenca?
1. Una lista de las personas que asistieron el primer día del congreso. La lista de-
be tener todos los datos disponibles de las personas.
250
Angel Vázquez-Patiño Universidad de Cuenca
5670 2. Una lista de las personas que asistieron el segundo día del congreso. La lista
debe tener todos los datos disponibles de las personas.
3. Una lista de las personas que asistieron el tercer día del congreso. La lista de-
5673 be tener todos los datos disponibles de las personas.
4. Una lista de las personas que asistieron solamente un día al congreso. La lista
debe tener todos los datos disponibles de las personas.
5676 5. Una lista de las personas que asistieron solamente dos días al congreso. La lis-
ta debe tener todos los datos disponibles de las personas.
6. Una lista de las personas que asistieron los tres días del congreso. La lista de-
5679 be tener todos los datos disponibles de las personas.
7. Una lista de las personas que tienen certificado de aprobación. Tienen certifi-
cado de aprobación las personas que asistieron al menos dos días al congreso y
5682 que obtuvieron al menos el 70% de la nota en el cuestionario (si una persona
llenó varias veces el cuestionario, tomar la nota más alta). La lista debe tener
todos los datos disponibles de las personas.
5685 Nota importante: en la vida real la gente se inscribe varias veces, se registra varias
veces en el mismo día y completan el cuestionario varias veces, a pesar de que no lo
deben hacer. Tomar en cuenta esos detalles para resolver el ejercicio propuesto.
251
Angel Vázquez-Patiño Universidad de Cuenca
Realizar un programa que permita simular el combate entre dos pokemones a través
5694 de las siguientes opciones del menú:
1.- Ingresar datos de los pokemones
2.- Simular combate
5697 3.- Terminar
Ingresar opción <1-3>:
1)Ingresar datos de los pokemones (i.e. nombres, poder de ataque). Por ejemplo se
5700 ingresa los pokemones: 1) Pikachu con poder de ataque 55 y 2) Jigglypuff con su po-
der de ataque 45
2)Simular combate
5703 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-
dor1 inicia la pelea, caso contrario inicia el Jugador2. Recuerde que una vez que se
5706 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
100 puntos y se tienen que ir simulando el combate restando de la vida de los poke-
5709 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
jugador ataca o no. Solamente si el resultado es 1, el jugador al que le toca el turno
5712 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.
Como ejemplo, suponga que la función azar(2) devuelve 0. Por lo tanto Pikachu ini-
5715 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
éste ataca y en el primer turno Jigglypuff queda con 45 de vida. Luego es el turno de
252
Angel Vázquez-Patiño Universidad de Cuenca
5718 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-
chu ataca y Jigglypuff termina con -10 de vida, entonces el combate termina. Se tiene
5721 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.
Ejemplo de ejecución:
5724 Combate de pokemones
1.- Ingresar datos de los pokemones
2.- Simular combate
5727 3.- Terminar
Ingresar opción <1-3>: 1
Vidas:Pikachu(100) vs Jigglypuff(100)
5739 1.- Turno: Pickachu (55 de poder). (Sí ataca, azar(2) devolvió 1)
Vidas: Pikachu (100) vs Jigglypuff (45)
2.- Turno: Jigglypuff (45 de poder). (No ataca, azar(2) devolvió 0)
5742 Vidas: Pikachu (100) vs Jigglypuff (45)
253
Angel Vázquez-Patiño Universidad de Cuenca
Combate de pokemones
1.- Ingresar datos de los pokemones
5748 2.- Simular combate
3.- Terminar
Ingresar opción <1-3>: 3
254
Angel Vázquez-Patiño Universidad de Cuenca
5763 Desarrolle un algoritmo que permita transformar un número decimal n ≤ 5000 a nú-
mero romano. La información mostrada a continuación, que debe tomar en cuenta
para este ejercicio, fue tomada de Wikipedia (https://goo.gl/auCPx7).
5766 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
Para la notación moderna de los números romanos se utilizan las siguientes normas:
255
Angel Vázquez-Patiño Universidad de Cuenca
5769 • 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.
• Un símbolo seguido de otro de igual o inferior valor, suma (e.g., X·X·I =
5772 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
valor del siguiente (e.g., X·IX = 10+[10-1] = 19).
5775 • La unidad (I) y los números con base 10 (X, C y M) pueden repetirse hasta 3
veces consecutivas como sumandos.
• Los números con base 5 (V, L y D), no pueden repetirse seguidos, ya que la
5778 suma de esos dos símbolos tiene representación con alguno de los símbolos an-
teriores.
• La unidad y los símbolos de base 10 también pueden estar restando antes de
5781 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
inmediatamente superiores, pero no de otros con valores más altos (e.g.,
5784 ‘IV’ y ‘IX’, pero no ‘IL’ ni ‘IC’).
2. en el caso de estar restando, no pueden repetirse.
• Los símbolos con base 5 no pueden utilizarse para restar (e.g., 45 se escribe
5787 ‘XLV’ y no ‘VL’).
• Para números con valores igual o superiores a 4000, se coloca una línea hori-
zontal por encima del número, para indicar que la base de la multiplicación es
5790 por 1000:
V 5000
X 10 000
L 50 000
C 100 000
D 500 000
M 1 000 000
256
Angel Vázquez-Patiño Universidad de Cuenca
Elaborar un algoritmo que dado un número entero positivo (>0) cualquiera (validar
5793 para que siga ingresando números mientras no cumple la condición) nos diga el nú-
mero de dígitos que tiene.
5796 Represente mediante un diagrama de flujo el algoritmo que solicite un número n y es-
criba en pantalla una pirámide invertida. La altura de la pirámide es igual a n. Vali-
de que el usuario ingrese números mayores o iguales a uno (vuelva a solicitar si no
5799 cumple la condición). La siguiente pirámide muestra el ejemplo de la ejecución del al-
goritmo con n igual a 5.
Ingrese la altura (n): 5
5802 1 2 3 4 5 4 3 2 1
1 2 3 4 3 2 1
1 2 3 2 1
5805 1 2 1
1
257
Angel Vázquez-Patiño Universidad de Cuenca
Se ingresan dos límites: límite inferior con un valor mínimo de 1 y límite superior con
un valor máximo de 9999 (validar valores mínimos y máximos de los límites y que el
5823 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-
ción). Imprimir los valores desde el límite inferior al límite superior con el paso (in-
5826 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
tienen un número de dígitos menor al número de dígitos del límite superior, deben
5829 completar el número de dígitos con ceros a la izquierda.
Ejemplo 1:
Límite inferior: 1
5832 Límite superior: 12
Paso: 3
Ejemplo 2:
Límite inferior: 1
5841 Límite superior: 1500
Paso: 500
258
Angel Vázquez-Patiño Universidad de Cuenca
E174 Dados
Escribir un programa que simule el lanzamiento de dos dados y muestre por pantalla
5859 la frecuencia de los resultados de mil lanzamientos.
Búsquedas y ordenación
5862 2. Diseñar un procedimiento recursivo que ordene una lista de elementos por el
método Quick Sort.
Interpolación
5865 Para resolver los siguientes ejercicios revise las páginas 80-83 del libro de Quarteroni
et al. (2014).
259
Angel Vázquez-Patiño Universidad de Cuenca
Para resolver los siguientes ejercicios revise la sección 4.3 Numerical integration del
5874 libro de Quarteroni et al. (2014).
(27)
(28)
260
Angel Vázquez-Patiño Universidad de Cuenca
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.
5901 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
261
Angel Vázquez-Patiño Universidad de Cuenca
i xi yi (aproximación)
11 2.2 2.98
12 2.4 3.2368
13 2.6 3.6312
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
5904 • * Implemente el método de Euler y úselo para integrar numéricamente la
ecuación
5907 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
5910 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].
(29)
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
5919 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
5922 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-
5925 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é.
262
Angel Vázquez-Patiño Universidad de Cuenca
263
Angel Vázquez-Patiño Universidad de Cuenca
5958 tra, en Estudiante ponga su primer nombre y primer apellido). Recuerde que
el único dato que pide al usuario es xn, el resto (hs, f(x, y), etc.) son fijos.
5961 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).
5967 (30)
264
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
5982 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-
5985 portan pero deben ser diferentes, además, tome en cuenta la leyenda).
Documente su código fuente para que pueda ser fácilmente entendido (1 punto).
5988 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
5991 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
265
Angel Vázquez-Patiño Universidad de Cuenca
Menú
1. Datos manuales
2. Datos aleatorios
3. Salir
Opción [1-3]: _
6006 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
6009 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.
266
Angel Vázquez-Patiño Universidad de Cuenca
Dada la hipótesis de que se toman dos muestras, una de una población cuyos valores
6015 siguen una distribución alpha y una de una población cuyos valores siguen una distri-
bución de Gumbel sesgada a la izquierda, mostrar un histograma que indique cuál es
la distribución del estadístico que mide la diferencia de las medias de las muestras. El
6018 script debe trabajar con muestras de tamaño 10’000.000 y 90’000.000 ensayos.
Nota: Dentro del submódulo stats de la librería scipy existen las funciones alpha y
gumbel_l. Para generar un número aleatorio las puede usar así, alpha.rvs(3.57) y
6021 gumbel_l.rvs().
1. asdf
267
Angel Vázquez-Patiño Universidad de Cuenca
x<-2
6039 z<-5
Si z<0 Entonces
x<-x+2
6042 Sino
Si x>1 Entonces
x<-x+1
6045 Sino
x<-5
Fin Si
6048 Fin Si
Escribir x
FinProceso
268
Angel Vázquez-Patiño Universidad de Cuenca
var3<-0
269
Angel Vázquez-Patiño Universidad de Cuenca
270
Angel Vázquez-Patiño Universidad de Cuenca
var2<-1
6114 var3<-11
6123 var2<-var2+1
Fin Mientras
Escribir var3
6126 FinProceso
271
Angel Vázquez-Patiño Universidad de Cuenca
a)
Proceso sin_titulo
6141 cont<-1
Mientras cont<=8 Hacer
Para i<-1 Hasta 5 Con Paso 2 Hacer
6144 Escribir Sin Saltar cont,'^',i,': ',cont^i, ' '
Fin Para
Escribir ''
6147 cont<-cont+4
Fin Mientras
FinProceso
6150 b)
Proceso sin_titulo
cont<-1
6153 Mientras cont<=7 Hacer
Para i<-1 Hasta 5 Con Paso 2 Hacer
Escribir Sin Saltar cont,'^',i,': ',cont^i, ' '
6156 Fin Para
Escribir ''
Fin Mientras
6159 FinProceso
c)
Proceso sin_titulo
6162 cont<-1
272
Angel Vázquez-Patiño Universidad de Cuenca
Lenguaje Java
6174 a) -120
b) 0
c) 60
6177 d) Ninguna de las anteriores
public class Test {
273
Angel Vázquez-Patiño Universidad de Cuenca
a) 8
b) 72
6192 c) 0
d) 36
public class Test {
6210 resultado = i;
}
}
274
Angel Vázquez-Patiño Universidad de Cuenca
10. Completar el siguiente método que imprime los elementos de una matriz bidi-
mensional (la matriz puede tener distinto número de elementos en cada fila).
6225 public static void imprime(int[][] a){
for(int i=0; i<a.length; i++){
for(int j=0; -------------; j++){
6228 System.out.print(a[i][j] + “ ”);
}
}
6231 }
275
Angel Vázquez-Patiño Universidad de Cuenca
}
6246 }
276
Angel Vázquez-Patiño Universidad de Cuenca
index ++;
}
a) La proposición es verdadera
b) La proposición es falsa
277
Angel Vázquez-Patiño Universidad de Cuenca
{
6300 int i, r, x;
i = n;
r = 1;
6303 x = a;
while (i > 0) {
if (i % 2 != 0) {
6306 r = r * x;
}
x = x * x;
6309 i = i / 2;
}
return r;
6312 }
17. * Dada las siguientes líneas de código del siguiente programa, identifique la
6318 salida correcta del mismo.
public static void main(String[] args) {
int arreglo[] = {2,7,8,9,4,5,2,6,8,9,3};
6321 String cadena ="";
cadena = cadena + "\nNumeros: ";
for(int i=0;i < arreglo.length;i++){
6324 if(arreglo[i]%2!=0){
cadena = cadena +" "+ arreglo[i];
}
278
Angel Vázquez-Patiño Universidad de Cuenca
6327 }
System.out.println(cadena);
}
a) 2 8 5 7 9
b) 2 2 4 6 8
6342 c) 7 9 5 9 3
d) 2 9 9 5 3
6351 a) 4 4 7
b) 5 3 4
c) 0 8 2
6354 d) 6 3 1
279
Angel Vázquez-Patiño Universidad de Cuenca
a) Líneas desde la 2 a 7
b) Líneas desde la 2 a 6
6366 c) Línea 4
d) Líneas desde la 1 a 8
280
Angel Vázquez-Patiño Universidad de Cuenca
contador = contador + 2;
}
6387 }
a) cadenas
b) cade
6399 c) cadena
d) de
contador = 2;
6408 limite = 10;
do {
6411 switch (contador % 2) {
case 0:
281
Angel Vázquez-Patiño Universidad de Cuenca
Lenguaje C
int main() {
6429 int a = 4, b = 1, x;
do{
a += 2;
6432 b++;
}while(a<=b);
a += 3;
6435 b += 2;
a = a+b%2+a%3;
x = a/b;
6438 if(x>b){
b = b+4;
282
Angel Vázquez-Patiño Universidad de Cuenca
a = b%3;
6441 x = a%b;
}
b++;
6444 x = x*(10/8)+a%b;
for(int i=0; i<a; i=i+1)
printf("%d", a);
6447 printf("\n");
for(int i=0; i<b; i+=2)
printf("%d", b);
6450 for(int i=0; i<=b; i++)
printf("%d", x);
printf("\nVariable a: %d\n", a);
6453 printf("Variable b: %d\n", b);
printf("Variable x: %d\n", x);
}
6456 2. Pregunta
283
Angel Vázquez-Patiño Universidad de Cuenca
Interés
Beneficio de una inversión cuando los intereses producidos se deben solamente al ca-
pital inicial, i.e., los intereses no se agregan al capital productivo en cada periodo.
6462 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
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
6465 Es decir, al finalizar el tiempo de la inversión (10 años), la persona recibirá $120 de
interés; teniendo en total $220 (el capital inicial más los intereses).
6468 (31)
Interés compuesto
A diferencia del interés simple, el interés compuesto representa la acumulación de
6474 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
100 dólares a una tasa de interés compuesto anual (periodo anual) de 12%, a 10 años
284
Angel Vázquez-Patiño Universidad de Cuenca
6477 plazo, los intereses ganados al terminar cada año serían como se muestra en la
siguiente tabla.
Es decir, para cada periodo se calcula el interés y ese interés es aumentado al capital
6480 para el cálculo del interés del periodo siguiente.
(32)
6483 donde CF es el capital final, CI es el capital inicial, i es el interés compuesto por cada
periodo y n es el número total de periodos. Utilizando el ejemplo anterior se tendría
.
285
Angel Vázquez-Patiño Universidad de Cuenca
6492 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
interés se suma al capital para calcular el capital de la siguiente composición como si
6495 se tratase de interés compuesto.
(33)
6498 donde CF es el capital final, CI es el capital inicial, i es el interés por cada periodo y
m es el número de veces que dentro de cada periodo se vuelve a capitalizar el interés.
Utilizando los datos del ejemplo, se tendría .
6501 Se muestra a continuación otro ejemplo. Si se desea invertir $100 con un interés
anual nominal del 2%, ¿cuál es la cantidad de dinero que se tendrá al cabo de un año
si la ganancia trimestral es reinvertida?
6504 Estadística
Media ponderada
286
Angel Vázquez-Patiño Universidad de Cuenca
(34)
• 1 pie = 12 pulgadas
Unidades de capacidad
• 8 bits = 1 byte
6525 Tiempo
• 1 hora = 60 minutos
• 1 minuto = 60 segundos
287
Angel Vázquez-Patiño Universidad de Cuenca
Unidades de temperatura
6531 (35)
Círculo
r: radio
a: área
(36)
6537 (37)
Esfera
• r: radio
• v: volumen
(38)
6543 (39)
Cuadrado
Ángulos
6546 (40)
6549 (41)
288
Angel Vázquez-Patiño Universidad de Cuenca
(42)
6552 Logaritmos
(43)
6555 en donde, , ; , .
289
Angel Vázquez-Patiño Universidad de Cuenca
15. Referencias
Alcalde Lancharro, E., García López, M., 1992. Metodología de la programación:
aplicaciones en COBOL y PASCAL. McGraw-Hill, Madrid.
Carrera de caballos, 2016. . Cuenca, Ecuador.
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.
Tahan, M., 1985. El hombre que calculaba. Editorial Crear, Caracas, Venezuela.
Tanenbaum, A.S., Wetherall, D.J., 2012. Redes de computadoras, 5th ed. Pearson
Educación, México D.F., México.
290
Angel Vázquez-Patiño Universidad de Cuenca
Vázquez Gómez, J.B., 2012. Análisis y diseño de algoritmos, 1st ed. Red tercer
milenio, Tlalnepantla, México.
291