0% encontró este documento útil (0 votos)
9 vistas291 páginas

Ejercicios de Programación Python

El documento es un manual de ejercicios básicos de programación en Python, diseñado para estudiantes de la Universidad de Cuenca. Incluye fundamentos de programación, estructuras de control, funciones, manejo de datos y ejercicios prácticos. También se abordan conceptos teóricos y prácticos necesarios para resolver problemas computacionales.

Cargado por

ksofia.torres
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
9 vistas291 páginas

Ejercicios de Programación Python

El documento es un manual de ejercicios básicos de programación en Python, diseñado para estudiantes de la Universidad de Cuenca. Incluye fundamentos de programación, estructuras de control, funciones, manejo de datos y ejercicios prácticos. También se abordan conceptos teóricos y prácticos necesarios para resolver problemas computacionales.

Cargado por

ksofia.torres
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 291

Ejercicios Básicos de Programación Enfocados en 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

Área de un triángulo dadas las coordenadas de sus vértices..................................22


Puntos colineales.................................................................................................... 22
Movimiento rectilíneo uniforme.............................................................................23
Ponderación de calificaciones.................................................................................23
Sistema de ecuaciones lineales............................................................................... 23
*E6 Vuelto o cambio de una compra.....................................................................23
*E7 Transformación entre unidades de tiempo......................................................23
Cálculo de tiempo en horas, minutos y segundos...................................................24
Transformación de pies a metros........................................................................... 24
Unidades de capacidad.......................................................................................... 24
Cálculo de comisión............................................................................................... 24
Cálculo de descuento............................................................................................. 24
Calificación de programación.................................................................................25
Porcentaje de mujeres y hombres........................................................................... 25
*E8 Cálculo de la edad de una persona.................................................................25
Conversión de radianes a grados centesimales y viceversa.....................................26
*E9 Conversión de temperaturas de Grados Celsius a Fahrenheit y viceversa.......26
Área y volumen de una esfera................................................................................26
Longitud y área de un círculo................................................................................ 26
Solución de ecuaciones de segundo grado..............................................................26
Intercambio de valores de variables........................................................................26
Multiplicación de polinomios.................................................................................28
Caída de cuerpos en el vacío.................................................................................. 28
Ley de gravitación universal..................................................................................28
Logaritmo de un número en cualquier base...........................................................28
Trabajo conjunto...................................................................................................28
4. Estructuras de control............................................................................................ 29
Miscelánea............................................................................................................. 29
Estructura de decisión if........................................................................................46
Estructura de selección elif....................................................................................55
Estructura de repetición while............................................................................... 57
Estructura de repetición DO-WHILE....................................................................86
Estructura de repetición for.................................................................................100
5. Estructuras básicas de datos................................................................................ 124
Arreglos unidimensionales.................................................................................... 124
Arreglos bidimensionales...................................................................................... 135
6. Funciones.............................................................................................................174

2
Angel Vázquez-Patiño Universidad de Cuenca

Ámbito de las variables........................................................................................ 174


Miscelánea............................................................................................................ 174
*E134 Histograma................................................................................................ 179
Aritmética básica.................................................................................................179
Potenciación.........................................................................................................180
*E135 Dado sesgado............................................................................................. 180
E136 Aproximación de sinh-1................................................................................181
Función W de Lambert........................................................................................182
Factorial de un número con función recursiva......................................................182
Máximo común divisor y mínimo común múltiplo...............................................183
*E137 Peso adecuado...........................................................................................183
*E138 Raíces de una función............................................................................... 185
E139 El método de la bisección...........................................................................185
*E140 El método de Newton................................................................................ 185
Ordenamiento de n números................................................................................187
Búsqueda lineal.................................................................................................... 187
E141 Búsqueda binaria o dicotómica...................................................................188
Juego de dados entre dos.....................................................................................188
*E142 Método de la potencia...............................................................................189
*E143 Normas de una matriz...............................................................................192
7. Manejo de Caracteres y Cadenas......................................................................... 193
Miscelánea............................................................................................................ 193
*E145 Datos personales....................................................................................... 202
Estadísticas de texto............................................................................................203
*E146 Analizador de tweets.................................................................................204
Eliminación de n-ésima palabra...........................................................................205
Cifrado por sustitución........................................................................................206
Cifrado por transposición.....................................................................................207
*E147 Manejo de una cadena con información personal......................................208
*E148 Línea de comandos.................................................................................... 209
*E149 Mantenimiento de datos de personas........................................................212
8. Búsquedas............................................................................................................ 215
9. Ordenamiento.......................................................................................................219
Miscelánea 1......................................................................................................... 219
*E152 Menú, ordenamiento y búsqueda de registros............................................225
*E153 Calificaciones de estudiantes..................................................................... 226
Ordenamientos en matriz..................................................................................... 227

3
Angel Vázquez-Patiño Universidad de Cuenca

*E154 Manejo de datos de personas....................................................................229


10. Archivos.............................................................................................................. 231
Miscelánea............................................................................................................ 231
*E156 Calidad del aire en Cuenca.......................................................................232
*E157 JOIN estilo base de datos..........................................................................233
*E158 Distribuciones de edades de futbolistas.....................................................233
*E159 Remuestreo con ventana............................................................................ 234
*E160 El juego de las palabras cosidas................................................................238
*E161 El método de la trisección.........................................................................241
*E162 Metro Interstate Traffic Volume Data Set.................................................243
*E163 Formación de grupos de trabajo con archivos...........................................244
*E164 Concrete Compressive Strength Data Set.................................................246
*E165 I Congreso internacional de ingeniería civil...............................................249
11. Miscelánea de Ejercicios..................................................................................... 251
*E166 Combate de pokemones............................................................................. 251
Solución de un sistema de ecuaciones por matrices..............................................254
Conversión de un número en base diez a sistema binario.....................................254
Conversión de un número en base binaria a sistema en base diez........................254
Cálculo de las tres alturas de un triángulo dadas las longitudes de sus lados......254
Valor futuro de una inversión............................................................................... 254
Cálculo del capital inicial..................................................................................... 254
Cálculo de la tasa de interés................................................................................254
Cálculo del número de años.................................................................................254
Media, mediana y varianza de N datos................................................................254
Transformación de números decimales a romanos................................................254
E167 Dígitos de un número..................................................................................256
*E168 Pirámide invertida..................................................................................... 256
*E169 Cubos e impares........................................................................................ 256
*E170 Cantidad de dígitos fijo de números mostrados.........................................257
Algoritmo de Gauss y Método de eliminación de Gauss......................................258
Métodos de Jacobi y de Gauss-Seidel..................................................................258
E173 Dados.......................................................................................................... 258
Búsquedas y ordenación....................................................................................... 258
Interpolación........................................................................................................258
E174 Integración numérica...................................................................................259
Ecuaciones diferenciales ordinarias (EDO)..........................................................259
*E175 Resolución de EDOs con un método multipaso.........................................263

4
Angel Vázquez-Patiño Universidad de Cuenca

*E176 Tiempo de Respuesta Facebook................................................................264


12. Librería scipy......................................................................................................266
*E177 Distribución de estadístico........................................................................266
13. ¿Qué Hace el Algoritmo/Programa?..................................................................266
Lenguaje Java...................................................................................................... 272
Lenguaje C...........................................................................................................281
14. Fórmulas y Relaciones........................................................................................283
Interés..................................................................................................................283
Estadística...........................................................................................................285
Medidas de longitud.............................................................................................286
Unidades de capacidad.........................................................................................286
Unidades de capacidad de información................................................................286
Tiempo................................................................................................................. 286
Unidades de temperatura.....................................................................................287
Círculo................................................................................................................. 287
Esfera................................................................................................................... 287
Cuadrado............................................................................................................. 287
Ángulos................................................................................................................ 287
Ecuación de segundo grado..................................................................................287
Logaritmos...........................................................................................................288
15. Referencias.........................................................................................................289

5
Angel Vázquez-Patiño Universidad de Cuenca

El rey Artajerjes preguntó, cierta vez, a Hipócrates de Cos, médico famo-


so, cómo debía proceder para combatir de modo eficiente las epidemias
9 que diezmaban al ejército persa. Hipócrates respondió: “Obligad a todo
vuestro cuerpo médico a estudiar Aritmética. Al practicar el estudio de los
números y las figuras, los doctores aprenderán a razonar, desenvolviendo
12 sus facultades de inteligencia, y aquel que razona con eficacia es capaz de
hallar los medios para combatir cualquier epidemia.”

El hombre que calculaba

15 (Tahan, 1985, chap. V)

6
Angel Vázquez-Patiño Universidad de Cuenca

1. Introducción

Los algoritmos están ordenamos de acuerdo a su complejidad (sugerencias con res-


18 pecto al orden son bienvenidas). Los ejercicios que tienen un asterisco al comienzo
son ejercicios tomados en alguna prueba o examen de los cursos impartidos por Angel
Vázquez.

21 Las presentaciones utilizadas por Angel Vázquez para el curso de Programación 1 en


la Facultad de Ingeniería de la Universidad de Cuenca son:

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

1. * Indique qué es programar

2. La programación se puede definir como

48 a) el proceso de diseñar, codificar, depurar y mantener el código fuente de


programas de computador
b) la ejecución de programas de ordenador desde la línea de comandos
51 c) la instalación de programas en sistemas operativos desde la línea de co-
mandos
d) las anteriores respuestas no son correctas

54 3. Pregunta

Qué es un lenguaje de programación

1. * ¿Cuál de las siguientes opciones describe mejor la definición de un lenguaje


57 de programación?

a) Es un conjunto de símbolos y reglas utilizadas exclusivamente para el dise-


ño de circuitos electrónicos
60 b) Es un conjunto de instrucciones que permiten a los humanos comunicarse
directamente con el hardware de una computadora sin necesidad de inter-
mediarios
63 c) Es un sistema formal compuesto por una sintaxis y semántica específicas,
utilizado para escribir programas que pueden ser ejecutados por una com-
putadora para realizar diversas tareas
66 d) Es una colección de funciones predefinidas que permiten la manipulación
de datos gráficos y visuales en aplicaciones multimedia
e) Es una metodología para la encriptación de datos y la protección de la in-
69 formación en sistemas informáticos

2. ¿Cuál(es) de los siguientes son lenguajes de programación?

a) Eiffel

72 b) C#

8
Angel Vázquez-Patiño Universidad de Cuenca

c) Fortran

d) DOS

75 3. ¿Cuál es el código ASCII decimal de “nueva línea” (line feed)?

a) 10

b) 13

78 c) 32

d) Las anteriores respuestas no son correctas

4. ¿Cuál es el código ASCII decimal de la letra A mayúscula?

81 a) 32

b) 65

c) 97

84 d) 126

5. En un lenguaje débilmente tipado

a) Un valor de un tipo puede ser tratado como de otro tipo

87 b) Un valor de un tipo nunca puede ser tratado como de otro tipo

c) Un valor de un tipo puede ser tratado como de otro tipo siempre que se
realice una conversión de forma explícita

90 d) Las anteriores respuestas no son correctas

6. El lenguaje ensamblador se sitúa

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

c) No hay un lenguaje ensamblador

d) Las anteriores respuestas no son correctas

96 7. Se considera que el primer lenguaje de alto nivel fue

a) Ada

9
Angel Vázquez-Patiño Universidad de Cuenca

b) C

99 c) Fortran

d) Java

8. Imperativo, declarativo y orientado a objetos son

102 a) Modos de compilar el código fuente de un programa de ordenador

b) Modos de definir el pseudocódigo de un programa de ordenador

c) Paradigmas de programación

105 d) Las anteriores respuestas no son correctas

9. Pregunta

Modelización de problemas del mundo real

108 Del problema real a su solución por computadora

1. * Enumere las etapas de la resolución de un problema con computador.

2. * Describa las etapas de la resolución de un problema con computadora

111 Conceptos acerca de software

Variables y tipos de datos

1. int, char, float, string y boolean son

114 a) Funciones de acceso a datos

b) Instrucciones de acceso a datos

c) Sentencias de control

117 d) Tipos de datos

2. Una variable es (seleccione una o más opciones según corresponda)

a) La que almacena un valor entero

120 b) Una constante que varía su valor

10
Angel Vázquez-Patiño Universidad de Cuenca

c) A la que se le asigna un nombre

d) La que permite la entrada de datos

123 e) La que permite almacenar un valor capturado

Algoritmos

1. * Explique lo qué es un algoritmo. Dé un ejemplo sencillo.

126 2. * ¿Cuáles son las características que debe cumplir un algoritmo?

3. * Describa las características de un algoritmo.

4. * Describa qué es un algoritmo y liste (sólo mencionarlas) las formas de repre-


129 sentar los algoritmos que conozca. Dé un ejemplo sencillo de algoritmo indi-
cando qué es lo que hace.

5. * Respecto a los algoritmos, ¿qué tipo o tipos de representación existen? Desc-


132 ríbalos.

6. ¿Qué es un algoritmo?

a) Un conjunto de instrucciones o reglas bien definidas, ordenadas y finitas


135 que permiten realizar una actividad mediante pasos sucesivos que no gene-
ren dudas a quien deba realizar dicha actividad.

b) Es una igualdad entre dos expresiones algebraicas, denominadas miembros,


138 en las que aparecen valores conocidos o datos, y desconocidos o incógnitas,
relacionados mediante operaciones

c) Es una relación de variables que pueden ser cuantificadas para calcular el


141 valor de otras de muy difícil o imposible cálculo y que suministra una solu-
ción para un problema.

d) Las anteriores respuestas no son correctas.

144 7. * Un algoritmo es (seleccione una o más opciones según corresponda)

a) Secuencia de pasos

b) Secuencia de instrucciones

147 c) Produce un resultado deseado

11
Angel Vázquez-Patiño Universidad de Cuenca

d) Es finito

e) No siempre se alcanza un resultado

150 Ejercicios desde cero

1. E1 Algoritmo para preparar un margarita

2. Algoritmo para comprar los víveres de la semana

153 3. Algoritmo para construir una mesa

4. Algoritmo para calcular el área y el perímetro de un cuadrado

5. Algoritmo para calcular la superficie de una esfera. Vea la ecuación 38.

156 6. Algoritmo para calcular el volumen de una esfera. Vea la ecuación 39.

7. Algoritmo para calcular el IVA de una compra

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)

9. Algoritmo para calcular el cubo de un número

10. Algoritmo para pasar de grados sexagesimales a radianes

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.

14. Algoritmo para convertir minutos a días y horas

15. Sacar el promedio de las notas de 4 estudiantes

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

21. Algoritmo que muestre el valor absoluto de un número

183 22. Algoritmo que indica si un triángulo es equilátero, isósceles o escaleno dadas
las longitudes de sus lados.

23. Algoritmo para saber si una persona es mayor de edad o no.

186 24. Algoritmo para saber si un número es par o impar.

25. Algoritmo para saber cuál es el mayor de dos números.

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.

28. Algoritmo para encontrar el ángulo entre dos arreglos.

192 29. Algoritmo para encontrar la ecuación de una recta dados dos puntos de la
misma.

30. Algoritmo para pasar coordenadas polares a cartesianas.

195 31. Algoritmo para pasar coordenadas cartesianas a esféricas.

32. Algoritmo que calcule la suma de los números del 1 al 10.

Diagramas de flujo

198 1. * Describa qué es un diagrama de flujo. Dé un ejemplo sencillo (explique qué


hace el algoritmo del ejemplo).

2. * El Diagrama de Flujo se utiliza para mostrar gráficamente la solución de un


201 problema

13
Angel Vázquez-Patiño Universidad de Cuenca

a) Verdadero
b) Falso
3.

204 Pseudocódigo

1. * Describa qué es un pseudocódigo. Dé un ejemplo sencillo (explique qué hace


el algoritmo del ejemplo).

207 2. * El pseudocódigo permite escribir programas utilizando el lenguaje natural.

a) Verdadero

b) Falso

210 Prueba de escritorio

1. Con respecto a la prueba de escritorio se puede afirmar que (seleccione una o


más opciones según corresponda):

213 a) Es una herramienta útil que permite entender qué hace un algoritmo

b) Es una herramienta útil que permite entender qué hace un flujograma

c) Es una herramienta útil que permite entender qué hace un Lenguaje de


216 Programación

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

225 1. Documentar el código fuente es añadir suficiente información para explicar lo


que hace para que los humanos entiendan cuál es el objetivo de cada instruc-

14
Angel Vázquez-Patiño Universidad de Cuenca

ción o conjunto de instrucciones. En este contexto, ¿qué información, como


228 documentación, debe agregar al código un programa?

2. Pregunta

15
Angel Vázquez-Patiño Universidad de Cuenca

3. Programación Secuencial

231 Miscelánea 1

1. Escriba un algoritmo que imprima lo siguiente en pantalla:


E S T U D I A N T E
234 N
I
V
237 E
R
S
240 I N G E N I E R Í A
D
A
243 D

2. * Mostrar la salida en pantalla del siguiente algoritmo


Proceso cambioVariable
246 Definir a, b, c, aux Como Entero;
a <- 5;
b <- 6;
249 c <- 7;
aux <- a;
b <- a;
252 c <- b;
Escribir a, “ ”, b, “ ”, c;
FinProceso

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.

258 4. * Realice el diagrama de flujo, el pseudocódigo y la prueba de escrito-


rio del siguiente ejercicio: Pedir al usuario el ingreso de tres números (x, y y
z). Mostrar la suma de los tres números. Mostrar el resultado de x+y-z+100.
261 Mostrar el resultado de (x-y)(x+y).

5. Elabore un algoritmo que permita solucionar el siguiente enunciado: se ingre-


san 5 números por el teclado del computador, encontrar la suma y el promedio
264 de los números ingresados. Represente el algoritmo a través de un diagrama de
flujo, pseudocódigo; realice la prueba de escritorio.

6. El usuario ingresa la población de un país y su tasa de crecimiento anual (ex-


267 presada como un porcentaje; por ejemplo 10, 20, 60). Calcular la población de
ese país luego de uno, dos y tres años, asumiendo que la tasa de crecimiento
poblacional se mantiene constante.

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.

8. La jornada de trabajo normal mínima de un empleado durante una semana


comprende 40 horas. Por cada hora trabajada dentro de esas 40 horas un em-
285 pleado recibe el salario normal. Todas las horas trabajadas por encima de esas
40 horas se consideran horas extras. Por cada hora extra el empleado recibe
1.5 veces el salario que recibe por una hora normal. El usuario ingresa el sala-

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.

E2 Los cuatro cuatros

291 Refiérase al capítulo VII del libro El hombre que calculaba (Tahan, 1985).

Muestre el resultado de las siguientes operaciones:

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.

Cálculos espaciales básicos

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

En el análisis geográfico es habitual utilizar la denominada distancia de Manhattan


312 (vea la figura 6),

(2)

Desarrolle un algoritmo que calcule la distancia de Manhattan de dos puntos A(x 1,


315 y1) y B(x2, y2) dados.

* 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.

324 E5 Distancia ortogonal

Información tomada de Wikipedia (https://goo.gl/B5NTCj). En Geometría euclidia-


na, la distancia de un punto a una recta es la distancia más corta entre ese punto y
327 un punto de una línea o recta. Sean A un punto y D una recta (vea la figura 1), se
define la distancia entre A y D como la distancia mínima entre A y un punto M de
D.

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

Figura 1: Distancia ortogonal del punto A a la recta D.

Para calcular la distancia de un punto M, (x0, y0, z0), a un plano D, ax + by + cz + d


= 0, se tiene

336 (6)

Desarrolle un algoritmo que calcule la distancia ortogonal de un punto a una recta y


del mismo punto a un plano.

339 Distancia de un segmento de recta a un punto

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

345 x = x1 + u(x2 – x1)

y = y1 + u(y2 – y1)

donde u se obtiene de

348 (7)

20
Angel Vázquez-Patiño Universidad de Cuenca

Figura 2: Distancia de un segmento de recta AB a un punto C.

Desarrolle un algoritmo que calcule la distancia de un punto a un segmento de recta.


Los datos que se dan son las coordenadas de los puntos A, B y C (vea la figura 2).

351 Cálculo de interés

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.

360 Cálculo de potencia

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.

Figura 3: Circuito eléctrico.

Área de un triángulo dadas las longitudes de los lados

En geometría plana elemental, la fórmula de Herón da el área de un triángulo cono-


366 ciendo las longitudes de sus tres lados a, b y c (vea https://goo.gl/OEybZb):

donde s es el semiperímetro del triángulo:

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

• Desarrolle un algoritmo que dadas las longitudes de un hexágono regular, cal-


375 cule el área del polígono.

• Desarrolle un algoritmo para calcular la apotema y el perímetro de un hexá-


gono regular inscrito en una circunferencia de un radio dado.

378 Área de un triángulo dadas las coordenadas de sus vértices

El teorema 12 de la línea recta (Charles Lehmann, 1994, chap. 3) menciona: el área


del triángulo que tiene por vértices los puntos (x1, y1), (x2, y2) y (x3, y3) es

| |
x y1 1
1 1
x y2 1 ,
2 2
x3 y3 1

381 debiendo tomarse el valor absoluto del determinante.

Proponga un algoritmo para calcular el área de un triángulo dadas las coordenadas


de sus vértices.

384 Puntos colineales

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

Proponga un algoritmo para saber si tres puntos dados son colineales.

22
Angel Vázquez-Patiño Universidad de Cuenca

Movimiento rectilíneo uniforme

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

393 Fuente: (Pinales Delgado and Velázquez Amador, 2014)

1. Un estudiante realiza cuatro exámenes (/25) durante el semestre, los cuales


tienen la misma ponderación. Realice el pseudocódigo y el diagrama de flujo
396 que representen el algoritmo correspondiente para obtener el promedio de las
calificaciones obtenidas.

2. Realice el diagrama de flujo, y pseudocódigo que representen el algoritmo para


399 determinar el promedio que obtendrá un alumno considerando que realiza tres
exámenes (/100), de los cuales el primero y el segundo tienen una ponderación
de 25%, mientras que el tercero de 50%.

402 Sistema de ecuaciones lineales

1. Elaborar un algoritmo que resuelva un sistema de ecuaciones lineales con dos


incógnitas.

405 2. Elaborar un algoritmo que resuelva un sistema de ecuaciones lineales con tres
incógnitas.

*E6 Vuelto o cambio de una compra

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.

414 *E7 Transformación entre unidades de tiempo

Partiendo de una cantidad de tiempo medida en segundos, calcular el número de se-


manas, días, horas, minutos y segundos a los que corresponde.

23
Angel Vázquez-Patiño Universidad de Cuenca

417 Cálculo de tiempo en horas, minutos y segundos

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).

Transformación de pies a metros

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:

1. Determine la cantidad total de agua expresada en yardas cúbicas y en metros


432 cúbicos.

2. Determine las cantidades de agua dedicadas al riego y al consumo doméstico


expresadas en metros cúbicos y en pies cúbicos.

435 Cálculo de comisión

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.

1. Realice un algoritmo que calcule un descuento del 15%.

24
Angel Vázquez-Patiño Universidad de Cuenca

444 2. Realice un algoritmo que calcule un descuento d (%) ingresado por el usuario.

3. Realice un algoritmo que calcule un descuento d ingresado y muestre el des-


cuento aplicado y el total a pagar de la compra.

447 Calificación de programación

Un alumno desea saber cuál será su calificación final en la materia de programación.


Dicha calificación se compone de los siguientes porcentajes:

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)

• 30% de la calificación del examen final (/20)

453 • 15% de la calificación de un trabajo final (/20)

1. Realice un programa que calcule la calificación final de la materia si la califica-


ción final está dada sobre 20.

456 2. Realice un programa que calcule la calificación final de la materia si la califica-


ción final está dada sobre 30.

3. Realice un programa que calcule la calificación final de la materia si la califica-


459 ción final está dada sobre n ( ).

4. Realice un programa que calcule la calificación final de la materia si la califica-


ción final está dada sobre n ( ) y los porcentajes de los que se com-
462 pone la calificación final ya no son 55%, 30% ni 15%, sino que son ingresados
por el usuario ( , , ; ).

Porcentaje de mujeres y hombres

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.

*E8 Cálculo de la edad de una persona

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.

Conversión de radianes a grados centesimales y viceversa

*E9 Conversión de temperaturas de Grados Celsius a Fahrenheit y


477 viceversa

• 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.

La relación entre grados Celsius y grados Fahrenheit se muestra en la ecuación 35.

483 Área y volumen de una esfera

Dado el radio (r) de una esfera, realizar un programa que calcule la superficie (s) y el
volumen (v) de la misma.

486 Longitud y área de un círculo

Dado el radio (r) de un círculo, calcular la longitud (l) y el área (a).

Solución de ecuaciones de segundo grado

489 Dada la ecuación de segundo grado calcular las raíces o ceros de la


función. Vea la ecuación 42.

Intercambio de valores de variables

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

2. * E10 Escribir un programa (algoritmo) que permita leer cuatro variables: a,


b, c y d. Como resultado final se debe tener lo siguiente:

501 a) diagrama de flujo y prueba de escritorio

◦ en a queda el valor de b

◦ en b queda el valor de c

504 ◦ en c queda el valor de d

◦ en d queda el valor de a

b) pseudocódigo y prueba de escritorio

507 ◦ en a queda el valor de d

◦ en b queda el valor de c

◦ en c queda el valor de b

510 ◦ en d queda el valor de a

El número de variables que maneje su algoritmo no debe sobrepasar las 5 va-


riables.

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:

516 • var5 debe contener el valor de la variable var3

• var2 debe contener el valor de la variable var4

• var1 debe contener el valor de la variable var5

519 • var3 debe contener el valor de la variable var2

• var4 debe contener el valor de la variable var1

El número de variables que maneje su algoritmo no debe sobrepasar las 6 va-


522 riables.

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.

Caída de cuerpos en el vacío

(9)

528 Ley de gravitación universal

(10)

Logaritmo de un número en cualquier base

531 Elaborar un algoritmo que pueda calcular el logaritmo de un número en cualquier ba-
se. Vea la ecuación 43.

Trabajo conjunto

534 Considere primero los siguientes problemas de razonamiento:

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

Algunas de las preguntas fueron basadas en el libro de Vázquez Gómez (2012).

549 1. * E11 ¿Qué opción utilizaría para identificar que la variable x1 sea la mayor
de 5 variables?

a) If (x1>x2) AND (x1>x3) AND (x1>x4) AND (x1>x5):

552 b) If (x1>x2) OR (x1>x3) AND (x1>x4) OR (x1>x5):

c) If (x1>x2) AND (x1>x3) OR (x1>x4) AND (x1>x5):

2. * E12 ¿Cuál es el orden correcto para la resolución de un problema con com-


555 putadora?

a) Análisis, Diseño, Especificación, Escritura, Verificación

b) Análisis, Especificación, Diseño, Escritura, Verificación

558 c) Análisis, Diseño, Escritura, Especificación, Verificación

3. * E13 ¿A qué estructura de control se refiere la siguiente imagen?:

a) if

561 b) while

c) for

29
Angel Vázquez-Patiño Universidad de Cuenca

4. * ¿Cuál de las siguientes estructuras utilizaría, si se desconoce el número exac-


564 to de veces que se debe ejecutar un bloque de instrucciones?

a) if

b) for

567 c) while

5. * ¿Cuál de las siguientes estructuras utilizaría, si deseo repetir “n” veces un


bloque de acciones?

570 a) if

b) for

c) while

573 6. * E14 Explique qué estructura de repetición utilizaría si de antemano no su-


piera el número de iteraciones del bucle sino que se debe repetir cuando una
condición es verdadera. Dé un ejemplo sencillo (diagrama de flujo, explique
576 qué hace el algoritmo del ejemplo).

7. * Explique qué es un contador, para qué lo utilizaría. Dé un ejemplo sencillo


(diagrama de flujo, explique qué hace el algoritmo del ejemplo). Le resultará
579 de utilidad revisar el documento https://www.scribd.com/doc/307441670/
Fundamentos-de-programacion-estructuras-de-control

8. * ¿Cuál es la diferencia entre un acumulador y un contador? ¿Diría que el acu-


582 mulador es un caso particular de contador o que un contador es un caso parti-
cular de acumulador? Explique su respuesta.

9. * Explique qué estructura de repetición utilizaría si de antemano supiera el


585 número de iteraciones del bucle. Dé un ejemplo sencillo (diagrama de flujo, ex-
plique qué hace el algoritmo).

10. * Explique qué es un acumulador, para qué lo utilizaría. Dé un ejemplo senci-


588 llo (diagrama de flujo, explique qué hace el algoritmo del ejemplo).

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

a) un bucle (lazo) for

594 b) un bucle (lazo) if

c) un bucle (lazo) while

d) tanto la opción a y la opción b funcionarían

597 e) tanto la opción a y la opción c funcionarían

12. if, else, for y while son

a) Funciones de acceso a datos

600 b) Sentencias de control

c) Tipos de datos

d) Las anteriores respuestas no son correctas

603 13. * Un bucle, ciclo o lazo es

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

d) Todas las anteriores respuestas son correctas

14. ¿Qué muestra el siguiente algoritmo?


612 Algoritmo misterioso
x <- 1
z <- 0
615 Mientras x <= 10 Hacer
y <- x * x
Escribir y
618 z <- z + y
x <- x + 1

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;

Para i<-10 Hasta 100 Con Paso 10 Hacer


Si b1 = 1 Entonces
663 Si b2 = 1 Entonces
Escribir "**";
b2 <- 0;
666 Sino
Escribir "*";
b2 <- 1;
669 FinSi
b1 <- 3;
Sino
672 Escribir "*****";
b1 <- 1;

33
Angel Vázquez-Patiño Universidad de Cuenca

FinSi
675 FinPara
FinProceso

c)
678 Proceso estrellas3
b1 <- 1;
b2 <- 0;
681 c1 <- 10;

Mientras c1 <= 10 Hacer


Si b1 = 1 Entonces
684 Si b2 = 1 Entonces
Escribir "**";
b2 <- 0;
687 Sino
Escribir "*";
b2 <- 1;
690 FinSi
b1 <- 3;
Sino
693 Escribir "*****";
b1 <- 1;
FinSi
696 c1 <- c1 + 1;
FinMientras
FinProceso

699 16. ¿Cuál es el resultado de ejecutar el siguiente algoritmo?


Algoritmo algortimo_misterioso

34
Angel Vázquez-Patiño Universidad de Cuenca

cont <- "*"


702 l = 5*5-20
Para x <- 1 Hasta l Con Paso 1 Hacer
Escribir cont
705 cont <- cont+"*"
FinPara
Para i <- l Hasta 1 Con Paso -1 Hacer
708 cont <- ""
l <- l-1
Para j <- l Hasta 1 Con Paso -1 Hacer
711 cont <- cont+"*"
FinPara
Escribir cont
714 FinPara
FinAlgoritmo

17. * E15 Con respecto a las estructuras de repetición estudiadas en el curso, cuál
717 de las siguientes proposiciones es verdadera:

a) SIEMPRE es posible utilizar un for para obtener el mismo comportamien-


to iterativo que utilizando un while.

720 b) SIEMPRE es posible utilizar un while para obtener el mismo comporta-


miento iterativo que utilizando un for.

c) Existen SOLAMENTE algunos casos donde es posible utilizar un while pa-


723 ra obtener el mismo comportamiento iterativo que utilizando un for.

d) las opciones a, b y c son proposiciones verdaderas.

18. * ¿Qué muestra el siguiente algoritmo?


726 Algoritmo misterioso
Definir j Como Entero;
Para i = 3 Hasta 1 Con Paso -1 Hacer

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

19. * Realice la prueba de escritorio y muestre el resultado impreso del siguiente


programa.

738 20. ¿Qué muestra el siguiente algoritmo?


Proceso desconocido
i = 0;
741 Para i = (i + 1) hasta 10 Con Paso 1 Hacer
Mostrar i - 1;

36
Angel Vázquez-Patiño Universidad de Cuenca

i = i + 1;
744 FinPara
FinProceso

21. ¿Qué muestra el siguiente algoritmo?


747 Algoritmo WhatsTheOutput
n = 5
Mientras n>0
750 Si (n mod 2) = 0
suma = suma - 1
FinSi

753 suma = suma + 1


n = n - 1
mostrar suma
756 FinMientras
FinAlgoritmo

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

777 23. * ¿Qué muestra el siguiente algoritmo?


Algoritmo misterioso
Definir c1, c2 Como Entero;
780 Para i <- 8 Hasta 0 Con Paso -2 Hacer
c1 <- -1;
Repetir
783 Escribir Sin Saltar "X";
c1 <- c1 + 1;
Hasta Que c1 >= i

786 c1 <- 8 - i;
c2 <- 0;
Mientras c2 < c1 Hacer
789 Escribir Sin Saltar "O";
c2 <- c2 + 1;
Fin Mientras

792 Escribir " ";


Fin Para
FinAlgoritmo

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

822 28. Es el hecho de repetir la ejecución de una secuencia de acciones.

a) Array

39
Angel Vázquez-Patiño Universidad de Cuenca

b) Contador

825 c) Iteración

d) Bucle

29. Ejemplos de los ciclos repetitivos más comunes.

828 a) For, if-else, if-then-else

b) While, for, if-else

c) While, do-while y for

831 d) Do-while, for, if-then-else

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

31. Dado el siguiente pseudocódigo, ¿cuál será el valor final de la variable i?


Algoritmo valorDeI
840 i <- 1;
Leer n;
Mientras i < n Hacer
843 i <- i + 1;
Fin Mientras
FinAlgoritmo

846 a) 1 si el valor introducido es igual o menor que 0; el valor introducido menos


uno en cualquier otro caso

b) 1 si el valor introducido es igual o menor que 1; el valor introducido en


849 cualquier otro caso

40
Angel Vázquez-Patiño Universidad de Cuenca

c) 1 si el valor introducido es igual o menor que 1; el valor introducido más


uno en cualquier otro caso

852 d) Las anteriores respuestas no son correctas

32. * ¿Cuál es el resultado de ejecutar el siguiente algoritmo?


Algoritmo misterioso
855 a = 0
b = a+10
Según b Hacer
858 0:
Mientras b > a Hacer
Escribir a
861 b = b + a
Fin Mientras
10:
864 Si a = 0 Entonces
Escribir b + 11
b = b + a
867 FinSi
11:
Escribir '11'
870 De Otro Modo:
Escribir a
Fin Según
873 FinAlgoritmo

33. * ¿Cuál es el resultado de ejecutar el siguiente algoritmo? ¿Cuál sería el resul-


tado si se reemplaza la primera instrucción (fila = 5) por fila = 4?
876 Algoritmo misterioso
fila = 5

41
Angel Vázquez-Patiño Universidad de Cuenca

Mientras fila >= 1 Hacer


879 columna = 1
Mientras columna <= 10 Hacer
Si (fila Mod 2) = 0 Entonces
882 Escribir Sin Saltar "<"
Sino
Escribir Sin Saltar ">"
885 FinSi
columna = columna + 1
FinMientras
888 fila = fila - 1
Escribir ""
FinMientras
891 FinAlgoritmo

34. * ¿Cuál es el resultado de ejecutar el siguiente algoritmo?


Algoritmo misterioso
894 n = -1
Mientras n <= 3 Hacer
Si (n >= 0)
897 Si (n = 2)
Escribir "uno"
FinSi
900 Sino
Escribir "dos"
FinSi
903 n = n + 1
FinMientras
Escribir "tres"

42
Angel Vázquez-Patiño Universidad de Cuenca

906 FinAlgoritmo

35. ¿Cuál es el resultado de ejecutar el siguiente algoritmo?


Proceso algoritmo_misterioso
909 definir a Como Entero;
definir b Como Entero;
definir x Como Entero;
912 a<-4;
b<-0;
Repetir
915 a<-a+2;
b<-b+1;
Hasta Que a>b;
918 a<-a+3;
b<-b+2;
a<-a+b%2+a MOD 3;
921 x<-trunc(a/b);
Si (x>b) entonces
b<-b+4;
924 a<-b mod 3;
x<-a MOD b;
Finsi
927 b<-b+1;
x<-x*trunc(10/8) + a mod b;
Escribir "el valor de la variable a es : ", a;
930 Escribir "el valor de la variable b es : ", b;
Escribir "el valor de la variable x es : ", x;
FinProceso

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

936 c) El algoritmo opcion_C

37. * Seleccione la(s) respuesta(s) correcta(s) respecto a las instrucciones de repe-


tición. La instrucción do-while es similar a la instrucción while, la diferencia es
939 que:

a) El do-while evalúa su expresión al inicio y while lo hace al final al final

b) El do-while evalúa su expresión al final y el while lo hace al inicio

942 c) El while se ejecuta por lo menos una vez

d) El do-while se ejecuta por lo menos una vez

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

948 c) El algoritmo opcion_3

39. Para el diagrama de flujo mostrado a continuación

a) Escribir el pseudocódigo correspondiente

951 b) Realizar la prueba de escritorio

c) Mostrar cual sería la salida en pantalla

45
Angel Vázquez-Patiño Universidad de Cuenca

40. Pregunta

954 Estructura de decisión if

Miscelánea

1. E16 Implemente un script que indique si un número dado es par o impar. Vea
957 https://goo.gl/SRuAY2

2. Escriba un algoritmo que indique si un número dado es positivo, negativo o


nulo (i.e., igual a cero).

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).

963 4. Mostrar un menú con las opciones Archivo, Buscar y Salir:


Menú
[1] Archivo
966 [2] Buscar
[3] Salir

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.”.

5. Dados tres números diferentes, indicar si se ingresaron en orden ascendente,


descendente o sin ningún orden. Luego, analice el caso en el que los números
975 ingresados puedan ser repetidos (e.g., 1, 1, 5; 5, 5, 5; 0, 0, -2; 5, 5, 5).

6. Implemente un script para verificar si tres valores dados corresponden a las


longitudes de los tres lados de un triángulo.

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.

8. Escriba un algoritmo para ingresar los lados de un triángulo y verificar si es


981 un equilátero, isósceles o escaleno. Puede darse el caso que el usuario ingrese
valores de lados que no corresponden a un triángulo; validar eso.

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.

12. Elabore un algoritmo que permita solucionar el siguiente enunciado: se ingre-


990 san 5 números por el teclado del computador, encontrar el número mayor, el
número menor, la suma y el promedio entre número mayor y el menor. Repre-
sente el algoritmo a través de un diagrama de flujo, pseudocódigo; realice la
993 prueba de escritorio.

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.

1017 E17 Índice de masa corporal

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)

El IMC indica una de las siguientes categorías:

1023 • Bajo peso: IMC < 18.5

• Normal: 18.5 ≤ IMC < 25

• Sobre peso: 25 ≤ IMC < 30

48
Angel Vázquez-Patiño Universidad de Cuenca

1026 • Obesidad: IMC ≥ 30

Programe una calculadora de IMC que pida el peso y talla de una persona e indique
la categoría de IMC.

1029 Nota alfabética

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:

Nota numérica Nota alfabética

[0; 10,5) Insuficiente

[10,5; 11) Suficiente

[11; 15) Bien

[15; 18) Notable

[18; 20] Sobresaliente

1032 Día de la semana

Se pide un número de la semana entre 1 y 7 (1 es domingo) al usuario y se presenta


el nombre del día.

1035 Estación del año

Se pide un número de mes entre 1 y 12 al usuario y se presenta a qué estación del


año pertenece.

1038 Divisibilidad de dos números

Dados dos números n1 y n2:

• Realizar un programa que indique si el número n2 es divisor del número n1.

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.”

Aritmética básica con 3 números

• Escriba un algoritmo que dados tres números indique si el tercero es el resulta-


1047 do de la suma del primero y el segundo.

• Escriba un algoritmo que dados tres números indique si el tercero es el resulta-


do de la resta entre los dos primeros: 1) el primero menos el segundo y 2) el
1050 segundo menos el primero.

• Escriba un algoritmo que dados tres números indique si el tercero es el resulta-


do de la multiplicación del primero por el segundo.

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.

* E18 Incentivo por producción

1059 Se tiene registrada la producción (unidades) logradas por un operario a lo largo de la


semana (lunes a sábado). Elabore un algoritmo que indique si el operario recibirá in-
centivos sabiendo que el promedio de producción mínimo es de 100 unidades. Realice
1062 el diagrama de flujo, el pseudocódigo y la prueba de escritorio.

Posición del menor de n números

1. Determine el menor valor de 2 números diferentes, indicando además en qué


1065 orden fue ingresado (i.e., si fue el primer número o el segundo). Por ejemplo, si
los números ingresados fueran: 14, 19. El resultado debe ser: “El menor valor
ingresado fue 14 y corresponde al 1° número ingresado”.

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:

Puntaje original Factor


0 0
[1, 5] 6
[6, 8] 9
[9, 10] 10
1083 Para un tiro realizado determine el puntaje alcanzado aplicando el factor que le co-
rresponde.

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.

Número de cifras de un número

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

Número con ceros a la izquierda


1095 Diseñe un programa que ingrese un número entero positivo que no tenga más de 4
cifras y lo imprima completando con ceros por la izquierda de tal manera que
siempre se ve con 4 cifras. Por ejemplo, si el número ingresado fuera 18, el resultado
1098 deberá ser 0018. Si el número ingresado no fuera correcto debe imprimir un mensaje
de error.

Promoción en una papelería

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:

1104 • Compra menos que 12, ningún obsequio.

• 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.

1113 Saldos y pagos mínimos

Fuente: (Pinales Delgado and Velázquez Amador, 2014, p. 92)

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

1125 • Se pide a un usuario 2 números y se muestran en orden ascendente.

• Se pide a un usuario 3 números y se muestran en orden descendente.

• Se pide a un usuario 4 números y se muestran en el orden que quiera el usua-


1128 rio.

Restricción de ingreso

Un programa que permita ingresar solamente el 1 y el 0.

1131 Vocales o consonantes

El usuario puede ingresar un carácter y se debe indicar si el carácter es vocal, conso-


nante, número u otro.

1134 Conversión de unidades de masa

Dada la masa expresada en Kg transformar a otra unidad de acuerdo a un menú. El


menú tiene las siguientes opciones:

1137 1. Hectogramos

2. Gramos

3. Decigramos

1140 4. Centigramos

5. Miligramos

Mayor y menor de 10 números

1143 El usuario ingresa 10 números y el programa muestra el menor y el mayor de los nú-
meros ingresados.

* E19 Pares o nones

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

1149 1. El computador elige pares o nones con la misma probabilidad y lo muestra en


pantalla.
2. El computador hace su elección del 1 al 5 (“mostrar” uno a cinco dedos) y no
1152 lo muestra en pantalla.
3. El usuario hace su elección del 1 al 5 y lo ingresa mediante el teclado.
4. El computador muestra en pantalla la suma de las dos elecciones e indica
1155 quién ganó. Si la suma es par, gana el que haya quedado con la opción pares;
si la suma es impar, gana el que haya quedado con la opción nones.

Notas:

1158 En el lenguaje de programación C rand()%N genera un número aleatorio entero en


el intervalo [0, N). srand(time(NULL)) inicializa la semilla del generador de nú-
meros pseudoaleatorios. Para usar rand(), srand() y time(), se necesita impor-
1161 tar las librerías stdlib.h y time.h.

En el lenguaje de programación Python podría utilizar la librería random para gene-


rar valores enteros aleatorios mediante la función randint. Por ejemplo, si se quiere
1164 generar valores aleatorios en el rango [-2, 5], se usaría import random; print(random.-
randint(-2, 5))

54
Angel Vázquez-Patiño Universidad de Cuenca

Estructura de selección elif

1167 Miscelánea

1.

2.

Meses, de números a letras

El programa solicita el ingreso de un número que representa un mes y lo escribe en


1170 letras. Si el número ingresado es mayor que 12 o menor que 1, el programa envía el
mensaje “¡ERROR! No existe tal mes.”. En caso contrario, si el número ingresado fue
1, se imprimirá en pantalla “Enero”, si el número ingresado fue 2, se imprimirá “Fe-
1173 brero”, etc.

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:

1179 • Acuario: enero 21 - febrero 20


• Piscis: febrero 21 - marzo 20
• Aries: marzo 21 - abril 20
1182 • Tauro: abril 21 - mayo 20
• Géminis: mayo 21 - junio 20
• Cáncer: junio 21 - julio 20
1185 • Leo: julio 21 - agosto 20
• Virgo: agosto 21 - septiembre 20
• Libra: septiembre 21 - octubre 20
1188 • Escorpión: octubre 21 - noviembre 20
• Sagitario: noviembre 21 - diciembre 20
• Capricornio: diciembre 21 - enero 20

55
Angel Vázquez-Patiño Universidad de Cuenca

1191 Total de ventas

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:

• ecu, sma, mas: descuento 5%.


1197 • ecu, sma, fem: descuento 4%.
• ecu, med, mas: descuento 7%.
• ecu, med, fem: descuento 9%.
1200 • ecu, lar, mas: descuento 10%.
• ecu, lar, fem: descuento 12%.
• ext, sma, mas: descuento 4%.
1203 • ext, sma, fem: descuento 5%.
• ext, med, mas: descuento 9%.
• ext, med, fem: descuento 7%.
1206 • ext, lar, mas: descuento 12%.
• ext, lar, fem: descuento 10%.
Mostrar el número de clientes nacionales, el número de clientes extranjeros, número
1209 de tallas sma, med y lar, número de hombres, número de mujeres, e importe total por
todas las compras.

56
Angel Vázquez-Patiño Universidad de Cuenca

Estructura de repetición while

1212 Miscelánea

1. * Realice la prueba de escritorio para el siguiente algoritmo e indique cuál es


el resultado que se obtiene.
1215 Algoritmo misterioso
Definir A, B Como Entero;
Leer A;
1218 Leer B;
Mientras (A<>B) Hacer
Si (A>B) Entonces
1221 A <- A-B;
SiNo
B = B–A;
1224 FinSi
FinMientras
Mostrar A;
1227 FinAlgoritmo

2. E20 Implemente un script que muestre los números divisores de un número


positivo dado. Por ejemplo, los números divisores del 8 son 1, 2, 4 y 8.

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).

4. * E22 Escriba un programa que calcule la siguiente serie:

El primer valor es un número aleatorio en el intervalo [2, 10] 1. El segundo va-


1236 lor, y los otros que le siguen, son iguales a la suma de los divisores del valor

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

anterior en la serie (se incluye el uno y el mismo número). Se debe especificar


el número N de términos de la serie.

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.

5. * E23 Escriba un programa que calcule una serie de la siguiente forma: 1, 2, 3,


6, 11, 20, …. Los N primeros términos deben ser generados en forma aleatoria,
1245 en el intervalo [1, 9] (en el ejemplo, N=3). El siguiente valor se calcula de la
suma de los N previos valores (en el ejemplo, 1 + 2 + 3 = 6; 2 + 3 + 6 = 11,
etc.). Se debe especificar N y un número máximo de valores de la serie M
1248 (M≥N, validar). N debe ser un número en el intervalo [1, 5] (validar).

A continuación se muestran ejemplos de ejecución para que pueda validar su


programa:
1251 N: 5 M: 5 N: 3 M: 9
4 1 0 4 6 8 4 1 13 18 32 63 113 208

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

6. En la feria del hogar se ha encontrado una tienda que vende al contado y al


crédito en 6, 12, 18, 24 mensualidades sus artefactos: televisores, refrigerado-
1263 ras, hornos micro hondas. Se desea saber en cualquier momento cuántas ven-

58
Angel Vázquez-Patiño Universidad de Cuenca

tas se han realizado al contado, cuántas al crédito en 6, cuantas al crédito en


12, cuántas al crédito en 18, cuántas al crédito en 24 mensualidades.

1266 7. Una persona va de compras N veces a un supermercado donde le obsequian un


chocolate por cada vez que compra más de $5. Se desea saber cuántos chocola-
tes ha ganado en las N veces que compró.

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

1275 9. Se ponen a la venta las entradas para un partido de fútbol internacional. El


precio de la entrada depende de la tribuna: tribuna norte y sur cuesta $25, tri-
buna este cuesta $45 y tribuna oeste cuesta $65. Diseñe un algoritmo que con-
1278 trole la venta de entradas a fin de poder saber la cantidad de personas que
asisten a cada tribuna, la cantidad total de personas (asistencia) y el monto
total recaudado por la venta de todas las entradas (recaudación).

1281 10. Pregunta

E24 Números de n a m

1. Hacer un programa que imprima los números enteros del 1 al 5.


1284 2. Hacer un programa que imprima los números enteros desde 1 a n (n > 1).
3. Hacer un programa que imprima los números enteros desde n a 1 (n < 1).

4. Hacer un programa que imprima los números enteros de n a m (n < m).

1287 5. Hacer un programa que imprima los números enteros de m a n (n < m).

6. Implemente un script que imprima los números enteros de m a n. Por ejemplo,


si m = 1 y n = 4, el resultado será 1, 2, 3, 4; si m = 4 y n = 1, el resultado
1290 será 4, 3, 2, 1; si m = 5 y n = 5, el resultado será 5.

E25 Ingreso de n números

1. Implemente un script que lea exactamente cuatro números.

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

E26 Cuadrado de números menores a n

Pedir al usuario un número entero n y presentar los números al cuadrado desde 1


1296 hasta n.

E27 Números pares e impares del 1 al 100

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].

E28 Contador de números impares

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.

1305 Contador de pares e impares

Implemente un script que, luego de leer 10 números, cuente el número de números


pares e impares ingresados.

1308 Conteo de frases

Introducir tantas frases como queramos y contarlas. Siempre se pregunta al usuario si


desea ingresar más frases (Sí o No).

1311 E29 Acumulador del 1 al 100

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

E30 Suma de números pares e impares del 1 al 10000

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

E31 Suma y promedio de n números

1320 1. Pedir 5 números al usuario y mostrar la suma y promedio de los números in-
gresados.

2. Preguntar al usuario cuántos números va a ingresar. Ingresar los n números y


1323 mostrar la suma y promedio de los n números ingresados.

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.

Ingreso de números mientras sean positivos

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.

E32 Cantidad de números ingresados

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ó.

E33 Contador de familias según número de miembros

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.

E34 Ingreso de valores hasta cumplir una condición

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

E35 Codificación de caracteres

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

E36 Longitud y área de un círculo: validación

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.

E37 Medias aritmética y geométrica

1362 Se sabe que la media geométrica y la media aritmética se calculan mediante las si-
guientes fórmulas:

• MedG = RaízN-ésima(num1  num2  num3  ...  numN)


1365 • MedA = (num1 + num2 + num3 + ... + numN) / N
Implemente un script que lea N valores, calcule ambas medias e imprima la que sea
menor. Si las dos medias son iguales, se debe mostrar un mensaje que lo indique.

1368 E38 Múltiplos de n


1. Mostrar los múltiplos de 3 comprendidos entre los números 1 y 15 (inclusivo).
2. Contar los números múltiplos de 3 comprendidos entre los números 1 y 15.

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).

E39 Mayor y menor de una serie de números


1. Imprimir el mayor de una serie de cinco números ingresados por el usuario.
1377 2. Imprimir el menor de una serie de cinco números ingresados por el usuario.
3. Preguntar al usuario cuántos números va a ingresar. Leer los n números. Im-
primir el mayor y el menor de los n números ingresados.
1380 4. Ingresar números positivos e imprimir el número mayor y el número menor. El
ingreso de los números positivos termina cuando se ingresa un número negati-
vo o el cero.

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

El gobierno ha implementado como parte de su programa social, un subsidio familiar


1389 bajo la siguiente reglamentación:

• 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.

Validación: haga una siguiente versión de su programa en donde se indique cuando


1398 el usuario ingresa un valor incoherente; si se ingresa un valor incoherente, el progra-
ma termina en ese momento.

63
Angel Vázquez-Patiño Universidad de Cuenca

* E41 Factura

1401 Desarrolle un algoritmo que realice la facturación de productos, considerando que se


realiza la compra de N productos, que cada producto tiene un precio de venta X, y
que hay algunos productos que se les impone el 14% del IVA. El programa deberá te-
1404 ner las siguientes opciones de menú:

1. Registro de ítems: ingreso de los precios de los N productos indicando si se les


aplica o no el IVA.
1407 2. Facturación: muestra el valor total a pagar y el descuento realizado.
3. Salir

Para calcular el descuento: si el valor total es mayor a 100 dólares se realizará un


1410 descuento del 5% sobre el monto total. Si el valor total es mayor a 200 dólares se rea-
lizará un descuento del 10% sobre el monto total.

E42 Repetición de series

1413 1. Imprimir 5 veces la serie de números del 1 al 6.


1 2 3 4 5 6
1 2 3 4 5 6
1416 1 2 3 4 5 6
1 2 3 4 5 6
1 2 3 4 5 6

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

*E43 Números con vocales1

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-

1 Ejercicio tomado en el examen de suspensión de la asignatura de Programación orientada al


cálculo científico, semestre marzo-agosto de 2024.

65
Angel Vázquez-Patiño Universidad de Cuenca

tituya con A, el 3 con E, el 5 con I, el 7 con O y el 9 con U, i.e., 00000, 0000A,


1458 00002,… , UUUUO, UUUU8, UUUUU.

Encuesta a familias

Realice un programa que permita hacer la siguiente encuesta:

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.

E44 Conteo de votos

Leer 550.000 votos otorgados a 3 candidatos (voto={1, 2, 3}) a alcalde de Cuenca e


1467 imprimir el número del candidato y su cantidad de votos.

* E45 Contador de mayores de edad

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.

E46 Interés compuesto

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.

Vea periodos de interés compuesto: http://goo.gl/VByZsr

Promedio de edad en escuela

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

Considere primero los siguientes problemas de razonamiento:

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.

E47 Tirada de dados


• Simular cien tiradas de dos dados y contar las veces que entre los dos suman
1506 10.
• Simular cien tiradas de tres dados y ver cuál es la suma que mayor frecuencia
tiene.

1509 Triángulo de números


Dado un número n, visualizar un triángulo de la siguiente manera:

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

Número de días entre dos fechas

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.

*E48 Reloj de 24 horas1

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.

1530 E49 Número de dígitos de un número entero

El usuario ingresa un valor entero no mayor a 10 millones. Separar el número en sus


dígitos y mostrarlos según el siguiente ejemplo para el número 5432:
1533 Número: 5432
Número separado:
2 unidades
1536 3 decenas
4 centenas
5 miles

1539 E50 Valor relativo de un número

El usuario ingresa un entero positivo. Descomponer dicho entero en potencias de 10 y


mostrarlo según el siguiente ejemplo (tenga en cuenta que el entero ingresado puede
1542 tener un número arbitrario de dígitos):
Número: 5432

5 × 10^3 = 5000
1545 4 × 10^2 = 400
3 × 10^1 = 30

1 Ejercicio tomado en la prueba 1 de la asignatura de Programación orientada al cálculo científico,


semestre septiembre 2024 - febrero 2025.

69
Angel Vázquez-Patiño Universidad de Cuenca

2 × 10^0 = 2
1548 ----
5432

E51 Separación de dígitos de un número entero

1551 Nota: se sugiere desarrollar antes los ejercicios 29 (pág. 60), 49 (pág. 69) y 50.

Dado un número entero positivo,

1. Imprima cada uno de los dígitos por separado.

1554 2. Imprima la suma y el producto de todos sus dígitos.

3. Imprima el mínimo, promedio y máximo de todos sus dígitos.

*E52 Números reversibles1

1557 Nota: se sugiere desarrollar antes el ejercicio 51 (pág. 70).

Si sumamos los guarismos de 256 obtenemos 13, que elevado al cuadrado da


169; la suma de las cifras de este número es 16, cuyo cuadrado nos reproduce,
1560 precisamente, 256. Por ese motivo los calculistas llaman reversible al número
256. Existe, pues, entre los números 13 y 16 curiosa relación, que podría ser lla-
mada “amistad cuadrática”. Realmente, si los números hablasen, podríamos oír
1563 la siguiente conversación: El dieciséis diría al trece:

“Quiero ofrecerte mi homenaje, amigo. Mi cuadrado es 256, cuya suma de gua-


rismos es 13.”

1566 Y el trece respondería:

“Agradezco tu bondad y quiero retribuirla en la misma forma. Mi cuadrado es


169, cuya suma de guarismos es 16”.

1569 El hombre que calculaba

(Tahan, 1985, chap. VI)

1. Dado un número entero positivo, indique si es reversible o no.

1 Ejercicio tomado en la prueba 1 de la asignatura de Programación orientada al cálculo científico,


semestre septiembre 2024 - febrero 2025.

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.

*E53 Números amigos1

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.

(Tahan, 1985, chap. XIII)

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.

E54 Simple random walks

Random walks (https://goo.gl/k4SwIu) es una formalización matemática de la tra-


1590 yectoria que resulta de hacer sucesivos pasos aleatorios. Por ejemplo, la ruta trazada
por una molécula mientras viaja por un líquido o un gas y el camino que sigue un
animal en su búsqueda de comida.

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.

Luego de realizado el algoritmo, revise el ejercicio llamado E91 Random walks.

E55 Factorial de un número

1599 El factorial de un número se calcula de la siguiente manera:


1 Ejercicio tomado en el examen de suspensión de la asignatura de Programación orientada al
cálculo científico, semestre septiembre 2024 - febrero 2025.

71
Angel Vázquez-Patiño Universidad de Cuenca

Por ejemplo, el factorial de 5 es

1602 Elabore un algoritmo que calcule el factorial de un número entero positivo.

E56 Suma y promedio de factoriales

Nota: antes de desarrollar este ejercicio, desarrolle el ejercicio 55 (página 71).

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.

Se pide representar el algoritmo a través del diagrama de flujo, pseudocódigo y rea-


lizar la prueba de escritorio.

1611 Ejemplo:

A=2

B=8

1614 Números contenidos entre A y B son: 3, 4, 5, 6, 7 de donde 4 y 6 son números pares.

Se calcula el factorial de 4! = 24 y de 6! = 720. La suma de los 2 factoriales es 24 +


720 = 744, el promedio es 744/2 = 372.

1617 E57 Series y sumatorias

• Hallar la sumatoria de la serie

hasta que la sumatoria sea mayor a un número dado.

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.

• Indicar cuál es el valor de la siguiente sumatoria, sumando los términos hasta


1623 que el último término sumado sea menor a 0.0001.

• E58 Sume los primeros 100 números de . Luego, dado un valor de ,

sume los primeros números de la sumatoria.

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

• * E59 Ingresados dos valores enteros, n y m, donde n es mayor que m (vali-


1635 dar), calcular la sumatoria de los n primeros términos. Debe elaborar el algo-
ritmo para realizar la potencia y el factorial.

Puede comprobar que su algoritmo funcione usando los siguientes ejemplos.


1638 Con n=5 y m=2 el resultado es 713.66; con n=7 y m=3 el resultado es
482443.625; con n=9 y m=4 el resultado es 815457334.7.

• * E60 Escriba un programa que calcule el valor del coseno de un ángulo 𝑥


1641 usando la suma de la serie infinita

Los datos a ingresar son: 1) el número de elementos de la serie a usar (validar


que sea >1) y 2) el valor del ángulo 𝑥 en radianes. Verifique el valor obtenido

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))).

*E61 Índice de masa corporal

1650 Antes de desarrollar este ejercicio revise el ejercicio E17 de la página 48.

El índice de masa corporal (IMC) se calcula con la fórmula , donde el


peso está dado en kilogramos y la talla en metros. Implemente un algoritmo que pida
1653 una talla en el intervalo [0.72, 2.51] y calcule el peso en kilogramos y libras (1 kg =
2.20462 lbs) de una persona que esté con un IMC normal, i.e., 18.5 ≤ IMC < 25. Su-
ponga que el valor ingresado es siempre un número real y valídelo para que esté en el
1656 intervalo requerido. Los valores de peso deben ser calculados en intervalos de 0.5,
desde el valor de IMC 18.5 hasta 25. Los valores de peso deben ser redondeados a dos
decimales antes de imprimirlos en pantalla de forma tabular. La impresión en panta-
1659 lla de forma tabular se muestra en ejemplos de ejecución, luego del siguiente párrafo.

Además, genere un gráfico que muestre el peso en kilogramos (eje horizontal) vs el


IMC (eje vertical). La barra que indica el peso debe ser “dibujado” utilizando tantos
1662 asteriscos como el peso indique. Para esta parte, redondee el peso a cero decimales
para saber cuántos asteriscos imprimir. El título del “gráfico” debe ser “Peso adecua-
do para una persona de X metros”, donde X hace referencia a la talla ingresada por
1665 el usuario. Ejemplos de ejecución del algoritmo que debe implementar se muestran a
continuación para que quede claro lo pedido (lo que está en negrita son valores ingre-
sados mediante el teclado).
1668 Talla [m]: 0.71
¡ERROR! La talla debe estar en el intervalo [0.72, 2.51].

Talla [m]: 2.52


1671 ¡ERROR! La talla debe estar en el intervalo [0.72, 2.51].

Talla [m]: 1.45

74
Angel Vázquez-Patiño Universidad de Cuenca

IMC Peso [kg] Peso [lb]


1674 18.5 38.9 85.75
19.0 39.95 88.07
19.5 41.0 90.39
1677 20.0 42.05 92.7
20.5 43.1 95.02
21.0 44.15 97.34
1680 21.5 45.2 99.66
22.0 46.26 101.97
22.5 47.31 104.29
1683 23.0 48.36 106.61
23.5 49.41 108.93
24.0 50.46 111.25
1686 24.5 51.51 113.56
25.0 52.56 115.88

Peso adecuado para una persona de 1.45 metros


1689 IMC
18.5 ***************************************
19.0 ****************************************
1692 19.5 *****************************************
20.0 ******************************************
20.5 *******************************************
1695 21.0 ********************************************
21.5 *********************************************
22.0 **********************************************
1698 22.5 ***********************************************
23.0 ************************************************
23.5 *************************************************

75
Angel Vázquez-Patiño Universidad de Cuenca

1701 24.0 **************************************************


24.5 ****************************************************
25.0 *****************************************************
1704 Peso [kg]

Talla [m]: 1.7

IMC Peso [kg] Peso [lb]


1707 18.5 53.46 117.87
19.0 54.91 121.06
19.5 56.35 124.24
1710 20.0 57.8 127.43
20.5 59.24 130.61
21.0 60.69 133.8
1713 21.5 62.13 136.98
22.0 63.58 140.17
22.5 65.02 143.36
1716 23.0 66.47 146.54
23.5 67.91 149.73
24.0 69.36 152.91
1719 24.5 70.8 156.1
25.0 72.25 159.28

Peso adecuado para una persona de 1.7 metros


1722 IMC
18.5 *****************************************************
19.0 *******************************************************
1725 19.5 ********************************************************

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

El número de combinaciones que podemos formar tomando m elementos de un con-


1740 junto con n elementos es:

(12)

Implemente un algoritmo que pida el valor de n y m y calcule el valor de la combina-


1743 toria. Hay que tomar en cuenta que el valor de n a de ser mayor o igual que m (vali-
dar). Puede comprobar la validez de su algoritmo introduciendo los valores n=15,
m=10; el resultado es 3003.

1746 * E63 Dibujo de cuadrado

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 * *
*****

* Dibujo de cuadrado y rombo

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
********** ************ ******
**** **** ***** ***** ** **
*** *** **** **** * *
** ** *** *** * *
* * ** ** ** **
* * * * ******
** ** * *
*** *** ** **
**** **** *** ***
********** **** ****
***** *****
************

*E64 Triángulos hacia la izquierda y derecha1

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.

1 Ejercicio tomado en el examen final de la asignatura de Programación orientada al cálculo


científico, semestre marzo-agosto de 2024.

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

*******
******
*****
****
***
**
*

*E65 Triángulos hacia la arriba y abajo1

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
* * *
*** *** ***
********** ***** *****
*** ******* *******
* ****************** *********
******* ***********
***** **************************
*** ***********
* *********
*******
*****

1 Ejercicio tomado en el examen de suspensión de la asignatura de Programación orientada al


cálculo científico, semestre marzo-agosto de 2024.

80
Angel Vázquez-Patiño Universidad de Cuenca

***
*

1776 *E66 Onda cuadrada

Información de onda cuadrada tomada de Wikipedia.

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.)

1. Considere la siguiente onda cuadrada.

1782 Escriba un programa que genere la onda mostrada en la figura anterior. Los
datos que deben especificarse son:

N: representa las dimensiones de un “diente”, debe ser entero.


1785 M: representa el número de “dientes” a dibujar, debe ser entero.
2. Considere la siguiente onda cuadrada.

81
Angel Vázquez-Patiño Universidad de Cuenca

Escriba un programa que genere la onda mostrada en la figura anterior (igual


1788 al del primer punto pero se presenta de forma vertical). Los datos que deben
especificarse son:

N: representa las dimensiones de un “diente”, debe ser entero.


1791 M: representa el número de “dientes” a dibujar, debe ser entero.

Nota: las líneas se pueden representar imprimiendo asteriscos.

*E67 Onda triangular

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

06 05 04 03 02 01 103 102 101 100 099 098


07 104

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

Fórmula del binomio

1803 El miembro izquierdo de la ecuación 13 se puede calcular realizando la sumatoria del


miembro derecho (la fórmula para x+y está en la ecuación 14):

(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).

E68 Triángulo de Pascal

Antes de realizar este ejercicio revise el ejercicio E62 Combinatoria de la página 77.

84
Angel Vázquez-Patiño Universidad de Cuenca

1812 El triángulo de Pascal es una representación de los coeficientes binomiales ordenados


en forma triangular. Su construcción está relacionada con los coeficientes binomiales
según la regla de Pascal. Si

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.

Su construcción es de la siguiente manera:

1. se comienza en el número 1 centrado en la parte superior

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.

Una animación del proceso se puede ver en https://goo.gl/J0hSES. La figura 4 mues-


1827 tra un ejemplo de la construcción del triángulo de Pascal para un número de filas
f=7.

Figura 4: Triángulo de pascal para f=7.

85
Angel Vázquez-Patiño Universidad de Cuenca

Desarrolle un algoritmo que permita visualizar un triángulo de Pascal dado el valor


1830 de f. Represente el algoritmo con un diagrama de flujo y pseudocódigo; además, reali-
ce las pruebas de escritorio necesarias para verificar el correcto funcionamiento del al-
goritmo. Finalmente, implemente el algoritmo.

86
Angel Vázquez-Patiño Universidad de Cuenca

1833 Estructura de repetición DO-WHILE

Miscelánea

1. Realice la tabla de multiplicar de un número entero n entre m1 y m2 (e.g.,


1836 n=3, m1=4 y m2=6: 3x4, 3x5, 3x6). Valide que n sea positivo y que m1 <
m2.

2. El promedio ponderado se calcula en dos pasos:

1839 a) Obteniendo la suma de multiplicar las calificaciones alcanzadas en las asig-


naturas cursadas por su número de créditos correspondientes (ver ejemplo).

b) Dividir la suma anterior entre la suma de los créditos.

1842 El anterior es un ejemplo con 3 asignaturas, recuerde que los estudiantes pue-
den llevar un número variable de asignaturas.

Se leerán el código de la asignatura, la calificación y los créditos. Se terminará


1845 de leer cuando el código sea “9999”.

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.

Desarrolle un algoritmo que calcule e imprima:

• El número de asignaturas cursó el estudiante


1851 • La suma de los créditos y el promedio ponderado
3. * Realice la prueba de escritorio del siguiente pseudocódigo e indique cuál es
la salida en pantalla del mismo.

87
Angel Vázquez-Patiño Universidad de Cuenca

1854 Algoritmo misterioso


Definir c1, c2 Como Entero;
Para i <- 8 Hasta 0 Con Paso -2 Hacer
1857 c1 <- -1;
Hacer
Escribir Sin Saltar '*';
1860 c1 <- c1 + 1;
Mientras Que c1 < i
c1 <- 8 - i;
1863 c2 <- 0;
Mientras c2 < c1 Hacer
Escribir Sin Saltar '0';
1866 c2 <- c2 + 1;
Fin Mientras
Escribir ' ';
1869 Fin Para
FinAlgoritmo

4. Indique cuál es el resultado de la ejecución del siguiente algoritmo:


1872 Algoritmo misterioso
fila = 5;

Mientras fila >= 1 Hacer


1875 columna = 1;

Mientras columna <= 10 Hacer

Si (fila Mod 2) = 0 Entonces


1878 Escribir Sin Saltar “<”;

88
Angel Vázquez-Patiño Universidad de Cuenca

Sino
Escribir Sin Saltar “>”;
1881 FinSi

columna = columna + 1;
FinMientras

1884 fila = fila – 1;


Escribir “”;
FinMientras
1887 FinAlgoritmo

¿Cuál sería el resultado de la ejecución si la primera instrucción (fila = 5) es


cambiada por fila = 4?

1890 5. * En el siguiente algoritmo reemplace la estructura de control WHILE por la


de DO-WHILE y realice la prueba de escritorio para verificar que ambos algo-
ritmos (ambas versiones) hagan lo mismo.
1893 Algoritmo misterioso
Escribir "Ingrese un número:";
Leer num;
1896 mr <- 0;
Mr1 <- num;

rt <- (mr+Mr1)/2;

1899 Escribir "Ingrese precisión:";


Leer precision;

Mientras (rt*rt < num-precision) O (rt*rt > num+precision) Hacer


1902 Si rt*rt < num Entonces

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

6. * Realice la prueba de escritorio del siguiente código en C y seleccione la res-


1914 puesta correcta.
#include <stdio.h>
int main(int argc, char **argv)
1917 {
int i=0;
do {
1920 --i;
printf("%d", i);
i++;
1923 }while(i >= 0);
return 0;
}

1926 ¿Cuántas veces el bucle incluido en el código fuente se ejecutará?

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

* E69 Operador potencia

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

1. Escriba un programa que pida al usuario ingresar un número entero e imprima


1938 dos enteros, raíz y potencia, de manera tal que 0<potencia<6 y raízpotencia
es igual al entero ingresado por el usuario. Si no existe ese par de enteros, se
debe imprimir un mensaje adecuado debido a tal causa.1

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

1 Tomado del libro de Guttag (2016).

91
Angel Vázquez-Patiño Universidad de Cuenca

Factores de un número entero

*E71 Factorial

1950 Escriba un programa que lea un número n y calcule su factorial (


). No se debe usar ninguna función predeterminada de
ningún lenguaje de programación (e.g., factorial de MATLAB). El programa debe
1953 validar que sólo se ingresen números enteros positivos y el cero; en caso que no in-
grese un número entero positivo o el cero, avisa del error y vuelve a pedir el número.

*E72 Números perfectos

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

• Un número primo es un entero cuyos divisores enteros son sólo 1 y el mismo


1965 número. Por ejemplo, el número 7: es divisible sólo para 1 y para 7. Elabore
un algoritmo que lea un número entero positivo n (validar que se positivo; su-
ponga que el número ingresado siempre es entero) y muestre en pantalla si ese
1968 número es o no primo. Sólo si es primo, deberá sacar la suma del factorial de
cada uno de los números entre 1 y n (sin incluir 1 ni n). Por ejemplo: si se in-
gresa el número cuatro, el algoritmo debe indicar que no es primo y además
1971 presentar la suma de (8).

• Comprobar si un numero mayor o igual (validar) que la unidad es primo. El


programa sigue pidiendo números mientras no sean primos.

92
Angel Vázquez-Patiño Universidad de Cuenca

1974 Cálculo de comisiones

Ordenamientos

• Proponga un algoritmo para ordenar ascendente y descendentemente dos nú-


1977 meros.

• Proponga un algoritmo para ordenar ascendente y descendentemente tres nú-


meros.

1980 Juego: adivina el número

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

Simular el lanzamiento de una moneda al aire e imprimir si ha salido cara o cruz. El


1986 momento que adivina, termina el algoritmo.

Análisis de frecuencias en lanzamientos de un dado

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 ***

2010 Número de cifras de un número


Diseñe un programa que lea un número entero (positivo o negativo) y determine si
tiene 1, 2, 3, 4 o más de 4 cifras imprimiendo lo que corresponda.

2013 *E73 Progresión geométrica

Una progresión geométrica es una secuencia en la que el elemento se obtiene multipli-


cando el elemento anterior por una constante denominada razón. Así,
2016 es una progresión geométrica con razón igual a 3. Escriba un programa que lea un
número inicial (5 en el ejemplo dado) y la razón (3 en el ejemplo dado) y genere la
progresión geométrica. El programa terminará después de presentar un término ma-
2019 yor que un cierto límite dado (por ejemplo 133 para la progresión que se presenta
aquí).

*E74 Números de la serie Fibonacci

2022 • La sucesión de Fibonacci es la siguiente: Es decir


, , y cada uno de los siguientes términos se calculan sumando los
dos anteriores: . Escriba un programa que genere dicha suce-
2025 sión, presentando en pantalla cada uno de los términos. El programa termina-
rá después de presentar un término mayor que un cierto límite dado (por
ejemplo 33 para la serie que se presenta aquí).

2028 • Elabore un algoritmo que muestre los términos de la serie de Fibonacci que
sean menores a 100000:

Ejercicios relacionados: 132.

94
Angel Vázquez-Patiño Universidad de Cuenca

2031 *E75 Aproximación de π/4 1

Inspirado en https://youtu.be/r6sGWTCMz2k?t=385. Sabiendo que

, (15)

2034 se puede calcular una aproximación de sumando un número suficientemente grande


de términos de la sumatoria. Implemente un script que imprima en pantalla el núme-
ro mínimo necesario de términos de la sumatoria para que la diferencia, en valor ab-
2037 soluto, entre y la aproximación sea menor a 0.000001.

*E76 Aproximación de π

Dado que es la suma de la serie

2040 , (16)

se puede calcular una aproximación de sumando un número dado de términos,


para un número suficientemente grande de .

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)

2046 donde es la aproximación actual y es la aproximación anterior.

Aproximación del logaritmo natural


El logaritmo natural de se puede aproximar con la serie

2049 (18)

sumando un número suficientemente grande de términos.

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.

1 Ejercicio tomado en el examen final de la asignatura de Programación orientada al cálculo


científico, semestre septiembre 2024 - febrero 2025.

95
Angel Vázquez-Patiño Universidad de Cuenca

*E77 Aproximación del arco seno

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:

1. Escriba el pseudocódigo de un algoritmo para encontrar el valor de la función


2058 arco seno de x dado el valor de n y x. Debe utilizar la estructura de repetición
Mientras o Repetir Hasta.

2. Validar que el usuario ingrese valores de x hasta que cumpla la condición.

2061 3. No debe utilizar ninguna función ni ^ o ! para calcular la potencia o el facto-


rial. Esto significa que debe desarrollar los algoritmos para realizar esos cálcu-
los.

2064 4. Para el cálculo de la potencia utilice la estructura de repetición Para.

5. Para el cálculo del factorial debe utilizar la estructura de repetición Mientras.

6. La serie de Taylor nos da el valor del arco seno de x en radianes, el algoritmo


2067 que usted proponga debe mostrar el valor en radianes y en grados sexagesima-
les. Tenga en cuenta que 1 radián es igual a 57.2958 grados sexagesimales.

*E78 Dibujo de triángulos

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).

Número en cualquier base

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.

2112 Menú: revisión de número

Desarrolle un algoritmo (pseudocódigo y diagrama de flujo) que presente un menú


con las siguientes opciones:

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

2118 2. Analizar el Número: muestra el número transformado en binario, indica si es


par o impar, si es primo o no es primo

3. Terminar el Algoritmo

2121 Menú: permutaciones, variaciones y combinaciones

Presente el siguiente menú en pantalla


-----------------------------
2124 Combinatoria y probabilidades
-----------------------------
1. Permutaciones
2127 2. Variaciones
3. Combinaciones
4. Salir

2130 Opción [1-4]: _

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

2142 Opción [1-4]: _

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.

En el menú principal, si el usuario indica la opción 2 (Variaciones) se debe presentar


2151 el submenú
--------------------------------------
Variaciones
2154 --------------------------------------
1. Sin repetición (n!/(n-p)!)
2. Con repetición (n^p o n1!n2!n3!...)
2157 3. Volver

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.

2166 En el menú principal, si el usuario indica la opción 3 (Combinaciones, n!/(p!(n−p)!))


se piden los datos necesarios, se realizan los cálculos y se presentan los resultados;
después de presentar los resultados, se vuelve al menú principal. Cuando se escoja es-
2169 ta opción indique con texto cuándo se utiliza esa operación y si es necesario ponga
un ejemplo de uso.

100
Angel Vázquez-Patiño Universidad de Cuenca

Estructura de repetición for

2172 Miscelánea

1. Haga la prueba de escritorio e indique cuál es el resultado en pantalla de eje-


cutar el siguiente algoritmo:
2175 Algoritmo misterioso
Definir suma, i, j Como Entero;
Para i <- 1 Hasta 4 Con Paso 1 Hacer
2178 Para j <- 3 Hasta 0 Con Paso -1 Hacer
suma <- i * (10^i) + j;
Escribir Sin Saltar suma, " ";
2181 Fin Para
Escribir " ";
Fin Para
2184 FinAlgoritmo

2. *E79 Haga la prueba de escritorio e indique cuál es el resultado en pantalla de


ejecutar el siguiente algoritmo:
2187 Algoritmo misterioso
n = 7;
Para i = 0 hasta n Con Paso 1
2190 Para j = n-i hasta 1 Con Paso -1
Mostrar Sin Saltar "#";
FinPara
2193 Mostrar "";
FinPara
FinAlgoritmo

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.

6. El departamento de control de tránsito desea saber, de los autos que entran a


2208 control, cuántos tienen sello municipal de cada color (amarillo, rosado, rojo,
verde y azul). Conociendo el último dígito de la placa de cada automóvil se
puede determinar el color de la calcomanía utilizando la siguiente tabla:

Dígitos Color de la calcomanía


1o2 Amarilla
3o4 Rosa
5o6 Roja
7o8 Verde
9o0 Azul
2211 Desarrolle un algoritmo que permita ingresar las placas de automóviles. Se ter-
mina de registrar autos cuando se ingresa una placa xxx. Todos los días se
presenta al menos un automóvil a revisión.

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

daria, carrera técnica, profesional y posgrado. Desarrolle el algoritmo que le


permita calcular esa información.

2226 9. En una tienda de descuento se efectúa una promoción en la cual se hace un


descuento sobre el valor de cada producto comprado según el color de la bolita
que el cliente saque al pagar en caja. Si la bolita es de color blanco no se le
2229 hará descuento alguno, si es verde se le hará un 10% de descuento, si es amari-
lla un 25%, si es azul un 50% y si es roja un 100%. Determinar la cantidad fi-
nal que el cliente deberá pagar por su compra. Se sabe que sólo hay bolitas de
2232 los colores mencionados.

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.

12. Una estación climática proporciona un par de temperaturas diarias (Max y


2241 Min). El par para terminar la lectura será cuando ambas temperaturas sean
igual a 0. Una lectura de (9 y 9) es un error y no forma parte de los días de
lectura. Calcular e imprimir el promedio de las temperaturas que son válidas.
2244 Imprimir cuántos días se proporcionaron datos y el número de veces que hubo
error (lectura 9 y 9).

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.

16. Desarrollar un algoritmo que realice lo siguiente:

2262 a) Pida números comprendidos entre 1 y 16, inclusivo. Validar.

b) Si la suma de los N primeros números ingresados es múltiplo del cuatro, se


mostrará un rectángulo de lados 4 y N de la siguiente manera (en el ejemplo
2265 la suma fue múltiplo de cuatro con N=3)
xxxx
x x
2268 xxxx

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

d) El algoritmo termina cuando se haya dado lo del literal b y c.

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

tren numeradas ascendentemente desde arriba hasta el centro de la X y desde


2295 el centro de la X hacia abajo, en forma descendente.

19. *E82 Considere el siguiente seudocódigo, y reemplace las instrucciones

De repetición: Mientras (condición) hacer por una Repetir .. hasta (condi-


2298 ción), y viceversa.

De condición: Según (opción) hacer por la instrucción Si (condición) entonces.


Algoritmo proceso_complicado
2301 MAXIMO <- 200
contador <- 0
valor<-0
2304 repetir
mientras valor>MAXIMO o valor<=0 hacer
escribir "ingrese el número de datos a procesar:"
2307 leer valor
si (valor<0 o valor>MAXIMO)
Escribir "Valor debe estar en el rango 1-",MAXIMO
2310 FinSi
Fin mientras

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

2322 diagnostico(numero, valor)


FinMientras
verSiDivisores(numero)
2325 i<-i+1
fin mientras
2: verSiEsPositivo(numero)
2328 3:
verSiEsNegativo(numero)
De Otro Modo:
2331 Escribir "El número es cero"
FinSegun
cuenta<-cuenta+1
2334 Hasta Que cuenta>MAXIMO
Escribir "Desea repetir el proceso?"
leer usuarioDiga
2337 Hasta Que usuarioDiga="N"
FinAlgoritmo

20. Realice la prueba de escritorio del siguiente código en C y seleccione la res-


2340 puesta correcta.
#include <stdio.h>
int main(int argc, char **argv)
2343 {
int i = 10, j;
for(j=i==10; j<=10 ; j++)
2346 printf("\n%d", j);
return 0;
}

2349 ¿Cuántas veces se ejecutará el bucle incluido en el código fuente?

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

Signo zodiacal y número de suerte

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:

• 21/marzo - 20/abril Aries


2364 • 21/abril - 20/mayo Tauro
• 21/mayo - 20 junio Géminis
• 21/junio - 20/julio Cáncer
2367 • 21/julio - 20/agosto Leo
• 21/agosto - 20/septiembre Virgo
• 21/septiembre - 20/octubre Libra
2370 • 21/octubre - 20/noviembre Escorpión
• 21/noviembre - 20/diciembre Sagitario
• 21/diciembre - 20/enero Capricornio
2373 • 21/enero - 20/febrero Acuario
• 21/febrero - 20/marzo Piscis

Series y sumatorias

2376 • Genere la serie 1, 5, 3, 7, 5, 9, 7, …, 23.

• Genere la serie 5,10,15,20,25,30,35 … n.

• Si n=7 genere 7, 6, 5, 4, 3, 2 y 1.

1 Si necesita mayor explicación resuelva primero el ejercicio * Prueba del nueve de la


división (página 116).

108
Angel Vázquez-Patiño Universidad de Cuenca

2379 • * Desarrolle un algoritmo para resolver el siguiente problema; representar el


algoritmo con un diagrama de flujo y un pseudocódigo, y realizar la prueba de
escritorio.

2382 Encontrar el n-ésimo término de la serie

2, 3, 4, 7, 8, 15, 24, 60, …

Dado el primer término n0 = 2, el término ni es la suma de los divisores del


2385 término anterior (ni-1)

Ejemplos
N-ésimo término a mostrar: 5
2388 Término: 8

N-ésimo término a mostrar: 7


Término: 24

2391 • Pregunta

*E83 conteo de tiempo1

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).

*E84 Divisiones sucesivas de una serie de números

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

1 Ejercicio tomado en la prueba 1 de la asignatura de Programación orientada al cálculo científico,


semestre septiembre 2024 - febrero 2025.

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

2412 *E85 Impresión de patrones

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

2415 Menú: media, mayor y menor

Implemente un algoritmo que muestre el siguiente menú:


Menú

2418 1. Ingresar número


2. Mostrar media
3. Mostrar menor
2421 4. Mostrar mayor
5. Salir

Opción [1-5]:

2424 El usuario ingresa un número a la vez utilizando la opción 1. En cualquier momento,


después de ingresar al menos un número (validar), se puede mostrar la media, el ma-
yor o el menor de los números ingresados (con al menos un número ingresado ya se
2427 puede usar las opciones 2-4). Una vez que escoge una de las opciones 1-4 y realiza la
acción pertinente, debe siempre volver al menú. La ejecución se termina si y sólo si se
escoge la opción 5.

2430 Manejo contable

Desarrolle un programa que permita manejar transacciones de una cuenta. El saldo


inicial de la cuenta es $0. El programa debe tener el siguiente menú:
2433 1. Depósito
2. Retiro
3. Saldo
2436 4. Salir

El programa debe solicitar al usuario que indique si desea realizar un depósito o un


retiro. Si el usuario elige hacer un retiro (opción 2 del menú), se solicita un valor y
2439 debe verificarse que haya saldo suficiente para retirar. De no ser así se envía un men-
saje al usuario notificando esa situación. Si hay saldo suficiente, se resta el valor in-
gresado al saldo. Si el usuario elige hacer un depósito (opción 1 del menú) se solicita
2442 un valor y ese valor se suma al saldo. Al final de cada transacción se vuelve al menú.

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.

2445 *E86 Factorización de trinomio

Realizar un algoritmo para factorizar un trinomio de la forma x 2 + bx + c sabiendo


que los factores serán (x+m)(x+n), en donde m y n son dos números enteros tales
2448 que (m×n) = c y (m+n) = b. Los valores b y c son los coeficientes del trinomio y
vienen dados por el usuario. Los valores b y c, para este ejercicio, serán siempre posi-
tivos (validar). El algoritmo debe terminar inmediatamente después de que encuentra
2451 una de las posibles soluciones. Además, se debe mostrar un mensaje si no es posible
factorizar el trinomio.

Ejemplo

2454 Ecuación: x2 + 7x + 12; b = 7, c = 12

Salida:

Los factores del trinomio x2 + 7x + 12 son: (x + 3)(x + 4)

2457 Ecuación: x2 + 6x + 10; b = 6, c = 10

Salida:

El trinomio x2 + 6x + 10 no se puede descomponer en factores.

2460 Cálculos con dígitos de un número

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!

Número a analizar: -188

112
Angel Vázquez-Patiño Universidad de Cuenca

¡El número debe ser positivo de más de dos dígitos!

2472 Número a analizar: 15423

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

2484 *E87 Serie de Leibniz

La serie de Leibniz o Gregory-Leibniz es una serie infinita cuya suma de términos


converge a π/4:

2487 (19)

Calcule una aproximación de con un error aproximado (i.e., igual o menor) de


0.0001. El error aproximado está dado por

2490 (20)

donde es la aproximación sumando n términos y es la aproximación su-


mando n−1 términos.

2493 *E88 Examen de manejo

Se estima la resolución del ejercicio en 27 minutos.

113
Angel Vázquez-Patiño Universidad de Cuenca

En uno de los paralelos de una escuela de conducción existen n estudiantes. No im-


2496 portan los nombres porque cada estudiante se identifica con un número ordinal de
acuerdo a su apellido. La persona que toma el examen final de manejo quiere que es-
tén dos estudiantes a la vez en el vehículo el día del examen; lo que desea es que el
2499 estudiante acompañante filme todo el examen del estudiante conductor para tener un
vídeo de evidencia. La persona que toma el examen desea tener una lista de todas las
posibles parejas que pueden haber del curso.

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)!.

A continuación se muestra un ejemplo de ejecución del algoritmo (con n=4)


Total de estudiantes: > 4
2508 Número total de parejas: 12
Pareja 1: {Conductor: 1, Acompañante: 2}
Pareja 2: {Conductor: 2, Acompañante: 1}
2511 Pareja 3: {Conductor: 1, Acompañante: 3}
Pareja 4: {Conductor: 3, Acompañante: 1}
Pareja 5: {Conductor: 1, Acompañante: 4}
2514 Pareja 6: {Conductor: 4, Acompañante: 1}
Pareja 7: {Conductor: 2, Acompañante: 3}
Pareja 8: {Conductor: 3, Acompañante: 2}
2517 Pareja 9: {Conductor: 2, Acompañante: 4}
Pareja 10: {Conductor: 4, Acompañante: 2}
Pareja 11: {Conductor: 3, Acompañante: 4}
2520 Pareja 12: {Conductor: 4, Acompañante: 3}

* Carrera de caballos

Simular una carrera de caballos. Pueden participar 2, 3, 4 o 5 caballos (validar). En


2523 cada turno un caballo puede avanzar dos o tres metros pero también puede no avan-
zar o incluso, por algún motivo, puede retroceder un metro. El caballo ganador es

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

Elabore un programa que indique si un número es un número de Armstrong. Un nú-


2556 mero es de Armstrong si la suma de los dígitos que lo componen elevados, cada uno,
al número de dígitos del número es igual al número analizado. Por ejemplo, 153 = 1 3
+ 53 + 33 = 1 + 125 + 27 = 153; 9474 = 9 4 + 44 + 74 + 44. El número ingresado de-
2559 be ser positivo (validar).

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

* Prueba del nueve de la división

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.

Si se cumple que D = d ´ c + r, la división está realizada correctamente.

*E89 Encontrando triángulos rectángulos

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

1) Hipotenusa: 5 Cateto 1: 3 Cateto 2: 4


2) Hipotenusa: 5 Cateto 1: 4 Cateto 2: 3
2577 3) Hipotenusa: 10 Cateto 1: 6 Cateto 2: 8
4) Hipotenusa: 10 Cateto 1: 8 Cateto 2: 6
5) Hipotenusa: 13 Cateto 1: 5 Cateto 2: 12
2580 6) Hipotenusa: 13 Cateto 1: 12 Cateto 2: 5
7) Hipotenusa: 15 Cateto 1: 9 Cateto 2: 12
8) Hipotenusa: 15 Cateto 1: 12 Cateto 2: 9

116
Angel Vázquez-Patiño Universidad de Cuenca

2583 9) Hipotenusa: 17 Cateto 1: 8 Cateto 2: 15


10) Hipotenusa: 17 Cateto 1: 15 Cateto 2: 8
11) Hipotenusa: 20 Cateto 1: 12 Cateto 2: 16
2586 12) Hipotenusa: 20 Cateto 1: 16 Cateto 2: 12

Para el valor máximo de 20 existen 12 tripletas que representan triángulos


rectángulos.

2589 *E90 Número triangular

Un número es triangular si al colocar N objetos en forma de triángulo, estos generan


un triángulo equilátero de lado M. El valor de M (longitud del lado) se calcula con la
2592 fórmula

( √ 8 N +1 ) − 1
M=
2

Crear un programa que solicite un número entero N al usuario, y solamente si el nú-


mero ingresado es triangular mostrar en pantalla el triángulo de lado M generado.
2595 Por ejemplo: el número 10 es un número triangular porque si colocamos 10 objetos en
forma triangular, éstos generan un triángulo equilátero de lado 4
*
2598 * *
* * *
* * * *

2601 La diagonal de Cantor

Ejercicio propuesto por René Estrella.

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.

E91 Random walks

2628 Antes de desarrollar este algoritmo, revise el algoritmo pedido en el ejercicio llamado
E54 Simple random walks.

Imagine un caminante aleatorio con eventos {0, 1} (en un tiempo t cualquiera: 0, no


2631 camina; 1, camina un paso) y probabilidad P(0) = 1-p , y P(1) = p. Realice un algo-
ritmo que imprima la trayectoria del caminante aleatorio hasta que haya dado n pa-
sos (no en los tiempos 1 al n sino hasta que haya logrado dar n pasos sin importar en
2634 cuántos tiempos).

*E92 Suma de dos números decimales

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

Número 2: 4794 Número 2: 5689 Número 2: 999


11 111 11
1325 789 99
+4794 +5689 + 999
---- ---- ----
6119 6478 1098

* Suma de dos números binarios

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.

*E93 Suma de números consecutivos

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:

Para N=10 la salida debe ser: 10 = 1+2+3+4

2652 Para N=7 la salida debe ser: 7 = 3+4

Raíz cuadrada de un número

Se desea conocer la raíz cuadrada de un número “n”, entero positivo (validar). No es


2655 posible utilizar la función SQRT (u otra cualquiera) para encontrar cualquier resulta-
do parcial de la solución. Se debe realizar la solución para el número indicado.

Los pasos para resolver la raíz cuadrada son los siguientes:

1. A partir de la cifra de las unidades, de derecha a

119
Angel Vázquez-Patiño Universidad de Cuenca

izquierda, se separan grupos de dos cifras. El primer


grupo que queda a la izquierda puede tener 1 o 2
cifras. En este caso tiene 1.
2. Se calcula la raíz cuadrada del número formado
por la cifra (o cifras) del primer grupo de la
izquierda (en este caso es 5). Su raíz cuadrada es 2
(no es 3 porque 3² = 9 y sería mayor a 5). Se escribe
en la casilla de la raíz y se resta su cuadrado del
número del primer grupo.

3. A la derecha del resto obtenido (número 1), se


baja el siguiente grupo de dos cifras (47) y, debajo
de la raíz (2), se escribe su doble (4).

4. Se busca la cifra más alta posible (en este caso es


3) que, añadida como cifra de las unidades al doble
de la raíz que hemos obtenido (4), cumpla que el
producto del número resultante (43) por esta misma
cifra (3), sea igual o menor que el resto anterior
(147). Truco*

5. Se resta el producto obtenido (“129”) del resto


(“147”) y se coloca la cifra hallada (“3”) en la raíz,
a continuación de la cifra que ya se tenía (“2”).

120
Angel Vázquez-Patiño Universidad de Cuenca

6. A la derecha del resto obtenido (18), se baja el


siguiente grupo de dos cifras (56) y, en la siguiente
casilla de la derecha, escribimos el doble de la raíz
(46) que se ha obtenido hasta ahora (23).

7. De nuevo se repite el paso 4: se busca la cifra más


alta posible (en este caso es 4) que, añadida como
cifra de las unidades al doble de la raíz que hemos
obtenido (46), cumpla que el producto del número
resultante (464) por esta misma cifra (4), sea igual o
menor que el resto anterior (1856). Truco*

8. Se repite el paso 5: se resta el producto obtenido


(1856) del resto que se tenía (1856) y, como en este
caso da 0 y no se tienen más grupos de dos cifras
qué bajar, se ha terminado de hallar la raíz.

121
Angel Vázquez-Patiño Universidad de Cuenca

2658 * E94 Aproximación de la integral de una función mediante el método de


Montecarlo1

Parte 1: generación de pares ordenados en un recinto dado

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)

Parte 2: conteo de puntos debajo de la gráfica de una función

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.

1 Ejercicio tomado en la prueba 1 de la asignatura de Programación orientada al cálculo científico,


semestre marzo-agosto de 2024.
2 Un recinto se puede entender como la unión de una región y la curva que delimita esa región.

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

5. Estructuras básicas de datos

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.).

1. ¿Cuál es una de las ventajas más importantes de usar un arreglo?

2700 a) Almacenar tipos de datos


b) Almacenar un conjunto de datos
c) Almacenar variables
2703 d) Almacenar constantes

2. Lea un arreglo de 10 números enteros y luego imprima los elementos en un or-


den inverso.

2706 3. Dado un arreglo de n números, presentar el valor de la función sinh-1 de cada


número.

4. Implemente un programa que genere aleatoriamente los sueldos de 200 em-


2709 pleados de una empresa en un arreglo y determine el menor sueldo, el mayor
sueldo, el sueldo promedio y el total a pagar por parte de la empresa.

5. Implemente un programa que ingrese los sueldos de N empleados de una em-


2712 presa en un arreglo con capacidad máxima para 100 empleados. Imprima lue-
go un listado de los sueldos superiores al sueldo promedio.

6. Implemente un programa que lea 5000 notas de un examen en un arreglo y de-


2715 termine: a) la nota promedio, b) la mayor nota, c) la menor nota, d) el núme-

125
Angel Vázquez-Patiño Universidad de Cuenca

ro de alumnos que comparten la menor nota y e) el número de alumnos que


comparten la mayor nota.

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.

2721 8. Implemente un algoritmo que lea un arreglo y a partir de él forme un segundo


arreglo, de tal forma que el primer elemento pase a ser el segundo, el segundo
pase a ser el tercero y así sucesivamente (el último pasa a ser el primer ele-
2724 mento).

9. Implemente un programa que lea dos arreglos de N valores enteros y determi-


ne un arreglo C tal que sus elementos vengan dados por: C(0) = A(0) + B(N-
2727 1), C(1) = A(1) + B(N-2), C(2) = A(2) + B(N-3), ..., C(N-1) = A(N-1) +
B(0). Imprima luego los tres arreglos en tres columnas paralelas, cada uno en
una columna.

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}

11. Implemente un algoritmo para insertar un dato en un arreglo en una posición


escogida por el usuario. Si la posición está ocupada, los datos se desplazan a la
2739 derecha para dar espacio al nuevo dato. Si el arreglo está lleno no se inserta el
dato y se muestra un mensaje.

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

B, que indica lo que se requiere comprar para mantener la existencia en inven-


tario.

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.

20. Hacer un programa que lea las calificaciones de un alumno en 10 asignaturas,


las almacene en un arreglo y calcule e imprima su media y mediana.

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.

23. Lea un arreglo de N elementos y luego imprima cuántos y cuáles elementos


2784 (i.e., número de índice) son múltiplos de 6.

24. Generar con números aleatorios un arreglo de 20 elementos, imprima la posi-


ción y el valor del elemento mayor almacenado en el arreglo.

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.

2799 28. Desarrolle un programa que genere aleatoriamente 50 números enteros en el


rango [-50, 50], sin que se pueda generar un mismo número más de una vez.
Estos números se deben almacenar en un arreglo y se debe calcular e imprimir
2802 la suma de los elementos de índice par y las de índice impar.

29. Desarrolle un programa que genere aleatoriamente 50 números enteros en el


rango [-50, 50], pudiéndose repetir hasta dos veces un mismo número. Estos
2805 números se deben almacenar en un arreglo, se lo debe invertir y se lo debe im-
primir (se debe imprimir el arreglo original y el invertido).

30. Desarrolle un programa que genere aleatoriamente 50 números enteros en el


2808 rango [-50, 50], pudiéndose repetir hasta tres veces un mismo número. Estos
números se deben almacenar en un arreglo y se deben mostrar el mayor y me-
nor número, y la frecuencia de estos.

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

rie). Luego, dar la opción al usuario de poder visualizar un elemento de la se-


2814 rie dado su número ordinal (los números ordinales comienzan desde uno). No-
ta: antes de realizar este ejercicio, realice el ejercicio 74 (pág. 94).

32. Genere un primer arreglo de 50 elementos con números aleatorios reales en el


2817 rango [1, 6]. Genere un segundo arreglo con 50 elementos con números aleato-
rios enteros en el rango [2, 7]. Genere un tercer arreglo donde se guarden los
resultados de elevar el elemento del primer arreglo al exponente indicado en el
2820 segundo arreglo; los cálculos se hacen con elementos con el mismo número de
índice. Muestre los arreglos de manera vertical en tres columnas, cada una pa-
ra cada arreglo:
2823 Base Exponente Potencia
arreglo11 arreglo21 arreglo11^arreglo21
arreglo12 arreglo22 arreglo12^arreglo22
2826 arreglo13 arreglo23 arreglo13^arreglo23
arreglo14 arreglo24 arreglo14^arreglo24
arreglo15 arreglo25 arreglo15^arreglo25

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.

2844 4. Concatenar en un cuarto arreglo los arreglos evenAngles y oddAngles.

*E97 Eliminación de duplicados

Fuente: (Deitel and Deitel, 2012, chap. 7).

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.

2853 Ordenamiento de n números

Dados n números en un arreglo, realizar la ordenación de los mismos tanto de forma


ascendente como descendente.

2856 Ángulo entre vectores

Dados dos vectores, encontrar el ángulo entre ellos. Dar los resultados en radianes y
en grados sexagesimales.

2859 Relleno de arreglo con números aleatorios

Generar un arreglo de 50 elementos enteros con las siguientes restricciones:

1. Los números aleatorios deben estar en el rango .


2862 es el décimo dígito de su cédula. Por ejemplo, si su cédula termina en 4, el
rango sería .

2. Siendo el componente i del arreglo (hay 50 componentes), ,


2865 . Esto quiere decir que ningún componente del arreglo se repetirá.

3. Puede darse el caso en el que el primer elemento generado de manera aleatoria


sea mayor a . En ese caso no se podrían llenar con valores
2868 todos los componentes del arreglo. Indicar si esto pasa y mostrar los valores de
los componentes generados.

130
Angel Vázquez-Patiño Universidad de Cuenca

Graficación de frecuencias

2871 • Simular el lanzamiento de un dado 100 veces. En un arreglo de seis elementos


guardar el número de veces que el dado salió con el número respectivo de índi-
ce del arreglo. Por último, mostrar la tabla de frecuencias y un gráfico de las
2874 mismas. Por ejemplo, si 20 veces salió 6, 30 veces salió 5, 10 veces salió 4, 5
veces salió 3, 10 veces salió 2, 25 veces salió 1, la tabla de frecuencias y el grá-
fico serían:
2877 TABLA
Valor Frecuencia
1 25
2880 2 10
3 5
4 10
2883 5 30
6 20

Gráfica
2886 1 *************************
2 **********
3 *****
2889 4 **********
5 ******************************
6 ********************

2892 • Simular el lanzamiento de dos dados al mismo tiempo en 100 ocasiones. En un


arreglo guardar el número de veces que la suma de los valores de los dados
salió con el número respectivo de índice del arreglo (el índice desde dos). Por
2895 último, mostrar la tabla de frecuencias y un gráfico de las mismas.

Criba de Eratóstenes

Fuente: (Deitel and Deitel, 2012, chap. 7).

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.

2. Comenzando con el índice 2 del arreglo, se determina si un elemento dado es


TRUE. Si es así, se itera a través de lo que queda del arreglo y se establece co-
2907 mo FALSE todo elemento cuyo índice es múltiplo del índice para el elemento
con valor TRUE. Entonces, se continúa el proceso con el siguiente elemento
con valor TRUE. Para el índice 2 del arreglo, todos los elementos más allá del
2910 elemento 2 en el arreglo, que tengan índices que sean múltiplos de 2 (índices 4,
6, 8, 10, etc.), serán establecidos como FALSE; para el índice 3 del arreglo, to-
dos los elementos más allá del elemento 3 en el arreglo, que tengan índices que
2913 sean múltiplos de 3 (índices 6, 9, 12, 15, etc.), serán establecidos como FALSE;
y así en adelante.

Cuando este proceso termina, los elementos del arreglo que tienen el valor TRUE in-
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.

2922 Algoritmo de Havel-Hakimi

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.

2928 * E98 Evaluación y generación de la gráfica de una función específica1

Parte 1: intervalo de la variable independiente

Genere una lista de números espaciados uniformemente en un intervalo específico del


2931 dominio de una función. Para generar la lista se da el inicio del intervalo, el fin del
intervalo y la cantidad de valores de la variable independiente que se generará desde
el inicio hasta el fin del intervalo, inclusivo. Por ejemplo, si el inicio del intervalo es -
2934 5, el fin del intervalo es 5 y la cantidad de valores es 21, se debe generar la siguiente
lista de 21 elementos.
[-5.0, -4.5, -4.0, -3.5, -3.0, -2.5, -2.0, -1.5, -1.0, -0.5, 0.0, 0.5, 1.0,
2937 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 4.5, 5.0]

Nota: la función linspace de la librería numpy hace exactamente lo que se pide en


esta parte; ¡NO UTILICE ESA FUNCIÓN!.

2940 Parte 2: evaluación de una función

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)

2946 Los valores de y de se deben mostrar con máximo dos decimales.

1 Ejercicio tomado en la prueba 1 de la asignatura de Programación orientada al cálculo científico,


semestre marzo-agosto de 2024.

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

Parte 3: generación de la gráfica de una función

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.

2. Genere e imprima una matriz de 4 filas y 5 columnas con números aleatorios


2988 entre 1 y 100.

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.

4. Desarrolle un programa que genere e imprima una matriz identidad de orden


N. Una matriz unitaria de orden N es la que tiene N filas y N columnas con
2994 todas sus componentes iguales a 0, excepto las de su diagonal principal, que
son iguales a 1.

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.

Ejercicios relacionados: 134.

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

Tabla 1: Matriz de 4 x 4. Se está tomando en cuenta que los índices de la


matriz comienzan en cero (como en el lenguaje de programación Java o C).

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.

8. Implemente un algoritmo que lea una matriz de n filas y m columnas y que


calcule la suma de los elementos de la diagonal principal.

3009 9. Implemente un algoritmo para obtener una matriz como el resultado de la res-
ta de dos matrices de orden N×M.

10. Implemente un algoritmo para determinar si una matriz es de tipo diagonal.


3012 Una matriz es de tipo diagonal si es una matriz cuadrada en la cual todos sus
elementos son cero, excepto los de la diagonal principal.

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:

a) Calcule el total de horas trabajadas a la semana para cada trabajador.


b) Calcule el sueldo semanal para cada uno de ellos.
3033 c) Calcule el total que pagará la empresa.
d) Indique el nombre del trabajador que labora más horas el día lunes.
e) Imprima un reporte con todos los datos anteriores.

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.

Nombre Lun Mar Mié Jue Vie Sáb Tot K


N Chófer 1 # km # km # km # km # km # km # km
N Chófer 2 # km # km # km # km # km # km # km
... ... ... ... ... ... ... ...
N Chófer n # km # km # km # km # km # km # km
17. Implemente un algoritmo que lea una matriz de C columnas y R filas. A partir
de ellas genere dos arreglos que contengan la suma de sus filas y la suma de
3048 sus columnas.

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.

19. Realice un algoritmo que a partir de la diagonal principal de una matriz de 5


por 5 elementos encuentre cuántos elementos tienen valor par y cuántos valo-
3054 res impares.

138
Angel Vázquez-Patiño Universidad de Cuenca

20. Cree un arreglo multidimensional de 3 páginas, 4 filas y 5 columnas donde el


primer elemento valga 1, el segundo 2, el tercero 3 y así sucesivamente. Impri-
3057 ma los valores.

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.

22. Ordenar una matriz de M filas y N columnas de izquierda a derecha y de arri-


ba hacia abajo. Debe presentar la matriz en orden ascendente y en orden des-
3063 cendente (muestra dos matrices). Por ejemplo, la siguiente es una matriz de
2×3 ordenada ascendentemente.

-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).

23. Dado el arreglo T de tamaño n, si el tamaño es par invertir los elementos de la


3069 mitad de los elementos, caso contrario hacer lo mismo pero dejando sin mover
el número de la posición intermedia. Ejemplo: T=[1, 2, 3, 4, 5, 6],
T(invertido)=[3, 2, 1, 6, 5, 4]; T=[1, 2, 3, 5, 6], T(invertido)=[2, 1, 3, 6, 5].

3072 24. Dadas dos matrices A y B intercambiar los mínimos de A con los máximos de
B.

25. Se dispone de un arreglo multidimensional de 5 páginas, 10 filas y 20 colum-


3075 nas, que se refieren al colegio, al curso y al número de estudiantes (se asume
que cada curso tiene exactamente 20 estudiantes), respectivamente. Imprimir
la nota media por curso (son 50 resultados) y la nota media máxima con su
3078 centro de pertenencia. La nota media máxima hace referencia al valor máximo
entre las 50 medias que corresponden a los 10 cursos de los 5 colegios.

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

tos, VENTAS [ representante, mes, producto ]. Se desea proyectar el arreglo


tridimensional sobre uno de dos dimensiones que represente el total de ventas,
3087 TOTAL [ mes, producto ], para lo cual se suma las ventas de cada producto
de cada mes de todos los representantes. Imprima ambos arreglos.

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.

3105 Por ejemplo, si A y B son:

entonces, luego del intercambio, las matrices serían:

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

3114 Generación de matriz aleatoria

Suma y resta de matrices

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.

3120 Producto de un escalar por una matriz

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

Diagonal principal de una matriz

Ingresar una matriz cuadrada y guardar en un arreglo la diagonal principal de la ma-


3126 triz.

*E102 Transpuesta de una matriz

• Pedir al usuario el número de filas y columnas de una matriz que ingresará.


3129 Ingresar dicha matriz. Calcular la transpuesta, guardarla en otra matriz y
mostrarla al usuario.

• Generar una matriz de 4 filas y 5 columnas con números aleatorios entre 1 y


3132 100, y hacer su matriz transpuesta.

Simetría de una matriz

Una matriz de la forma

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.

Determinante de una matriz

3141 Ingresar una matriz cuadrada y calcular la determinante de la matriz y presentarla al


usuario.

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

Punto de silla de una matriz

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)).

2. Elabore un algoritmo que genere matrices de números enteros aleatorios (el


3153 usuario debe ingresar las dimensiones) hasta que genere una matriz con un (o
más) punto de silla.

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.

*E104 Distancia de Chebyshov

3159 Información tomada de Wikipedia: https://is.gd/uJUUqj. La distancia de Chebyshov


(o métrica máxima, o métrica L∞) es una métrica definida en un espacio vectorial
donde la distancia entre dos puntos (representados por sus vectores) es la mayor de
3162 sus diferencias a lo largo de cualquiera de sus dimensiones coordenadas. También es
conocida como distancia del tablero de ajedrez (vea el ejercicio 3Cálculos espaciales
básicos3, página 18), porque coincide con el número mínimo de movimientos que ne-
3165 cesita el rey para ir de una casilla a otra (este caso se corresponde a un sistema de
dos coordenadas espaciales, entre los centros de las casillas, y con los ejes alineados
con los bordes del tablero). Esto es debido a que el rey se puede mover tanto en dia-
3168 gonal como en horizontal o vertical. En el tablero de la figura 5 se muestra las distan-
cias de Chebyshov desde la casilla f6.

1 Ejercicio tomado en el examen de suspensión de la asignatura de Programación orientada al


cálculo científico, semestre septiembre 2024 - febrero 2025.

143
Angel Vázquez-Patiño Universidad de Cuenca

Figura 5: Ejemplo de distancias de Chebyshov en un tablero de ajedrez.

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.

* E105 El cuadrado latino1

3174 Desarrolle un programa que imprima un cuadrado latino de orden N. Un cuadrado


latino de orden N es una matriz cuadrada en la que su primera fila contiene los N
primeros números naturales y cada una de las siguientes N−1 filas contiene la rota-
3177 ción de la fila anterior un lugar a la derecha. Por ejemplo, el siguiente es un cuadrado
latino de orden 4.

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.

3189 2. *E1061 Un cuadrado mágico de es una matriz de que tiene como


elementos números del 1 al 9 (sin repetición) donde la suma de sus filas, sus
columnas y sus diagonales son idénticas. Implemente un script que genere ma-
3192 trices de , con los números del 1 al 9 en posiciones aleatorias, hasta que
una de las matrices generadas corresponda a un cuadrado mágico (a esto se le
podría llamar fuerza bruta). Un ejemplo de cuadrado mágico se muestra a
3195 continuación.

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:

3201 1. Sitúe el número 1 en la casilla central de la primera fila.

2. Cada número que sigue debe colocarse en la casilla correspondiente a la fila


anterior y columna posterior.

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.

1 Ejercicio tomado en el examen de suspensión de la asignatura de Programación orientada al


cálculo científico, semestre septiembre 2024 - febrero 2025.

145
Angel Vázquez-Patiño Universidad de Cuenca

3207 4. Se considera que la fila anterior a la primera es la última y la columna pos-


terior a la última es la primera.

*E107 Lotería en 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:

Boleto ganador : 1991 Boleto ganador : 514

3225 Parroquia ganadora: 26 3228 Parroquia ganadora: 8

Comprador ganador : 61 Comprador ganador : 114

E108 Cadena de ADN

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

3240 Lea la descripción del Juego del alfabeto en www.pnlnet.com/el-juego-del-alfabeto.


Implemente un programa que tenga el menú:
=======================
3243 El juego del alfabeto
=======================
Menú
3246 a. Nivel básico
b. Nivel intermedio
c. Nivel avanzado
3249 d. Salir
______________________
Opción[a-d]:
3252 ======================

Para el nivel básico se debe imprimir el alfabeto de izquierda a derecha y de arriba


hacia abajo en una matriz de 5x5. No tome en cuenta la letra ñ ni w. Debajo de cada
3255 letra del abecedario se debe imprimir la letra I o D o J de manera aleatoria pero sólo
se pueden repetir dos veces seguidas las letras I y D pero no la J (viendo la matriz de
izquierda a derecha y de arriba hacia abajo). Un ejemplo se muestra a continuación:
3258 A B C D E
I D J I D

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

Para el nivel intermedio se debe imprimir el alfabeto de izquierda a derecha y de arri-


ba hacia abajo en una matriz de 5x5 pero en orden inverso, i.e., de la zeta hasta la a.
3270 No tome en cuenta la letra ñ ni w. Debajo de cada letra del abecedario se debe im-
primir la letra I o D o J de manera aleatoria pero sólo se pueden repetir dos veces se-
guidas las letras I y D pero no la J (viendo la matriz de izquierda a derecha y de
3273 arriba hacia abajo). Un ejemplo se muestra a continuación:
Z Y X V U
I D J I 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

3300 Cálculos espaciales básicos

Los siguientes ejercicios se basan en el capítulo 10.3 Algunos cálculos espaciales bási-
cos del libro de Olaya (2011).

3303 Distancia de tablero de ajedrez

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.

1. Utilizando una matriz de 8 filas por 8 columnas, pida al usuario la celda de la


3312 que quiere calcular la distancia de tablero de ajedrez.
2. La celda indicada por el usuario tendrá el valor cero, a las demás celdas de la
matriz póngales el valor que corresponde a la distancia de tablero de ajedrez
3315 desde la celda a la mencionada por el usuario. La figura 6.a muestra un ejem-
plo para una matriz de 5×5 con la celda central como la elegida por el usuario.
3. Presente en pantalla los valores de la matriz.

Figura 6: Distintos tipos de distancia ráster: a) tablero de ajedrez, b) Manhattan, c)


ortogonal y d) Chamfer 3-4. Fuente: Olaya (2011).

3318 Distancia Manhattan

En el ajedrez, la distancia entre cuadrados en el tablero de ajedrez para las torres se


mide en distancia Manhattan (vea la ecuación 2 y la figura 6.b). De igual manera, en
3321 ciencias de la información geográfica pueden definirse algunos tipos de distancia rás-
ter considerando el mismo principio (i.e. número de celdas por las que debe pasarse
para ir de una celda a otra).

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.

2. Muestre en pantalla la matriz generada.


3. Calcule la distancia Manhattan entre cada par de celdas que contengan el mis-
3330 mo número. Como ejemplo vea parte del resultado (2 de los 32 números) que
debería mostrar su programa.
Distancia Manhattan
3333 ===================
-------------------------------
Valor: 1
3336 Posiciones: (2, 2), (4, 5)
Distancia Manhattan: 5
-------------------------------
3339 Valor: 2
Posiciones: (1, 1), (5, 1)
Distancia Manhattan: 4

151
Angel Vázquez-Patiño Universidad de Cuenca

3342 E109 Formación de grupos de trabajo

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).

El programa debe leer un archivo .csv (vea https://es.wikipedia.org/wiki/CSV) en


3351 donde se indican los campos de los estudiantes del curso. Un ejemplo de archivo es el
siguiente (podría llamarse listaEstudiantes.csv):
1,Abad,Sigcho,Carlos,Daniel
3354 2,Agudo,Güiracocha,Dayana,Isabel
3,Andrade,Carchi,Julio,César
4,Arévalo,Angamarca,Moisés,Santiago

3357 El siguiente es un primer ejemplo de ejecución del programa:


Número de estudiantes por grupo: 2
Grupo 1
3360 1. Julio César Andrade Carchi
2. Carlos Daniel Abad Sigcho

Grupo 2
3363 1. Dayana Isabel Agudo Güiracocha
2. Moisés Santiago Arévalo Angamarca

El siguiente es un segundo ejemplo de ejecución del programa en donde hay un grupo


3366 que tiene menos estudiantes de los pedidos por el usuario:
Número de estudiantes por grupo: 3
Grupo 1
3369 1. Moisés Santiago Arévalo Angamarca
2. Dayana Isabel Agudo Güiracocha

152
Angel Vázquez-Patiño Universidad de Cuenca

3. Julio César Andrade Carchi

3372 Grupo 2 ¡Este grupo es de 1 estudiante y no de 3 como lo pedido!


1. Carlos Daniel Abad Sigcho

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;

public class listaEstudiantes {

153
Angel Vázquez-Patiño Universidad de Cuenca

public static void main (String args[]) {


3399 String[][] lista = cargarLista("listaEstudiantes.csv", 24);
}

public static String[][] cargarLista(String rutaArchivo, int


3402 numEstudiantes){
// numEstudiantes: Número de estudiantes
// que están en el archivo csv
3405 // int numEstudiantes = 24;

// separador de campos del archivo csv


String SEPARADOR = ",";
3408 String QUOTE = "\"";

String[][] lista = new String[numEstudiantes][];

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));

3420 campos = removeTrailingQuotes(campos, QUOTE);


lista[i++] = 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 }

private static String[] removeTrailingQuotes(String[] fields,


String QUOTE) {
3438 String result[] = new String[fields.length];
for (int i=0;i<result.length;i++){
result[i] = fields[i].replaceAll("^"+QUOTE,
3441 "").replaceAll(QUOTE+"$", "");
}
return result;
3444 }
}

*E110 Matriz de adyacencia

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:

1. Una función que devuelva 1 si el grafo es euleriano. Se debe devolver 0 si el


grafo no es euleriano. Un grafo es euleriano si cada vértice tiene un grado par.
3462 El grado o valencia de un vértice es el número de aristas incidentes al vértice.

2. Una función que devuelva 1 si el grafo es simple. Se debe devolver 0 si el grafo


no es Simple. Un grafo simple es aquel que no tiene aristas paralelas o múlti-
3465 ples que unan el mismo par de vértices.

3. Una función que devuelva 1 si el grafo es multigrafo. Se debe devolver 0 si el


grafo no es multigrafo. Un grafo que cuente con múltiples aristas entre dos
3468 vértices se denomina multigrafo

4. Una función que devuelva 1 si el grafo simple es dirigido. Se debe devolver 0 si


el grafo simple es no dirigido. Si G es un grafo simple con n vértices y m aris-
3471 tas, entonces:

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)

3474 *E111 Una serie de Fourier1

Este ejercicio está inspirado en https://youtu.be/r6sGWTCMz2k. La ecuación 21


muestra la serie compleja de Fourier que aproxima la función , donde es un
3477 número complejo que corresponde a un peso.

(21)

Grafique en el plano complejo la aproximación de desde hasta . Los


3480 pesos están en el archivo Pesos de una serie de Fourier.csv.

Nota 1: la relación fundamental entre las funciones trigonométricas y la función ex-


ponencial compleja está dada por la fórmula de Euler

3483 . (22)

Nota 2: el producto de los números complejos y es


.

3486 E112 Craps

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

1 Ejercicio tomado en el examen final de la asignatura de Programación orientada al cálculo


científico, semestre marzo-agosto de 2024.

157
Angel Vázquez-Patiño Universidad de Cuenca

es igual que la suma en el primer lanzamiento). Se pierde por sacar un 7 antes


de que “hace su punto”.

3501 Escriba una aplicación que ejecute 1'000.000 de juegos de craps y conteste las si-
guientes preguntas:

1. ¿Cuántos juegos fueron ganados en el primer lanzamiento, en el segundo lan-


3504 zamiento, en el tercer lanzamiento, …, en el vigésimo lanzamiento y después
del vigésimo lanzamiento?

2. ¿Cuántos juegos fueron perdidos en el primer lanzamiento, en el segundo lan-


3507 zamiento, en el tercer lanzamiento, …, en el vigésimo lanzamiento y después
del vigésimo lanzamiento?

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?

4. ¿Cuál es la duración promedio de un juego de craps? Nota: la duración hace


3513 referencia al número de lanzamientos antes de terminar el juego.

5. ¿Las probabilidades de ganar mejoran con la duración del juego?

E113 Hormiga de Langton

3516 La siguiente información es tomada de wikipedia (https://goo.gl/6dNIEW).

La hormiga de Langton es una máquina de Turing bidimensional con un conjunto de


reglas muy sencillo y que da lugar a comportamientos emergentes complejos. La hor-
3519 miga de Langton clásica opera sobre una matriz cuadrada, en que cada celda puede
estar en uno de dos estados: blanco o negro (1 o 0).

En la matriz se identifica arbitrariamente una celda como la hormiga. La hormiga


3522 siempre está mirando en una de las cuatro direcciones cardinales y se mueve una cel-
da cada vez, de acuerdo con las siguientes reglas:

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.

3528 Implemente un programa que realice lo siguiente:

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.

3531 2. Identifique arbitrariamente una celda como la hormiga.

3. Haga que la homiga camine hasta que llegue a los límites de la matriz.

4. Cada vez que la hormiga se mueva una celda, muestre la información de la


3534 matriz como se muestra en la figura 8.

Figura 8: imagen tomada de Wikipedia https://goo.gl/6dNIEW.

*E114 Las ocho reinas

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

Figura 9: Una de las posibles soluciones al problema de las ocho reinas.

El objetivo de este ejercicio es escribir un programa que encuentre, al menos, una de


las soluciones a este problema. El programa además debe permitir al usuario ingresar
3549 una configuración candidata indicando las coordenadas de la ubicación de cada una
de las ocho reinas. En particular, el programa debe mostrar un menú con tres opcio-
nes:

3552 1. Generar solución


2. Ingresar configuración candidata
3. Salir

3555 A continuación, se detalla cada una de estas tareas.

1. Generar solución

El programa genera una configuración candidata y verifica si esa configuración co-


3558 rresponde a una solución. Si este es el caso, muestra la solución en pantalla simulan-
do un tablero de ajedrez e indicando la ubicación de las ocho reinas. Si la configura-
ción generada no corresponde a una solución, se descarta y se repite el proceso, vol-
3561 viéndose a generar otra configuración candidata.

2. Ingresar configuración candidata

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

3579 La configuración resultante sería la que se muestra en la figura 9, la cual evidente-


mente corresponde a una solución del problema.

3. Salir

3582 El programa solamente termina cuando se escoja esta opción.

*E115 Recorridos de matriz

Espiral hacia el interior

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

me que el primer elemento es el de subíndice cero). Finalmente muestre la última


3597 matriz.

Figura 10: Recorrido en espiral hacia el interior de una matriz de n×m.

Espiral hacia el exterior

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

Figura 11: Recorrido en espiral hacia el exterior de una matriz cuadrada .

3612 * E116 Datos de estudiantes

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.

3618 • Las siguientes tres columnas corresponden a calificaciones de los estudiantes


que están cursando una asignatura, que van del rango de 1 a 20, inclusivo. Si-
mule la obtención de las calificaciones generándolas aleatoriamente.

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:

Rango Equivalencia Observación

01-09 R Regular

163
Angel Vázquez-Patiño Universidad de Cuenca

Rango Equivalencia Observación

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.

3633 *E117 Datos de personas

El programa va a almacenar registros en una matriz. Para ello se debe hacer lo si-
guiente:

3636 1. Ingreso de campos de los registros

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.

Para los dos registros de ejemplo la matriz de datos sería la siguiente:

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

*E118 Datos de empresas y empleados

Dados los siguientes datos de entrada en formato de cadena:


3681 String datosEmpresas = "emp1,Marcimex;emp2,Etapa;emp3,Elecaustro;";
String datosEmpleados = "emp1,Juan,1500;emp2,Arturo,1200;emp1,Pedro,1100;"
+ "emp2,Ramiro,1400;emp1,Jaime,900;emp3,Xavier,800;"
3684 + "emp3,Jorge,1000;emp1,Edgar,1200;emp3,Daniel,950;";

La variable datosEmpresas almacena el código y nombre de una lista de empresas, en


donde cada dato está separado por coma y cada registro por punto y coma.

3687 La variable datosEmpleados almacena el código de la empresa a la que pertenece un


empleado, el nombre del empleado y el salario de una lista de empleados, en donde
cada dato está separado por coma y cada registro por punto y coma.

166
Angel Vázquez-Patiño Universidad de Cuenca

3690 Realizar un programa que haga lo siguiente:

1. Mostrar los datos de una empresa en particular dado el código de la misma.


2. Listar todas las empresas.
3693 3. Listar los empleados de una empresa en particular ordenados de forma descen-
dente según el salario.
4. Mostrar un listado de empresas con el salario promedio de los empleados de la
3696 misma.

Ejemplo

1. Mostrar los datos de una empresa

3699 Se pide al usuario el código de la empresa que desea mostrar

• Código: emp3

El sistema muestra los datos de la empresa

3702 • Código: emp3

• Nombre: Elecaustro

2. Listar todas las empresas.

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.

Se pide al usuario el código de la empresa que desea mostrar

3708 • Código: emp1

El sistema muestra los empleados de la empresa emp1 (Marcimex) ordenados de for-


ma descendente según el salario.

3711 Empresa: Marcimex

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)

Empresa Salario promedio


Marcimex 1175
Etapa 1300
Elecaustro 916.67

3714 *E119 Estadística descriptiva: frecuencias e histograma

1. Pedir al usuario el número de datos N. Validar que N sea un número en el in-


tervalo [10, 25].
3717 2. Generar un arreglo con N datos aleatorios en el intervalo [1, 20].
3. Pedir al usuario el número de rangos R para crear el histograma, con la condi-
ción de que R sea un divisor de la nota máxima posible (20).
3720 4. Generar la matriz de resumen (explicada en el ejemplo).
5. Generar y mostrar el histograma utilizando una matriz.

Ejemplo

3723 1. El programa solicita al usuario el número de datos a generar

Número de datos: 20

2. Generar un arreglo de N datos aleatorios entre 1 y 20, inclusivo.

1 2 3 3 7 7 6 9 8 6 10 12 13 15 17 18 18 19 20 20

3726 3. Pedir al usuario el número de rangos R para crear el histograma.

Número de rangos: 4

4. Generar la matriz de resumen.

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.

5. Generar y mostrar el histograma utilizando una matriz

#
# #
# #
# # #
# # # #
# # # #
# # # #
1-5 6-10 11-15 16-20

3732 *E120 Cifrado básico 1

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

Figura 12: Matriz para caracteres en un cifrado básico de texto.

La matriz se debe leer siguiendo el sentido especificado, según la fila sea par o impar
3741 dará como resultado:

h, ee rH olqoneneyua e ser e muts2o.6 andlv di?o

E121 Cifrado básico 2

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

3756 fila; si la columna es la final, la siguiente debe ser la primera columna. Si al


momento de asignar un carácter el elemento ya tiene asignado un carácter, se
debe asignar el carácter al elemento que está a la derecha (misma fila, siguien-
3759 te columna). Por ejemplo, para la frase “UNIVERSIDAD DE CUENCA”, la
asignación en la matriz cuadrada de orden 5 (hay 21 caracteres en la frase) es
la que se muestra en la figura 13.

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.

3765 3. El texto cifrado corresponde a la lectura de la matriz de fila en fila y en cada


fila columna por columna. Los elementos de la matriz que no tienen asignado
ningún carácter (el espacio se considera un carácter) no son tomados en cuen-
3768 ta. Por ejemplo, el texto cifrado de la matriz de la figura 13 es “URDCAA
CEENVDEIIDNS U”.

Para efectos de verificación se debe mostrar la matriz cuadrada; parecida a la figura


3771 13 pero sin los subíndices. Usted puede verificar el correcto funcionamiento de su pro-
grama utilizando las siguientes frases:

Frase original Frase cifrada


- reciba una frase y la devuelva cifrada - rus vaaalr lefaruibf ci yvaca e enedad
- Se utiliza una matriz cuadrada - Slnrautuaiacdt auamr z zeiaid
- Los caracteres de la frase deben ser - La feras denra sgaee icrlnss e
asignados saosteaedocdrb
- El texto cifrado corresponde a la - Eir atl mraraiaauc umfldlc ot iao
lectura de la matriz de fila en fila y en oceaefccrt dcd oxonelnnapedol el tap

171
Angel Vázquez-Patiño Universidad de Cuenca

Frase original Frase cifrada


cada fila columna por columna ezeia rsadi nlfel rayf
- debe mostrar la matriz cuadrada - do tuaracdmm a azrer dbtaieslra

E122 Un algoritmo voraz para el número cromático

3774 Vea https://youtu.be/DyRh5UhtVvw

E123 Algoritmo de Floyd-Warshall

El algoritmo de Floyd-Warshall es un algoritmo de análisis sobre grafos para encon-


3777 trar el camino mínimo en grafos dirigidos ponderados. El algoritmo encuentra el ca-
mino entre todos los pares de vértices en una única ejecución. Vea https://
youtu.be/T_eGloMib1w y https://youtu.be/DTfrTDQEfNk e implemente el algorit-
3780 mo.

Nota: antes de solucionar este ejercicio solucione el ejercicio 110 (página 155).

*E124 Velocidad de una partícula en 3D1

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),

[seg] [m] [m] [m]

⠇ ⠇ ⠇ ⠇

1 Ejercicio tomado en el examen final de la asignatura de Programación orientada al cálculo


científico, semestre septiembre 2024 - febrero 2025.

172
Angel Vázquez-Patiño Universidad de Cuenca

*E125 Independencia lineal y factorización de matrices1

1. Dada una dimensión n, genere n vectores en . Los componentes de los vec-


3792 tores deben ser números reales aleatorios en el intervalo [1, 10], con máximo
dos decimales.

2. Verifique que los n vectores generados sean linealmente independientes. Si no


3795 lo son, genere otra vez los n vectores en hasta que los n vectores sean li-
nealmente independientes.

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 .

4. Utilizando la matriz , implemente el siguiente

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).

6. Verifique que . Si , imprima un mensaje que diga “A=LU”,


3810 caso contrario, imprima un mensaje que diga “A es diferente a LU”. Si progra-
ma en Python, podría utilizar la función allclose de la librería numpy. La
información oficial de la función dice
3813 numpy.allclose(a, b, rtol=1e-05, atol=1e-08, equal_nan=False)
Returns True if two arrays are element-wise equal within a tolerance.

1 Ejercicio tomado en la prueba 2 de la asignatura de Programación orientada al cálculo científico,


semestre marzo-agosto de 2024.

173
Angel Vázquez-Patiño Universidad de Cuenca

174
Angel Vázquez-Patiño Universidad de Cuenca

6. Funciones

3816 Ámbito de las variables

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?

4. ¿Cuando se declara una variable global, es inicializada automáticamente por el


sistema?

3831 5. ¿Cuando se declara una variable local, es inicializada automáticamente por el


sistema?

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.

5. Implemente una función que reciba tres números y devuelva el máximo.

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).

9. Implemente una función que imprima en pantalla el seno, coseno y tangente


de un ángulo dado. El ángulo puede estar en grados sexagesimales o radianes;
3858 para distinguir el uno del otro use un parámetro.

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).

3861 12. Implemente una función que calcule la suma

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.

22. Implemente una función que imprima en pantalla el área o el volumen de un


cilindro, según se especifique. Para distinguir un caso de otro se le enviará a la
3891 función el carácter 'a' (para área) o 'v' (para el volumen). Además hemos de
enviar a la función el radio y la altura.

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.

24. Implemente una función que indique si un número entero es primo.

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.

Nota: se sugiere desarrollar antes el ejercicio 53 (pág. 71).

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

40. Implemente la función opera_tabla, a la que se le pasa dos matrices y qué


operación se desea realizar: sumar, restar, multiplicar o dividir (mediante un
3933 carácter: 's', 'r', 'm', 'd'). La función devuelve una matriz con los resulta-
dos.

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

Fibonacci mediante la función , donde y

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

3981 Visualizar el siguiente menú


1. Suma
2. Resta
3984 3. Multiplicación
4. División

180
Angel Vázquez-Patiño Universidad de Cuenca

5. Salir

3987 Opción [1-5]: _

Si no se ingresa un número del 1 al 5, se debe mostrar un error que lo indique y debe


pedir el ingreso de una opción válida. Opción 1: suma dos números, el primero en el
3990 rango [-1000, -1] y el segundo en el rango [1, 1000]. Opción 2: resta dos números, el
primero en el rango [-1000, 1] y el segundo en el rango [-1, 1000]. Opción 3: multipli-
ca dos números, el primero en el rango [100, 200] y el segundo en el rango [-10, 2].
3993 Opción 4: división del primer número entre el segundo; el primero en el rango [-10,
10] y el segundo en el rango [-5, -1] U [1, 5].

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).

*E136 Dado sesgado

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].

3. Escriba una función que devuelva el resultado de lanzamientos de un dado ses-


4011 gado (como una lista). La función tiene como parámetros una lista con las
probabilidades de que salga 1, 2, 3, 4, 5 y 6 del dado, respectivamente y un
número que indica cuántos resultados de lanzamientos devuelve la función (si
4014 no se envía este argumento a la función, por defecto la función debe trabajar
con el valor igual a uno, esto es, devuelve una lista con solamente un valor de

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.

La gráfica del ejemplo anterior es el resultado de 100 lanzamientos del dado


4026 con las probabilidades [0.1, 0.2, 0.1, 0.2, 0.2, 0.2]. La frecuencia con la que el
dado dio los valores 1, 2, 3, 4, 5 y 6 fueron 10, 21, 6, 18, 19 y 26, respectiva-
mente. Sin embargo, y muy importante, la gráfica no muestra esos valores de
4029 frecuencia sino la probabilidad empírica de acuerdo a los resultados de los lan-
zamientos del dado sesgado.

E137 Aproximación de sinh-1

4032 Nota: le será de utilidad primero resolver el ejercicio 57 (pág. 72).

Para n→∞ (en la práctica un número suficientemente alto) la función sinh -1 de x se


puede calcular con la siguiente serie de Taylor:

1 Tome muy en cuenta que se envía solamente un argumento en este caso.


2 Recuerde que son valores al azar.

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

La función W de Lambert o también conocida como función Omega o log producto,


4044 es la función inversa de f(w)=wew donde ew es la función exponencial natural y w es
cualquier número complejo. Para n→∞ (en la práctica un número suficientemente al-
to) la función W de Lambert de x se puede calcular con la siguiente serie de Taylor:

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).

4059 Factorial de un número con función recursiva

Desarrolle un algoritmo para calcular el factorial de un número dado. Este algoritmo


debe tener una función recursiva. Una explicación de funciones recursivas se encuen-
4062 tra en la sección 7.8 del libro de Alcalde Lancharro y García López (1992).

183
Angel Vázquez-Patiño Universidad de Cuenca

Máximo común divisor y mínimo común múltiplo

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

4077 *E138 Peso adecuado

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.

Tabla 1: Peso ideal de una persona según su estatura.

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:

• A: si el peso de la persona está por debajo del rango considerado ideal.


4089 • B: si el peso de la persona está en el rango de peso considerado ideal.
• C: si el peso de la persona está por debajo del rango considerado ideal.

El resultado de esta clasificación se debe almacenar en otro arreglo unidimensional o


4092 bidimensional (justifique su elección). Entonces, es necesario determinar cuántas mu-
jeres y hombres han recibido una clasificación de cada tipo (A, B, C) y mostrar el re-
sultado así:
4095 ============================================================
CLASIFICACIÓN MUJERES HOMBRES

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 ============================================================

*E139 Raíces de una función


Escriba un programa empleando funciones que calcule las raíces aproximadas de una
4104 ecuación de segundo grado en la forma y = ax2 + bx + c. Los datos a ingresar son:
(1) coeficientes enteros de la ecuación de segundo grado, (2) el valor inicial y el valor
final del intervalo de búsqueda de las raíces y (3) el número de partes en las que se
4107 dividirá el intervalo para hacer la búsqueda de las raíces. Si existe alguna posible raíz
en el intervalo especificado, debe mostrarse en pantalla. En caso de no existir raíces
en el intervalo dado debe mostrarse un mensaje que indique al usuario ese resultado.

4110 E140 El método de la bisección

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.

*E141 El método de Newton

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.

Para este ejercicio se va a aproximar el cero de la función f(x) = π/3 - x + x2 - x3;


4128 f'(x) = - 1 + 2x - 3x2.

1. Escriba una función valorInicial() que genere la aproximación inicial x(0)


(valor real) en el intervalo [-½π, ⅔π]. Utilice una función/constante predeter-
4131 minada para usar el valor de π, no una aproximación.

2. Escriba una función funcionEvaluada(x) que devuelva el valor de la función


f(x) evaluada en el punto x que se envía como argumento. Utilice una función
4134 predeterminada para usar el valor de π, no una aproximación.

3. Escriba una función funcionDerivada(x) que devuelva el valor de la función


f'(x) evaluada en el punto x que se envía como argumento.

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.

4140 En la primera fila de la matriz se debe devolver 1) la aproximación del cero de


la función, 2) el valor de f(x) en ese punto, 3) el número de iteraciones que se
hicieron para encontrar la aproximación del cero y 4) la diferencia entre las
4143 aproximaciones x(k+1) y x(k) (i.e., la primera fila no debe tener más de 4 colum-
nas).

En la segunda fila de la matriz se debe devolver la secuencia de aproximacio-


4146 nes x(0), x(1), x(2), …, x(n).

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.

5. Escribir una función mostrarMatriz(matriz) para mostrar la matriz que de-


4155 vuelve la función newton(x0, tol, nmax) enviando como parámetro x0 el
valor generado por la función valorInicial(). Esta función debe primero
mostrar los valores de la primera fila en forma horizontal (debe indicar a qué
4158 corresponde cada valor) y luego las aproximaciones del cero de la función (se-
gunda fila) en forma vertical.

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

4176 E142 Búsqueda binaria o dicotómica

Diseñe una función que realice la búsqueda dicotómica o binaria de un arreglo. La


función devuelve el índice (del arreglo original) en donde se encuentra el número bus-
4179 cado; si no se encuentra el número, la función devuelve -1. Una explicación de la bús-
queda binaria o dicotómica se puede encontrar en la sección 6.3 del libro de Alcalde
Lancharro y García López (1992). Este ejercicio NO se debe resolver utilizando fun-
4182 ciones recursivas, una explicación de la implementación utilizando funciones recursi-
vas se la puede encontrar en https://youtu.be/oMx3f8ffYUo.

Juego de dados entre dos

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

Suma total 30 Suma total 27

Finaliza el juego.

4206 El ganador es: Jugador 1.

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).

*E143 Método de la potencia

El siguiente es el método de la potencia para estimar un valor propio estrictamente


4218 dominante (valor propio mayor a todo el resto de valores propios) y su respectivo
vector propio de una matriz cuadrada A. Una explicación del método se puede encon-
trar en el libro de Lay et al. (2016). El algoritmo del método es el siguiente:

4221 1. Inicialice un vector x0 cuyo componente más grande es 1.

2. Para k = 0, 1, 2, 3, …

a) Calcular Axk.

4224 b) Asigne uk con el componente de mayor valor absoluto de Axk.

c) Calcular xk+1 = (1/uk)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:

1. Programe una función que devuelva un vector con componentes aleatorios en


4236 el intervalo abierto (-1, 1), pero uno (y sólo uno) de los componentes debe ser
igual a uno. Los componentes deben tener como máximo dos decimales. La
función recibe un argumento que indica el número de componentes del vector
4239 a devolver.

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.

4. Programe una función que implemente el algoritmo del método de la potencia.


4245 La función tiene como único parámetro la matriz A de la que se quiere aproxi-
mar su valor propio dominante. La función devuelve una lista cuyo primer ele-
mento es la aproximación del valor propio de mayor magnitud de la matriz, el
4248 segundo elemento es la aproximación del vector propio asociado al valor pro-
pio de mayor magnitud y el tercer elemento tiene el número de iteraciones que
el método de la potencia realizó.

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

donde uk es la aproximación de u en la iteración k y uk-1 es la aproximación an-


4254 terior de u, es decir, en la iteración k−1. Tome mucho en cuenta el signo de
valor absoluto en la fórmula.

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).

6. Documente adecuadamente el código fuente.

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]

Valor propio aproximado 1 : 7.247311827956989


Vector propio aproximado 1: [1.0, 0.24946236559139784]
4266 .
.
.
4269 Valor propio aproximado 8 : 7.000000288414237
Vector propio aproximado 8: [1.0, 0.20000005768284743]

Valor propio aproximado 9 : 7.000000041202032


4272 Vector propio aproximado 9: [1.0, 0.20000000824040642]

******** Resultados en la iteración 14 ********

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

Valor propio aproximado : 7.00000000001716


4275 Vector propio aproximado : [0.9999999999999999, 0.20000000000343207]

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]

Valor propio aproximado 1 : 6.954471544715448


4281 Vector propio aproximado 1: [1.0, -0.03089430894308942, -
0.013008130081300825, 0.15284552845528454]
.
4284 .
.
Valor propio aproximado 8 : 6.559193444859399
4287 Vector propio aproximado 8: [0.9999999999999999, 0.22782416900328784,
0.20785577545585915, 0.006234275172933884]

Valor propio aproximado 9 : 6.773552562705645


4290 Vector propio aproximado 9: [1.0, 0.3210800243981408, 0.28615351415602286,
0.003801854740429916]

******** Resultados en la iteración 34 ********


4293 Valor propio aproximado : 9.000000000368226
Vector propio aproximado : [0.7918003236842618, 1.0, 0.8750000000562567,
4.091396521609436e-11]

4296 *E144 Normas de una matriz1

Hay muchas normas de vector posibles. Aquí usará la norma de vector definida
para un vector como

1 Ejercicio tomado en el examen interciclo de la asignatura de Programación orientada al cálculo


científico, semestre septiembre 2024 - febrero de 2025.

193
Angel Vázquez-Patiño Universidad de Cuenca

4299 . (24)

Una norma de una matriz mide el tamaño de una matriz mediante un


número no negativo. Se requiere tener la propiedad

4302 para todo (25)

donde es la norma de vector indicada arriba (i.e., ). Definimos como el


número más pequeño que satisface (25):

4305 (26)

Usando la norma de vector en esta definición, se obtiene la norma de matriz


.

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)

4314 3. Implemente una función que devuelva el producto de una matriz


por un vector . (1 punto)

4. Genere 100’000.000 de vectores diferentes en (n puede ser cualquier núme-


4317 ro entero mayor a uno) de norma 1. Genere una matriz en ; el n es el
mismo usado para la dimensión de los vectores anteriores. Multiplique la ma-
triz generada por cada uno de los 100’000.000 de vectores generados y reporte
4320 el producto cuya norma es la mayor (vea la Ecuación 26). (3 puntos)

7. Manejo de Caracteres y Cadenas

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

2. Mostrar el número de veces que aparece la letra a en la cadena “Mañana es


4326 sábado y voy a irme a pasear por los hermosos parques de Cuenca”.

3. Hacer un programa que ingrese una cadena de caracteres y determine el núme-


ro de mayúsculas y el número de minúsculas.

4329 4. Sustituir todos los espacios en blanco de una frase por un asterisco.

5. Muestre el número de veces que aparecen las letras a, o y e en la cadena “Ma-


ñana es sábado y voy a irme a pasear por los hermosos parques de Cuenca”.
4332 Además, si el número de veces que se repite la a es superior a 10 debe apare-
cer el mensaje “Exceso de a”, si el número de veces que se repite la o es supe-
rior a 5 debe mostrarse “Exceso de o” y si se repite más de 3 veces la letra e
4335 debe mostrarse “Exceso de e”.

6. Implemente una función que devuelva una cadena sin los espacios en blanco.

7. Ingresar una frase y reportar cada palabra en una línea diferente.

4338 8. Solicitar el ingreso de los apellidos de dos personas. Mostrar un mensaje indi-
cando si son iguales o distintos.

9. Desarrolle un algoritmo que pida el ingreso de un nombre y un apellido de dos


4341 personas e indique si las dos personas tienen el mismo apellido. Se pide como
una sola cadena el nombre y apellido de una persona y como otra cadena el
nombre y apellido de la otra persona.

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.

16. Contar el número de vocales que se encuentran en una cadena.

17. Contar el número de consonantes que se encuentran en una cadena.

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

Una frase no debe contener palabras innecesarias así como un párrafo no


4368 debe contener frases innecesarias

Resultados

1 letra : 0 palabras
4371 2 letras: 3 palabras
3 letras: 2 palabras
4 letras: 3 palabras
4374 5+ letras: 8 palabras

19. Dada la cadena “En mi próxima vida, creeré en la reencarnación”, mostrar lo


siguiente:

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

h) La cadena transformadas las minúsculas a mayúsculas y las mayúsculas a


minúsculas
4386 i) Por último, comprobar si el primer carácter de la cadena es ‘E’ y mostrar
un mensaje que lo indique

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:

Número Telefónico: 5256284000


4425 Nueva Cadena: (52)-5-6284000

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.

33. Ingrese un texto e indique qué caracteres alfanuméricos no han aparecido en el


texto.

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.

36. Escriba un programa que calcule la frecuencia de aparición de las vocales de


un texto proporcionado por el usuario. Esta solución se debe presentar en for-
4443 ma de histograma, e.g.:
a 15 ***************
e 8 ********

198
Angel Vázquez-Patiño Universidad de Cuenca

4446 i 5 *****
o 1 *
u 6 ******

4449 37. Dada una cadena de caracteres. Realizar lo siguiente:

a) Extraer los n primeros caracteres de la cadena.


b) Extraer los n últimos caracteres de la cadena.
4452 c) Eliminar los espacios en blanco que haya al final de la cadena.
d) Eliminar los espacios en blanco que haya al comienzo de la cadena.
e) Eliminar de una cadena los n caracteres que aparecen a partir de la posi-
4455 ción p.
f) Eliminar la primera aparición de una cadena dentro de otra.
g) Insertar una cadena dentro de otra a partir de la posición p.
4458 h) Contar el número de veces que aparece una cadena dentro de otra.
i) Borrar todas las apariciones de una cadena dentro de otra.
j) Sustituir todas las apariciones de una cadena dentro de otra, por una ter-
4461 cera.

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:

a) Todo mensaje debe tener sus letras en mayúsculas.


b) Reemplazar cada letra por la que sigue según abecedario, excepto Z que se
4467 deberá reemplazar con la letra A.
c) Reemplazar cada dígito encontrado por el siguiente número excepto el 9
que deberá ser reemplazado por el 0.

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

4479 número n de segundos/minutos/horas ingresados por el usuario. El usuario es-


coge de un menú si quiere que n sean segundos, minutos u horas. Ejemplo, si
se ingresa 1:8:04, y se escoge 60 segundos (se suma 60 segundos a la hora in-
4482 gresada), el resultado es 01:09:04 (el resultado sí debe seguir el formato
hh:mm:ss).

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

El número de palabras que terminan en vocal es: 2

43. * Implementar un algoritmo que permita gestionar las siguientes opciones:

4500 a) Función que permita mostrar un menú de las diferentes opciones


b) Función que permita ingresar un listado de números enteros separados por
comas (,) en una variable global de tipo cadena.
4503 c) Función que permita calcular el promedio de los números ingresados en la
cadena
d) Función que permita extraer el menor o el mayor de los números de la ca-
4506 dena, en este caso es obligatorio el uso de parámetros para definir si se ex-
trae el menor o el mayor. A continuación se muestra un ejemplo de ejecu-
ción del programa:
4509 Ingrese los números separados por comas: 4,5,6,12,13,5,8,7

200
Angel Vázquez-Patiño Universidad de Cuenca

Menú
1. Promedio
4512 2. Máximo
3. Mínimo
4. Salir

4515 Elija una opción [1-4]: 1


El promedio es: 7.5

Menú
4518 1. Promedio
2. Máximo
3. Mínimo
4521 4. Salir

Elija una opción [1-4]: 2


El máximo es: 13

4524 Menú
1. Promedio
2. Máximo
4527 3. Mínimo
4. Salir

Elija una opción [1-4]: 3


4530 El mínimo es: 4

201
Angel Vázquez-Patiño Universidad de Cuenca

Menú
1. Promedio
4533 2. Máximo
3. Mínimo
4. Salir

4536 Elija una opción [1-4]: 4


Saliendo del programa...

44. Dados dos números en forma de arreglo de caracteres, implemente una función
4539 que genere el arreglo suma.

Ejemplo:

Sea A = { ‘2’, ‘0’, ‘1’, ‘2’ } 2 0 1 2


4542 Sea B = { ‘1’, ‘9’ } 1 9
suma(A, B) = { ‘2’, ‘0’, ‘3’, ‘1’ } 2 0 3 1

La función que se pide recibe como argumentos dos arreglos de caracteres, y


4545 devuelve como resultado un arreglo de caracteres. El arreglo resultado tendrá
el mínimo tamaño necesario para contener el número; o sea, sin “ceros a la iz-
quierda”

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

que tiene mínimo el número de vocales o consonantes de acuerdo a lo que se


indique.

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”}

4578 51. Ejercicio

*E146 Datos personales

Implemente un programa usando funciones que lea cadenas de caracteres en el si-


4581 guiente formato:
Nombres;Apellidos;Profesión;Edad;Lugar de Residencia

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

4590 Por ejemplo:


Nombres: Juan
Apellidos: Pérez Torres
4593 Profesión: Ingeniero
Edad: 37
Vive en: Cuenca

4596 Nombres: Karen Susana


Apellidos: López Alvear
Profesión: Economista
4599 Edad: 32
Vive en: Loja

Estadísticas de texto

4602 Ejercicio propuesto por René Estrella.

El usuario ingresa un texto. El programa muestra las siguientes estadísticas acerca


del texto ingresado:

4605 1. conteo de vocales


2. conteo de consonantes
3. conteo de dígitos
4608 4. conteo de caracteres especiales
5. conteo de mayúsculas
6. conteo de minúsculas
4611 7. conteo de palabras categorizadas por longitud
8. conteo total de palabras

Ejemplo:

4614 El usuario ingresa:


Náufrago (título original en inglés: Cast Away) es una película dirigida por
el cineasta estadounidense Robert Zemeckis, protagonizada por Tom Hanks y
4617 estrenada en el año 2000.

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

4632 El ejemplo ilustra los siguientes aspectos:

1. Las vocales tildadas se cuentan como caracteres especiales, y no como vocales.


2. El conteo de vocales y consonantes considera tanto mayúsculas y minúsculas.
4635 Por ejemplo, el número de consonantes (78), corresponde a 6 mayúsculas y 72
minúsculas.

*E147 Analizador de tweets

4638 Ejercicio propuesto por René Estrella.

El objetivo de este ejercicio es escribir un analizador simple de tweets. El dato de en-


trada para el programa sería el texto de un tweet y el programa debería mostrar la
4641 siguiente información:

1. Número y lista de cuentas de twitter mencionadas (las cuentas de twitter em-


piezan con @)
4644 2. Número y lista de hashtags mencionados (los hashtags empiezan por #)

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

Eliminación de n-ésima palabra

4668 Ejercicio propuesto por René Estrella.

206
Angel Vázquez-Patiño Universidad de Cuenca

El usuario ingresa un texto, una palabra y un entero n. El programa elimina la n-ési-


ma ocurrencia de la palabra en el texto y muestra el texto resultante. No se conside-
4671 ra distinción entre mayúsculas y minúsculas.

Ejemplo:

Supongamos que el usuario ingresa el siguiente texto:


4674 El rally se correrá también en Bolivia, específicamente en el extremo sur del
Lago Titicaca, el más alto del mundo, y el ya clásico Salar de Uyuni.

Luego ingresa la palabra “el” y el número 3. En el texto ingresado hay 6 ocurrencias


4677 de la cadena “el”, pero sólo 4 de ellas corresponden a una palabra, ya que no se con-
sideran las ocurrencias de “el” que no forman una palabra completa, por ejemplo
“...del Lago Titicaca...” y “...más alto del mundo...”. Como asumimos que el usuario
4680 desea eliminar la 3ra ocurrencia de la palabra en el texto, se eliminaría la que corres-
ponde a “...el más alto...”, y por lo tanto lo que debería mostrar el programa es:
El rally se correrá también en Bolivia, específicamente en el extremo sur del
4683 Lago Titicaca, más alto del mundo, y el ya clásico Salar de Uyuni.

Cifrado por sustitución

“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)

1. Escribir un programa que permita codificar mensajes secretos de forma que no


puedan ser interpretados con una lectura directa. Se debe utilizar las siguien-
4692 tes reglas:

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

Se puede usar variables globales y funciones según se necesite, pero es obliga-


4701 toria la función ENCRIPTAR que reciba como entrada el mensaje y devuelva
el mensaje encriptado.

2. “Una ligera generalización del sistema de cifrado de César permite que el


4704 alfabeto de texto cifrado se desplace k letras, en lugar de siempre [un número
fijo]. En este caso, k se convierte en una clave del método general de alfabetos
desplazados circularmente.” (Tanenbaum y Wetherall, 2012, p. 662) Si k=2,
4707 por ejemplo, sustituiremos la “a” por la “c”, la “b” por la “e”, y así
sucesivamente. El problema que aparece en las últimas “k” letras del alfabeto
tiene fácil solución: en el ejemplo, la letra “y” se sustituirá por la “a” y la
4710 letra “z” por la “b”. La sustitución debe aplicarse a las letras minúsculas y
mayúsculas y a los dígitos de igual manera: el “0” se sustituye por el “2”, el
“1” por el “3” y así hasta llegar al “9”, que se sustituye por el “1”.
4713 Escriba un programa que lea un texto y el valor de k, y muestre su versión en-
criptada.

Cifrado por transposición

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

Figura 14: Un sistema de cifrado por transposición.Tomado de Tanenbaum y


Wetherall (2012, p. 664).

Desarrolle un programa de cifrado y descifrado por transposición. Una de las funcio-


nes que se desarrollen (cifrar) en el programa debe tener como parámetros el texto
4731 a cifrar y la clave, y debe devolver el texto cifrado. Otra de las funciones que se desa-
rrollen (descifrar) en el programa debe tener como parámetros el texto cifrado y
la clave, y debe devolver el texto descifrado.

4734 *E148 Manejo de una cadena con información personal

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

*E149 Línea de comandos

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:

4758 • Sumar num1,num2,num3,…,numN

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.”

4782 • Dividir num1,num2

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

Si el número de veces es 1, debe decir 1 vez (y no 1 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

*E150 Mantenimiento de datos de personas

Se requiere realizar un programa que permita hacer un mantenimiento de los datos


4833 de personas. Generalmente un mantenimiento significa realizar operaciones de inser-
ción, actualización, eliminación y búsquedas de registros; la actualización, eliminación
y búsqueda, por lo general, se realiza en base a un campo específico (que identifica
4836 unívocamente a cada registro). Por ejemplo, la siguiente tabla muestra la información
de tres personas (en este caso la cédula es el valor que identifica unívocamente a cada
persona).

Cédula Nombre Apellido Edad

01064634657 Juan Pérez 23

01064636638 Víctor Guzmán 21

01064688644 Pedro Flores 20

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;

El programa debe permitir, mediante un menú:

1. Ingresar un nuevo registro.


4848 2. Actualizar los valores de los campos de una persona (la cédula no se puede
modificar).
3. Eliminar el registro de una persona.
4851 4. Mostrar los valores de los campos de una persona.
5. Listar los registros de todas las personas.
6. Calcular el promedio de las edades de todas las personas.
4854 7. Terminar el programa.

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

Se le pide al usuario que ingrese los datos de la persona


Cédula: 01064634657
4863 Nombre: Juan
Apellido: Pérez
Edad: 23

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

Si la cédula que se busca no se encuentra en la cadena que contiene la información de


todas las personas, se muestra un mensaje de error: “La persona no ha sido registra-
4875 da.”.

Para este ejemplo, el resultado de la actualización de la cadena que contiene la infor-


mación de las personas es:
4878 01064634657,Diego,Sarmiento,25;01064636638,Víctor,Guzmán,21;01064688644,Pedro
,Flores,20;

Eliminación

4881 Se le pide al usuario que ingrese la cédula de la persona a eliminar

• Cédula: 01064634657

Se elimina el registro de esa persona de la cadena de personas:


4884 01064636638,Víctor,Guzmán,21;01064688644,Pedro,Flores,20;

214
Angel Vázquez-Patiño Universidad de Cuenca

Visualización

Se le pide al usuario que ingrese la cédula

4887 • Cédula: 01064634657

El programa muestra el resto de campos


Nombre: Juan
4890 Apellido: Pérez
Edad: 23

Si la cédula que se busca no se encuentra en la cadena que contiene la información de


4893 todas las personas, se muestra un mensaje de error: “La persona no ha sido registra-
da.”.

Listar

4896 Se muestran uno a uno todos los registros de personas


Cédula: 01064636638
Nombre: Víctor
4899 Apellido: Guzmán
Edad: 21

Cédula: 01064688644
4902 Nombre: Pedro
Apellido: Flores
Edad: 20

4905 Promedio de edades

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).

4911 1. E151 Implemente un programa que pida al usuario el tamaño de un arreglo y


que pida sus datos (números reales). Solicitar al usuario un número a buscar
dentro del arreglo dado y que el programa determine si el número está en el
4914 arreglo y, de ser así, en qué posición está.

2. Implemente una función llamada busquedaSecuencial que tenga como paráme-


tros un arreglo y un elemento a buscar en el arreglo. La función debe regresar
4917 la posición índice del elemento si se encuentra en el arreglo y -1 si no lo en-
cuentra en el arreglo.

3. Implemente un programa que lea números enteros y que los almacene en un


4920 arreglo. Preguntar al usuario por un número y determinar si este número está
en el arreglo usando búsqueda binaria.

4. Implemente la función busquedaBinaria que tenga como parámetros un arreglo


4923 y un elemento a buscar en el arreglo. La función debe regresar la posición ín-
dice del elemento si se encuentra en el arreglo y, si no se encuentra en el arre-
glo, regresar un -1.

4926 5. El siguiente es un programa que le permitirá tener una idea de la eficiencia de


los métodos de búsqueda en cuanto al número de comparaciones necesarias
que se llevan a cabo en cada algoritmo y el tiempo que se demora cada uno en
4929 la ejecución.

a) Implemente una función que reciba un arreglo de n elementos enteros y el


algoritmo a utilizar para buscar uno de los elementos (son dos parámetros:
4932 arreglo de elementos y algoritmo de búsqueda). La función devuelve la po-
sición en la que se encuentra el elemento (si no se encuentra, devuelve -1),
el número de comparaciones realizadas para encontrarlo y el tiempo de eje-
4935 cución en segundos.

b) Genere un arreglo de 21 elementos con números aleatorios enteros en el


rango [-15, 15]. Los números no deben repetirse en el arreglo.

4938 c) Utilice la función desarrollada en el literal a para buscar un elemento dado


en el arreglo generado con cada uno de los algoritmos de búsqueda. Para

216
Angel Vázquez-Patiño Universidad de Cuenca

efectos de comprobación de su programa, haga que la búsqueda sea de un


4941 número que está en el arreglo (lo escoge al azar). Con los resultados haga
una tabla en donde se muestre el algoritmo, el número de comparaciones y
el tiempo:
4944 ================================================
Tabla de comparación para algoritmos de búsqueda
================================================
4947 --------------------------------------------------------
Algoritmo # comparaciones Tiempo [seg.]
--------- --------------- -------------
4950 Algoritmo 1 ## ##
Algoritmo 2 ## ##
... ... ...
4953 --------------------------------------------------------

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 ================================================

Los resultados presentados son el promedio de la búsqueda de un


elemento al azar (se asegura que está dentro del arreglo) en los 1000
4968 arreglos generados aleatoriamente. Con el mismo arreglo generado
aleatoriamente, se realizó la búsqueda del mismo elemento (elegido al

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

e) De acuerdo a los datos, discuta la eficiencia de los métodos estudiados.


¿Qué método es el mejor y por qué?, ¿Qué método es el peor y por qué?,
4998 ¿Cuándo utilizaría cada método?, etc.

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).

5004 1. * Dada la siguiente lista {a, m, c, j, k} después de dos pasadas de un algorit-


mo de ordenación, la lista ha quedado {a, c, m, j, k}. ¿Qué algoritmo de orde-
namiento se está utilizando?

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.

3. Dada la lista de letras {o, f, e, s, a, q, v, o}, escribir cómo evolucionaría dicha


5016 lista hasta quedar completamente ordenada de manera ascendente mediante:
a) ordenamiento de burbuja, b) algoritmo de selección y c) algoritmo de inser-
ció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}.

5. Genere un arreglo de 11 elementos guardando en cada elemento un número en-


5025 tero aleatorio entre [1, 15]. Grafique en un histograma horizontal los valores de
cada elemento y vaya mostrando paso a paso la ordenación. Haga dos versio-
nes: una para ordenación ascendente y otra ordenación descendente. Por ejem-
5028 plo, si se tuvieran sólo 3 elementos las gráficas serían las siguientes:
Iteración 0 (elementos sin ordenar):
E01 *****

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 *****

¡Fin! Los elementos se ordenaron luego de 2 iteraciones.

6. Genere un arreglo de 13 elementos guardando en cada elemento un número en-


5043 tero aleatorio entre [0, 10]. Grafique en un histograma horizontal los valores de
cada elemento y vaya mostrando paso a paso la ordenación. Haga dos versio-
nes: una para ordenación ascendente y otra ordenación descendente. Además
5046 se debe presentar un menú para elegir el método de ordenamiento a utilizar.

7. Se ha recolectado información del peso y la estatura de n personas. Implemen-


te una función que reciba una matriz de 2×n en donde en la primera fila estén
5049 los datos de peso y en la segunda fila los datos de la estatura. La función de-
vuelve la matriz ordenada de manera ascendente o descendente con respecto al
peso o a la estatura. La función recoge como parámetros matriz, optOrdena-
5052 miento, optVariable, donde optOrdenamiento indica si es ordenamiento ascen-
dente o descendente (una cadena asc o desc) y optVariable indica la variable
con respecto a la cual se ordena (una cadena peso o estatura).

5055 8. Se ha recolectado información del peso y la estatura de n personas. Implemen-


te una función que reciba una matriz de 2 x n en donde en la primera fila es-
tén los datos de peso y en la segunda fila los datos de la estatura (para reali-
5058 zar pruebas usted puede generar números reales aleatorios para el peso y la es-
tatura de las n personas). La función devuelve la matriz ordenada de manera

221
Angel Vázquez-Patiño Universidad de Cuenca

ascendente o descendente con respecto al peso o a la estatura. La función reco-


5061 ge como parámetros matriz, optOrdenamiento, optVariable, algOrdenamiento,
donde optOrdenamiento indica si es ordenamiento ascendente o descendente
(una cadena asc o desc), optVariable indica la variable con respecto a la cual
5064 se ordena (una cadena peso o estatura) y algOrdenamiento indica qué algorit-
mo de ordenamiento que se desea utilizar.

9. Implemente un programa que permita la introducción de 10 números enteros


5067 en un arreglo y, a través de un menú, la selección de uno de los métodos de or-
denación estudiados (e.g., Selección, Burbuja, Inserción, Inserción binaria,
Shell). Terminará con la presentación por pantalla del arreglo ordenado.

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.

12. Ingrese nombres de equipos de fútbol con su respectivo puntaje; visualizarlos


5085 ordenados por el puntaje mostrando el número de iteraciones que se utilizaron.
El usuario puede seleccionar el método que quiere utilizar para hacer la orde-
nación.

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.

a) Implemente una función que reciba un arreglo de n elementos enteros y el


algoritmo a utilizar para ordenarlos (dos parámetros: elementos y algorit-

222
Angel Vázquez-Patiño Universidad de Cuenca

5094 mo). La función devuelve los elementos ordenados, el número de compara-


ciones y el número de intercambios realizados para ordenarlos, y el tiempo
de cálculo en segundos.

5097 b) Genere un arreglo de 11 elementos con números aleatorios enteros en el


rango [-9, 9].

c) Utilice la función desarrollada para ordenar el arreglo generado con cada


5100 uno de los algoritmos de ordenación. Con los resultados haga una tabla en
donde se muestre el algoritmo, el número de comparaciones, el número de
intercambios y el tiempo de cálculo en segundos:
5103 ====================================================
Tabla de comparación para algoritmos de ordenamiento
====================================================
5106 ---------------------------------------------------------------------
Algoritmo # comparaciones # intercambios Tiempo [seg.]
--------- --------------- -------------- -------------
5109 Algoritmo 1 ## ## ##
Algoritmo 2 ## ## ##
Algoritmo 3 ## ## ##
5112 ... .. .. ..
---------------------------------------------------------------------

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

Los resultados presentados son el promedio del ordenamiento de 9999


arreglos generados aleatoriamente. Con el mismo arreglo generado
5127 aleatoriamente, se realizó el ordenamiento con todos los algoritmos;
así con cada uno de los 9999 arreglos.

---------------------------------------------------------------------
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 -----------------------------------------------------------------

e) De acuerdo a los datos, discuta la eficiencia de los métodos estudiados.


¿Qué método es el mejor y por qué?, ¿Qué método es el peor y por qué?,
5163 ¿Cuándo utilizaría cada método?, etc.

14. El ejercicio está dividido en los siguientes pasos:

a) Implemente una función que devuelva un número entero aleatorio en el


5166 rango [LímInferior, LímSuperior].
b) Genere un arreglo de n elementos, donde n es un número aleatorio entre 25
y 50.
5169 c) Llene el arreglo con números aleatorios enteros entre -99 y 99.
d) La mitad (si n/2 no es entero, trúnquelo) del arreglo ordénelo con el méto-
do de la burbuja.
5172 e) La otra mitad del arreglo ordénelo con el método de la selección.
f) Con las dos mitades ordenadas, aplique el método de la inserción para or-
denar el arreglo completo.

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).

Nota 2: Cada método de ordenamiento debe estar implementado en una fun-


5178 ción diferente.

15. *E152 El ejercicio está dividido en los siguientes pasos:

a) Implemente una función que devuelva un número entero aleatorio en el


5181 rango [LímInferior, LímSuperior].

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

5199 *E153 Menú, ordenamiento y búsqueda de registros

Escriba un programa que muestre el siguiente menú:

1. Ingreso de datos de N de estudiantes


5202 2. Ordenar por una columna especificada por el usuario
3. Buscar un registro por apellido
4. Listar todos los datos, ordenados alfabéticamente por apellido
5205 5. Salir

Los datos de cada estudiante son: el nombre y apellido y la nota promedio (entre 1 y
20 puntos, inclusivo). Por ejemplo:

5208 Nombre : Juan


Apellido : Pérez
Promedio : 18

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

5214 *E154 Calificaciones de estudiantes

El objetivo del programa es gestionar calificaciones de estudiantes. Se deben registrar


n estudiantes (n ≥ 3, validar). De cada uno de los estudiantes se deben ingresar, el
5217 nombre y una calificación; los datos se registran en arreglos separados. A partir de
los dos arreglos se deben ordenar los datos de acuerdo al nombre del estudiante de
manera ascendente, obteniendo como resultado una matriz de nx2. Sobre la matriz
5220 resultante se tienen que obtener los nombres de los estudiantes que tienen la mínima
calificación y la máxima calificación. Además, se deben obtener los nombres de los
tres estudiantes con las máximas calificaciones y los nombres de los tres estudiantes
5223 con las mínimas calificaciones.

Detallando los requerimientos utilizando un ejemplo, se tendría lo siguiente:

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.

5250 A continuación se muestra un ejemplo de ejecución del programa:


Ingreso de datos
================
5253 Dimensión de la matriz
n: 3
m: 4

5256 Rango para generación de números aleatorios


inf: -2
sup: 10

5259 Matriz generada


8 4 9 5
2 1 7 4
5262 3 5 -1 2

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

Luego de ordenadas las filas


9 8 5 4
5271 1 2 4 7
5 3 2 -1

Luego de ordenadas las “diagonales derecha–izquierda”


5274 8 2 1 5
4 3 5 -1
9 7 4 2

5277 Luego de ordenadas las “diagonales izquierda–derecha”


8 7 9 5
5 1 4 4
5280 3 2 -1 2

*E155 Manejo de datos de personas

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:

a) Ordenar los datos de acuerdo a lo que se especifique en el momento de la eje-


5292 cución del programa. Por ejemplo, puede ordenarse por apellido, o por edad.
Se debe mostrar los datos ordenados con todos los campos separados por co-
mas. Si se ordena por apellido, se muestra: APELLIDO, NOMBRE, EDAD,
5295 PROFESIÓN. Si se ordena por profesión, se muestra: PROFESIÓN, NOM-
BRE, APELLIDO, EDAD.

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”.

Debe mostrarse un menú de opciones que permita ingresar información, buscar y


5301 mostrar los datos ordenados según el criterio que especifique el usuario.

231
Angel Vázquez-Patiño Universidad de Cuenca

10. Archivos

Miscelánea

5304 1. ¿Qué significa EOF?

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

5316 y el segundo archivo tiene la clave


e54 h
5ty o
5319 845 l
2w3 a

el archivo que tiene que escribir, llamado descifrado.txt contendrá


5322 hola

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

, ,

4. Dado un archivo csv con la información de ventas de una persona en diferentes


5337 fechas, escriba un archivo txt que contenga el total de ventas que la persona
tuvo en cada año diferente. El archivo csv tiene el formato (los datos pueden
ser más, esto sólo indica el formato)
5340 Fecha, Ventas
01/01/1998, 23.5
03/01/1998, 98.7
5343 04/02/1999, 95.6

El archivo txt tiene el formato


5346 Año, Ventas
1998, 122.2
1999, 95.6

5349 ,

5. asdf

*E157 Calidad del aire en Cuenca1

5352 1. Lea el archivo Calidad del aire en Cuenca 15 - 17 nov


2024.csv. La resolución temporal de las observaciones de la calidad del aire
es de minutos (cada minuto hay un dato).

5355 Las primeras tres líneas del archivo se ven así:

1 Ejercicio tomado en el examen interciclo de la asignatura de Programación orientada al cálculo


científico, semestre septiembre 2024 - febrero 2025.

233
Angel Vázquez-Patiño Universidad de Cuenca

No.,Fecha/hora,Partículas finas (PM2.5),Ozono (O3),Monóxido de


Carbono (CO),Dióxido de Nitrógeno (NO2),Dióxido de Azufre
5358 (SO2)
1,2024-11-15 00:00:00,26.14,6.14,0.16,25.53,0.14
2,2024-11-15 00:01:00,26.51,6.26,0.18,26.26,0.11

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.

5367 *E158 JOIN estilo base de datos1

El archivo Examen suspensión Edades.csv contiene las cédulas de 10.000 estu-


diantes y sus respectivas edades. El archivo Examen suspensión Calificacio-
5370 nes.csv contiene las cédulas de los mismos 10.000 estudiantes y sus respectivas ca-
lificaciones; las calificaciones pueden ser entre 1 a 5 calificaciones (están en la misma
fila). Su tarea es una sola: generar un archivo DB.csv (el separador de valores debe
5373 ser la coma) en donde cada fila contenga la cédula de cada uno de los 10.000 estu-
diantes, su respectiva edad y sus respectivas calificaciones.

Nota: el archivo DB.csv no debe contener comas sin valores al final de la filas.

5376 *E159 Distribuciones de edades de futbolistas2

Lea el archivo PlayerPersonalData.csv3 y genere una figura con tres diagramas


de caja. El primer diagrama de caja muestra la información de la edad de los jugado-
5379 res menores a 26 años, el segundo diagrama de caja muestra la información de los ju-
gadores cuya edad está en el intervalo [26, 30] y el tercer diagrama de caja muestra la
información de los jugadores mayores a 30 años. La siguiente figura puede servir de

1 Ejercicio tomado en el examen de suspensión de la asignatura de Programación orientada al


cálculo científico, semestre marzo-agosto de 2024.
2 Ejercicio tomado en el examen final de la asignatura de Programación orientada al cálculo
científico, semestre marzo-agosto de 2024.
3 El archivo se puede descargar desde https://www.kaggle.com/datasets/rehandl23/fifa-24-player-
stats-dataset.

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.

*E160 Remuestreo con ventana1

5385 Se tienen observaciones producidas por algún instrumento de medición en un archivo


de valores separados por comas (extensión .csv). Las observaciones son valores nu-
méricos reales dispuestos en una sola columna que no tiene ninguna cabecera (i.e.,
5388 sólo hay una columna de valores numéricos y nada más). Con los datos del archivo
realice cuatro operaciones con una ventana rodante; las operaciones son mínimo, me-
dia, mediana y máximo. Para realizar las operaciones se debe proveer la longitud de
5391 la ventana.

El procedimiento a seguir se demuestra con el siguiente ejemplo de archivo que tiene


10 observaciones. Suponga que la ventana rodante elegida es de longitud 5.

1 Ejercicio tomado en el examen interciclo de la asignatura de Programación orientada al cálculo


científico, semestre marzo-agosto de 2024.

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

Cálculos de ventana rodante


10
9
8
7
Obs.
6
Observación

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

Cálculos de ventana rodante


10
9
8
7
Obs.
6
Observación

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

5415 *E161 El juego de las palabras cosidas

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).

Ejemplos de la ejecución del juego se muestran a continuación:


a s

Jugador 1: amor Jugador 1: solo


Jugador 2: ramo Jugador 2: omelette
Jugador 1: oso Jugador 1: elefante
Jugador 2: oca Jugador 2: estocada
Jugador 1: amor Jugador 1: alternativo
Jugador 2: roca Jugador 2: oso
Jugador 1: ala Jugador 1: si
Jugador 2: ala Jugador 2: isla
Jugador 1: ala Jugador 1: amor
Jugador 2:
Palabras repetidas sucesivas: 2 Jugador 1:
Palabras sucesivas con primera letra
incorrecta: 0

240
Angel Vázquez-Patiño Universidad de Cuenca

"Enters" sucesivos: 0 Palabras repetidas sucesivas: 0


Palabras sucesivas con primera letra
incorrecta: 0
¡Ganó jugador 2!
"Enters" sucesivos: 2
Jugador 1: 10 puntos.
Jugador 2: 11 puntos.
¡Ganó jugador 1!
Jugador 1: 27 puntos.
Jugador 2: 23 puntos.

i z

Jugador 1: sla Jugador 1: zorro


Jugador 2: mora Jugador 2: oro
Jugador 1: oso
Palabras repetidas sucesivas: 0 Jugador 2: oro
Palabras sucesivas con primera letra Jugador 1: oso
incorrecta: 2
"Enters" sucesivos: 0
Palabras repetidas sucesivas: 2
Palabras sucesivas con primera letra
¡Hubo empate! incorrecta: 0
Jugador 1: 0 puntos. "Enters" sucesivos: 0
Jugador 2: 0 puntos.
¡Ganó jugador 1!
Jugador 1: 8 puntos.
Jugador 2: 6 puntos.

Un ejemplo de archivo escrito es


5439 Jugador 1, Jugador 2
antonio,roma
,oso

241
Angel Vázquez-Patiño Universidad de Cuenca

5442 *E162 El método de la trisección

El método numérico llamado método de la trisección no existe, sin embargo, resulta


en un práctica interesante de programación.

5445 La única diferencia entre el método de la bisección y el de la trisección es que, en es-


te último, el intervalo de búsqueda de la raíz se divide en tres parte iguales.

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.

5463 El error aproximado relativo se calcula con la fórmula

donde xi es la última aproximación de la raíz y x i-1 es la penúltima aproximación de


la raíz. Como para calcular se necesitan al menos dos aproximaciones, haga que la
5466 primera aproximación ( ) sea el valor medio entre a y b (límites del intervalo inicial
de búsqueda [a, b]).
Implemente el método de la trisección para encontrar aproximaciones de la raíz de la
5469 función (vea las gráficas a continuación). El método de-
be funcionar para cualquier intervalo inicial de búsqueda (asuma que siempre se cum-
ple que ).

242
Angel Vázquez-Patiño Universidad de Cuenca

5472

Para evaluar la función se debe utilizar una aproximación de me-


diante la serie de Maclaurin

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

*E163 Metro Interstate Traffic Volume Data Set

Este ejercicio utiliza la base de datos presentada en el Repositorio de Machine Lear-


5499 ning ubicado en https://is.gd/HoE9rP. La base de datos tiene registros con nueve
atributos (columnas/campos), de los cuales los más importantes para este ejercicio
son: temp, date_time y traffic_volume (temperatura en grados Kelvin, fecha y hora
5502 del registro y el volumen de tráfico). Los registros están a escala horaria, i.e., cada
hora existe un registro (vea los datos del atributo date_time).

1. Agregue los datos de temperatura (atributo temp) a escala mensual, calculan-


5505 do la media de temperatura de cada mes. Esto quiere decir que la temperatura
debería estar a escala mensual y no horaria. Agregar los datos significa que to-
mará todos los valores de temperatura de cada mes, calculará la media de esos
5508 datos y lo presentará como la temperatura de ese mes. Por ejemplo, si se tu-
vieran 8760 registros (los datos de un año a escala horaria), luego de la agre-
gación, se tuvieran solamente 12 registros (uno por mes, i.e., a escala men-
5511 sual). Luego de realizado el cálculo, guarde en un nuevo archivo, llamado se-
rieMensual.csv, la nueva serie temporal (a escala mensual). El archivo serie-
Mensual.csv solamente debe contener dos columnas: date_time y temp. Ade-
5514 más, grafique los datos de temperatura a escala mensual exactamente (títulos,
características de ejes, etc.) como se muestra en el gráfico (izquierda) que si-
gue (el gráfico usa los datos reales del archivo Metro_Interstate_Traffic_Volu-
5517 me.csv).

244
Angel Vázquez-Patiño Universidad de Cuenca

2. Grafique el tráfico diario por horas y muéstrelo como en el gráfico de arriba


(derecha; el gráfico usa los datos reales del archivo
5520 Metro_Interstate_Traffic_Volume.csv). Para esto, sume el tráfico (atributo
traffic_volume) por cada hora del día, sin importar la fecha. Así, en total, ten-
drá doce valores que corresponden a las sumas del tráfico de cada hora del día
5523 (vea el gráfico).

*E164 Formación de grupos de trabajo con archivos

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.

5541 Por ejemplo:


N: 2
Grupo 1 Suma: 19
5544 Dayanna Marcela Pacheco Fajardo 9
Maite Cristina Quinde Peralta 10

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

El siguiente grupo tiene menos de 2 estudiantes


5553 Grupo 4 Suma: 10
Emilia Carolina Quito Pacurucu 10

Los siguiente estudiantes se excluyen de los grupos


5556 Edwin Humberto Buri Guaman
Anthony José Loayza Aguilar
Jean Pierre Quizhpilema Marín

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.

5565 *E165 Concrete Compressive Strength Data Set

En este ejercicio se usa datos acerca de la resistencia del concreto de acuerdo a su


compuesto y a las cantidades utilizadas de cada componente. El conjunto de datos
5568 está ubicado en https://archive.ics.uci.edu/ml/datasets/concrete+compressive+stren-
gth. Con el fin de tener una idea más clara acerca de la influencia de los componentes
en la resistencia del concreto (dado en megapascales, mPa), se pide generar gráficas
5571 de cada par de componentes y la resistencia correspondiente.

Los componentes y/o variables de los que se cuenta con datos, y las correspondientes
unidades, son los siguientes:

5574 1. Cemento, en kg/m3


2. Escoria, en kg/m3
3. Ceniza, en kg/m3
5577 4. Agua, en kg/m3
5. Superplastificante, en kg/m3
6. Agregado grueso, en kg/m3
5580 7. Agregado fino, en kg/m3
8. Edad, en días

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:

5598 1. Cemento: "."


2. Escoria: "v"
3. Ceniza: "1"
5601 4. Agua: "s"
5. Superplastificante: "p"
6. Agregado grueso: "P"
5604 7. Agregado fino: "x"
8. Edad: "D"

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

Resistencia del Concreto en relación a los


componentes Componente1 y Componente2
5613 Puntos en esta gráfica: N

donde componente1, componente2 y N hacen referencia al componente del concreto


que indica el eje x de la gráfica, al componente que indica el eje y de la gráfica y el
5616 número de puntos que tiene esa gráfica, respectivamente.

Cada gráfica generada debe ser guardada (utilizando programación y no de manera


manual) con el nombre componente1_componente2.png, donde componente1 y com-
5619 ponente2 hacen referencia al componente del concreto que indica el eje x de la gráfica
y al componente que indica el eje y de la gráfica (e.g., Edad_Superplastificante.p-
ng, Agregado grueso_Escoria.png). Fíjese que el formato del archivo es png.

5622 Finalmente, se pide que se escriba un archivo con el nombre maxminresultados.txt


que contenga información de la(s) gráfica(s) que tiene(n) el número mínimo y el nú-
mero máximo de puntos mostrados. El siguiente es un ejemplo del contenido del ar-
5625 chivo mencionado, pero que no tiene información real relacionada al conjunto de da-
tos analizado (solo muestra cómo debe estar escrita la información en el archivo).
Las gráficas con el mínimo de puntos mostrados (124) son:
5628 Ceniza y Cemento
Cemento y Ceniza
Agua y Agregado fino
5631 Agregado fino y Agua
Las gráficas con el máximo de puntos mostrados (984) son:
Cemento y Agregado fino
5634 Agregado fino y Cemento
Edad y Escoria
Escoria y Edad

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

*E166 I Congreso internacional de ingeniería civil1

5640 El primer congreso internacional de ingeniería civil que se desarrolló en la Universi-


dad de Cuenca del 27 al 29 de noviembre de 2024, fue organizado por el Departamen-
to de Ingeniería Civil y la Cámara de la Construcción de Cuenca. Hubieron inscritos
5643 de parte del Departamento y de la Cámara, además, hubo registro de asistencia y un
cuestionario para recibir un certificado de aprobación. La anterior información está
en los archivos
5646 • CIIC2024_inscritos_dapartamento.csv
• CIIC2024_inscritos_cámara.csv
• CIIC2024_regitro_asistencia.csv
5649 • CIIC2024_cuestionario.csv

Se pide responder

1. ¿Cuál fue el número de inscritos en el congreso? De esos inscritos, ¿cuál es el


5652 número de mujeres y de hombres? ¿cuál es el número de estudiantes y de pro-
fesionales? Si es posible, ¿cuántos fueron de Cuenca y cuántos de fuera de
Cuenca?

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?

5667 Se pide generar

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.

1 Ejercicio tomado en la prueba 2 de la asignatura de Programación orientada al cálculo científico,


semestre septiembre 2024 - febrero 2025

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

5688 11. Miscelánea de Ejercicios

Un buen lugar para comenzar a practicar más está en http://www.lab.dit.upm.es/


~fprg/examenes/

5691 *E167 Combate de pokemones

Vea el vídeo https://youtu.be/SDv2vOIFIj8.

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

Nombre del primer Pokemon: Pikachu


5730 Poder de ataque del primer Pokemon: 55
Nombre del segundo Pokemon: Jigglypuff
Poder de ataque del segundo Pokemon: 45

5733 Combate de pokemones


1.- Ingresar datos de los pokemones
2.- Simular combate
5736 3.- Terminar
Ingresar opción <1-3>: 2

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

3.- Turno: Pickachu (55 de poder). (Sí ataca, azar(2) devolvió 1)


Vidas: Pikachu (100) vs Jigglypuff (-10)

5745 Pokemon ganador: Pikachu en 3 turnos.

Combate de pokemones
1.- Ingresar datos de los pokemones
5748 2.- Simular combate
3.- Terminar
Ingresar opción <1-3>: 3

5751 (termina el programa)

254
Angel Vázquez-Patiño Universidad de Cuenca

Solución de un sistema de ecuaciones por matrices

Conversión de un número en base diez a sistema binario

5754 Conversión de un número en base binaria a sistema en base diez

Cálculo de las tres alturas de un triángulo dadas las longitudes de sus


lados

5757 Valor futuro de una inversión

Cálculo del capital inicial

Cálculo de la tasa de interés

5760 Cálculo del número de años

Media, mediana y varianza de N datos

Transformación de números decimales a romanos

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:

Romano (miles) Decimal

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

E168 Dígitos de un número

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.

*E169 Pirámide invertida

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

*E170 Cubos e impares


5808 Considere la siguiente propiedad:
• Sumando el primer número impar positivo se obtiene el primer cubo.
• Sumando los dos siguientes impares se obtiene el segundo cubo.
5811 • Sumando los tres siguientes impares se obtiene el tercer cubo, y así
sucesivamente.
Expresado de forma matemática:
5814 13 = 1 =1
2 =3+5
3
=8
3 = 7 + 9 + 11
3
= 27
5817 4 = 13 + 15 + 17 + 19 = 64
3

El usuario ingresa un entero positivo n. El programa debe mostrar los n primeros


cubos calculándolos mediante la propiedad descrita.

257
Angel Vázquez-Patiño Universidad de Cuenca

5820 *E171 Cantidad de dígitos fijo de números mostrados

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

Lo que se muestra en pantalla es:


5835 01
04
07
5838 10

Ejemplo 2:
Límite inferior: 1
5841 Límite superior: 1500
Paso: 500

Lo que se muestra en pantalla es:


5844 0001
0501
1001

258
Angel Vázquez-Patiño Universidad de Cuenca

5847 Algoritmo de Gauss y Método de eliminación de Gauss

Para la resolución de sistemas de ecuaciones lineales existe el método de factorización


LU. Un algoritmo que se utiliza para implementar este método es el algoritmo de
5850 Gauss que a su vez se utiliza en el método de eliminación de Gauss. Realice la imple-
mentación de ambos algoritmos basándose en la explicación dada en el libro de Quar-
teroni et al. (2014, pp. 146–147).

5853 1. E172 Implemente el algoritmo de Gauss (página 146).

2. E173 Implemente el método de eliminación de Gauss (página 147).

Métodos de Jacobi y de Gauss-Seidel

5856 Vea el libro de Quarteroni et al. (2014, pp. 168–173).

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

1. Diseñar una función recursiva que realice una búsqueda binaria.

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).

1. Implemente la interpolación polinómica mediante la matriz de Vandermonde.

5868 2. Implemente la interpolación polinómica de Lagrange para encontrar el polino-


mio interpolador que pase por tres puntos.

3. Implemente la interpolación polinómica de Lagrange para encontrar el polino-


5871 mio interpolador que pase por cuatro puntos.

259
Angel Vázquez-Patiño Universidad de Cuenca

E175 Integración numérica

Para resolver los siguientes ejercicios revise la sección 4.3 Numerical integration del
5874 libro de Quarteroni et al. (2014).

1. Implemente la fórmula de cuadratura de punto medio compuesto para integra-


ción numérica.

5877 2. Implemente la fórmula trapezoidal compuesta para integración numérica.

3. Implemente la fórmula de cuadratura de Simpson para integración numérica


con un polinomio integrador de Lagrange de segundo grado.

5880 4. Implemente la fórmula de cuadratura de Simpson para integración numérica


con un polinomio integrador de Lagrange de tercer grado.

Ecuaciones diferenciales ordinarias (EDO)

5883 • Implemente el método de Euler y úselo para integrar numéricamente la ecua-


ción

dy/dx = F(x, y) = − 2x3 + 12x2 − 20x + 8.5

5886 desde x0 = 0 hasta xn = 4 con un paso de discretización de h = 0.2 (i.e., x1 = x0


+ 0.2, x2 = x1 + 0.2, x3 = x2 + 0.2, etc.). La condición inicial en x0 = 0 es y0 =
1.

5889 El método de Euler consiste en dividir el intervalo que va desde x 0 a xn en su-


bintervalos de ancho

(27)

5892 y aplicar la fórmula iterativa

(28)

Para comprobar sus resultados sepa que la integral analítica de la función


5895 dy/dx es y = − 0.5x4 + 4x3 − 10x2 + 8.5x + 1. La figura 15 muestra las gráfi-
cas de la solución analítica y la solución numérica cuyos valores de yi (aproxi-
mados) usted debe encontrar. La tabla 2 muestra los valores de los puntos de
5898 la aproximación mediante el método de Euler.

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.

Tabla 2: 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

dy/dx = f(x, y) = − 2x3 + 12x2 − 20x + 8.5

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].

El método de Euler consiste en dividir el intervalo que va desde x0 a xn en su-


5913 bintervalos de ancho h y aplicar la fórmula iterativa

(29)

Para comprobar sus resultados sepa que la integral analítica de la función


5916 dy/dx (lo que se quiere aproximar) es y = − 0.5x4 + 4x3 − 10x2 + 8.5x + 1.

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

Para que sepa cómo trabaja la función my_range, a continuación se muestran


5928 algunos ejemplos de su ejecución:
Desde 0 a 4 con paso 0.5: 0, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0
Desde 0 a 1 con paso 0.3: 0, 0.3, 0.6, 0.9
5931 Desde 0 a 4 sin especificar el paso: 0, 1, 2, 3, 4

2. Escriba una función llamada my_euler que implemente el método de Euler


y devuelva la serie de números que corresponden a las aproximaciones de y
5934 calculadas para los diferentes x0, x1, …, xn (estos varían de acuerdo al h usado).
Para que esa función sea general (i.e., se pueda usar con otras funciones dife-
rentes a la específica de este ejercicio, f(x, y)) haga que uno de los parámetros
5937 sea una función (recuerde lo que son las funciones de orden superior) y con esa
función genere los resultados que devuelve. En la serie de números devuelto
siempre se incluye la condición inicial al comienzo, que siempre es dado con el
5940 ejercicio, en este caso el 1. Recuerde cuál es la idea fundamental de usar fun-
ciones para poder 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
5943 se comentan las funciones) y en ese comentario ponga si usar tuplas, listas,
diccionarios o conjuntos es la mejor opción para devolver (return) los resulta-
dos y porqué (use la mejor opción para devolver sus resultados). Ejemplos de
5946 resultados devueltos por esa función (aproximaciones de y en los diferentes
x’s), con f(x, y) y las condiciones iniciales de este ejercicio, son los siguientes:
Con xn=2 y h=0.5: 1, 5.25, 5.875, 5.125, 4.5
5949 Con xn=1 y h=0.33: 1, 3.805, 4.83952558, 4.82375422
Con xn=4 y h=0.21 (he redondeado a un decimal para mostrar): 1, 2.8,
3.8, 4.2, 4.3, 4.0, 3.7, 3.4, 3.1, 2.9, 3.0, 3.1, 3.5, 4.0, 4.5, 5.1,
5952 5.5, 5.7, 5.5, 4.7

3. Utilizar la(s) función(es) implementadas para comparar las aproximaciones


de y con h = {0.5, 0.33, 0.21, 0.14, 0.09} y comparar cuáles son las diferencias
5955 en los resultados. Esos resultados deben ser mostrados en una gráfica como se
muestran en los ejemplos siguientes (son dos imágenes independientes, no se
generan subplots; debe poner el título y las etiquetas de los ejes como se mues-

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.

*E176 Resolución de EDOs con un método multipaso

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).

5964 El método consiste en dividir el intervalo en el que se va a hacer la integración numé-


rica, que va desde a , en subintervalos de ancho

y aplicar la fórmula iterativa

5967 (30)

con . Esta función es la que está en el miembro derecho de la


fórmula iterativa y es la derivada de la función que es la que se trata de aproximar
5970 con dicha fórmula (la función se quiere aproximar). La evaluación de la función
en los puntos , y es , y , y en general
, además, y . está dada por la condi-
5973 ción inicial del problema, esto es, . Además, en general, , pero
recuerde que no es conocida, así que esta información es importante para hacer la
graficación de la aproximación de .

264
Angel Vázquez-Patiño Universidad de Cuenca

5976 Implemente la fórmula de Adams-Bashforth, utilizando funciones donde se deba, y


úsela para integrar numéricamente la ecuación

desde hasta con un tamaño de paso de (i.e., ,


5979 , , etc.). La condición inicial en es , esto es,
.

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).

*E177 Tiempo de Respuesta Facebook

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).

5994 Genere un menú con tres opciones:

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]: _

Del menú se sale solamente cuando el usuario escribe la opción 3.

Cuando el usuario elige la opción 1, el usuario indica un número N de registros a in-


5997 gresar. El ingreso de cada registro implica escribir una cadena de texto en el formato
“00h01 23h59”, que significa la hora y minuto (00h01) en que una persona escribió a
la página en Facebook y la hora y minuto (23h59) en la que el administrador de la
6000 página en Facebook respondió a ese mensaje1 (la segunda hora siempre es mayor o
igual a la primera). Luego de que el usuario ingrese esos N registros, debe mostrar el
Tiempo de Respuesta según lo define Facebook y luego un histograma (vea la ima-
6003 gen), con clases correspondientes a las diferentes horas que se demoran en responder
a los mensajes (24). El gráfico debe tener las etiquetas Frecuencia y Tiempo de Res-
puesta como se muestra.

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

6012 12. Librería scipy

*E178 Distribución de estadístico1

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

13. ¿Qué Hace el Algoritmo/Programa?

6024 1. * ¿Cuál es el valor final de las variables a, b y c?


Proceso sin_titulo
a<-5
6027 b<-6
c<-7
aux<-a
6030 b<-a
c<-b
Escribir a, b, c
6033 FinProceso

2. * ¿Cuál es el valor de la variable x?


Proceso sin_titulo
6036 Definir x Como Entero
Definir z Como Entero

1 Ejercicio tomado en el examen final de la asignatura de Programación orientada al cálculo


científico, semestre marzo-agosto de 2024.

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

6051 3. * ¿Cuál es el resultado de ejecutar el siguiente pseudocódigo?


Proceso valorC
c<-50
6054 Mientras c>=0 Hacer
Escribir c
c<-c+1
6057 Fin Mientras
FinProceso

4. * ¿Cuál es el resultado de ejecutar el siguiente pseudocódigo?


6060 Proceso sin_titulo
Para i<-1 Hasta 5 Con Paso 1 Hacer
Segun i Hacer
6063 1:
Escribir "a"
2:

268
Angel Vázquez-Patiño Universidad de Cuenca

6066 Escribir "b"


3:
Escribir "c"
6069 De Otro Modo:
Escribir "d"
Fin Segun
6072 Fin Para
FinProceso

5. ¿Qué realiza o cuál es el fin del siguiente algoritmo o programa?


6075 Proceso sin_titulo
Leer var1
Leer var2

6078 Mientras var1<var2 Hacer


Leer var1
Leer var2
6081 Fin Mientras

var3<-0

Mientras var1 >= var2 Hacer


6084 var1<-var1-var2
var3<-var3+1
Fin Mientras

6087 Escribir var3


Escribir var1
FinProceso

269
Angel Vázquez-Patiño Universidad de Cuenca

6090 6. ¿Qué realiza o cuál es el fin del siguiente algoritmo o programa?


Proceso sin_titulo
var1<-10
6093 Leer var2

Mientras var2<1 Hacer


Leer var2
6096 Fin Mientras

Para var3<-1 Hasta var2 Con Paso 1 Hacer


var4<-1

6099 Mientras var4<=var1 Hacer


var5<-var4*var3
Escribir var5
6102 var4<-var4+1
Fin Mientras

Escribir '***** ****** ***** *****'


6105 Fin Para
FinProceso

7. ¿Qué realiza o cuál es el fin del siguiente algoritmo o programa?


6108 Proceso sin_titulo
Leer var1

Mientras var1<0 Hacer


6111 Leer var1
Fin Mientras

270
Angel Vázquez-Patiño Universidad de Cuenca

var2<-1
6114 var3<-11

Mientras var2<=var1 Hacer


Leer var4

6117 Mientras var4<1 O var4>10 Hacer


Leer var4
Fin Mientras

6120 Si var4<var3 Entonces


var3<-var4
Fin Si

6123 var2<-var2+1
Fin Mientras

Escribir var3
6126 FinProceso

1. * Con respecto al siguiente algoritmo


Proceso sin_titulo
6129 Para i<-1 Hasta 7 Con Paso 3 Hacer
cont<-1
Mientras cont<=5 Hacer
6132 Escribir Sin Saltar i,'^',cont,': ',i^cont, ' '
cont<-cont+2
Fin Mientras

271
Angel Vázquez-Patiño Universidad de Cuenca

6135 Escribir ''


Fin Para
FinProceso

6138 ¿Cuál de las siguientes versiones hace exactamente lo mismo?

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

Mientras cont<=7 Hacer


Para i<-1 Hasta 5 Con Paso 2 Hacer
6165 Escribir Sin Saltar cont,'^',i,': ',cont^i, ' '
Fin Para
Escribir ''
6168 cont<-cont+3
Fin Mientras
FinProceso

6171 d) Ninguna de las anteriores

Lenguaje Java

1. * ¿Para el siguiente segmento de código cuál es la salida del programa?

6174 a) -120
b) 0
c) 60
6177 d) Ninguna de las anteriores
public class Test {

public static void main (String[] args) {


6180 int j = operacion();
System.out.println("Resultado: " + j);
}

6183 public static int operacion(){


j = -1;
for(int i=5; i>=0; i--)
6186 j=j*i;
}
}

6189 2. * ¿Para el siguiente segmento de código cuál es la salida del programa?

273
Angel Vázquez-Patiño Universidad de Cuenca

a) 8
b) 72
6192 c) 0
d) 36
public class Test {

6195 static int resultado = 0;

public static void main (String[] args) {


operacion(3);
6198 System.out.println("Resultado: " + resultado);
}

public static int potencia(int base, int exp){


6201 int j = 1;
for(int i=0; i<exp; i++)
j=j*base;
6204 return j;
}

public static void operacion(int resultado){


6207 int i=1;
for(int j=1; j<resultado; j++)
i=j*potencia(j, 2);

6210 resultado = i;
}
}

6213 8. * ¿Cuál es el “tiempo de vida” de una variable global?

274
Angel Vázquez-Patiño Universidad de Cuenca

a) Existe tanto tiempo como el programa


b) Existe mientras una función se encuentra ejecutando
6216 c) Existe mientras un bucle for se encuentra ejecutando
d) Existe mientras un parámetro de una función cambie de valor

9. Indicar cuáles de las siguientes declaraciones de matrices no son válidas y el


6219 porqué.
a) int primos={2,3,5,7,11};
b) int [] resultados=int [30];
6222 c) int [] primos= new{2,3,5,7,11};

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 }

11. ¿Cuál es la salida del siguiente programa?


public class Ejercicio {
6234 public static void main(String[] args){
int [] matriz = {1,2,3};
metodoA(matriz);
6237 for(int i=0; i<matriz.length; i++)
System.out.print(matriz[i]++ + " ");
for(int i=0; i<matriz.length; i++)
6240 System.out.print(matriz[i] + " ");
}
static void metodoA(int [] b){
6243 for(int i=0; i<b.length;i++)
b[i]=b[i]+3;

275
Angel Vázquez-Patiño Universidad de Cuenca

}
6246 }

12. * ¿Cuál es la salida del siguiente programa?


public class Ejercicio {

6249 public static void main (String[] args) {


char[] matriz = {'e','u','o','i','a'};
metodo(matriz);
6252 for(int i=0; i<matriz.length; i++){
System.out.println(matriz[i]);
}
6255 }

public static void metodo(char[] vocales){


char aux;
6258 for(int i=1; i<vocales.length; i++){
if(vocales[i-1]>vocales[i]){
aux=vocales[i-1];
6261 vocales[i-1]=vocales[i];
vocales[i]=aux;
}
6264 }
}
}

6267 13. * ¿Cuál es la salida del siguiente fragmento de código?


int index = 1;
while(index < 10){
6270 System.out.println(index);

276
Angel Vázquez-Patiño Universidad de Cuenca

index ++;
}

6273 14. * ¿Cuál es la salida del siguiente programa?


public class Ejercicio {

public static void main (String args[]) {


6276 int c = 1;
final int N=5;
while(c<=N){
6279 System.out.println(c);
c--;
}
6282 }
}

15. * Diga si la proposición referente al siguiente método programado en Java es


6285 verdadera o falsa: El método llamado funcion muestra (imprime en panta-
lla) los elementos de cualquier tipo de arreglo bidimensional enviado como
argumento sin que haya ningún error al momento de la ejecución.

6288 Nota: el método no tiene absolutamente ningún error de sintaxis, es decir, sí


se compila sin ningún error.
public static void funcion (int[][] parametro) {
6291 for(int i = 0; i < parametro.length; i++)
for(int j = 0; j < parametro.length; j++)
System.out.println(parametro[i][j]);
6294 }

a) La proposición es verdadera

b) La proposición es falsa

6297 16. * ¿Qué retorna la siguiente función?


public static int misterioso(int a, int n)

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 }

a) El mínimo común múltiplo de los parámetros a y n.

b) El resultado de elevar el parámero n a la a-ésima potencia.

6315 c) El resultado de sacar la raíz n-ésima del parámetro a.

d) El resultado de elevar el parámero a a la n-ésima potencia.

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);
}

6330 public static void funcion(int[] arreglo) {


for (int i=1; i < arreglo.length; i++) {
int aux = arreglo[i];
6333 int j;
for (j=i-1; j >=0 && arreglo[j] > aux; j--){
arreglo[j+1] = arreglo[j];
6336 }
arreglo[j+1] = aux;
}
6339 }

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

18. * ¿Qué es lo que muestra en pantalla el siguiente código?


6345 public static void main(String[] args) {
int[][] m = { {6, 7, 5, 0, 4}, {3, 8, 4}, {1, 0, 2, 7} };
for(int i = 0; i < m.length; i++) {
6348 System.out.print(m[i].length + “ “);
}
}

6351 a) 4 4 7
b) 5 3 4
c) 0 8 2
6354 d) 6 3 1

19. * ¿Cuál es el ámbito de la variable x?

279
Angel Vázquez-Patiño Universidad de Cuenca

1) public void counter(int StartingNumber){


6357 2) for (int x = StartingNumber; x<100; x++)
3) {
4) JOptionPane.showMessageDialog(null, x);
6360 5)
6) }
7) JOptionPane.showMessageDialog(null, “Fin del método”, x);
6363 8) }

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

20. * ¿Cuál es la salida correcta del siguiente programa?


6369 public class ProgramacionI {
public static int contador = 0;
public static void main(String[] args) {
6372 String cadena1, cadena2;
cadena1 = "cadena";
cadena2 = "programación";
6375 for (int i = 0; i < cadena2.length(); i++) {
for (int j = 0; j < cadena1.length(); j++) {
if (i == j) {
6378 contar();
}
}
6381 }
System.out.println(contador);
}
6384 public static void contar() {

280
Angel Vázquez-Patiño Universidad de Cuenca

contador = contador + 2;
}
6387 }

21. * ¿Cuál es la salida correcta del siguiente programa?


public class ProgramacionI {
6390 public static void main(String[] args) {
String str = "manejo de cadenas con java";
int inicio = str.indexOf("c");
6393 int fin = str.indexOf("e", inicio + 1);
System.out.println(str.substring(inicio, fin + 3));
}
6396 }

a) cadenas

b) cade

6399 c) cadena

d) de

22. * ¿Qué muestra el siguiente programa?


6402 public class ProgramacionI {
public static void main(String[] args) {
int contador;
6405 int limite;

contador = 2;
6408 limite = 10;

do {
6411 switch (contador % 2) {
case 0:

281
Angel Vázquez-Patiño Universidad de Cuenca

System.out.print(contador + " es par\n");


6414 break;
case 1:
System.out.print(contador + " es impar\n");
6417 break;
}
contador += 2;
6420 } while (contador < limite);
}
}

6423 23. Pregunta

Lenguaje C

1. * Realice la prueba de escritorio del siguiente programa e indique qué se mues-


6426 tra en pantalla.
#include<stdio.h>

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

14. Fórmulas y Relaciones

Interés

6459 Interés simple

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).

La formula del interés simple es

6468 (31)

donde CF es el capital final, CI es el capital inicial, i es el interés por cada periodo y


n es el número total de periodos. Utilizando el ejemplo anterior se tendría
6471 .

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.

La fórmula de interés compuesto es

(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
.

6486 Composición periódica o Capitalización continua

Para hacer sencillo el concepto se utilizará un ejemplo. En algunos casos el interés se


cobra componiendo varias veces dentro del mismo periodo (del que se menciona el in-
6489 terés nominal). Si se tiene un capital de $100 por el que se nos paga un 12% de inte-
rés anual (tasa nominal) pero compuesto mensualmente (12 veces por cada periodo),
los intereses y capital serían los que se muestran en la siguiente tabla

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.

La fórmula de la composición periódica es

(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

Para una serie de datos no vacía:

286
Angel Vázquez-Patiño Universidad de Cuenca

6507 a la que corresponden los pesos:

la media ponderada es:

(34)

6510 Medidas de longitud

• 1 milla = 1609 metros

• 1 pulgada = 0.0254 metros

6513 • 1 yarda = 3 pies

• 1 pie = 12 pulgadas

Unidades de capacidad

6516 • 1 pie cúbico = 0.0283 metros cúbicos

• 1 metro cúbico = 1000 litros

• 1 yarda cúbica = 27 pies cúbicos.

6519 Unidades de capacidad de información

• 8 bits = 1 byte

• 1024 bytes = 1 kilobyte (KB)

6522 • 1024 KB = 1 megabyte (MB)

• 1024 MB = 1 gigabyte (GB)

• 1024 GB = 1 terabyte (TB)

6525 Tiempo

• 1 hora = 60 minutos

• 1 minuto = 60 segundos

6528 • 1 hora = 3600 segundos

287
Angel Vázquez-Patiño Universidad de Cuenca

Unidades de temperatura

Relación entre grados celsius (centígrados, C) y fahrenheit (F).

6531 (35)

Círculo

r: radio

6534 l: longitud o perímetro

a: área

(36)

6537 (37)

Esfera

• r: radio

6540 • s: superficie o área

• v: volumen

(38)

6543 (39)

Cuadrado

Ángulos

6546 (40)

Ecuación de segundo grado

Dada la ecuación de segundo grado

6549 (41)

las raíces o ceros de la función son:

288
Angel Vázquez-Patiño Universidad de Cuenca

(42)

6552 Logaritmos

El logaritmo de un número en cualquier base puede obtenerse por la relación

(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

También podría gustarte