Sunteți pe pagina 1din 234

Ejercicios Básicos de Programación

20 de marzo de 2020

3 Angel Vázquez-Patiño
Facultad de Ingeniería
Universidad de Cuenca
6 Cuenca, Ecuador
angel.vazquezp arroba ucuenca.edu.ec

Contenido
Introducción.................................................................................................................10
Fundamentos...............................................................................................................11
Qué es programar....................................................................................................11
Qué es un lenguaje de programación......................................................................11
Modelización de problemas del mundo real............................................................13
Del problema real a su solución por computadora..................................................13
Conceptos acerca de software..................................................................................13
Variables y tipos de datos.......................................................................................13
Algoritmos...............................................................................................................13
Ejercicios desde cero...........................................................................................14
Diagramas de flujo..................................................................................................16
Pseudocódigo...........................................................................................................16
Prueba de escritorio................................................................................................17
Codificación.............................................................................................................17
Documentación y su importancia............................................................................17
Programación Secuencial.............................................................................................18
Miscelánea...............................................................................................................18
Respaldo de información.........................................................................................19
Cálculos espaciales básicos......................................................................................20
Distancia euclidiana............................................................................................20
Distancia de Manhattan.....................................................................................20
* Métricas Lp.......................................................................................................20
Distancia ortogonal.............................................................................................21
Distancia de un segmento de recta a un punto...................................................21
Cálculo de interés....................................................................................................22
Costo de llamada.....................................................................................................22
Angel Vázquez-Patiño Universidad de Cuenca

Cálculo de potencia.................................................................................................22
Área de un triángulo dadas las longitudes de los lados..........................................23
Hexágono regular....................................................................................................23
Área de un triángulo dadas las coordenadas de sus vértices..................................23
Puntos colineales.....................................................................................................24
Movimiento rectilíneo uniforme...............................................................................24
Ponderación de calificaciones..................................................................................24
Sistema de ecuaciones lineales.................................................................................24
* Vuelto/cambio de una compra.............................................................................25
* Transformación entre unidades de tiempo...........................................................25
Cálculo de tiempo en horas, minutos y segundos...................................................25
Transformación de pies a metros.............................................................................25
Unidades de capacidad............................................................................................25
Cálculo de comisión.................................................................................................26
Cálculo de descuento...............................................................................................26
Calificación de programación..................................................................................26
Porcentaje de mujeres y hombres............................................................................27
* Cálculo de la edad de una persona......................................................................27
Conversión de radianes a grados centesimales y viceversa......................................27
* Conversión de temperaturas de Grados Celsius a Fahrenheit y viceversa...........27
Área y volumen de una esfera.................................................................................27
Longitud y área de un círculo.................................................................................27
Solución de ecuaciones de segundo grado...............................................................28
Intercambio de valores de variables.........................................................................28
Multiplicación de polinomios..................................................................................29
Caída de cuerpos en el vacío...................................................................................29
Ley de gravitación universal....................................................................................29
Logaritmo de un número en cualquier base............................................................29
Trabajo conjunto.....................................................................................................29
Estructuras de control.................................................................................................31
Miscelánea...............................................................................................................31
Estructura de decisión IF........................................................................................45
Miscelánea...........................................................................................................45
Aprobación de curso...........................................................................................47
Aumento de sueldo en base a sueldo actual........................................................47
Nota alfabética....................................................................................................47
Día de la semana.................................................................................................48

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

Estación del año..................................................................................................48


Divisibilidad de dos números..............................................................................48
Aritmética básica con 3 números........................................................................48
* Incentivo por producción.................................................................................49
Posición del menor de n números.......................................................................49
Puntaje en olimpiada..........................................................................................49
Pago en estacionamiento.....................................................................................50
Número de cifras de un número..........................................................................50
Número con ceros a la izquierda.........................................................................50
Promoción en una papelería...............................................................................50
Saldos y pagos mínimos......................................................................................51
Ordenamiento de números..................................................................................51
Restricción de ingreso.........................................................................................51
Vocales o consonantes.........................................................................................51
Conversión de unidades de masa........................................................................51
Mayor y menor de 10 números............................................................................52
* Pares o nones...................................................................................................52
Estructura de selección...........................................................................................53
Miscelánea...........................................................................................................53
Meses, de números a letras.................................................................................53
Signo zodiacal.....................................................................................................54
Total de ventas....................................................................................................54
Estructura de repetición WHILE............................................................................56
Miscelánea...........................................................................................................56
Números de n a m...............................................................................................57
Números pares del 1 al 100.................................................................................57
Acumulador del 1 al 100.....................................................................................58
Contador de números impares............................................................................58
Múltiplos de n.....................................................................................................58
Suma y promedio de n números.........................................................................58
Mayor y menor de una serie de números............................................................58
Subsidio familiar.................................................................................................58
* Factura.............................................................................................................59
Repetición de series.............................................................................................59
Encuesta a familias.............................................................................................60
Conteo de votos..................................................................................................61
* Contador de mayores de edad..........................................................................61

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

Interés compuesto................................................................................................61
Promedio de edad en escuela..............................................................................62
Trabajo conjunto.................................................................................................62
Frases..................................................................................................................62
Tirada de dados..................................................................................................62
Triángulo de números.........................................................................................62
Número de días entre dos fechas.........................................................................63
Simple random walks..........................................................................................63
Factorial de un número.......................................................................................63
Suma y promedio de factoriales..........................................................................64
Series y sumatorias.............................................................................................64
Combinatoria......................................................................................................65
* Dibujo de cuadrado..........................................................................................65
* Dibujo de cuadrado y rombo...........................................................................65
* Onda cuadrada.................................................................................................66
* Onda triangular...............................................................................................67
* Onda de sierra..................................................................................................68
Fórmula del binomio...........................................................................................69
Triángulo de Pascal.............................................................................................69
Estructura de repetición DO-WHILE.....................................................................71
Miscelánea...........................................................................................................71
Números de n a m...............................................................................................74
Números impares del 1 al 100.............................................................................74
Acumulador del 1 al 100.....................................................................................75
Contador de números pares................................................................................75
Codificación de caracteres...................................................................................75
Ingreso de binarios..............................................................................................75
Ingreso de números mientras sean positivos.......................................................75
Conteo de frases..................................................................................................76
Ingreso de 5 números..........................................................................................76
Longitud y área de un círculo: validación...........................................................76
Cantidad de números ingresados........................................................................76
Cuadrado de números menores a n.....................................................................76
Contador de pares e impares..............................................................................76
Contador de familias según número de miembros..............................................76
* Números con vocales........................................................................................77
* Operador potencia...........................................................................................77

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

Bases y exponentes.............................................................................................77
Factores de un número entero.............................................................................78
* Factorial...........................................................................................................78
* Números perfectos............................................................................................78
Números primos..................................................................................................78
Número de dígitos de un número entero.............................................................78
Valor relativo de un número...............................................................................79
Cálculo de comisiones.........................................................................................79
Ordenamientos....................................................................................................79
Juego: adivina el número....................................................................................79
Cara o cruz.........................................................................................................80
Análisis de frecuencias en lanzamientos de un dado...........................................80
Series y sumatorias.............................................................................................80
Número de cifras de un número..........................................................................81
Reloj de 24 horas................................................................................................81
* Progresión geométrica......................................................................................81
* Números de la serie Fibonacci.........................................................................81
* Aproximación de π...........................................................................................82
Aproximación del logaritmo natural...................................................................83
* Aproximación del arco seno.............................................................................83
* Dibujo de triángulos........................................................................................83
Menú...................................................................................................................84
Función exponencial............................................................................................84
Número en cualquier base...................................................................................85
Menú: revisión de número...................................................................................85
Menú: permutaciones, variaciones y combinaciones...........................................85
Estructura de repetición FOR.................................................................................88
Miscelánea...........................................................................................................88
Signo zodiacal y número de suerte......................................................................94
Series y sumatorias.............................................................................................94
* Divisiones sucesivas de una serie de números..................................................95
* Impresión de patrones......................................................................................96
Menú: media, mayor y menor.............................................................................96
Manejo contable..................................................................................................97
* Factorización de trinomio................................................................................97
Cálculos con dígitos de un número.....................................................................98
* Serie de Leibniz................................................................................................98

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

* Examen de manejo...........................................................................................99
* Carrera de caballos........................................................................................100
Número de Armstrong......................................................................................101
* Prueba del nueve de la división.....................................................................101
* Encontrando triángulos rectángulos...............................................................101
* Número triangular..........................................................................................102
La diagonal de Cantor.......................................................................................102
Random walks...................................................................................................103
* Suma de dos números decimales....................................................................103
* Suma de dos números binarios.......................................................................104
* Suma de números consecutivos......................................................................104
Raíz cuadrada de un número............................................................................104
Estructuras Básicas de Datos....................................................................................108
Arreglos unidimensionales.....................................................................................108
Miscelánea.........................................................................................................108
Manejo de arreglos............................................................................................112
* Eliminación de duplicados..............................................................................112
Ordenamiento de n números.............................................................................113
Ángulo entre vectores........................................................................................113
Relleno de arreglo con números aleatorios........................................................113
Graficación de frecuencias.................................................................................113
Criba de Eratóstenes.........................................................................................114
Algoritmo de Havel-Hakimi..............................................................................115
Arreglos bidimensionales.......................................................................................116
Miscelánea.........................................................................................................116
Suma y resta de matrices..................................................................................121
Producto de un escalar por una matriz............................................................121
Diagonal principal de una matriz......................................................................122
* Transpuesta de una matriz............................................................................122
Simetría de una matriz.....................................................................................122
Determinante de una matriz.............................................................................122
Producto de matrices........................................................................................122
Punto de silla de una matriz.............................................................................123
Tablero de ajedrez.............................................................................................123
* Distancia de Chebyshov.................................................................................123
* El cuadrado latino..........................................................................................124
El cuadrado mágico...........................................................................................124

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

* Lotería en Cuenca..........................................................................................125
Cadena de ADN................................................................................................126
Gimnasia cerebral.............................................................................................126
Cálculos espaciales básicos................................................................................128
Formación de grupos de trabajo.......................................................................130
* Matriz de adyacencia.....................................................................................133
Craps.................................................................................................................135
Hormiga de Langton.........................................................................................136
* Las ocho reinas...............................................................................................137
* Recorridos de matriz......................................................................................139
* Datos de estudiantes......................................................................................140
* Datos de personas..........................................................................................141
* Datos de empresas y empleados.....................................................................143
* Estadística descriptiva: frecuencias e histograma..........................................145
* Cifrado básico 1.............................................................................................146
Cifrado básico 2................................................................................................147
Un algoritmo voraz para el número cromático.................................................149
Algoritmo de Floyd-Warshall............................................................................149
Funciones...................................................................................................................150
Ámbito de las variables.........................................................................................150
Miscelánea.............................................................................................................150
* Histograma.........................................................................................................154
Aritmética básica...................................................................................................154
Potenciación..........................................................................................................155
Aproximación de sinh-1..........................................................................................155
Función W de Lambert.........................................................................................155
Factorial de un número con función recursiva.......................................................156
Máximo común divisor y mínimo común múltiplo................................................156
* Peso adecuado....................................................................................................157
* Raíces de una función.........................................................................................158
El método de la bisección......................................................................................158
* El método de Newton.........................................................................................159
Ordenamiento de n números.................................................................................160
Búsqueda lineal.....................................................................................................161
Búsqueda binaria o dicotómica.............................................................................161
Juego de dados entre dos.......................................................................................161
Manejo de Caracteres y Cadenas...............................................................................163

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

Miscelánea.............................................................................................................163
* Datos personales.................................................................................................171
Estadísticas de texto.............................................................................................171
* Analizador de tweets..........................................................................................173
Eliminación de n-ésima palabra............................................................................173
Cifrado por sustitución..........................................................................................174
Cifrado por transposición......................................................................................175
* Manejo de una cadena con información personal...............................................176
* Línea de comandos.............................................................................................177
* Mantenimiento de datos de personas.................................................................179
Búsquedas..................................................................................................................183
Ordenamiento............................................................................................................186
Miscelánea.............................................................................................................186
* Menú, ordenamiento y búsqueda de registros....................................................191
* Calificaciones de estudiantes..............................................................................192
Ordenamientos en matriz......................................................................................194
* Manejo de datos de personas.............................................................................195
Archivos.....................................................................................................................197
Miscelánea.............................................................................................................197
* Metro Interstate Traffic Volume Data Set.........................................................197
* Formación de grupos de trabajo con archivos....................................................199
* Concrete Compressive Strength Data Set..........................................................200
Miscelánea de Ejercicios............................................................................................203
* Combate de pokemones......................................................................................203
Solución de un sistema de ecuaciones por matrices..............................................205
Conversión de un número en base diez a sistema binario.....................................205
Conversión de un número en base binaria a sistema en base diez........................205
Cálculo de las tres alturas de un triángulo dadas las longitudes de sus lados......205
Valor futuro de una inversión................................................................................205
Cálculo del capital inicial......................................................................................205
Cálculo de la tasa de interés..................................................................................205
Cálculo del número de años...................................................................................205
Media, mediana y varianza de N datos.................................................................205
Transformación de números decimales a romanos.................................................205
Dígitos de un número............................................................................................207
* Pirámide invertida..............................................................................................207
* Cubos e impares.................................................................................................207

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

* Cantidad de dígitos fijo de números mostrados.................................................207


Algoritmo de Gauss y Método de eliminación de Gauss.......................................208
Métodos de Jacobi y de Gauss-Seidel....................................................................209
Dados.....................................................................................................................209
Búsquedas y ordenación........................................................................................209
Interpolación..........................................................................................................209
Integración numérica.............................................................................................209
Ecuaciones diferenciales ordinarias (EDO)...........................................................210
* Tiempo de Respuesta Facebook.........................................................................214
¿Qué Hace el Algoritmo/Programa?.........................................................................216
Lenguaje Java........................................................................................................220
Lenguaje C............................................................................................................227
Fórmulas y Relaciones...............................................................................................228
Interés....................................................................................................................228
Interés simple....................................................................................................228
Interés compuesto..............................................................................................228
Composición periódica o Capitalización continua.............................................229
Estadística.............................................................................................................230
Media ponderada...............................................................................................230
Medidas de longitud..............................................................................................231
Unidades de capacidad..........................................................................................231
Unidades de capacidad de información.................................................................231
Tiempo..................................................................................................................231
Unidades de temperatura......................................................................................232
Círculo...................................................................................................................232
Esfera.....................................................................................................................232
Cuadrado...............................................................................................................232
Ángulos..................................................................................................................232
Ecuación de segundo grado...................................................................................232
Logaritmos.............................................................................................................233
Referencias.................................................................................................................234

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

Introducción

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


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
12 Vázquez.

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:

15 1. https://www.slideshare.net/angenio2/programacin-presentacin-del-curso
2. https://www.slideshare.net/angenio2/programacin-fundamentos-64227508
3. https://www.slideshare.net/angenio2/programacin-algoritmos
18 4. https://www.slideshare.net/secret/iu1SvB2vTa4jND
5. https://www.slideshare.net/angenio2/programacin-estructuras-de-control
6. https://www.slideshare.net/angenio2/programacin-introduccin-a-java
21 7. https://www.slideshare.net/angenio2/programacin-1-introduccin-a-c
8. https://www.slideshare.net/angenio2/programacin-tipos-de-datos-java
9. https://www.slideshare.net/angenio2/programacin-1-tipos-bsicos-de-datos-en-c
24 10. https://www.slideshare.net/angenio2/programacin-estructuras-de-datos
11. https://www.slideshare.net/angenio2/programacin-1-estructuras-de-datos-en-c
12. https://www.slideshare.net/angenio2/programacin-funciones
27 13. https://www.slideshare.net/angenio2/programacin-1-funciones-en-c
14. https://www.slideshare.net/angenio2/programacin-1-cadenas-en-c
15. https://www.slideshare.net/angenio2/programacin-bsquedas-y-ordenamientos

30 Cualquier comentario, duda o sugerencia con respecto a los ejercicios o las presenta-
ciones siempre es bienvenida.

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

Fundamentos

33 Qué es programar

1. * Indique qué es programar

2. La programación se puede definir como

36 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

39 c) la instalación de programas en sistemas operativos desde la línea de co-


mandos

d) las anteriores respuestas no son correctas

42 3. Pregunta

Qué es un lenguaje de programación

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

45 a) Eiffel

b) C#

c) Fortran

48 d) DOS

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

a) 10

51 b) 13

c) 32

d) Las anteriores respuestas no son correctas

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

a) 32

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

b) 65

57 c) 97

d) 126

4. En un lenguaje débilmente tipado

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

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
63 realice una conversión de forma explícita

d) Las anteriores respuestas no son correctas

5. El lenguaje ensamblador se sitúa

66 a) Más cerca del lenguaje máquina que de los lenguajes de alto nivel

b) Más cerca de los lenguajes de alto nivel que del lenguaje máquina

c) No hay un lenguaje ensamblador

69 d) Las anteriores respuestas no son correctas

6. Se considera que el primer lenguaje de alto nivel fue

a) Ada

72 b) C

c) Fortran

d) Java

75 7. Imperativo, declarativo y orientado a objetos son

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

78 c) Paradigmas de programación

d) Las anteriores respuestas no son correctas

8. Pregunta

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

81 Modelización de problemas del mundo real

Del problema real a su solución por computadora

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

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

Conceptos acerca de software

Variables y tipos de datos

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

a) Funciones de acceso a datos

b) Instrucciones de acceso a datos

90 c) Sentencias de control

d) Tipos de datos

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

93 a) La que almacena un valor entero

b) Una constante que varía su valor

c) A la que se le asigna un nombre

96 d) La que permite la entrada de datos

e) La que permite almacenar un valor capturado

Algoritmos

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

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

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

102 4. * Describa qué es un algoritmo y liste (sólo mencionarlas) las formas de repre-
sentar los algoritmos que conozca. Dé un ejemplo sencillo de algoritmo indi-
cando qué es lo que hace.

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

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

6. ¿Qué es un algoritmo?

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


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

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


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

114 c) Es una relación de variables que pueden ser cuantificadas para calcular el
valor de otras de muy difícil o imposible cálculo y que suministra una solu-
ción para un problema.

117 d) Las anteriores respuestas no son correctas.

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

a) Secuencia de pasos

120 b) Secuencia de instrucciones

c) Produce un resultado deseado

d) Es finito

123 e) No siempre se alcanza un resultado

Ejercicios desde cero

1. Algoritmo para preparar un margarita

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

3. Algoritmo para construir una mesa

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

129 5. Algoritmo para calcular el volumen de una esfera

6. Algoritmo para calcular el IVA de una compra

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

7. Algoritmo para calcular la edad de una persona (tomar en cuenta sólo el año
132 de nacimiento y el año actual)

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

9. Algoritmo para pasar de grados sexagesimales a radianes

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

138 11. Algoritmo para calcular la distancia entre dos puntos dadas sus coordenadas
cartesianas

12. Algoritmo para convertir un número de bits a bytes, KB, MB y GB. Vea la
141 sección Unidades de capacidad de información de este documento.

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

14. Sacar el promedio de las notas de 4 estudiantes

144 15. Algoritmo que calcule el área de un triángulo dadas las coordenadas cartesia-
nas de sus vértices

16. Algoritmo que calcule el valor de un cateto dados los valores de la hipotenusa
147 y del otro cateto de un triángulo rectángulo

17. 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
150 catetos

18. Algoritmo que calcule el área de un triángulo dados los valores de los lados
(revise el concepto de semiperímetro, ecuación 7).

153 19. Algoritmo que calcule las raíces de una ecuación cuadrática cuya forma canó-
nica es ax2+bx+c=0

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

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

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

159 23. Algoritmo para saber si un número es par o impar.

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

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

25. Algoritmo para calcular el total a pagar por una compra. Si la compra es de
162 más de $100, el descuento es de 10%, caso contrario no hay descuento.

26. * Algoritmo para saber cuántos dígitos tiene un número entero positivo.

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

165 28. Algoritmo para encontrar la ecuación de una recta dados dos puntos de la
misma.

29. Algoritmo para pasar coordenadas polares a cartesianas.

168 30. Algoritmo para pasar coordenadas cartesianas a esféricas.

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

Diagramas de flujo

171 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


174 problema

a) Verdadero

b) Falso

3.

177 Pseudocódigo

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


el algoritmo del ejemplo).

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

a) Verdadero

b) Falso

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

183 Prueba de escritorio

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


más opciones según corresponda):

186 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


189 Programación

2. Pregunta

Codificación

192 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
195 podrían aparecer en la ejecución del programa?

2. Pregunta

Documentación y su importancia

198 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-
ción o conjunto de instrucciones. En este contexto, ¿qué información, como
201 documentación, debe agregar al código un programa?

2. Pregunta

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

Programación Secuencial

204 Miscelánea

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


E S T U D I A N T E
207 N
I
V
210 E
R
S
213 I N G E N I E R Í A
D
A
216 D
2. * Mostrar la salida en pantalla del siguiente algoritmo
Proceso cambioVariable
219 Definir a, b, c, aux Como Entero;
a <- 5;
b <- 6;
222 c <- 7;
aux <- a;
b <- a;
225 c <- b;
Escribir a, “ ”, b, “ ”, c;
FinProceso
228 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.

231 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.
234 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

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

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


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

243 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?

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

249 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-
252 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-
255 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-
258 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-
261 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.

Respaldo de información

264 Elaborar un algoritmo que permita calcular el número de CDs necesarios para hacer
una copia de seguridad de la información almacenada en un disco duro cuya capaci-
dad se conoce (es dada por el usuario). Considerar que el disco duro está lleno de in-
267 formación y 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. Represente el algo-

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

ritmo con un diagrama de flujo y pseudocódigo; además, realice las pruebas de escri-
270 torio necesarias para verificar el correcto funcionamiento del algoritmo.

Cálculos espaciales básicos

La mayor parte de los análisis espaciales hacen uso de cálculos geométricos sencillos,
273 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
del análisis geométrico tanto en el plano como en el espacio. Para más detalles lea la
276 sección 10.3 Algunos cálculos espaciales básicos del libro de Olaya (2011).

Distancia euclidiana

Se tienen los puntos A(x1, y1) y B(x2, y2) en el plano cartesiano, elabore el algoritmo
279 que permite obtener la distancia euclidiana entre A y B. La distancia euclidiana en-
tre dos puntos (x1, y1) y (x2, y2) es

(1)

282 Distancia de Manhattan

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


(vea la figura 6),

285 (2)

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


y1) y B(x2, y2) dados.

288 * Métricas Lp

Tanto la distancia euclidiana como la de Manhattan son casos particulares de las de-
nominadas métricas Lp que corresponden a una expresión de la forma

291 (3)

Con p=1 y β=1, se tiene la distancia de Manhattan y con p=2 y β=1, se tiene la dis-
tancia euclidiana. Desarrolle un algoritmo que calcule la distancia basada en métricas
294 Lp dadas las coordenadas de dos puntos A(x1, y1) y B(x2, y2) y los valores de las varia-
bles β y p.

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

Distancia ortogonal

297 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
un punto de una línea o recta. Sean A un punto y D una recta (vea la figura 1), se
300 define la distancia entre A y D como la distancia mínima entre A y un punto M de
D.

Para una recta D definida por su ecuación reducida y = ax + b y siendo A un punto


303 de la forma A = (xA, yA).

(4)

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


306 = 0, se tiene

(5)

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


309 del mismo punto a un plano.

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
312 C(x3, y3), la distancia del punto C al segmento AB se calcula como la distancia del
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-
315 nadas

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

x = x1 + u(x2 – x1)

y = y1 + u(y2 – y1)

318 donde u se obtiene de

(6)

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.


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

Cálculo de interés

Suponga que un individuo desea invertir su capital en un banco y desea saber cuánto
324 dinero ganará después de un mes si el banco paga a razón de 2% mensual. Realice el
algoritmo que permita hacer el cálculo.

Costo de llamada

327 Se requiere un programa para determinar el costo que tendrá realizar una llamada te-
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
330 validez del algoritmo mediante una prueba de escritorio.

Cálculo de potencia

Se desea calcular la potencia eléctrica (P) del circuito de la figura 3. Realice un dia-
333 grama de flujo y el pseudocódigo que representen el algoritmo para resolver el proble-
ma. Considere que y . V, voltaje. I, corriente. R, resistencia.

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

Figura 3: Circuito eléctrico.

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

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


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:

339 (7)

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
342 flujo y pseudocódigo; además, realice las pruebas de escritorio necesarias para verifi-
car el correcto funcionamiento del algoritmo.

Hexágono regular

345 • Desarrolle un algoritmo que dadas las longitudes de un hexágono regular, cal-
cule el área del polígono.

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


348 gono regular inscrito en una circunferencia de un radio dado.

Á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


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

x y1 1

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

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

debiendo tomarse el valor absoluto del determinante.

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


354 de sus vértices.

Puntos colineales

Un corolario del teorema 12 de la línea recta (Charles Lehmann, 1994, chap. 3) men-
357 ciona: una condición necesaria y suficiente para que tres puntos diferentes de coorde-
nadas (x1, y1), (x2, y2) y (x3, y3) sean colineales es que

x1 y1 1

| |
x2
x3
y 2 1 =0
y3 1

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

360 Movimiento rectilíneo uniforme

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

363 Ponderación de calificaciones

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

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


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

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


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
372 de 25%, mientras que el tercero de 50%.

Sistema de ecuaciones lineales

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


375 incógnitas.

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

2. Elaborar un algoritmo que resuelva un sistema de ecuaciones lineales con tres


incógnitas.

378 * Vuelto/cambio de una compra

Partiendo de una cantidad de dinero menor a un dólar que se tiene que dar de cam -
bio (vuelto), calcular el número de monedas que hay que dar (suponiendo que se
381 cuenta con todas las monedas necesarias) de 1, 5, 10, 25, 50 centavos. Debe dar la
menor cantidad de monedas posible. Realice el diagrama de flujo y pseudocódigo del
programa; además, verifique la validez del mismo realizando la prueba de escritorio.

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

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

390 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-
393 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-
396 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
399 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


402 cúbicos.

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

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


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

405 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
408 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

411 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%.

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

417 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:

420 • 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)

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

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


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

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

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-
432 pone la calificación final ya no son 55%, 30% ni 15%, sino que son ingresados
por el usuario ( , , ; ).

Porcentaje de mujeres y hombres

435 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
438 porcentaje de hombres.

* Cálculo de la edad de una persona

Realice un algoritmo que determine aproximadamente (i.e., asuma que todos los años
441 tienen 360 días y que todos los meses tienen 30 días) cuántos meses, semanas, días y
horas ha vivido una persona dada la fecha y hora (no minutos) de nacimiento. Reali-
ce el diagrama de flujo y pseudocódigo del programa; además, verifique la validez del
444 mismo realizando la prueba de escritorio.

Conversión de radianes a grados centesimales y viceversa

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

447 • Realice un programa que reciba una temperatura en grados celsius y los con-
vierta a grados fahrenheit.

• Realice un programa que reciba una temperatura en grados fahrenheit y los


450 convierta a grados celsius.

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

Área y volumen de una esfera

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

Longitud y área de un círculo

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

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

Solución de ecuaciones de segundo grado

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


459 función. Vea la ecuación 12.

Intercambio de valores de variables

1. Pida al usuario ingresar dos números. El primer número se ingresará en la va-


462 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
el valor de la variable var2 y viceversa. Por ejemplo, si se ingresa primero el
465 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
y .

468 2. * Escribir un programa (algoritmo) que permita leer cuatro variables: a, b, c y


d. Como resultado final se debe tener lo siguiente:

a) diagrama de flujo y prueba de escritorio

471 ◦ en a queda el valor de b

◦ en b queda el valor de c

◦ en c queda el valor de d

474 ◦ en d queda el valor de a

b) pseudocódigo y prueba de escritorio

◦ en a queda el valor de d

477 ◦ en b queda el valor de c

◦ en c queda el valor de b

◦ en d queda el valor de a

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

3. Dados cinco valores en cinco variables (var1, var2, var3, var4 y var5), realice
483 un algoritmo para que, luego de terminar su ejecución, los valores de las varia-
bles queden de la siguiente manera:

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

• var5 debe contener el valor de la variable var3

486 • var2 debe contener el valor de la variable var4

• var1 debe contener el valor de la variable var5

• var3 debe contener el valor de la variable var2

489 • var4 debe contener el valor de la variable var1

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


riables.

492 Multiplicación de polinomios

Dados dos polinomios de segundo grado de parte del usuario, calcular la multiplica-
ción de dichos polinomios.

495 Caída de cuerpos en el vacío

Ley de gravitación universal

(8)

498 Logaritmo de un número en cualquier base

Elaborar un algoritmo que pueda calcular el logaritmo de un número en cualquier


base. Vea la ecuación 13.

501 Trabajo conjunto

Considere primero los siguientes problemas de razonamiento:

1. Si una persona termina una obra en 3 horas y una segunda persona termina la
504 obra en 6 horas ¿cuánto se demoran en terminar la misma obra si trabajan
juntas?

2. Si una persona termina una obra en 3 horas, una segunda persona termina la
507 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?

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

Luego de resolver los ejercicios anteriores, realice un algoritmo que pida el tiempo
510 (individual) que se demoran en concluir una misma obra 4 personas diferentes y cal-
cule el tiempo que se demoran en terminar la misma obra si trabajan juntas.

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

Estructuras de control

513 La teoría para poder resolver los ejercicios de estructuras de control la puede encon-
trar en https://goo.gl/OMZYqA.

Miscelánea

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

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


variables?

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

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

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


dora?

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

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

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

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

528 a) if

b) while

c) for

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

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


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

a) if

534 b) for

c) while

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


537 bloque de acciones?

a) if

b) for

540 c) while

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


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

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


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

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


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

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


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

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


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

555 11. * Suponga que usted elabora un algoritmo donde se pide ingresar 100 números
para luego realizar alguna operación con cada uno de ellos. Para el proceso de
ingreso de esos 100 números (tenga en cuenta que podrían ser n números) us-
558 ted podría utilizar (escoja 1 opción):

a) un bucle (lazo) for

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

b) un bucle (lazo) if

561 c) un bucle (lazo) while

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

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

564 12. if, else, for y while son

a) Funciones de acceso a datos

b) Sentencias de control

567 c) Tipos de datos

d) Las anteriores respuestas no son correctas

13. * Un bucle, ciclo o lazo es

570 a) Una sentencia que permite decidir si se ejecuta o no se ejecuta una sola vez
un bloque aislado de código

b) Una sentencia que ejecuta otra sentencia que a su vez ejecuta la primera
573 sentencia

c) Una sentencia que permite ejecutar un bloque aislado de código varias ve-
ces hasta que se cumpla (o deje de cumplirse) una condición

576 d) Todas las anteriores respuestas son correctas

14. ¿Qué muestra el siguiente algoritmo?


Algoritmo misterioso
579 x <- 1
z <- 0
Mientras x <= 10 Hacer
582 y <- x * x
Escribir y
z <- z + y
585 x <- x + 1
FinMientras
Escribir z
588 FinAlgoritmo
15. * ¿Cuál de los siguientes algoritmos imprime en pantalla lo que está a conti-
nuación?

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

591 *
*****
**
594 *****
*
*****
597 **
*****
*
600 *****
a)
Proceso estrellas2
603 b1 <- 1;
b2 <- 0;
c1 <- 20;

606 Repetir
Si b1 = 1 Entonces
Si b2 = 1 Entonces
609 Escribir "**";
b2 <- 0;
Sino
612 Escribir "*";
b2 <- 1;
FinSi
615 b1 <- 3;
Sino
Escribir "*****";
618 b1 <- 1;
FinSi
c1 <- c1 + 2;
621 Hasta Que c1 < 1
FinProceso
b)
624 Proceso estrellas1
b1 <- 1;
b2 <- 0;

627 Para i<-10 Hasta 100 Con Paso 10 Hacer


Si b1 = 1 Entonces
Si b2 = 1 Entonces

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

630 Escribir "**";


b2 <- 0;
Sino
633 Escribir "*";
b2 <- 1;
FinSi
636 b1 <- 3;
Sino
Escribir "*****";
639 b1 <- 1;
FinSi
FinPara
642 FinProceso
c)
Proceso estrellas3
645 b1 <- 1;
b2 <- 0;
c1 <- 10;

648 Mientras c1 <= 10 Hacer


Si b1 = 1 Entonces
Si b2 = 1 Entonces
651 Escribir "**";
b2 <- 0;
Sino
654 Escribir "*";
b2 <- 1;
FinSi
657 b1 <- 3;
Sino
Escribir "*****";
660 b1 <- 1;
FinSi
c1 <- c1 + 1;
663 FinMientras
FinProceso
16. ¿Cuál es el resultado de ejecutar el siguiente algoritmo?
666 Algoritmo algortimo_misterioso
cont <- "*"
l = 5*5-20
669 Para x <- 1 Hasta l Con Paso 1 Hacer

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

Escribir cont
cont <- cont+"*"      
672 FinPara
Para i <- l Hasta 1 Con Paso -1 Hacer
cont <- ""
675 l <- l-1
Para j <- l Hasta 1 Con Paso -1 Hacer
cont <- cont+"*"
678 FinPara
Escribir cont
FinPara
681 FinAlgoritmo
17. * Con respecto a las estructuras de repetición estudiadas en el curso, cuál de
las siguientes proposiciones es verdadera:

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


to iterativo que utilizando un while.

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


687 miento iterativo que utilizando un for.

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


para obtener el mismo comportamiento iterativo que utilizando un for.

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

18. * ¿Qué muestra el siguiente algoritmo?


Algoritmo misterioso
693 Definir j Como Entero;
Para i = 3 Hasta 1 Con Paso -1 Hacer
j = i + 1;
696 Mientras j < 4 Hacer
Escribir j – 1;
j = j + 1;
699 FinMientras
FinPara
FinAlgoritmo
702 19. * Realice la prueba de escritorio y muestre el resultado impreso del siguiente
programa.

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

20. ¿Qué muestra el siguiente algoritmo?


705 Proceso desconocido
i = 0;
Para i = (i + 1) hasta 10 Con Paso 1 Hacer
708 Mostrar i - 1;
i = i + 1;
FinPara
711 FinProceso
21. ¿Qué muestra el siguiente algoritmo?
Algoritmo WhatsTheOutput
714 n = 5
Mientras n>0
Si (n mod 2) = 0
717 suma = suma - 1
FinSi

suma = suma + 1
720 n = n - 1
mostrar suma
FinMientras

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

723 FinAlgoritmo
a) 1 2 3 4 5

b) 1 1 2 3 4

726 c) 1 1 2 2 3

d) 1 2 2 4 5

22. * Implementar el mismo algoritmo utilizando las estructuras de control While


729 y Repeat (una versión usando While y otra versión usando Repeat).
Proceso estrellas
Definir b1 Como Entero;
732 b1 <- 1;
Para i <- 10 Hasta 100 Con Paso 10 Hacer
Si b1 = 1 Entonces
735 Escribir “*”;
b1 <- 0;
Sino
738 Escribir “*****”;
b1 <- 1;
FinSi
741 FinPara
FinProceso
23. * ¿Qué muestra el siguiente algoritmo?
744 Algoritmo misterioso
Definir c1, c2 Como Entero;
Para i <- 8 Hasta 0 Con Paso -2 Hacer
747 c1 <- -1;
Repetir
Escribir Sin Saltar "X";
750 c1 <- c1 + 1;
Hasta Que c1 >= i

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

Escribir " ";

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

759 Fin Para


FinAlgoritmo
24. Se utilizan para tomar decisiones lógicas. Esta es la razón que se suelan deno-
762 minar también estructuras de decisión, condicionales o alternativas.

a) Estructuras selectivas
b) Estructuras simples
765 c) Estructura secuencial
d) Estructuras complejas

25. Ejecuta una determinada acción cuando se cumple una determinada condi-
768 ción.

a) For

b) Do-while

771 c) Repeat-until

d) If-then

26. Es aquella variable que es utilizada en un ciclo repetitivo y tiene por objetivo
774 almacenar valores cuyos incrementos o decrementos son en forma constante
por cada iteración de ciclo o bucle en cuestión.

a) Arreglo

777 b) Contador

c) Ciclo

d) Acumulador

780 e) Bucle

27. Por lo general, se emplean en los ciclos para controlar el número de iteraciones
en los mismos, o para almacenar totales de elementos.

783 a) Arreglo

b) Array

c) Ciclo

786 d) Bandera

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

e) Contador

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

789 a) Array

b) Contador

c) Iteración

792 d) Bucle

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

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

795 b) While, for, if-else

c) While, do-while y for

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

798 30. Puede estar compuesto de todos sus elementos de tipo cadena, otro puede te-
ner todos sus elementos de tipo entero, etc.

a) Arreglo

801 b) Contador

c) Ciclo

d) Array

804 31. Dado el siguiente pseudocódigo, ¿cuál será el valor final de la variable i?
Algoritmo valorDeI
i <- 1;
807 Leer n;
Mientras i < n Hacer
i <- i + 1;
810 Fin Mientras
FinAlgoritmo
a) 1 si el valor introducido es igual o menor que 0; el valor introducido menos
813 uno en cualquier otro caso

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


cualquier otro caso

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

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


uno en cualquier otro caso

d) Las anteriores respuestas no son correctas

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


Algoritmo misterioso
a = 0
822 b = a+10
Según b Hacer
0:
825 Mientras b > a Hacer
Escribir a
b = b + a
828 Fin Mientras
10:
Si a = 0 Entonces
831 Escribir b + 11
b = b + a
FinSi
834 11:
Escribir '11'
De Otro Modo:
837 Escribir a
Fin Según
FinAlgoritmo
840 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?
Algoritmo misterioso
843 fila = 5
Mientras fila >= 1 Hacer
columna = 1
846 Mientras columna <= 10 Hacer
Si (fila Mod 2) = 0 Entonces
Escribir Sin Saltar "<"
849 Sino
Escribir Sin Saltar ">"
FinSi
852 columna = columna + 1
FinMientras
fila = fila - 1

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

855 Escribir ""


FinMientras
FinAlgoritmo
858 34. * ¿Cuál es el resultado de ejecutar el siguiente algoritmo?
Algoritmo misterioso
n = -1
861 Mientras n <= 3 Hacer
Si (n >= 0)
Si (n = 2)
864 Escribir "uno"
FinSi
Sino
867 Escribir "dos"
FinSi
n = n + 1
870 FinMientras
Escribir "tres"
FinAlgoritmo
873 35. ¿Cuál es el resultado de ejecutar el siguiente algoritmo?
Proceso algoritmo_misterioso
definir a Como Entero;
876 definir b Como Entero;
definir x Como Entero;
a<-4;
879 b<-0;
Repetir
a<-a+2;
882 b<-b+1;
Hasta Que a>b;
a<-a+3;
885 b<-b+2;
a<-a+b%2+a MOD 3;
x<-trunc(a/b);
888 Si (x>b) entonces
b<-b+4;
a<-b mod 3;
891 x<-a MOD b;
Finsi
b<-b+1;
894 x<-x*trunc(10/8) + a mod b;
Escribir "el valor de la variable a es : ", a;

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

Escribir "el valor de la variable b es : ", b;


897 Escribir "el valor de la variable x es : ", x;
FinProceso
36. * ¿Cuál de los siguientes algoritmos NO hace lo mismo que los otros dos?

900 a) El algoritmo opcion_A

b) El algoritmo opcion_B

c) El algoritmo opcion_C

903 37. * Seleccione la(s) respuesta(s) correcta(s) respecto a las instrucciones de repe-
tición. La instrucción do-while es similar a la instrucción while, la diferencia es
que:

906 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

c) El while se ejecuta por lo menos una vez

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

38. * ¿Cuál de los siguientes algoritmos NO presenta los mismos resultados que
los otros dos? a, b ∈ [0, ∞) y a > b.

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

912 a) El algoritmo opcion_1

b) El algoritmo opcion_2

c) El algoritmo opcion_3

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

a) Escribir el pseudocódigo correspondiente

b) Realizar la prueba de escritorio

918 c) Mostrar cual sería la salida en pantalla

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

40. Pregunta

Estructura de decisión IF

921 Miscelánea

1. Escriba un algoritmo que indique si un número dado es par o impar. Vea


https://goo.gl/SRuAY2

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


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

3. Dados tres números indicar si cada uno es par o impar. Además, indicar si to-
927 dos los números son pares, si son impares o si están “mezclados” (no todos son
pares ni todos son impares).

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


930 Menú
[1] Archivo
[2] Buscar
933 [3] Salir
Opción [1-3]: _

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

El usuario ingresa una de las opciones y de acuerdo a la ingresada (1-3) escri-


936 be en pantalla “Opción 1: Archivo.”, “Opción 2: Buscar.” o “Opción 3: Salir.”.
En caso de que el usuario no indique ninguna de las opciones, se debe mostrar
el mensaje de error “Debe ingresar una opción correcta.”.

939 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
ingresados puedan ser repetidos (e.g., 1, 1, 5; 5, 5, 5; 0, 0, -2; 5, 5, 5).

942 6. Escriba un algoritmo para verificar si los valores de tres lados dados corres-
ponden a un triángulo.

7. Escriba un algoritmo para verificar si los ángulos de los vértices de un triángu-


945 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


un equilátero, isósceles o escaleno. Puede darse el caso que el usuario ingrese
948 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
un triángulo. Indicar si se trata de un triángulo rectángulo.

951 10. Escriba un algoritmo que dado un mes del año (en letras), indique el número
de días de ese mes.

11. Escriba un algoritmo para ingresar un número y verificar si es divisible para 5


954 y para 11.

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


san 5 números por el teclado del computador, encontrar el número mayor, el
957 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
prueba de escritorio.

960 13. El IESS necesita clasificar a las personas que se jubilarán este año. Existen
tres tipos de jubilaciones: por edad, por antigüedad joven y por antigüedad
adulta. Las personas adscritas a la jubilación por edad deben tener 60 años o
963 más y una antigüedad en su empleo de menos de 25 años. Las personas adscri-
tas a la jubilación por antigüedad joven deben tener menos de 60 años y una
antigüedad en su empleo de 25 años o más. Las personas adscritas a la jubila-
966 ción por antigüedad adulta deben tener 60 años o más y una antigüedad en su

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

empleo de 25 años o más. Determinar en qué tipo de jubilación quedará ads-


crita una persona.

969 14. Exprese las siguientes dos líneas de código mediante estructuras condicionales
anidada usando solamente expresiones simples (i.e., sin usar operadores lógi-
cos).
972 if ( a < b && c != d ) && ( b > d || b == d ) b1 ;
if ( a < b && c != d ) && ( b > d || b == e ) b2 ;
Si usted está aprendiendo Python, le será más fácil entender lo siguiente:
975 if (a < b and c != d) and ( b > d or b == d ):
b1
if (a < b and c != d) and ( b > d or b == e ):
978 b2
15.

Aprobación de curso

Dadas las notas de dos pruebas y dos exámenes (/20), calcular el promedio de las
981 cuatro notas y si la persona tiene 12 o más, aprueba el curso, caso contrario, pierde
el año.

Aumento de sueldo en base a sueldo actual

984 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

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

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

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

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

996 • 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ú-
mero n1, caso contrario el programa debe decir “¡ERROR! El primer número
999 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-


1002 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
1005 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.

1008 • 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-
1011 sión para cero, mostrando, antes de que se dé dicho error, que el divisor es
cero.

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

* Incentivo por producción

1014 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
1017 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, indicando además en qué orden fue


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

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
1026 tercero). Considere que el menor valor no puede repetirse. Por ejemplo, si los
números ingresados fueran: 14, 19, 14. El resultado debe ser: “El menor valor
ingresado fue 14 y corresponde al 3° número ingresado”.

1029 3. Determine el menor valor de 5 números, indicando además en qué orden fue
ingresado. Considere que el menor valor no puede repetirse. Por ejemplo, si los
números ingresados fueran: 14, 19, 14, 16, 19. El resultado debe ser: “El menor
1032 valor ingresado fue 14 y corresponde al 3° número ingresado”.

Puntaje en olimpiada

En una olimpiada de tiro al blanco se llega a un acuerdo entre los participantes para
1035 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
Para un tiro realizado determine el puntaje alcanzado aplicando el factor que le co-
1038 rresponde.

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

Pago en estacionamiento

En un estacionamiento cobran $2 por hora o fracción los días Lunes, Martes y


1041 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-
ne cuánto debe pagar un cliente por su estacionamiento en un solo día de la semana.
1044 Si el día ingresado es incorrecto imprima un mensaje de error.

Número de cifras de un número

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

Número con ceros a la izquierda


Diseñe un programa que ingrese un número entero positivo que no tenga más de 4
1050 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
deberá ser 0018. Si el número ingresado no fuera correcto debe imprimir un mensaje
1053 de error.

Promoción en una papelería

En una Librería han puesto en oferta la venta de cuadernos al por mayor, obsequian-
1056 do lapiceros Lucas, Cross y/o Novo dependiendo de la cantidad de cuadernos com-
prados, de la siguiente manera:

• Compra menos que 12, ningún obsequio.

1059 • Compra no menos que 12 pero menos que 24, obsequio: 1 Lucas por cada 4
cuadernos.

• Compra no menos que 24 pero menos que 36, obsequio: 2 Cross por cada 4
1062 cuadernos.

• Compra no menos que 36, obsequio: 3 Novo por cada 4 cuadernos. Adicional-
mente 1 Lucas y 1 Cross.

1065 Diseñe un algoritmo que determine cuántos lapiceros Lucas, Cross y Novo recibe un
cliente como obsequio.

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

Saldos y pagos mínimos

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

El banco “Bandido de peluche” desea calcular para uno de sus clientes el saldo actual
(saldoAct), el pago mínimo (pagoMin) y el pago para no generar intereses (pagoSi-
1071 nInteres). 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 (cor-
teAnt). Para calcular el pago mínimo se debe considerar 15% del saldo, y para no ge-
1074 nerar intereses corresponde 85% del saldo. Considere que este saldo (actual) debe in-
cluir 12% de los intereses causados por no realizar el pago mínimo para no generar
intereses en el corte (abono) anterior y $200 por multa si abonó (en el corte ante-
1077 rior) menos del pago mínimo. Realice el algoritmo correspondiente y represéntelo me-
diante el diagrama de flujo y pseudocódigo.

Ordenamiento de números

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


1083 rio.

Restricción de ingreso

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

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

1089 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:

1092 1. Hectogramos

2. Gramos

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

3. Decigramos

1095 4. Centigramos

5. Miligramos

Mayor y menor de 10 números

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

* Pares o nones

1101 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:

1104 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
1107 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
1110 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:

1113 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-
1116 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
1119 generar valores aleatorios en el rango [-2, 5], se usaría import random; print(random.-
randint(-2, 5))

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

Estructura de selección

1122 Miscelánea

1. Elabore un algoritmo que calcule independientemente la suma de los pares y


los impares de los números entre 1 y 1000, utilizando un switch.

1125 2. 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-
ras, hornos micro hondas. Se desea saber en cualquier momento cuántas ven-
1128 tas se han realizado al contado, cuántas al crédito en 6, cuantas al crédito en
12, cuántas al en 18, cuántas en 24 mensualidades.

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


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

4. Una empresa tiene N trabajadores, a cada uno de ellos se le paga un sueldo se-
1134 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
la renta. Se desea saber cuántos trabajadores gana más de $600, cuántos ga-
1137 nan hasta $600 y cuánto dinero se tiene que pagar al estado por concepto de
impuestos

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


1140 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-
trole la venta de entradas a fin de poder saber la cantidad de personas que
1143 asisten a cada tribuna, la cantidad total de personas (asistencia) y el monto
total recaudado por la venta de todas las entradas (recaudación).

6.

Meses, de números a letras

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


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
1149 1, se imprimirá en pantalla “Enero”, si el número ingresado fue 2, se imprimirá “Fe-
brero”, etc.

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

Signo zodiacal

1152 Elaborar un algoritmo para leer la fecha de nacimiento (mes y día) de una persona y
muestre su signo zodiacal; si se ingresa un mes o día inconsistente se debe presentar
un mensaje que diga “Fecha no reconocida.”. Tome en cuenta la siguiente informa-
1155 ción:

• Acuario: enero 21 - febrero 20


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

Total de ventas

Ingresar la información de personas hasta que el usuario ingrese n (no más datos).
1170 Ingrese la nacionalidad (ecuatoriano, ecu; extranjero, ext), la talla (sma, med, lar),
sexo (masculino, mas; femenino, fem) y el importe por la venta (imp). Se calcula un
descuento de acuerdo a las siguientes condiciones:

1173 • ecu, sma, mas: descuento 5%.


• ecu, sma, fem: descuento 4%.
• ecu, med, mas: descuento 7%.
1176 • ecu, med, fem: descuento 9%.
• ecu, lar, mas: descuento 10%.
• ecu, lar, fem: descuento 12%.
1179 • ext, sma, mas: descuento 4%.
• ext, sma, fem: descuento 5%.
• ext, med, mas: descuento 9%.
1182 • ext, med, fem: descuento 7%.
• ext, lar, mas: descuento 12%.
• ext, lar, fem: descuento 10%.

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

1185 Mostrar el número de clientes nacionales, el número de clientes extranjeros, número


de tallas sma, med y lar, número de hombres, número de mujeres, e importe total por
todas las compras.

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

1188 Estructura de repetición WHILE

Miscelánea

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


1191 el resultado que se obtiene.
Algoritmo misterioso
Definir A, B Como Entero;
1194 Leer A;
Leer B;
Mientras (A<>B) Hacer
1197 Si (A>B) Entonces
A <- A-B;
SiNo
1200 B = B–A;
FinSi
FinMientras
1203 Mostrar A;
FinAlgoritmo
2. Se sabe que la media geométrica y la media aritmética se calculan mediante
1206 las siguientes fórmulas:

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


• MedA = (num1 + num2 + num3 + ... + numN) / N
1209 Desarrolle un algoritmo que lea N valores, calcule ambas medias y que impri-
ma la que sea menor.

3. * Escriba un programa que calcule la siguiente serie:

1212 El primer valor es aleatorio. El segundo valor, y los otros que le siguen, son
iguales a la suma de los divisores del valor anterior en la serie. Se debe especi-
ficar el número N de términos de la serie.

1215 Por ejemplo:

Suponga que se genera el número 4 de manera aleatoria para que sea el primer
número de la serie. Entonces la serie se forma de la siguiente manera: 4, 7, 8,
1218 15, …

El valor 7 se obtiene con la suma de los divisores del 4: 1 + 2 + 4 = 7.

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

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


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

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


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

1230 N: 1 M: 2 N: 5 M: 10
1 1 1 3 6 2 6 18 35 67 128 254

N: 4 M: 7 N: 3 M: 4
1233 6 2 0 3 11 16 30 1 8 8 17

N: 2 M: 3 N: 1 M: 2
1 7 8 2 2

1236 N: 1 M: 6 N: 1 M: 2
6 6 6 6 6 6 6 6
5. Pregunta

1239 Números de n a m

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


2. Hacer un programa que imprima los números enteros desde 1 a n.
1242 3. Hacer un programa que imprima los números enteros desde n a 1.
4. Hacer un programa que imprima los números enteros de n a m (n<m).
5. Hacer un programa que imprima los números enteros de m a n (n<m).

1245 Números pares del 1 al 100

Desarrolle un algoritmo que imprima en pantalla los números pares del intervalo [1 ,
100].

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

1248 Acumulador del 1 al 100

Hacer un programa que imprima la suma de los 100 primeros números naturales.

Contador de números impares

1251 Hacer un programa que imprima en pantalla los números impares del 1 hasta el 10 y
que imprima en pantalla la cantidad de números impares.

Múltiplos de n
1254 1. Mostrar los múltiplos de 3 comprendidos entre los números 1 y 15.
2. Contar los números múltiplos de 3 comprendidos entre los números 1 y 15.
3. Contar y sumar los números múltiplos de 3 comprendidos entre los números 1
1257 y 15.
4. Contar y sumar los números múltiplos de n (n>1) comprendidos entre los
números enteros m y w (m<w).

1260 Suma y promedio de n números

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


gresados.

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


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

Mayor y menor de una serie de números


1266 1. Imprimir el mayor de una serie de cinco números ingresados por el usuario.
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-
1269 primir el mayor y el menor de los n números ingresados.

Subsidio familiar

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


1272 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.
1275 • Por cada hijo en edad escolar reciben $10 adicionales. Se considera la edad es-
colar entre 6 y 18 años.

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

• Si la madre de familia fuera viuda, la familia recibe $20 adicionales.


1278 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


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

* Factura

1284 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-
1287 ner las siguientes opciones de menú:

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


aplica o no el IVA.
1290 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


1293 descuento del 5% sobre el monto total. Si el valor total es mayor a 200 dolares se rea-
lizará un descuento del 10% sobre el monto total.

Repetición de series

1296 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
1299 1 2 3 4 5 6
1 2 3 4 5 6
1 2 3 4 5 6
1302 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 que el usuario quiere repetir una serie. Pedir el límite
1305 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ú-
1308 mero inicial (m) y final (w) de la serie. Repetir las n veces indicadas la serie de

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

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
1311 mostrar
6 5 4 3 2
6 5 4 3 2
1314 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-
1317 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
1320 algoritmo:
m: 1
w: 10
1323 n: 3
k: 2
1 3 5 7 9
1326 1 3 5 7 9
1 3 5 7 9

m: 10
1329 w: 1
n: 4
k: 3
1332 10 7 4 1
10 7 4 1
10 7 4 1
1335 10 7 4 1
6. asdf

Encuesta a familias

1338 Realice un programa que a través de la computadora se desea hacer la siguiente en-
cuesta:

• Tienen televisión o no tienen. Contar los que tienen y los que no tienen.
1341 • Es en color o no es en color. Contarlos.
• Piensan compararlos o no. Contarlos.

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

• Hallar el porcentaje de cada uno.

1344 Conteo de votos

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


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

1347 * Contador de mayores de edad

Elabore un algoritmo que solicite la edad de n personas, y que muestre cuántos son
mayores de edad y cuántos son menores de edad. Mayores de edad son las personas
1350 de 18 años o más.

Interés compuesto

1. Una pareja desea invertir su dinero en un banco, el cual otorga el 2% de inte-


1353 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
periódica o Capitalización continua, página 229.

1356 Para que pueda verificar sus resultados, la siguiente tabla muestra valores para
un capital inicial invertido de $100.

2. Un cliente de un banco deposita equis cantidad de dólares cada mes en una


1359 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
cada año en los próximos N años.

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

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

Promedio de edad en escuela

Los directivos de equis escuela requieren determinar cuál es la edad promedio de cada
1365 uno de los M salones y cuál es la edad promedio de toda la escuela. Realice un algo-
ritmo para determinar estos promedios y represente la solución mediante el diagrama
de flujo, el pseudocódigo y el diagrama N/S.

1368 Trabajo conjunto

Considere primero los siguientes problemas de razonamiento:

1. Si una persona termina una obra en 3 horas y una segunda persona termina la
1371 obra en 6 horas ¿cuánto se demoran en terminar la misma obra si trabajan
juntas?

2. Si una persona termina una obra en 3 horas, una segunda persona termina la
1374 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?

Luego de resolver los ejercicios anteriores, realice un algoritmo que pida el tiempo
1377 (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.

Frases

1380 • Introducir una frase por teclado. Imprimirla cinco veces en filas consecutivas,
pero cada impresión debe ir desplazada cuatro columnas hacia la derecha.
• Introducir una frase por teclado. Imprimirla en el centro de la pantalla.

1383 Tirada de dados


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

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

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

Con
1
1392 2 3
4 5 6
7 8 9 10

1395 Con
1
2 3
1398 4 5 6
7 8 9 10
11 12 13

1401 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
días que hay de diferencia entre estas dos fechas. Considerar los meses que tienen 30
1404 días, los meses que tienen 31 días y suponga que febrero tiene 28 días siempre.

Simple random walks

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


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

1410 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
1413 se muestra en el vídeo https://youtu.be/S_YUVIUIW60.

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

Factorial de un número

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

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

Por ejemplo, el factorial de 5 es

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

Suma y promedio de factoriales

Elabore un algoritmo que permita solucionar el siguiente enunciado: se ingresan por


1422 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ú-
meros ingresados. Mostrar la suma y el promedio.

1425 Se pide representar el algoritmo a través del diagrama de flujo, pseudocódigo y rea-
lizar la prueba de escritorio.

Ejemplo:

1428 A=2

B=8

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

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

Series y sumatorias

1434 • Sume los primeros 100 números de .

• * Ingresados dos valores enteros, n y m, donde n es mayor que m (validar),


calcular la sumatoria de los n primeros términos. Debe elaborar el algoritmo
1437 para realizar la potencia y el factorial.

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


la suma de la serie infinita

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

1440 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
calculando el coseno del ángulo 𝑥. Debe mostrarse un mensaje que indique al
1443 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
incluida en math.h.; en el lenguaje Python, puede usar la función cos(x) que
1446 viene incluida en el módulo math (import math; print(math.cos(0.5))).

Combinatoria

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


1449 junto con n elementos es:

(1)

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


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

1455 * 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
1458 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
1461 *****
* *
* *
1464 * *
*****

* Dibujo de cuadrado y rombo

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

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

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

* Onda cuadrada

1470 Información de onda cuadrada tomada de Wikipedia.

Se conoce por onda cuadrada a la onda de corriente alterna (CA) que alterna su va-
lor entre dos valores extremos sin pasar por los valores intermedios (al contrario de lo
1473 que sucede con la onda senoidal y la onda triangular, etc.)

1. Considere la siguiente onda cuadrada.

Escriba un programa que genere la onda mostrada en la figura anterior. Los


1476 datos que deben especificarse son:

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


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

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

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


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

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


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

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

* Onda triangular

Dados tres valores por parte del usuario, li, ls y ciclos, “dibujar” una onda trian-
1488 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

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

-4 11 1
-5 10 0
-6 11 1
-7 10 0
-8 11 1
-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

Dados dos valores por parte del usuario, li ≥ 0 y ciclos, “dibujar” una onda de
1491 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-
quierda de los primeros números, con esto, todos los números impresos deben tener la
1494 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
08 105
09 106
10 107
16 15 14 13 12 11 113 112 111 110 109 108
17 114
18 115
19 116

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

20 117
21 123 122 121 120 119 118
124
125
126
127
128

Fórmula del binomio

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


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

(2)

Desarrolle un algoritmo para calcular (1+x)n utilizando la sumatoria. Para más infor-
1500 mación vea el Álgebra elemental moderna (González y Mancill, 2009, cap. 15).

Triángulo de Pascal

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

1503 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

1506 (3)

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 1), entonces los valores de la combinatoria
1509 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

1512 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-
1515 chas casillas; el proceso continúa escribiendo en las casillas inferiores la suma
de las dos cifras situadas sobre ellas (1 + 2 = 3), etc.

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

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


1518 tra un ejemplo de la construcción del triángulo de Pascal para n=7.

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

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


de n. Represente el algoritmo con un diagrama de flujo y pseudocódigo; además, rea-
1521 lice las pruebas de escritorio necesarias para verificar el correcto funcionamiento del
algoritmo. Finalmente, implemente el algoritmo.

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

Estructura de repetición DO-WHILE

1524 Miscelánea

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


n=3, m1=4 y m2=6: 3x4, 3x5, 3x6). Haga dos versiones: while y do...while.

1527 2. El usuario ingresa una lista de valores numéricos. El ingreso de los números
termina cuando el usuario ingrese el valor -9999. Determinar el rango (mínimo
y máximo) y el promedio de los valores ingresados. No se debe considerar para
1530 los cálculos el número -9999.

3. Elabore un algoritmo que pida números hasta que se introduzca un número


negativo. De todos los números introducidos calcular la suma de todos los nú-
1533 meros pares, la suma de todos los números impares y el promedio de todos los
números introducidos.

4. El número ingresado puede tener cualquier número de dígitos y debe ser posi-
1536 tivo (validar).

5. El promedio ponderado se calcula en dos pasos:

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


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

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

El anterior es un ejemplo con 3 asignaturas, recuerde que los estudiantes pue-


1542 den llevar un número variable de asignaturas.

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

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


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

1545 La suma de los créditos debe ser mayor o igual que 25 y menor o igual que 50.
Si al finalizar la lectura la suma de los créditos no se cumple la condición se
deberá emitir un mensaje de error y deberá comenzar nuevamente.

1548 Desarrolle un algoritmo que calcule e imprima:

• El número de asignaturas cursó el estudiante


• La suma de los créditos y el promedio ponderado
1551 6. * Realice la prueba de escritorio del siguiente pseudocódigo e indique cuál es
la salida en pantalla del mismo.
Algoritmo misterioso
1554 Definir c1, c2 Como Entero;
Para i <- 8 Hasta 0 Con Paso -2 Hacer
c1 <- -1;
1557 Hacer
Escribir Sin Saltar '*';
c1 <- c1 + 1;
1560 Mientras Que c1 < i
c1 <- 8 - i;
c2 <- 0;
1563 Mientras c2 < c1 Hacer
Escribir Sin Saltar '0';
c2 <- c2 + 1;
1566 Fin Mientras
Escribir ' ';
Fin Para
1569 FinAlgoritmo
7. Indique cuál es el resultado de la ejecución del siguiente algoritmo:
Algoritmo misterioso
1572 fila = 5;

Mientras fila >= 1 Hacer


columna = 1;

1575 Mientras columna <= 10 Hacer

Si (fila Mod 2) = 0 Entonces


Escribir Sin Saltar “<”;

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

1578 Sino
Escribir Sin Saltar “>”;
FinSi

1581 columna = columna + 1;


FinMientras

fila = fila – 1;
1584 Escribir “”;
FinMientras
FinAlgoritmo
1587 ¿Cuál sería el resultado de la ejecución si la primera instrucción (fila = 5) es
cambiada por fila = 4?

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


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

rt <- (mr+Mr1)/2;

Escribir "Ingrese precisión:";


1599 Leer precision;

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


Si rt*rt < num Entonces
1602 mr <- rt;
rt <- (rt + Mr1)/2;
FinSi
1605 Si rt*rt > num Entonces
Mr1 <- rt;
rt <- (rt + mr)/2;
1608 FinSi
FinMientras
Escribir "El resultado de ", num, " es: ", rt;
1611 FinAlgoritmo

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

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


puesta correcta.
1614 #include <stdio.h>
int main(int argc, char **argv)
{
1617 int i=0;
do {
--i;
1620 printf("%d", i);
i++;
}while(i >= 0);
1623 return 0;
}
¿Cuántas veces el bucle incluido en el código fuente se ejecutará?

1626 a. 1
b. Infinito
c. 0
1629 d. Error de compilación
e. Ninguna de las anteriores
10. Pregunta

1632 Números de n a m

Para los siguientes ejercicios NO utilice FOR, utilice WHILE.

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


1635 2. Hacer un programa que imprima los números enteros desde 1 a n.
3. Hacer un programa que imprima los números enteros desde n a 1.
4. Hacer un programa que imprima los números enteros de n a m (n<m).
1638 5. Hacer un programa que imprima los números enteros de m a n (n<m).

Números impares del 1 al 100

Hacer un pseudocódigo que imprima los números impares entre 0 y 100. Utilice WHI-
1641 LE para realizar las iteraciones.

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

Acumulador del 1 al 100

Hacer un programa que imprima la suma de los 100 primeros números. Utilice WHI-
1644 LE para hacer las iteraciones.

Contador de números pares

Hacer un programa que imprima en pantalla los números pares del 1 hasta el 10 y
1647 que imprima en pantalla la cantidad de números pares. Utilice WHILE para hacer las
iteraciones.

Codificación de caracteres

1650 Desarrolle un algoritmo que permita leer caracteres hasta que el usuario ingrese el
carácter X/x (mayúscula o minúscula). Cada vez que se ingrese un carácter, transfor-
mar su código ASCII a binario y mostrar los 1s con - (guiones) y los 0s con . (pun-
1653 tos). A continuación se muestra un ejemplo
h
104: --.-...
1656 O
79: -..----
l
1659 108: --.--..
A
65: -.....-
1662 x

Ingreso de binarios

Hacer un algoritmo que sólo nos permita introducir 0 o 1. Si se ingresa un número di-
1665 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
1668 programa sigue leyendo números desde el teclado. El momento que ingresa un núme-
ro igual o menor a cero, el programa termina.

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

Conteo de frases

1671 Introducir tantas frases como queramos y contarlas. Siempre se pregunta al usuario si
desea ingresar más frases; sí=1, no=0.

Ingreso de 5 números

1674 Escriba un programa que lea exactamente cinco números. Utilice WHILE.

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-
1677 lor del radio no debe ser negativo (sí puede ser igual a cero), valide el ingreso de di-
cho valor.

Cantidad de números ingresados

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

Cuadrado de números menores a n

1683 Pedir al usuario un número n y presentar los números al cuadrado desde 1 hasta n.
Utilizar la estructura de repetición while.

Contador de pares e impares

1686 Realice un programa que luego de leer 10 números, cuente el número de números pa-
res e impares. Haga una versión utilizando while y switch; y otra versión utilizando
while e if.

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

Realice un programa que lea el número de miembros de familias. El programa deja de


leer números cuando se ingresa un número negativo o menor a cero. Antes de termi-
1692 nar, el programa presenta la cantidad de familias que tiene un miembro, dos miem-
bros, tres miembros, cuatro miembros, cinco miembros y las familias que tienen más
de seis miembros.

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

1695 * Números con vocales

Imprima los números del 00000 al 99999 con la particularidad de que cada vez que
debiera imprimirse el 1 (en cualquiera de los dígitos) se sustituya con A, el 3 con E,
1698 el 5 con I, el 7 con O y el 9 con U, i.e., 00000, 0000A, 00002, … , UUUUO, UUUU8,
UUUUU. No utilice más de una estructura de control FOR, ni más de dos estructu-
ras de control WHILE, ni más de dos estructuras de control REPEAT.

1701 * Operador potencia

Suponga que no existe el operador potencia. Escriba un programa que lea dos valores
enteros, llamados base y exponente y devuelva base elevado a la potencia exponente.

1704 Bases y exponentes

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


dos enteros, raíz y potencia, de manera tal que 0<potencia<6 y raízpotencia
1707 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

2. * Escriba un programa que pida al usuario ingresar un número entero (N) e


1710 imprima todos los pares de número enteros, raíz (r) y potencia (p), de manera
tal que 0 ≤ p ≤ N, r ∈ (-N, N) y rp = N. Si no existe ningún par de ente-
ros, r y p, que cumplan lo pedido, se debe imprimir un mensaje adecuado de-
1713 bido a tal causa. Para calcular la potencia debe realizar el código fuente para
tal efecto, i.e., no debe utilizar ninguna función ni otro operador como **. 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).

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

1716 Factores de un número entero

* Factorial

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


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

* Números perfectos

Un número perfecto es un entero positivo, que es igual a la suma de todos los enteros
1725 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
que lea un número entero positivo n (validar que se positivo; suponga que el número
1728 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
son divisores (excluido él mismo).

1731 Números primos

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


número. Por ejemplo, el número 7: es divisible sólo para 1 y para 7. Elabore
1734 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
número es o no primo. Sólo si es primo, deberá sacar la suma del factorial de
1737 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
presentar la suma de (8).

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


programa sigue pidiendo números mientras no sean primos.

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

1743 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:
Número: 5432

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

1746 Número separado:


2 unidades
3 decenas
1749 4 centenas
5 miles

Valor relativo de un número

1752 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
tener un número arbitrario de dígitos):
1755 Número: 5432

5 × 10^3 = 5000
4 × 10^2 = 400
1758 3 × 10^1 = 30
2 × 10^0 = 2
----
1761 5432

Cálculo de comisiones

Ordenamientos

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


meros.

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


1767 meros.

Juego: adivina el número

Desarrolle un juego simple que pida al usuario que adivine un número en 10 intentos.
1770 El juego termina cuando se haya adivinado el número o cuando se hayan agotado to-
dos los intentos. Tenga en cuenta la función azar(n) de PseInt1 que genera un número
entero al azar en el rango [0, n−1].

1 http://pseint.sourceforge.net

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

1773 Cara o cruz

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


momento que adivina, termina el algoritmo.

1776 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-
mular el resultado del lanzamiento de un dado (e.g., en PseInt, Azar()). Realice “lan-
1779 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
veces que salieron los números 1, 2, … y 6. Finalmente, haga un gráfico de barras ho-
1782 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-
bería ser:
1785 Tabla de frecuencias
1 4
2 3
1788 3 3
4 4
5 3
1791 6 3
Gráfico de barras
1 ****
1794 2 ***
3 ***
4 ****
1797 5 ***
6 ***

Series y sumatorias

1800 1. Hallar la sumatoria de la serie

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

1. Indicar cuántos términos hay que sumar (cuál es el valor de n) de la siguiente


1803 serie para que la suma sea mayor o igual a 1000.

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

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


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

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

1809 Reloj de 24 horas

Una empresa necesita visualizar un reloj de 24 horas (00:00:00 - 23:59:59). Realice un


programa que visualice el conteo del tiempo con el formato hh:mm:ss segundo a se-
1812 gundo. Haga versiones con todas las estructuras de repetición que conozca. Luego de
desarrollar este algoritmo revise la Miscelánea de la subsección Estructura de repeti-
ción FOR (página 88) y desarrolle un ejercicio parecido con la condición de que hay
1815 un límite en el tiempo que se muestra.

* Progresión geométrica

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


1818 cando el elemento anterior por una constante denominada razón. Así,
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
1821 progresión geométrica. El programa terminará después de presentar un término ma-
yor que un cierto límite dado (por ejemplo 133 para la progresión que se presenta
aquí).

1824 * Números de la serie Fibonacci

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


, , y cada uno de los siguientes términos se calculan sumando los
1827 dos anteriores: . Escriba un programa que genere dicha suce-
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
1830 ejemplo 33 para la serie que se presenta aquí).

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

• Elabore un algoritmo que muestre los términos de la serie de Fibonacci que


sean menores a 100000:

1833 * Aproximación de π

Dado que es la suma de la serie

, (4)

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


para un número suficientemente grande de . Nota: para realizar la potencia puede
utilizar el acento circunflejo ^.

1839 Calcule una aproximación de con un error aproximado (i.e., igual o menor) de
0.001. El error aproximado está dado por

(5)

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

82
Aproximación del logaritmo natural
El logaritmo natural de se puede aproximar con la serie

1845 (6)

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

Calcule una aproximación del logaritmo natural de con un error aproximado (i.e.,
1848 igual o menor) de 0.0001. Para saber qué es el error aproximado vea la ecuación 5.

* Aproximación del arco seno

Para n→∞ (en la práctica un número suficientemente alto) el arco seno de x se pue-
1851 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


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

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

1860 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


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

* Dibujo de triángulos

1866 • 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í-
1869 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:
Angel Vázquez-Patiño Universidad de Cuenca

1872 Primer número : 7 Primer número: 9


Segundo número: 1 Segundo número: 2

1 1 2 2
1875 111 1 222 8
11111 1 22222 32
1111111 1 2222222 128
1878 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-
1881 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
1884 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

1887 1 1 2 2
111 3 222 6
11111 5 22222 10
1890 1111111 7 2222222 14
222222222 18

Menú

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

1896 • 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
1899 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:

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

1902 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

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

1908 Menú: revisión de número

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


con las siguientes opciones:

1911 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
cero!” y vuelve a pedir un número

1914 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

1917 Menú: permutaciones, variaciones y combinaciones

Presente el siguiente menú en pantalla


-----------------------------
1920 Combinatoria y probabilidades
-----------------------------
1. Permutaciones
1923 2. Variaciones
3. Combinaciones
4. Salir

1926 Opción [1-4]: _


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-
1929 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ú

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

--------------------------------
1932 Permutaciones
--------------------------------
1. Sin repetición (n!)
1935 2. Con repetición (n!/(a!b!c!…))
3. Circulares ((n-1)!)
4. Volver

1938 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
1941 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
1944 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


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

Opción [1-3]: _
Cuando el usuario ingrese una opción incorrecta, presente algún mensaje que indique
1956 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
1959 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.

1962 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

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

1965 esta opción indique con texto cuándo se utiliza esa operación y si es necesario ponga
un ejemplo de uso.

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

Estructura de repetición FOR

1968 Miscelánea

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


cutar el siguiente algoritmo:
1971 Algoritmo misterioso
Definir suma, i, j Como Entero;
Para i <- 1 Hasta 4 Con Paso 1 Hacer
1974 Para j <- 3 Hasta 0 Con Paso -1 Hacer
suma <- i * (10^i) + j;
Escribir Sin Saltar suma, " ";
1977 Fin Para
Escribir " ";
Fin Para
1980 FinAlgoritmo
2. * Haga la prueba de escritorio e indique cuál es el resultado en pantalla de eje-
cutar el siguiente algoritmo:
1983 Algoritmo misterioso
n = 7;
Para i = 0 hasta n Con Paso 1
1986 Para j = n-i hasta 1 Con Paso -1
Mostrar Sin Saltar "#";
FinPara
1989 Mostrar "";
FinPara
FinAlgoritmo
1992 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.

4. Desarrolle un algoritmo que lea una serie de valores que terminará cuando se
1995 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-
1998 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

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

2001 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


2004 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
2007 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.

2010 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
2013 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ó
2016 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-
2019 cance a encuestar en un día, qué porcentaje tiene estudios de primaria, secun-
daria, carrera técnica, profesional y posgrado. Desarrolle el algoritmo que le
permita calcular esa información.

2022 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
2025 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-

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

nal que el cliente deberá pagar por su compra. Se sabe que sólo hay bolitas de
2028 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
2031 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
2034 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


2037 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.
2040 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
2043 ingresado por el usuario. El siguiente es un ejemplo donde el usuario ingresó el
número 5:

1 1 1

2046 2 4 8

3 9 27

4 16 64

2049 5 25 125

14. * Desarrolle un algoritmo que muestre el tiempo (en formato 24h00) segundo
a segundo desde 00:00:00 hasta una hora (con sus minutos y segundos) dada
2052 por el usuario. Por ejemplo 00:00:00, 00:00:01, 00:00:02,…, 20:20:17. Antes de
realizar este ejercicio desarrolle el ejercicio Reloj de 24 horas de la página 81.

15. Desarrolle un algoritmo que reciba un número entero positivo (validar) y que
2055 retorne un nuevo número con sus cifras invertidas.

16. Desarrollar un algoritmo que realice lo siguiente:

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

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

2058 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
la suma fue múltiplo de cuatro con N=3)
2061 xxxx
x x
xxxx
2064 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
x
2067 x
xxxxx
x
2070 x
d) El algoritmo termina cuando se haya dado lo del literal b y c.

17. Crear un programa que muestre en pantalla un diamante formado por asteris-
2073 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
**
2076 ****
******
********
2079 **********
********
******
2082 ****
**
18. * Dado el siguiente código fuente en lenguaje C, cuya salida se muestra como
2085 “Solución actual” en la parte derecha superior de la tabla siguiente:

SOLUCIÓN ACTUAL

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

SOLUCIÓN REQUERIDA

modifique el código de manera que la salida del programa sea similar que la
mostrada como “Solución requerida” en la parte derecha inferior de la tabla,
2088 es decir, que en lugar de mostrar asteriscos en forma de una letra X se mues-
tren numeradas ascendentemente desde arriba hasta el centro de la X y desde
el centro de la X hacia abajo, en forma descendente.

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

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


ción), y viceversa.

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


Algoritmo proceso_complicado
MAXIMO <- 200
2097 contador <- 0
valor<-0
repetir

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

2100 mientras valor>MAXIMO o valor<=0 hacer


escribir "ingrese el número de datos a procesar:"
leer valor
2103 si (valor<0 o valor>MAXIMO)
Escribir "Valor debe estar en el rango 1-",MAXIMO
FinSi
2106 Fin mientras

cuenta<-1
repetir
2109 Escribir "Ingrese un numero:"
leer numero
respuesta←verSiEsPar(numero) // 1, par; 0, impar
2112 segun (respuesta) hacer
1: i<-1
Mientras i<=numero hacer
2115 Mientras (i*100 mod valor) >
(numero*potencia(numero, i)
diagnostico(numero, valor)
2118 FinMientras
verSiDivisores(numero)
i<-i+1
2121 fin mientras
2: verSiEsPositivo(numero)
3:
2124 verSiEsNegativo(numero)
De Otro Modo:
Escribir "El número es cero"
2127 FinSegun
cuenta<-cuenta+1
Hasta Que cuenta>MAXIMO
2130 Escribir "Desea repetir el proceso?"
leer usuarioDiga
Hasta Que usuarioDiga="N"
2133 FinAlgoritmo
20. Realice la prueba de escritorio del siguiente código en C y seleccione la res-
puesta correcta.
2136 #include <stdio.h>
int main(int argc, char **argv)
{
2139 int i = 10, j;
for(j=i==10; j<=10 ; j++)

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

printf("\n%d", j);
2142 return 0;
}
¿Cuántas veces se ejecutará el bucle incluido en el código fuente?

2145 a. 1
b. 10
c. 11
2148 d. Error de compilación
e. Ninguna de las anteriores
21. Pregunta

2151 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
día, mes y año de nacimiento del usuario. En base a esos datos el algoritmo indica el
2154 signo zodiacal, la edad en horas y segundos y número de suerte del usuario. El núme-
ro de suerte se calcula sumando los dígitos de su año de nacimiento, si el número es
mayor a nueve se resta nueve de manera que el valor esté entre 1 y 9 1. El signo zodia-
2157 cal se calcula en base a la siguiente información:

• 21/marzo - 20/abril Aries


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

Series y sumatorias

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

1 Si necesita mayor explicación resuelva primero el ejercicio * Prueba del nueve de la división
(página 101).

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

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

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

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


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

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

2178 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


término anterior (ni-1)

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

2184 N-ésimo término a mostrar: 7


Término: 24
• Pregunta

2187 * Divisiones sucesivas de una serie de números

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
2190 desde la mitad hasta el final de la serie anterior e imprímala. Luego, haga una nueva
serie desde el comienzo hasta la mitad de la serie anterior e imprímala. Haga estos
pasos hasta que la serie ya no tenga números. A continuación se muestra ejemplos de
2193 ejecución del programa que le dejarán claro cómo tomar el número medio de la serie:
li: -5 li: -9
ls: 5 ls: 0
-5 -4 -3 -2 -1 0 1 2 3 4 5 -9 -8 -7 -6 -5 -4 -3 -2 -1 0
0 1 2 3 4 5 -5 -4 -3 -2 -1 0
0 1 2 -5 -4 -3
1 2 -4 -3
1 -4

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

li: 1
ls: 20
2196 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
10 11 12 13 14 15 16 17 18 19 20
10 11 12 13 14 15
2199 12 13 14 15
12 13
12 13
2202 12

* Impresión de patrones

Dado un número entero positivo en el intervalo [2, 9], mostrar en pantalla una X for-
2205 mada de números. Por ejemplo, con N=5:

Menú: media, mayor y menor

Implemente un algoritmo que muestre el siguiente menú:


2208 Menú

1. Ingresar número
2. Mostrar media
2211 3. Mostrar menor
4. Mostrar mayor
5. Salir

2214 Opción [1-5]:

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

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-
2217 yor o el menor de los números ingresados (con al menos un número ingresado ya se
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
2220 escoge la opción 5.

Manejo contable

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


2223 inicial de la cuenta es $0. El programa debe tener el siguiente menú:
1. Depósito
2. Retiro
2226 3. Saldo
4. Salir
El programa debe solicitar al usuario que indique si desea realizar un depósito o un
2229 retiro. Si el usuario elige hacer un retiro (opción 2 del menú), se solicita un valor y
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-
2232 gresado al saldo. Si el usuario elige hacer un depósito (opción 1 del menú) se solicita
un valor y ese valor se suma al saldo. Al final de cada transacción se vuelve al menú.
La opción 3 del menú muestra el saldo que se tiene en ese momento. La opción 4 ter-
2235 mina la ejecución del programa.

* Factorización de trinomio

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


2238 que los factores serán (x+m)(x+n), en donde m y n son dos números enteros tales
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-
2241 tivos (validar). El algoritmo debe terminar inmediatamente después de que encuentra
una de las posibles soluciones. Además, se debe mostrar un mensaje si no es posible
factorizar el trinomio.

2244 Ejemplo

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

Salida:

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

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

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

Salida:

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

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
2253 un solo valor); si no cumple esta condición, debe mostrar el mensaje “¡El número
debe ser positivo de más de dos dígitos!” y volver a pedir un número. Luego, muestre
la suma, producto, media, máximo y mínimo de los dígitos del número ingresado. Fi-
2256 nalmente, muestre la suma, producto, media, máximo y mínimo de los dígitos del nú-
mero ingresado elevados a un exponente igual a la cantidad de dígitos. A continua-
ción se muestra un ejemplo de ejecución (así exactamente debe mostrar los resulta-
2259 dos):
Número a analizar: 27
¡El número debe ser positivo de más de dos dígitos!

2262 Número a analizar: -188


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

Número a analizar: 15423

2265 Suma: 1 + 5 + 4 + 2 + 3 = 15
Producto: 1 × 5 × 4 × 2 × 3 = 120
Media: (1 + 5 + 4 + 2 + 3) / 5 = 3
2268 Máximo: max(1, 5, 4, 2, 3) = 5
Mínimo: min(1, 5, 4, 2, 3) = 1
*******************************************************
2271 Suma: 1^5 + 5^5 + 4^5 + 2^5 + 3^5 = 4425
Producto: 1^5 × 5^5 × 4^5 × 2^5 × 3^5 = 24883200000
Media: (1^5 + 5^5 + 4^5 + 2^5 + 3^5) / 5 = 885
2274 Máximo: max(1^5, 5^5, 4^5, 2^5, 3^5) = 3125
Mínimo: min(1^5, 5^5, 4^5, 2^5, 3^5) = 1

* Serie de Leibniz

2277 La serie de Leibniz o Gregory-Leibniz es una serie infinita cuya suma de términos
converge a π/4:

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

(7)

2280 Calcule una aproximación de con un error aproximado (i.e., igual o menor) de
0.0001. El error aproximado está dado por

(8)

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


mando n−1 términos.

* Examen de manejo

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

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


portan los nombres porque cada estudiante se identifica con un número ordinal de
2289 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
estudiante acompañante filme todo el examen del estudiante conductor para tener un
2292 vídeo de evidencia. La persona que toma el examen desea tener una lista de todas las
posibles parejas que pueden haber del curso.

Desarrolle un algoritmo que lea el número de estudiantes del curso (n), imprima el
2295 número total de parejas que pueden haber para el examen final e imprima todas esas
posibles parejas. Quizá le sea útil saber que el número de permutaciones que se pue-
den realizar con m elementos tomados de k en k es m!/(m−k)!.

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


Total de estudiantes: > 4
Número total de parejas: 12
2301 Pareja 1: {Conductor: 1, Acompañante: 2}
Pareja 2: {Conductor: 2, Acompañante: 1}
Pareja 3: {Conductor: 1, Acompañante: 3}
2304 Pareja 4: {Conductor: 3, Acompañante: 1}
Pareja 5: {Conductor: 1, Acompañante: 4}
Pareja 6: {Conductor: 4, Acompañante: 1}
2307 Pareja 7: {Conductor: 2, Acompañante: 3}
Pareja 8: {Conductor: 3, Acompañante: 2}
Pareja 9: {Conductor: 2, Acompañante: 4}
2310 Pareja 10: {Conductor: 4, Acompañante: 2}

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

Pareja 11: {Conductor: 3, Acompañante: 4}


Pareja 12: {Conductor: 4, Acompañante: 3}

2313 * Carrera de caballos

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


cada turno un caballo puede avanzar dos o tres metros pero también puede no avan-
2316 zar o incluso, por algún motivo, puede retroceder un metro. El caballo ganador es
aquel que primero llegue a la meta (o que la pase) ubicada a diez metros del punto
de partida. Si por algún motivo el caballo, estando en el punto de partida, quiere re-
2319 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
(Vázquez-Patiño, 2016) muestra la simulación con cinco y dos caballos2. El siguiente
2322 resultado muestra un instante de la carrera de cinco caballos en donde el quinto ca-
ballo queda a cuatro metros del punto de partida luego de haber retrocedido un me-
tro.
2325 **********************************************************
Turno: caballo 5
>
2328 Metros avanzados por el caballo 5: -1
**********************************************************
------------------------
2331 Caballo 1 X
------------------------
------------------------
2334 Caballo 2 X
------------------------
------------------------
2337 Caballo 3 X X X X X X
------------------------
------------------------
2340 Caballo 4 X X X X X
------------------------
------------------------
2343 Caballo 5 X X X X
------------------------
*********************************************************

1 https://youtu.be/zeB_zArHc2Y
2 En el vídeo se muestra un algoritmo que no toma en cuenta la consideración de que un caballo no
puede ir más atrás del punto de partida.

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

2346 Número de Armstrong

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


mero es de Armstrong si la suma de los dígitos que lo componen elevados, cada uno,
2349 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 = 94 + 44 + 74 + 44. El número ingresado
debe ser positivo (validar).

2352 * Prueba del nueve de la división

Realizar un algoritmo para realizar la prueba del 9 de la división entre dos números.
Solicitar al usuario que ingrese dos números enteros, el dividendo y el divisor, tal que
2355 dividendo > divisor. Realizar la división entre los dos números y la prueba del 9 para
comprobar si el resultado de la división es correcto. A continuación se da un ejemplo
de cómo se realiza la prueba del nueve.

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

* Encontrando triángulos rectángulos

Mostrar todos los triángulos rectángulos cuyas longitudes de sus lados no sobrepasan
2361 un valor dado y son valores enteros; además, indicar la cantidad de dichos triángulos.
Por ejemplo, si el usuario ingresa 10, el algoritmo deberá mostrar todas las tripletas
para las cuales las longitudes del cateto 1, cateto 2 e hipotenusa son números enteros
2364 y ninguno de ellos es mayor que 10. A continuación se muestra un ejemplo del resul-
tado de la ejecución del algoritmo.
Valor máximo:> 20

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


2) Hipotenusa: 5 Cateto 1: 4 Cateto 2: 3
3) Hipotenusa: 10 Cateto 1: 6 Cateto 2: 8
2370 4) Hipotenusa: 10 Cateto 1: 8 Cateto 2: 6

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

5) Hipotenusa: 13 Cateto 1: 5 Cateto 2: 12


6) Hipotenusa: 13 Cateto 1: 12 Cateto 2: 5
2373 7) Hipotenusa: 15 Cateto 1: 9 Cateto 2: 12
8) Hipotenusa: 15 Cateto 1: 12 Cateto 2: 9
9) Hipotenusa: 17 Cateto 1: 8 Cateto 2: 15
2376 10) Hipotenusa: 17 Cateto 1: 15 Cateto 2: 8
11) Hipotenusa: 20 Cateto 1: 12 Cateto 2: 16
12) Hipotenusa: 20 Cateto 1: 16 Cateto 2: 12

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


rectángulos.

* Número triangular

2382 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
fórmula

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

2385 Crear un programa que solicite un número entero N al usuario, y solamente si el nú-
mero ingresado es triangular mostrar en pantalla el triángulo de lado M generado.
Por ejemplo: el número 10 es un número triangular porque si colocamos 10 objetos en
2388 forma triangular, éstos generan un triángulo equilátero de lado 4
*
* *
2391 * * *
* * * *

La diagonal de Cantor

2394 Ejercicio propuesto por René Estrella.

Georg Cantor fue un matemático ruso que es considerado como uno de los padres de
la teoría de conjuntos. Entre otras muchas contribuciones a las matemáticas, Cantor
2397 usó un argumento conocido como el argumento de la diagonal para demostrar que el
conjunto de números reales es no-numerable. En este ejercicio vamos a considerar
una simplificación del argumento de Cantor para proponer un algoritmo que ejecute
2400 la siguiente tarea.

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

El usuario ingresa una lista de n números enteros. Cada uno de estos números debe
tener un número de dígitos igual a n. Una forma de ver la lista de números ingresa-
2403 dos es como una matriz de n filas (n = número de valores ingresados) por n columnas
(n = número de dígitos de los números). Evidentemente, cada celda de esta matriz
contendrá un dígito decimal (0 - 9). En el ejemplo que se muestra a continuación n =
2406 4, lo que significa que el usuario ingresó 4 números enteros de 4 dígitos cada uno.
1234
4815
2409 1623
4211
El resultado que debe mostrar el algoritmo es un número entero de n dígitos, para el
2412 cual el primer dígito es distinto del primer dígito del primero número, el segundo dí-
gito es distinto del segundo dígito del segundo número, el tercer dígito es diferente al
tercer dígito del tercer número y así sucesivamente. Como una ilustración, para el
2415 ejemplo mostrado arriba, el resultado de una ejecución válida del algoritmo sería el
número entero 2932. La única información que se le deberá solicitar al usuario será la
lista de números enteros a considerar. En particular, NO se deberá solicitar cuántos
2418 números se van a ingresar.

Random walks

Antes de desarrollar este algoritmo, revise el algoritmo pedido en el ejercicio llamado


2421 Simple random walks.

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


camina; 1, camina un paso) y probabilidad P(0) = 1-p , y P(1) = p. Realice un algo-
2424 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
cuántos tiempos).

2427 * Suma de dos números decimales

Realizar la suma de dos números positivos de hasta 4 cifras, cifra por cifra. No neces-
ariamente los dos números tienen el mismo número de cifras. Por ejemplo:
Número 1: 1325 Número 1: 789 Número 1: 99
Número 2: 4794 Número 2: 5689 Número 2: 999
11 111 11
1325 789 99

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

+4794 +5689 + 999


---- ---- ----
6119 6478 1098

2430 * Suma de dos números binarios

Escriba un programa que lea dos números enteros positivos, los convierta en números
binarios y los sume dígito por dígito (vea el ejercicio * Suma de dos números decima-
2433 les). Muestre los dos números binarios y el resultado obtenido de la suma. Por ejem-
plo, para los números 34 y 45, el programa debe imprimir
100010
2436 101101
-------
1001111, que equivale a 79 en decimal.

2439 * Suma de números consecutivos

Implemente un programa que lea un número entero positivo N y que encuentre su va-
lor en base a la suma de números consecutivos (no menores a 0 ni mayores a N). Por
2442 ejemplo:

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

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

2445 Raíz cuadrada de un número

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


posible utilizar la función SQRT (u otra cualquiera) para encontrar cualquier resulta-
2448 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


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.

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

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

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

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

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

Estructuras Básicas de Datos

2451 Arreglos unidimensionales

Miscelánea

Algunos de los ejercicios están basados en los libros de Pinales Delgado y Velázquez
2454 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?

2457 a) Almacenar tipos de datos


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

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


den inverso.

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


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


2469 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 50 notas de un examen en un arreglo y de-


2472 termine: a) la nota promedio, b) la mayor nota, c) la menor nota, d) el núme -
ro de alumnos que comparten la menor nota y e) el número de alumnos que
comparten la mayor nota.

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

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

2478 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-
2481 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-
2484 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.

2487 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
2490 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}
2493 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
2496 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
2499 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
2502 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
2505 diferencia entre B y A; si se da el caso de que A es mayor que B, se almacena
B, que indica lo que se requiere comprar para mantener la existencia en inven-
tario.

2508 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

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

2511 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
2514 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-
2517 le el consumo del mes por diferencia de lecturas y muestre para cada usuario:
nombre, consumo y valor a pagar.

15. * Desarrolle un programa que genere dos arreglos de cien elementos con núme-
2520 ros al azar y que calcule la suma de éstos (elemento a elemento) guardando su
resultado en otro arreglo, el cual se debe presentar en pantalla junto con los
dos arreglos generados.

2523 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-
2526 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.

2529 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-
2532 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.

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

2538 22. Elabore un diccionario simple de inglés a español utilizando dos arreglos de
tipo cadena con 20 palabras como mínimo.

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


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

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

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.

2544 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
2547 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
2550 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
2553 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.

2556 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
2559 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
2562 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


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

2568 31. * Desarrolle un programa que genere los números de la serie Fibonacci y los
guarde en un arreglo de 55 elementos (debe generar 55 términos de la serie).
Luego, dar la opción al usuario de poder visualizar un elemento de la serie
2571 dado su número ordinal (los números ordinales comienzan desde uno).

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


rango [1, 6]. Genere un segundo arreglo con 50 elementos con números aleato-
2574 rios enteros en el rango [2, 7]. Genere un tercer arreglo donde se guarden los

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

resultados de elevar el elemento del primer arreglo al exponente indicado en el


segundo arreglo; los cálculos se hacen con elementos con el mismo número de
2577 índice. Muestre los arreglos de manera vertical en tres columnas, cada una
para cada arreglo:
Base Exponente Potencia
2580 arreglo11 arreglo21 arreglo11^arreglo21
arreglo12 arreglo22 arreglo12^arreglo22
arreglo13 arreglo23 arreglo13^arreglo23
2583 arreglo14 arreglo24 arreglo14^arreglo24
arreglo15 arreglo25 arreglo15^arreglo25
33. Generar un arreglo con 100 números aleatorios enteros en el rango [1, 2020],
2586 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
un año bisiesto, caso contrario guardar la palabra no. Mostrar los valores de
2589 los dos arreglos de manera vertical (en columnas):
Año Bisiesto
1563 No
2592 4 Sí

Manejo de arreglos

1. Generar un arreglo llamado angles que contenga los ángulos múltiplos de 30°
2595 entre 30° y 360°.

2. Extraer del arreglo los elementos cuyo índice es par y guardarlos en un arreglo
llamado evenAngles.

2598 3. Extraer del arreglo los elementos cuyo índice es impar y guardarlos en un arre-
glo llamado oddAngles.

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

2601 * Eliminación de duplicados

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

Use una arreglo para resolver el siguiente problema: Escriba una aplicación que per-
2604 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
el “peor caso”, en el que todos los n números son diferentes. Use el arreglo más pe-

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

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

Ordenamiento de n números

2610 Dados n números en un arreglo, realizar la ordenación de los mismos tanto de forma
ascendente como descendente.

Ángulo entre vectores

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

Relleno de arreglo con números aleatorios

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

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


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

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


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

2622 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
todos los componentes del arreglo. Indicar si esto pasa y mostrar los valores de
2625 los componentes generados.

Graficación de frecuencias

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


2628 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
mismas. Por ejemplo, si 20 veces salió 6, 30 veces salió 5, 10 veces salió 4, 5
2631 veces salió 3, 10 veces salió 2, 25 veces salió 1, la tabla de frecuencias y el grá-
fico serían:
TABLA
2634 Valor Frecuencia
1 25

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

2 10
2637 3 5
4 10
5 30
2640 6 20

Gráfica
1 *************************
2643 2 **********
3 *****
4 **********
2646 5 ******************************
6 ********************
• Simular el lanzamiento de dos dados al mismo tiempo en 100 ocasiones. En un
2649 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
último, mostrar la tabla de frecuencias y un gráfico de las mismas.

2652 Criba de Eratóstenes

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

Un número primo es cualquier entero mayor que 1 que es divisible solamente para sí
2655 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:

1. Se crea un arreglo de tipo primitivo booleano con todos los elementos iniciali-
2658 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
elementos eventualmente contendrán el valor FALSE.

2661 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
como FALSE todo elemento cuyo índice es múltiplo del índice para el elemen-
2664 to con valor TRUE. Entonces, se continúa el proceso con el siguiente elemento
con valor TRUE. Para el índice 2 del arreglo, todos los elementos más allá del
elemento 2 en el arreglo, que tengan índices que sean múltiplos de 2 (índices 4,
2667 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

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

sean múltiplos de 3 (índices 6, 9, 12, 15, etc.), serán establecidos como FALSE;
2670 y así en adelante.

Cuando este proceso termina, los elementos del arreglo que tienen el valor TRUE in-
dican que el índice de ese elemento corresponde a un número primo. Estos índices de-
2673 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ú-
meros primos entre 2 y 20.

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

Algoritmo de Havel-Hakimi

2679 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
true si la serie corresponde a una serie gráfica o false en caso de que la serie no co-
2682 rresponda a una serie gráfica. Vea la explicación del algoritmo mediante el siguiente
enlace https://youtu.be/-prrZd_NJqQ.

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

Arreglos bidimensionales

2685 Miscelánea

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

1. Cree una matriz de N×M (leer N y M por teclado). Imprima los cuatro valores
que se encuentran en los vértices de la matriz (mat[0][0], etc.).

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

3. Desarrolle un programa que genere una matriz de cinco filas y diez columnas
2694 con números enteros aleatorios, los imprima e indique los valores máximo y
mínimo y sus posiciones dentro de la matriz.

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


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

2700 5. Implemente una función para determinar si dos matrices (enviadas como argu-
mentos) contienen los mismos elementos. La función tiene un tercer parámetro
para indicar si se desea que la función actúe 1) comparando las dos matrices
2703 elemento a elemento o 2) comparando las dos matrices aunque los elementos
no se presenten en el mismo orden.

6. Implemente una función que construya y devuelva matrices cuadradas de cual-


2706 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-
rá como parámetro a la función. El resultado se imprimirá desde el programa/
2709 función principal.

116
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
frecuencia absoluta y la frecuencia relativa para cada una de las vocales.

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

9. Implemente un algoritmo para obtener una matriz como el resultado de la res-


2715 ta de dos matrices de orden N×M.

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


Una matriz es de tipo diagonal si es una matriz cuadrada en la cual todos sus
2718 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-
mento negativo. Realice un algoritmo que indique la posición que ese elemento
2721 ocupa en el arreglo (en la fila y la columna en la que se encuentra ese elemen-
to).

12. Se tienen dos matrices cuadradas (de 12 filas y 12 columnas cada una). Reali-
2724 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-
pal es donde los subíndices i y j son iguales).

2727 13. * Se tiene una matriz de 12 filas por 19 columnas y se desea tener un progra-
ma para encontrar todos sus elementos negativos y para que los cambie por un
cero. Desarrolle el programa que haga eso.

2730 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
principal que son igual a cero.

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

2733 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
hora. Realice un algoritmo que:

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


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

16. Indurama cuenta con N chóferes, de los cuales se conoce el nombre y los kiló-
2742 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-
ción y genere un arreglo con el total de kilómetros que recorrió cada chófer du-
2745 rante la semana. Al final se debe presentar un reporte donde se muestre el
nombre del chófer, los kilómetros recorridos cada día y el total de éstos, como
se muestra en la tabla. Adicionalmente, se debe mostrar un reporte con el chó-
2748 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.
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
2751 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
sus columnas.

2754 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-
tos.

2757 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-
res impares.

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

2760 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-
ma los valores.

2763 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-
sentar la mediana de cada curso.

2766 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-
cendente (muestra dos matrices). Por ejemplo, la siguiente es una matriz de
2769 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-
mo, desarrolle una función que devuelva una matriz de f filas y c columnas
2772 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


mitad de los elementos, caso contrario hacer lo mismo pero dejando sin mover
2775 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].

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

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


nas, que se refieren al colegio, al curso y al número de estudiantes (se asume
2781 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
centro de pertenencia. La nota media máxima hace referencia al valor máximo
2784 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-
mo, desarrolle una función igenerarMatriz3D(int p, int f, int c) que
2787 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-
das por sus tres representantes a lo largo de doce meses de sus cuatro produc-

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

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


tridimensional sobre uno de dos dimensiones que represente el total de ventas,
TOTAL [ mes, producto ], para lo cual se suma las ventas de cada producto
2793 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
imprima su potencia N-ésima, siendo N un dato de entrada. Vea https://goo.-
2796 gl/NYT4Xi

28. * Implemente un algoritmo que lea una matriz de n×m, en la cual se registra
números. El proceso de llenado de la matriz debe realizarse en una función.
2799 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-
tes. Los cálculos de la media y mediana deben ser realizados en funciones dis-
2802 tintas. El programa debe mostrar los resultados de la media y mediana en fun-
ciones independientes.

29. * Desarrolle un programa que, ingresadas por parte del usuario dos matrices,
2805 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
inverso, es decir, el mínimo número de A con el máximo de B y así sucesiva-
2808 mente. El programa debe mostrar en pantalla las matrices ingresadas por el
usuario y las matrices luego del intercambio.

Por ejemplo, si A y B son:

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

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

Como sugerencia, usted podría utilizar dos matrices que indiquen las posicio-
nes de los mínimos y máximos, así (los índices de filas y columnas comienzan
2814 en cero en este ejemplo específico):

30. * Desarrolle una función que dada una matriz A de n×m devuelva una matriz
B de m×n que sea formada leyendo la matriz en el sentido mostrado a conti-
2817 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

Suma y resta de matrices

2820 Pedir al usuario el número de filas y columnas de dos matrices que ingresará. Ingre-
sar las dos matrices. Calcular la suma de las dos matrices y guardar el resultado en
una matriz resultado. Calcular la resta de las dos matrices y guardar el resultado en
2823 una segunda matriz resultado. Mostrar al usuario las dos matrices resultado.

Producto de un escalar por una matriz

Pedir al usuario el número de filas y columnas de una matriz que ingresará. Ingresar
2826 dicha matriz. Ingresar un número escalar. Multiplicar el escalar por la matriz y mos-
trar el resultado al usuario.

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

Diagonal principal de una matriz

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

* Transpuesta de una matriz

2832 • Pedir al usuario el número de filas y columnas de una matriz que ingresará.
Ingresar dicha matriz. Calcular la transpuesta, guardarla en otra matriz y
mostrarla al usuario.

2835 • Generar una matriz de 4 filas y 5 columnas con números aleatorios entre 1 y
100, y hacer su matriz transpuesta.

Simetría de una matriz

2838 Una matriz de la forma

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-
2841 triz es simétrica. Trate de implementar una solución que reduzca el número de opera-
ciones, una vez que hay cualquier información que indique que la matriz no es simé-
trica.

2844 Determinante de una matriz

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


usuario.

2847 Producto de matrices

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.

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

2850 Punto de silla de una matriz

1. 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. Escribir un pro-
2853 grama que genere una matriz de números enteros aleatorios (el usuario debe
ingresar las dimensiones) y calcule la posición de un punto de silla (si es que
existe).

2856 2. Elabore un algoritmo que genere matrices de números enteros aleatorios (el
usuario debe ingresar las dimensiones) hasta que genere una matriz con un (o
más) punto de silla.

2859 Tablero de ajedrez

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.

2862 * Distancia de Chebyshov

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
2865 donde la distancia entre dos puntos (representados por sus vectores) es la mayor de
sus diferencias a lo largo de cualquiera de sus dimensiones coordenadas. También es
conocida como distancia del tablero de ajedrez (vea el ejercicio Cálculos espaciales
2868 básicos, página 20), porque coincide con el número mínimo de movimientos que nece-
sita 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
2871 los bordes del tablero). Esto es debido a que el rey se puede mover tanto en diagonal
como en horizontal o vertical. En el tablero de la figura 5 se muestra las distancias de
Chebyshov desde la casilla f6.

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

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

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.

2877 * El cuadrado latino

Este problema puede ser resuelto también sin matrices (así fue tomado en la prueba
1 del semestre marzo-agosto 2018).

2880 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 rotación
2883 de la fila anterior un lugar a la derecha. Por ejemplo, es siguiente es un cuadrado la-
tino de orden 4. Fuente: (Alcalde Lancharro and García López, 1992).

1 2 3 4
4 1 2 3
3 4 1 2
2 3 4 1

El cuadrado mágico

2886 1. Un cuadrado mágico 3×3 es una matriz de 3×3 formada por números del 1 al 9
donde la suma de sus filas, sus columnas y sus diagonales son idénticas. Crear

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

un programa que permita introducir una matriz cuadrada de 3×3 por teclado
2889 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.

2892 2. 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
hasta N2. La suma de los números que figuran en cada fila, cada columna y
2895 cada diagonal son iguales. Un ejemplo es:

8 1 6
3 5 7
4 9 2
Para generar un cuadrado mágico siga estos pasos:

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

2898 2. Cada número que sigue debe colocarse en la casilla correspondiente a la fila
anterior y columna posterior.

3. Si un número generado cae en una casilla ocupada, no aplique la regla an-


2901 terior, sino que debe colocarlo en la casilla de la fila posterior e igual co-
lumna.

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


2904 terior a la última es la primera.

* Lotería en Cuenca

Por las fiestas de Cuenca, la Junta de Beneficencia de Guayaquil hará un sorteo espe-
2907 cial de lotería. Imprimirá 243 boletos para cada una de las 27 parroquias más pobla-
das de Cuenca. Los boletos serán de cuatro dígitos (9⁴ = 6561 boletos en total); cada
dígito está en el intervalo [0, 9]. La Junta de Beneficencia desea tener una idea bas-
2910 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-
nas (boletos por parroquia) para guardar los números de los boletos que imprimirá la
2913 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-
quia y qué número de comprador ganó, genere un número aleatorio que represente un
2916 número ganador e indique la parroquia en la se vendería el boleto y el número de

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

comprador del boleto (asuma que cada persona compra un sólo boleto en el orden de-
terminado por el número de columna de la matriz). A continuación se muestra los re-
2919 sultados de dos ejecuciones del programa:

Boleto ganador : 1991 Boleto ganador : 514


Parroquia ganadora: 26 Parroquia ganadora: 8
2922 Comprador ganador : 61 2925 Comprador ganador : 114

Cadena de ADN

Una cadena de ADN se representa como una secuencia circular de bases (adenina, ti-
2928 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-
tido horario desde la parte superior izquierda:

A T G C G T A T
2931 Se pide diseñar una función que devuelva true si dos cadenas de ADN, enviadas como
parámetros, coinciden.

Muy importante: la secuencia de ADN es cíclica, por lo que puede comenzar en


2934 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

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


2937 Implemente un programa que tenga el menú:
=======================
El juego del alfabeto
2940 =======================
Menú
a. Nivel básico

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

2943 b. Nivel intermedio


c. Nivel avanzado
d. Salir
2946 ______________________
Opción[a-d]:
======================
2949 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
letra del abecedario se debe imprimir la letra I o D o J de manera aleatoria pero sólo
2952 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:
A B C D E
2955 I D J I D

F G H I J
I I J D J

2958 K L M N O
D D I J I

P Q R S T
2961 I J I I J

U V X Y Z
D I J D D
2964 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.
No tome en cuenta la letra ñ ni w. Debajo de cada letra del abecedario se debe im-
2967 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
arriba hacia abajo). Un ejemplo se muestra a continuación:
2970 Z Y X V U
I D J I D

T S R Q P
2973 I I J D J

O N M L K
D D I J I

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

2976 J I H G F
I J I I J

E D C B A
2979 D I J D D
Para el nivel avanzado se debe imprimir el alfabeto de arriba hacia abajo y de iz -
quierda a derecha en una matriz de 5x5. No tome en cuenta la letra ñ ni w. Debajo
2982 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
matriz de izquierda a derecha y de arriba hacia abajo). Un ejemplo se muestra a con-
2985 tinuación:
A F K P U
I D J I D

2988 B G L Q V
I I J D J

C H M R X
2991 D D I J I

D I N S Y
I J I I J

2994 E J O T Z
D I J D D

Cálculos espaciales básicos

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

Distancia de tablero de ajedrez

3000 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
celda a otra. Por ejemplo, si se permite el movimiento en todas direcciones, las ocho
3003 celdas aledañas a un píxel tienen una distancia de uno, puesto que se necesita un úni-
co paso para llegar a cualquiera de ellas. Por similitud a la forma en que uno puede

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

moverse en un tablero de ajedrez, este tipo de distancia se conoce como distancia de


3006 tablero de ajedrez.

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


que quiere calcular la distancia de tablero de ajedrez.
3009 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
desde la celda a la mencionada por el usuario. La figura 6.a muestra un ejem-
3012 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).

Distancia Manhattan

3015 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
ciencias de la información geográfica pueden definirse algunos tipos de distancia rás-
3018 ter considerando el mismo principio (i.e. número de celdas por las que debe pasarse
para ir de una celda a otra).

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

1. Genere una matriz de 8 filas y 8 columnas con números enteros aleatorios en


3021 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]).
Como ejemplo vea la siguiente matriz generada.

1 2 3 4 5

1 2 8 7 8 9

2 13 1 15 17 20

3 14 16 14 3 22

4 24 25 11 26 1

5 2 18 29 30 31

Figura 7: Matriz de 8×8 (se muestran sólo 25 celdas) con números enteros
aleatorios en el rango [1, 32]. Sólo dos celdas tienen el mismo número.

3024 2. Muestre en pantalla la matriz generada.


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

Formación de grupos de trabajo

3039 Con una matriz en donde se tiene como campos el número, apellido 1, apellido 2,
nombre 1 y nombre 2 de cada estudiante, implemente un programa que genere gru-

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

pos de trabajo con estudiantes escogidos al azar. Para generar los grupos de trabajo
3042 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-
lamente se debe indicar en pantalla cuál es el grupo que tiene menos estudiantes que
3045 el pedido (ver el segundo ejemplo de ejecución).

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


donde se indican los campos de los estudiantes del curso. Un ejemplo de archivo es el
3048 siguiente (podría llamarse listaEstudiantes.csv):
1,Abad,Sigcho,Carlos,Daniel
2,Agudo,Güiracocha,Dayana,Isabel
3051 3,Andrade,Carchi,Julio,César
4,Arévalo,Angamarca,Moisés,Santiago
El siguiente es un primer ejemplo de ejecución del programa:
3054 Número de estudiantes por grupo: 2
Grupo 1
1. Julio César Andrade Carchi
3057 2. Carlos Daniel Abad Sigcho

Grupo 2
1. Dayana Isabel Agudo Güiracocha
3060 2. Moisés Santiago Arévalo Angamarca
El siguiente es un segundo ejemplo de ejecución del programa en donde hay un grupo
que tiene menos estudiantes de los pedidos por el usuario:
3063 Número de estudiantes por grupo: 3
Grupo 1
1. Moisés Santiago Arévalo Angamarca
3066 2. Dayana Isabel Agudo Güiracocha
3. Julio César Andrade Carchi

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


3069 1. Carlos Daniel Abad Sigcho
Una vez que pueda generar los grupos dado el número de estudiantes que se desean
en cada grupo, haga otro programa que genere los grupos dado el número total de
3072 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
donde el usuario quiso generar tres grupos:
3075 Número de grupos: 3

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

Grupo 1
1. Julio César Andrade Carchi
3078 Grupo 2
1. Carlos Daniel Abad Sigcho
Grupo 3
3081 1. Dayana Isabel Agudo Güiracocha
2. Moisés Santiago Arévalo Angamarca

Puesto que el objetivo de este ejercicio es el manejo de matrices, se presenta a conti-


3084 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-
do), debe usar la función String[][] cargarLista(String rutaArchivo,
3087 int numEstudiantes); rutaArchivos es la ruta absoluta del archivo que contiene
la lista de estudiantes y numEstudiantes es el número total de estudiantes.
import java.io.BufferedReader;
3090 import java.io.FileReader;
import java.io.IOException;
import java.util.Arrays;

3093 public class listaEstudiantes {


public static void main (String args[]) {
String[][] lista = cargarLista("listaEstudiantes.csv", 24);
3096 }

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


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

3102 // separador de campos del archivo csv


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

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

BufferedReader br = null;

try {
3108 br = new BufferedReader(new

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

FileReader(rutaArchivo));
String line = br.readLine();
3111 int i = 0;
while (null!=line) {
String [] campos = line.split(SEPARADOR);
3114 //System.out.println(Arrays.toString(campos));

campos = removeTrailingQuotes(campos, QUOTE);


3117 lista[i++] = campos;
line = br.readLine();
}
3120
} catch (Exception e) {
System.out.println(e.getMessage());
3123 } finally {
try{
br.close();
3126 }catch(IOException e){
System.out.println(e.getMessage());
}
3129 }
return lista;
}

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


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

* Matriz de adyacencia

Una de las implementaciones más frecuentes para la representación de grafos son las
3144 matrices de adyacencia. Una matriz de adyacencia A (implementada como una ma-
triz bidimensional) determina las adyacencias entre pares de vértices de un grafo. En
una matriz de adyacencia, los vértices se conciben como enteros en el conjunto {1, 2,
3147 …, n} y las aristas como pares de tales enteros. Esto permite almacenar referencias a

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

las aristas en las celdas de una matriz bidimensional de nxn. Cada fila y cada colum-
na representan un vértice del grafo y cada posición representa una arista (o la ausen-
3150 cia de esta) cuyo vértice origen se encuentra en la fila y vértice final se encuentra en
la columna. Las siguientes figuras muestran la representación gráfica de un grafo diri-
gido simple, un grafo no dirigido simple, un grafo euleriano y un multigrafo con sus
3153 respectivas matrices de adyacencia.

Escribir un programa que implemente las funciones que se detallan a continuación.


Todas las funciones reciben como entrada el grafo representado mediante su matriz
3156 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.
3159 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-
3162 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
3165 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-
3168 tas, entonces:

◦ Si G es no dirigido, m≤n(n-1)/2

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

◦ Si G es dirigido, m≤n(n-1)

3171 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
3174 (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-
3177 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-
3180 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
3183 punto” (es decir, la suma de los puntos en las dos caras que están hacia arriba
es igual que la suma en el primer lanzamiento). Se pierde por sacar un 7 antes
de que “hace su punto”.

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


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


3192 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-
3195 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


3198 referencia al número de lanzamientos antes de terminar el juego.

5. ¿Las probabilidades de ganar mejoran con la duración del juego?

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

Hormiga de Langton

3201 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-
3204 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


3207 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
3210 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.

3213 Implemente un programa que realice lo siguiente:

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.

3216 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


3219 matriz como se muestra en la figura 8.

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

Figura 8: imagen tomada de Wikipedia https://goo.gl/6dNIEW.

* Las ocho reinas

Este problema clásico en ciencias de la computación fue propuesto por René Estrella.

3222 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
3225 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
3228 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
3231 una de las posibles soluciones:

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
3234 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:

3237 1. Generar solución

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

2. Ingresar configuración candidata


3. Salir

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


3243 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-
3246 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-
3249 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-
das (1, 1) corresponde a la casilla superior izquierda del tablero y la coordenada (8,
3252 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-
3255 guientes coordenadas:
Coordenadas Reina 1: 1, 3
Coordenadas Reina 2: 2, 6
3258 Coordenadas Reina 3: 3, 4
Coordenadas Reina 4: 4, 2
Coordenadas Reina 5: 5, 8
3261 Coordenadas Reina 6: 6, 5
Coordenadas Reina 7: 7, 7
Coordenadas Reina 8: 8, 1
3264 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

3267 El programa solamente termina cuando se escoja esta opción.

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

* Recorridos de matriz

Espiral hacia el interior

3270 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
3273 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-
3276 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
3279 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-
me que el primer elemento es el de subíndice cero). Finalmente muestre la última
3282 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
3285 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

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

3288 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-
3291 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-
3294 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.

Figura 11: Recorrido en espiral hacia el exterior de una matriz cuadrada .

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

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

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

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

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

3309 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

10-12 B Buena

13-17 A Aceptable

18-20 S Sobresaliente

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

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

3318 * Datos de personas

El programa va a almacenar registros en una matriz. Para ello se debe hacer lo si-
guiente:

3321 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,
3324 cree la matriz que almacenará los registros.

Ejemplo
cédula
3327 nombre
apellido
edad

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

3330 ...
Í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-
3333 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
3336 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.

3339 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
3342 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-
3345 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.
3348 cedula:0305677824;teléfono:4023568;nombre:sara;apellido:abril
¡Advertencia! El campo teléfono no existe pero se ingresa el registro.

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

0104132548 cevallos 22
0108562554 juan malo 25
0305677824 sara abril
3. Búsquedas

3351 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
3354 antes y después de cada búsqueda. Por ejemplo:
¿Por qué campo desea buscar?
apellido
3357 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.
3360 cédula: 0108562554
nombre: juan
apellido: malo
3363 edad: 25

* Datos de empresas y empleados

Dados los siguientes datos de entrada en formato de cadena:


3366 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;"
3369 + "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.

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

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

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

3378 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
3381 misma.

Ejemplo

1. Mostrar los datos de una empresa

3384 Se pide al usuario el código de la empresa que desea mostrar

• Código: emp3

El sistema muestra los datos de la empresa

3387 • Código: emp3

• Nombre: Elecaustro

2. Listar todas las empresas.

Código Nombre
emp1 Marcimex
emp2 Etapa
emp3 Elecaustro
3390 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

3393 • Código: emp1

El sistema muestra los empleados de la empresa emp1 (Marcimex) ordenados de for-


ma descendente según el salario.

3396 Empresa: Marcimex

Empleado Salario
Juan 1500
Edgar 1200
Pedro 1100
Jaime 900

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

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

3399 * 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].
3402 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).
3405 4. Generar la matriz de resumen (explicada en el ejemplo).
5. Generar y mostrar el histograma utilizando una matriz.

Ejemplo

3408 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

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

1 5 4
6 10 7
11 15 3
16 20 6
3414 Nota: las columnas de esta matriz representan, de izquierda a derecha, el límite infe-
rior, el límite superior y la frecuencia de cada rango.

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

5. Generar y mostrar el histograma utilizando una matriz

#
# #
# #
# # #
# # # #
# # # #
# # # #
1-5 6-10 11-15 16-20

3417 * 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
3420 filas impares de izquierda a derecha y en las filas pares de derecha a izquierda. Las
columnas que no contienen información, no deben ser consideradas en la visualización
de la matriz.

3423 Por ejemplo, la frase: “hola mundo, que tal? Hoy es viernes 26 de enero.” se almacena
en la matriz como se muestra en la figura 12.

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

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
3426 dará como resultado:

h, ee rH olqoneneyua e ser e muts2o.6 andlv di?o

Cifrado básico 2

3429 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-
3432 mentos igual o mayor al total de caracteres de la frase. Pero, la matriz no
debe tener más elementos de los necesarios de manera que no se utilice memo-
ria innecesaria. Por ejemplo, si la longitud de la frase es 9, el orden de la ma-
3435 triz cuadrada es 3; o si la longitud de la frase es 17, el orden de la matriz es 5.

2. Los caracteres de la frase deben ser asignados a los elementos de la matriz co-
menzando desde el elemento de la primera fila y primera columna. Luego, el
3438 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

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

3441 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-
3444 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.

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

3450 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-
3453 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


3456 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
cada fila columna por columna ezeia rsadi nlfel rayf
- debe mostrar la matriz cuadrada - do tuaracdmm a azrer dbtaieslra

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

Un algoritmo voraz para el número cromático

3459 Vea https://youtu.be/DyRh5UhtVvw

Algoritmo de Floyd-Warshall

El algoritmo de Floyd-Warshall es un algoritmo de análisis sobre grafos para encon-


3462 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 algoritmo. Mues-
3465 tre también el diagrama de flujo del algoritmo.

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

Funciones

Ámbito de las variables

3468 1. * ¿Cómo se conocen a las variables que son creadas dentro del programa y
fuera de cualquier función?

a) Estáticas
3471 b) Globales
c) Instancia
d) Locales

3474 2. ¿Cuál es la diferencia entre una llamada de función por valor y una llamada
de función por referencia?

3. ¿Cómo se conocen a las variables que son declaradas dentro de una función o
3477 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-
de fueron declaradas?

3480 4. ¿Cuando se declara una variable global, es inicializada automáticamente por el


sistema?

5. ¿Cuando se declara una variable local, es inicializada automáticamente por el


3483 sistema?

6. ¿Cuando una variable global y una variable local tienen el mismo nombre cuál
tiene prioridad dentro de la función donde se declaró la variable local?

7.

3486 Miscelánea

Algunos de los siguientes ejercicios son tomados del libro de Pérez Montes (2010) o
del libro de la Editorial Macro (2001).

3489 1. Implemente una función que imprima en pantalla el doble del valor que se le
pasa como parámetro.

2. Implemente una función que reciba como parámetro un número N, y muestre


3492 por pantalla N veces el mensaje “Función ejecutándose”. Validar N para que
sea mayor o igual a cero.

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

3. Implemente una función que devuelva el valor absoluto de cualquier número


3495 real dado.

4. Implemente una función que indique si un año es bisiesto o no. Un año es bi-
siesto si es múltiplo de 4 (por ejemplo 1984). Sin embargo, los años múltiplos
3498 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).

5. Implemente una función que calcule la distancia euclídea entre dos puntos.

3501 6. 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;
para distinguir el uno del otro use otro parámetro.

3504 7. Implemente una función que sume los 137 primeros números pares (>0).

8. Implemente una función que sume los n primeros números impares (>0).

9. Implemente una función que genere un número aleatorio real entre un rango
3507 enviado como parámetro.

10. Implemente una función que imprima en pantalla un número dado de asteris-
cos indicado en el parámetro recibido. El argumento indica el número de aste-
3510 riscos del cateto del triángulo rectángulo que se “dibuja”. Por ejemplo, para un
triángulo rectángulo de cateto 8, se imprimiría en pantalla
*
3513 * *
* * *
* * * *
3516 * * * * *
* * * * * *
* * * * * * *
3519 * * * * * * * *
11. Implemente una función que reciba dos números y que devuelva el número ma-
yor.

3522 12. Implemente una función que reciba tres números y que devuelva el máximo.

13. Implemente una función que tenga como parámetro un arreglo de números
reales y que devuelva el máximo de los números.

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

3525 14. Implemente una función que tenga como parámetro una matriz de números
reales y que devuelva el mínimo de los números.

15. Implemente una función que reciba dos enteros y muestre todos los números
3528 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.

3531 16. Implemente una función que calcule la suma

17. Implemente una función que calcule la suma (debe escribir también la función
para realizar la potencia)

3534 18. Implemente una función que transforme a binario un número entre 0 y 255.

19. 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
3537 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.

20. Implemente una función que reciba como parámetros una cadena de caracteres
3540 y un carácter; la función devuelve el número de veces que se encuentra el ca-
rácter en la cadena.

21. Implemente una función que indique si un número entero es primo.

3543 22. 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.

23. Implemente una función que indique si dos números enteros positivos son ami-
3546 gos. Dos números amigos son dos números enteros positivos a y b tales que la
suma de los divisores propios de uno es igual al otro número y viceversa, es
decir SD(a)=b y SD(b)=a, donde SD(n) es igual a la suma de los divisores de
3549 n, sin incluir a n. Vea https://is.gd/KHBfs1.

24. Implemente una función que calcule el máximo común divisor de dos números.

25. Implemente una función que calcule el máximo común divisor de tres números.

3552 26. Implemente una función que calcule el mínimo común múltiplo de dos núme-
ros.

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

27. Implemente una función que calcule el mínimo común múltiplo de tres núme-
3555 ros.

28. Implemente una función que voltee un número entero positivo dado. Por ejem-
plo, si se ingresa 98786, se devuelve 68789.

3558 29. Implemente una función que reciba un arreglo de números enteros y devuelva
el máximo común divisor de esos números.

30. Implemente una función que reciba un arreglo de números enteros y devuelva
3561 el mínimo común múltiplo de esos números.

31. Implemente una función que reciba como parámetros dos arreglos. La primera
con los 6 números de una apuesta de la primitiva y la segunda con los 6 núme-
3564 ros ganadores. La función debe devolver el número de aciertos.

32. Implemente una función que reciba un arreglo que debe rellenar. Se leerá por
teclado una serie de números hasta que el usuario escriba “PARAR” o hasta
3567 que el arreglo se llene: guarde sólo los pares e ignore los impares. Se devuelve
la cantidad de impares ignorados.

33. Implemente una función que reciba una matriz de enteros y un número, e indi-
3570 que si el número se encuentra en la matriz.

34. Implemente una función que devuelva el valor máximo de una matriz.

35. Implemente una función que devuelva, en un arreglo, el área y el volumen de


3573 un cilindro. Hemos de pasarle a la función el radio y la altura.

36. Implemente una función que recibe un número entero y devuelve, en un arre-
glo, los divisores primos que tiene.

3576 37. 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
carácter: 's', 'r', 'm', 'd'). La función devuelve una matriz con los resulta-
3579 dos.

38. Implemente una función que calcule el n-ésimo término de la serie de Fibonac-
ci. En esta serie el n-ésimo valor se calcula sumando los dos valores anteriores.
3582 Es decir fibonacci(n) = fibonacci(n-1) + fibonacci(n-2), siendo fibonacci(0) =
1 y fibonacci(1) = 1.

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

39. Igual que el ejercicio anterior, pero pudiendo configurar los valores de los dos
3585 primeros términos de la serie.

40. 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
3588 negra), etc. (P, T, C, A, R, D). La función debe devolver un valor booleano,
que indique si el rey negro está amenazado.

41. Igual que el ejercicio anterior, pero indicando si existe jaque mate a las negras.

42.

3591 * Histograma

Implemente un programa usando funciones que lea N números de enteros positivos


entre 1 y 250.

3594 Se han definido los siguientes rangos: 0-50, 51-100, 101-150, 151-200, 201-250.

Se debe mostrar el número de datos que está en cada uno de los rangos especificados,
separados por un TAB. Además, se debe mostrar un histograma. Por ejemplo:
3597 Tabla de valores por rango
---------------------------------------------------------------------------
0-50 51-100 101-150 151-200 201-250
3600 ---------------------------------------------------------------------------
17 8 10 5 32
---------------------------------------------------------------------------

3603 Histograma
|-----------------------------------------------------------------
0-50 | *******************
3606 51-100 | *********
101-150 | ***********
151-200 | *****
3609 201-250 | ****************************************************
|-----------------------------------------------------------------

Aritmética básica

3612 Visualizar el siguiente menú


1. Suma
2. Resta

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

3615 3. Multiplicación
4. División
5. Salir

3618 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
3621 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].
3624 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

3627 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,
3630 debe elevarlo al cuadrado (se debe presentar este último resultado también).

Aproximación de sinh-1

Para n→∞ (en la práctica un número suficientemente alto) la función sinh -1 de x se


3633 puede calcular con la siguiente serie de Taylor:

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
3636 (i.e., no utilizar ninguna función predefinida de ningún lenguaje de programación).
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.,
3639 escribir una función que pase radianes a grados sexagesimales). Tenga en cuenta que
1 radián es igual a 57.2958 grados sexagesimales.

Función W de Lambert

3642 La función W de Lambert o también conocida como función Omega o log producto,
es la función inversa de f(w)=wew donde ew es la función exponencial natural y w es

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

cualquier número complejo. Para n→∞ (en la práctica un número suficientemente


3645 alto) la función W de Lambert de x se puede calcular con la siguiente serie de Taylor:

Desarrolle un programa que pida los valores de x (cualquier número real) y n (cual-
3648 quier número entero) para calcular el valor de la función W de Lambert de x con n
términos de la serie de Taylor. El programa debe hacer uso de una función desarrolla-
da por usted mismo llamada funcionW. No se pueden usar funciones predetermina-
3651 das de ningún lenguaje de programación para calcular el factorial o la potencia de un
número (tampoco se puede usar el acento circunflejo, ^); esto quiere decir que debe
desarrollar las funciones para calcular la potencia (llámela miPotencia) y el factorial
3654 (llámela miFactorial) de un número. Además, debe validar el valor de x como se indi-
ca en la serie de Taylor; para este fin, desarrolle una función llamada xValido (de-
vuelve verdadero o falso de acuerdo a la validación) y una función miABS (devuelve
3657 el valor absoluto de cualquier número real).

Factorial de un número con función recursiva

Desarrolle un algoritmo para calcular el factorial de un número dado. Este algoritmo


3660 debe tener una función recursiva. Una explicación de funciones recursivas se encuen-
tra en la sección 7.8 del libro de Alcalde Lancharro y García López (1992).

Máximo común divisor y mínimo común múltiplo

3663 Desarrolle un programa que calcule el máximo común divisor (MCD) y el mínimo co-
mún múltiplo (MCM) de dos números ingresados por el usuario. El programa deberá
manejar un menú con las siguientes opciones.
3666 1. Ingreso de datos (Se pide al usuario que ingrese los dos números)
2. Máximo Común Divisor (Calcula el MCD)
3. Mínimo Común Múltiplo (Calcula el MCM)
3669 4. Salir
Ejemplo:
1. Ingreso de datos
3672 número1: 12
número2: 30

El MCD de 12 y 30 es: 6

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

3675 El MCM de 12 y 30 es: 60

* Peso adecuado

Escriba un programa, usando funciones, que determine cuántas personas (el número
3678 de personas es indicado por el usuario) están con un peso adecuado o no según su es-
tatura. Para ello, considere la tabla 1.

Tabla 1: Peso ideal de una persona según su estatura.

El programa debe tener registrado en una matriz, los pesos y las estaturas correspon-
3681 dientes según lo mostrado en la tabla 1. El usuario debe indicar los datos de cuántas
personas va a ingresar y a continuación ingresar los valores de peso, estatura y sexo
de cada persona. Estos valores ingresados se deben almacenar en arreglos separados
3684 de pesos, de estaturas y de sexo. El programa debe verificar si esos valores están de
acuerdo a la tabla anterior. En base a la verificación las personas deben clasificarse
como:

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

3687 • A: si el peso de la persona está por debajo del rango considerado ideal.
• B: si el peso de la persona está en el rango de peso considerado ideal.
• C: si el peso de la persona está por debajo del rango considerado ideal.

3690 El resultado de esta clasificación se debe almacenar en otro arreglo unidimensional o


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-
3693 sultado así:
============================================================
CLASIFICACIÓN MUJERES HOMBRES
3696 ============================================================
A ValorA_m ValorA_h
B ValorB_m ValorB_h
3699 C ValorC_m ValorC_h
============================================================

* Raíces de una función


3702 Escriba un programa empleando funciones que calcule las raíces aproximadas de una
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
3705 final del intervalo de búsqueda de las raíces y (3) el número de partes en las que se
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
3708 en el intervalo dado debe mostrarse un mensaje que indique al usuario ese resultado.

El método de la bisección

Implemente una función que utilice el método de la bisección (vea Quarteroni et al.,
3711 2014, pp. 43–47) para encontrar uno de los dos ceros de la función en
el rango indicado por el usuario.

158
* El método de Newton

3714 El método de Newton es un algoritmo iterativo que permite encontrar los ceros (i.e.,
cortes con el eje de las abscisas) de una función f(x). El método trabaja con los valo-
res de f(x) y f'(x) (i.e., la derivada de la función). Las aproximaciones del cero de la
3717 función están dadas por la fórmula iterativa

que permite calcular una secuencia de valores x(k) (las aproximaciones del cero de la
función) comenzando con un valor inicial x(0). El algoritmo termina cuando el valor
3720 absoluto de la diferencia entre una aproximación (x(k+1)) y la anterior (x(k)) es menor
a un valor llamado tolerancia o cuando se cumple un número máximo de iteraciones.
En la siguiente figura se pueden apreciar las primeras iteraciones generadas por el
3723 método de Newton con un valor inicial x(0) 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;


3726 f'(x) = - 1 + 2x - 3x2.

1. Escriba una función valorInicial() que genere la aproximación inicial x(0)


(valor real) en el rango [-½π, ⅔π]. Utilice una función predeterminada para
3729 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 parámetro. Utilice una función
3732 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 parámetro.
Angel Vázquez-Patiño Universidad de Cuenca

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

3738 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
3741 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-


3744 nes x(0), x(1), x(2), …, x(n).

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-
3747 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
3750 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-


3753 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é
3756 corresponde cada valor) y luego las aproximaciones del cero de la función (se-
gunda fila) en forma vertical.

Ordenamiento de n números

3759 • 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
3762 devuelve una matriz con los números ordenados.

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

Búsqueda lineal

• Diseñe una función que realice la búsqueda lineal de un arreglo. La función de-
3765 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-
3768 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-
3771 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).

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

3780 Juego de dados entre dos

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
3783 suma de los valores de ambos jugadores es igual, e.g., el un jugador saca 3 y 5 (su-
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
3786 muestra un juego que concluye en el turno 4 (pues la suma es igual); el ganador es el
jugador 2.

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

En el caso de que la suma total sea igual para ambos jugadores, se debe continuar el
3789 juego; nuevamente, termina cuando la suma de los valores de ambos jugadores es
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
3792 ejemplo, lo siguiente es una ejecución del programa:
Inicia el juego.

Jugador 1 Jugador 2
3795 Turno Dados 1 y 2 Suma Dados 1 y 2 Suma
1 1 y 3 4 2 y 2 4
2 4 y 1 5 3 y 5 8
3798 3 6 y 6 12 2 y 4 6
4 5 y 4 9 6 y 3 9

Suma total 30 Suma total 27

3801 Finaliza el juego.

El ganador es: Jugador 1.


1. Implemente una función que devuelva un número entero al azar en el rango [1,
3804 6].

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
3807 implementada en el punto anterior.

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-
3810 laciones pertinentes que presenten los resultados como se mostró en el ejemplo
de ejecución del programa (i.e., perfectamente alineados).

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

Manejo de Caracteres y Cadenas

3813 Miscelánea

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

3816 2. Mostrar el número de veces que aparece la letra a en la cadena “Mañana es


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-


3819 ro de mayúsculas y el número de minúsculas.

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-


3822 ñana es sábado y voy a irme a pasear por los hermosos parques de Cuenca”.
Además, si el número de veces que se repite la a es superior a 10 debe apare-
cer el mensaje “Exceso de a”, si el número de veces que se repite la o es supe-
3825 rior a 5 debe mostrarse “Exceso de o” y si se repite más de 3 veces la letra e
debe mostrarse “Exceso de e”.

6. Implemente una función que devuelva una cadena sin los espacios en blanco.

3828 7. Ingresar una frase y reportar cada palabra en una línea diferente.

8. Solicitar el ingreso de los apellidos de dos personas. Mostrar un mensaje indi-


cando si son iguales o distintos.

3831 9. Desarrolle un algoritmo que pida el ingreso de un nombre y un apellido de dos


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
3834 nombre y apellido de la otra persona.

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
3837 la persona con mayor edad.

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

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

3840 12. Contar cuántas palabras tiene una cadena. Escribir dos versiones del progra-
ma:

a) Asumir que cada palabra está separada por un sólo espacio en blanco.
3843 b) No se sabe cómo están separadas las palabras: pueden estar separadas por
más de un espacio en blanco.

13. Escriba un programa que lea una frase y a continuación visualice cada palabra
3846 de la frase en columnas, seguida del número de letras que tiene cada palabra.

14. Ingresar una frase y modificarla convirtiendo el primer carácter de cada pala-
bra, si esta fuera una letra, de minúsculas a mayúsculas. Cada palabra está se-
3849 parada por uno o más espacios o comas.

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.

3852 17. Contar el número de consonantes que se encuentran en una cadena.

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
3855 existen en el texto ingresado. Asuma que no hay signos de puntuación ni inte-
rrogación (i.e. sólo se ingresan letras). Ejemplo:
Ingrese una frase

3858 Una frase no debe contener palabras innecesarias así como un párrafo no
debe contener frases innecesarias

Resultados

3861 1 letra : 0 palabras


2 letras: 3 palabras
3 letras: 2 palabras
3864 4 letras: 3 palabras
5+ letras: 8 palabras
19. Dada la cadena “En mi próxima vida, creeré en la reencarnación”, mostrar lo
3867 siguiente:

a) Su longitud
b) El carácter asociado al índice 7
3870 c) La subcadena “creeré”

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

d) El índice que ocupa el carácter ‘x’, desde la izquierda


e) El índice que ocupa el carácter ‘x’, desde la derecha
3873 f) La cadena transformada a mayúsculas
g) La cadena transformada a minúsculas
h) La cadena transformadas las minúsculas a mayúsculas y las mayúsculas a
3876 minúsculas
i) Por último, comprobar si el primer carácter de la cadena es ‘E’ y mostrar
un mensaje que lo indique

3879 20. Verificar si una cadena de texto almacenada en la cadena nif, es un NIF co-
rrecto o no. Si lo es, se imprimirá en pantalla su parte numérica; si no lo es, se
mostrará el mensaje “NIF no válido”. Se tendrá en cuenta lo siguiente: Supo-
3882 ner que los NIFs tienen 8 dígitos y, a continuación, una letra (no importa que
sea mayúscula o minúscula).

Pista: dos condiciones que debe cumplir el NIF: tener 9 caracteres y que el úl-
3885 timo sea una letra. Comprobado esto, verificar que el resto de caracteres son
dígitos.

21. Solicitar el ingreso del nombre y edad de dos personas. Validar el nombre in-
3888 gresado: 1) que no hayan espacios o caracteres diferentes a las vocales (vocales
con tildes o diéresis también), consonantes, o la ñ (u otros caracteres usados
en nombres en español) y 2) que sólo la primera letra del nombre esté en ma-
3891 yúscula (si no lo está, transformar el nombre a un formato donde la primera
letra sea mayúscula y las demás minúsculas). Validar que sea una edad correc-
ta: 1) que no hayan caracteres que no sean números y 2) verificar que la edad
3894 esté entre 0 y 150 años. Mostrar el nombre de la persona con mayor edad.

22. Invertir las palabras de una cadena. Por ejemplo, si la cadena es “Esta es una
prueba de programación”, el resultado es “programación de prueba una es
3897 Esta”.

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

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-
3903 dique el número que lo precede. E.g. si la cadena es 2w4r5f se debe obtener
la siguiente cadena: wwrrrrfffff.

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

25. Leer una frase y encontrar la palabra de mayor longitud. El programa debe
3906 imprimir la palabra y el número de caracteres de la misma.

26. Ingresar una cadena de caracteres y obtener otra con todos los caracteres de
las posiciones impares de la cadena.

3909 27. Hacer un programa que al recibir como dato una cadena de caracteres que re-
presente una fecha en formato (dd/mm/aa), genere otra cadena con la misma
fecha pero con formato (dd de nombre del mes de aaaa). E.g. si se ingresa la
3912 cadena 20/11/2006 la otra cadena será 20 de Noviembre de 2006.

28. Escriba un programa para ingresar un número telefónico en formato de cadena


y que luego lo convierta de la siguiente manera:

3915 Número Telefónico: 5256284000


Nueva Cadena: (52)-5-6284000

29. Escribir un programa que al recibir como datos dos cadenas de caracteres for-
3918 me una tercera cadena intercalando los caracteres de las palabras de las cade-
nas recibidas.

30. Implementar una función cuya entrada sea una cadena S y un factor de multi-
3921 plicación N, y genere la cadena N veces. Por ejemplo:
Hola, 3 se convertirá en Hola Hola Hola.

31. Contar cuántas veces se encuentra una subcadena dentro de una cadena.

3924 32. Hacer un programa que elimine todas las ocurrencias de una subcadena dentro
de una cadena.

33. Ingrese un texto e indique qué caracteres alfanuméricos no han aparecido en el


3927 texto.

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.

3930 35. Escriba un programa que lea una frase y sustituya todas las secuencias de dos
o varios blancos por un solo blanco y visualizar la frase obtenida.

36. Escriba un programa que calcule la frecuencia de aparición de las vocales de


3933 un texto proporcionado por el usuario. Esta solución se debe presentar en for-
ma de histograma, e.g.:

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

a 15 ***************
3936 e 8 ********
i 5 *****
o 1 *
3939 u 6 ******
37. Dada una cadena de caracteres. Realizar lo siguiente:

a) Extraer los n primeros caracteres de la cadena.


3942 b) Extraer los n últimos caracteres de la cadena.
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.
3945 e) Eliminar de una cadena los n caracteres que aparecen a partir de la posi-
ción p.
f) Eliminar la primera aparición de una cadena dentro de otra.
3948 g) Insertar una cadena dentro de otra a partir de la posición p.
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.
3951 j) Sustituir todas las apariciones de una cadena dentro de otra, por una ter-
cera.

38. Un grupo de inteligencia militar desea codificar los mensajes secretos de tal
3954 forma que no puedan ser interpretados con una lectura directa, para lo cual
han establecido las siguientes reglas:

a) Todo mensaje debe tener sus letras en mayúsculas.

3957 b) Reemplazar cada letra por la que sigue según abecedario, excepto Z que se
deberá reemplazar con la letra A.

c) Reemplazar cada dígito encontrado por el siguiente número excepto el 9


3960 que deberá ser reemplazado por el 0.

39. Dada una palabra (una sola palabra) indicar si es palíndromo. Puede ver más
información en https://goo.gl/NkkZw.

3963 40. Dada una frase (una o más palabras) indicar si es palíndromo. Ignore mayús-
culas y minúsculas, signos de puntuación y espacios en blanco.

41. El usuario ingresa una hora como cadena de caracteres; la hora no necesaria-
3966 mente cumple con el formato hh:mm:ss (e.g., 01:09:04) sino que puede estar
expresada, por ejemplo, de la siguiente manera: 1:09:4, 1:9:4, 01:09:4, etc

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

(siempre primero la hora, segundo los minutos y luego los segundos). El pro-
3969 grama debe mostrar la hora en formato de cadena de caracteres luego de un
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
3972 se ingresa 1:8:04, y se escoge 60 segundos (se suma 60 segundos a la hora in-
gresada), el resultado es 01:09:04 (el resultado sí debe seguir el formato
hh:mm:ss).

3975 42. * Escribir una función llamada terminaEnVocal que verifique si una palabra
termina en vocal independientemente de si está en mayúsculas o minúsculas.
También escribir una función denominada manipulacionDeCadenas que reciba
3978 como parámetro una frase y visualice en pantalla (una en cada línea) las pala-
bras de la misma y el número total de palabras que terminan en vocal. La fun-
ción de verificación de si termina en vocal o no, debe ser utilizada para contar
3981 el número total de palabras que terminan en vocal. A continuación se muestra
un ejemplo:

Entrada
3984 Ingrese la frase: HolA mundo cruel
Salida
HolA
3987 mundo
cruel

El número de palabras que terminan en vocal es: 2


3990 43. * Implementar un algoritmo que permita gestionar las siguientes opciones:

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
3993 comas (,) en una variable global de tipo cadena.
c) Función que permita calcular el promedio de los números ingresados en la
cadena
3996 d) Función que permita extraer el menor o el mayor de los números de la ca-
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-
3999 ción del programa:
Ingrese los números separados por comas: 4,5,6,12,13,5,8,7

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

Menú
4002 1. Promedio
2. Máximo
3. Mínimo
4005 4. Salir

Elija una opción [1-4]: 1


El promedio es: 7.5

4008 Menú
1. Promedio
2. Máximo
4011 3. Mínimo
4. Salir

Elija una opción [1-4]: 2


4014 El máximo es: 13

Menú
1. Promedio
4017 2. Máximo
3. Mínimo
4. Salir

4020 Elija una opción [1-4]: 3


El mínimo es: 4

Menú
4023 1. Promedio
2. Máximo
3. Mínimo
4026 4. Salir

Elija una opción [1-4]: 4


Saliendo del programa...
4029 44. Dados dos números en forma de arreglo de caracteres, implemente una función
que genere el arreglo suma.

Ejemplo:

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

4032 Sea A = { ‘2’, ‘0’, ‘1’, ‘2’ } 2 0 1 2


Sea B = { ‘1’, ‘9’ } 1 9
suma(A, B) = { ‘2’, ‘0’, ‘3’, ‘1’ } 2 0 3 1

4035 La función que se pide recibe como argumentos dos arreglos de caracteres, y
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-
4038 quierda”

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-
4041 dena y k, y devuelve la cadena de resultado.

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
4044 subcadena en caso contrario que devuelva cero.

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-
4047 coja como parámetros un párrafo y el número mínimo de vocales diferentes
que deben tener las palabras a buscar; la función devuelve el número de pala-
bras en el párrafo con el mínimo de vocales indicado. Finalmente, edite la fun-
4050 ción para que recoja un parámetro más que indique si el número mínimo es de
vocales o consonantes; la función devuelve el número de palabras en el párrafo
que tiene mínimo el número de vocales o consonantes de acuerdo a lo que se
4053 indique.

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
4056 iguales.

49. * Un anagrama es una palabra o frase formada intercambiando (en cualquier


orden) las letras de otra palabra o frase. Por ejemplo Esponja es un anagrama
4059 de Japonés. Escriba una función que determine si una cadena es un anagrama
de otra (“las palabras poseen las mismas letras, con la misma cantidad de apa-
riciones, pero en un orden diferente”). Ignore mayúsculas y minúsculas, signos
4062 de puntuación y espacios en blanco. Puede ver más información en https://
goo.gl/hXM1vS.

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

50. Dada una cadena de caracteres, escriba una función que imprima en pantalla
4065 todas las permutaciones de los caracteres de la cadena de entrada.

Ejemplo:

permutaciones(“abc”)
4068 imprime: {“abc”, “acb”, “bac”, “bca”, “cab”, “cba”}

51. Ejercicio

* Datos personales

4071 Implemente un programa usando funciones que lea cadenas de caracteres en el si-
guiente formato:
Nombres;Apellidos;Profesión;Edad;Lugar de Residencia
4074 Los valores entre punto y comas pueden estar formados por letras, números o espa-
cios en blanco.

Por ejemplo:
4077 Juan;Pérez Torres;Ingeniero;37;Cuenca
Karen Susana;López Alvear;Economista;32;Loja
El programa debe separar de cada cadena de caracteres, cada valor entre punto y
4080 coma y mostrarlos como resultado en líneas separadas:

Por ejemplo:
Nombres: Juan
4083 Apellidos: Pérez Torres
Profesión: Ingeniero
Edad: 37
4086 Vive en: Cuenca

Nombres: Karen Susana


Apellidos: López Alvear
4089 Profesión: Economista
Edad: 32
Vive en: Loja

4092 Estadísticas de texto

Ejercicio propuesto por René Estrella.

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

El usuario ingresa un texto. El programa muestra las siguientes estadísticas acerca


4095 del texto ingresado:

1. conteo de vocales
2. conteo de consonantes
4098 3. conteo de dígitos
4. conteo de caracteres especiales
5. conteo de mayúsculas
4101 6. conteo de minúsculas
7. conteo de palabras categorizadas por longitud
8. conteo total de palabras

4104 Ejemplo:

El usuario ingresa:
Náufrago (título original en inglés: Cast Away) es una película dirigida por
4107 el cineasta estadounidense Robert Zemeckis, protagonizada por Tom Hanks y
estrenada en el año 2000.
El programa muestra:
4110 Vocales: 59
Consonantes: 78
Dígitos: 4
4113 Caracteres especiales: 10
Mayúsculas: 7
Minúsculas: 130
4116 Palabras categorizadas por número de caracteres:
1: 1
2: 5
4119 3: 5
4: 2
5 o más: 14
4122 Total palabras: 27
El ejemplo ilustra los siguientes aspectos:

1. Las vocales tildadas se cuentan como caracteres especiales, y no como vocales.


4125 2. El conteo de vocales y consonantes considera tanto mayúsculas y minúsculas.
Por ejemplo, el número de consonantes (78), corresponde a 6 mayúsculas y 72
minúsculas.

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

4128 * Analizador de tweets

Ejercicio propuesto por René Estrella.

El objetivo de este ejercicio es escribir un analizador simple de tweets. El dato de en-


4131 trada para el programa sería el texto de un tweet y el programa debería mostrar la
siguiente información:

1. Número y lista de cuentas de twitter mencionadas (las cuentas de twitter em-


4134 piezan con @)
2. Número y lista de hashtags mencionados (los hashtags empiezan por #)
3. Conteo de palabras según el número de letras: número de palabras con una le-
4137 tra, con dos letras, con tres letras, con cuatro letras, con cinco letras, y con
más de cinco letras. Este conteo incluye cuentas y hashtags.

Ejemplo
4140 Tweet:
Sigue las últimas noticias de #Cuenca, #Ecuador y el Mundo en @eltiempocuenca
#marcandodiferencia @IGecuador

4143 Resultados
2 cuentas:
eltiempocuenca
4146 IGecuador

3 hashtags:
Cuenca,
4149 Ecuador
marcandodiferencia

Conteo de palabras:
4152 1 letra: 1
2 letras: 3
3 letras: 1
4155 4 letras: 0
5 letras: 2
5+ letras: 7

4158 Eliminación de n-ésima palabra

Ejercicio propuesto por René Estrella.

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


4161 ma ocurrencia de la palabra en el texto y muestra el texto resultante. No se conside-
ra distinción entre mayúsculas y minúsculas.

Ejemplo:

4164 Supongamos que el usuario ingresa el siguiente texto:


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.
4167 Luego ingresa la palabra “el” y el número 3. En el texto ingresado hay 6 ocurrencias
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
4170 “...del Lago Titicaca...” y “...más alto del mundo...”. Como asumimos que el usuario
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:
4173 El rally se correrá también en Bolivia, específicamente en el extremo sur del
Lago Titicaca, más alto del mundo, y el ya clásico Salar de Uyuni.

Cifrado por sustitución

4176 “En un sistema de cifrado por sustitución, cada letra o grupo de letras se reemplazan
por otra letra o grupo de letras para disfrazarla. Uno de los sistemas de cifrado más
viejos conocido es el sistema de cifrado de César, atribuido a Julio César. En este
4179 método, a se vuelve D, b se vuelve E, c se vuelve F, ... , y z se vuelve C. Por ejemplo,
ataque se vuelve DWDTXH.” (Tanenbaum y Wetherall, 2012, p. 662)

1. Escribir un programa que permita codificar mensajes secretos de forma que no


4182 puedan ser interpretados con una lectura directa. Se debe utilizar las siguien-
tes reglas:

a) Se debe reemplazar cada letra por la siguiente más uno, es decir en lugar
4185 de la “a” iría la “c”, excepto las letras “y” y “z”, que se deberá reemplazar
con la letra “a” y “b” respectivamente.
b) De la cadena resultante en el numeral 1 se deberá remplazar las letras vo-
4188 cales por los números 0,1,2,3,4, respectivamente.
c) El mensaje resultante debe contener la primera letra de cada palabra del
mensaje en mayúscula.

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

4191 Se puede usar variables globales y funciones según se necesite, pero es obliga-
toria la función ENCRIPTAR que reciba como entrada el mensaje y devuelva
el mensaje encriptado.

4194 2. “Una ligera generalización del sistema de cifrado de César permite que el
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
4197 desplazados circularmente.” (Tanenbaum y Wetherall, 2012, p. 662) Si k=2,
por ejemplo, sustituiremos la “a” por la “c”, la “b” por la “e”, y así
sucesivamente. El problema que aparece en las últimas “k” letras del alfabeto
4200 tiene fácil solución: en el ejemplo, la letra “y” se sustituirá por la “a” y la
letra “z” por la “b”. La sustitución debe aplicarse a las letras minúsculas y
mayúsculas y a los dígitos de igual manera: el “0” se sustituye por el “2”, el
4203 “1” por el “3” y así hasta llegar al “9”, que se sustituye por el “1”.
Escriba un programa que lea un texto y el valor de k, y muestre su versión en-
criptada.

4206 Cifrado por transposición

La información acerca de los sistemas de cifrado por transposición se basa en el libro


de Tanenbaum y Wetherall (2012).

4209 Los sistemas de cifrado por sustitución (vea el ejercicio llamado Cifrado por sustitu-
ción, página 174) 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
4212 no las disfrazan. En la figura 14 se presenta un sistema de cifrado por transposición
común, la transposición columnar. La clave del sistema de cifrado es una palabra o
frase que no contiene letras repetidas. En este ejemplo, la clave es MEGABUCK. El
4215 propósito de la clave es ordenar las columnas; la columna 1 está bajo la letra clave
más cercana al inicio del alfabeto, y así sucesivamente. El texto plano se escribe de
manera horizontal, en filas, las cuales se rellenan para completar la matriz si es nece-
4218 sario. El texto cifrado se lee por columnas, comenzando por la columna cuya letra
clave es la más baja.

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


4221 nes que se desarrollen (cifrar) en el programa debe tener como parámetros el texto
a cifrar y la clave, y debe devolver el texto cifrado. Otra de las funciones que se desa-
rrollen (descifrar) en el programa debe tener como parámetros el texto cifrado y
4224 la clave, y debe devolver el texto descifrado.

* Manejo de una cadena con información personal

a) Escriba un programa con funciones que permita al usuario ingresar una línea de
4227 texto en el siguiente formato:
NOMBRE APELLIDO, EDAD; NOMBRE APELLIDO, EDAD; NOMBRE APELLIDO, EDAD; NOMBRE
APELLIDO, EDAD.
4230 Por ejemplo:
Pedro Pérez, 35; Lara Muñoz, 45; José Calle, 20; María Cárdenas, 22; Clara
Arévalo, 65.
4233 El programa debe encontrar la persona que tiene mayor edad. Debe mostrar al usua-
rio los datos de la persona con mayor edad, de la siguiente forma:

Por ejemplo:
NOMBRE: nombre ingresado NOMBRE: Clara
APELLIDO: apellido ingresado APELLIDO: Arévalo
EDAD: edad ingresada EDAD: 65
b) Escriba un programa utilizando funciones, que permita al usuario ingresar una lí-
4236 nea de texto en el siguiente formato:

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

NOMBRE APELLIDO, SUELDO; NOMBRE APELLIDO, SUELDO; NOMBRE APELLIDO, SUELDO;


NOMBRE APELLIDO, SUELDO.
4239 Por ejemplo:
Pedro Pérez, 3500; Luis Muñoz, 2450; José Calle, 1200; María Cárdenas, 2200;
Clara Arévalo, 3650.
4242 El programa debe encontrar la persona que tiene menor sueldo. Debe mostrar al
usuario los datos de la persona con menor sueldo, de la siguiente forma:

Por ejemplo:
NOMBRE: nombre ingresado NOMBRE: José
APELLIDO: apellido ingresado APELLIDO: Calle
SUELDO: sueldo ingresado SUELDO: 1200

* Línea de comandos

4245 Simule una terminal que ejecute comandos para operaciones aritméticas básicas (su-
mar, restar, multiplicar, dividir) y de información de uso. Los comandos sumar, res-
tar, multiplicar, dividir y estadísticas (sólo hay cinco comandos) tienen la siguiente
4248 sintaxis y funcionalidad:

• Sumar num1,num2,num3,…,numN

Uno se ingresa mediante el teclado el comando sumar (cualquier carácter del coman-
4251 do puede ser minúscula o mayúscula), un espacio y la lista de números (pueden ser
reales; el separador de decimales es el punto) a sumar; todo en una misma línea. Lue-
go de “dar enter” el resultado en la línea siguiente de la pantalla es Suma: valor de la
4254 suma. Si hay un error en la sintaxis, el programa debe mostrar un error; por ejemplo
si se ingresa suma 1;3,4, el programa debe decir “Hubo un error de sintaxis en el co-
mando ingresado.”

4257 • Restar num1,num2

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-
4260 les; el separador de decimales es el punto) a restar; todo en una misma línea. Luego
de “dar enter” el resultado en la línea siguiente de la pantalla es Resta: valor de la
resta (la resta es num1-num2). Si hay un error en la sintaxis, el programa debe mos-
4263 trar un error; por ejemplo si se ingresa restar 1,3,4, el programa debe decir “Hubo un
error de sintaxis en el comando ingresado.”

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

• Multiplicar num1,num2,num3,…,numN

4266 Uno se ingresa mediante el teclado el comando multiplicar (cualquier carácter del co-
mando puede ser minúscula o mayúscula), un espacio y la lista de números (pueden
ser reales; el separador de decimales es el punto) a multiplicar; todo en una misma lí-
4269 nea. Luego de “dar enter” el resultado en la línea siguiente de la pantalla es Multipli-
cación: valor de la multiplicación. Si hay un error en la sintaxis, el programa debe
mostrar un error; por ejemplo si se ingresa multiplicar 1;3.2,4.2, el programa debe de-
4272 cir “Hubo un error de sintaxis en el comando ingresado.”

• Dividir num1,num2

Uno se ingresa mediante el teclado el comando dividir (cualquier carácter del coman-
4275 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 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
4278 división (la división es num1/num2). Si hay un error en la sintaxis, el programa debe
mostrar un error; por ejemplo si se ingresa dividir 1,3,4,5, el programa debe decir
“Hubo un error de sintaxis en el comando ingresado.”

4281 • Estadísticas

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-
4284 go de “dar enter” el resultado en la línea siguiente de la pantalla es
Número de veces que se utilizó correctamente cada comando
Sumar: num veces
4287 Restar: num veces
Multiplicar: num veces
Dividir: num veces
4290 Si el número de veces es 1, debe decir 1 vez (y no 1 veces).

• Salir

Uno se ingresa mediante el teclado el comando salir (cualquier carácter del comando
4293 puede ser minúscula o mayúscula) y se termina la ejecución del programa.

Nota: antes del comando y después de los números que necesita el comando (en los
comandos sumar, restar, multiplicar y dividir) no importa si se ingresan espacios en
4296 blanco; con que no haya un error en la sintaxis (entre el comando y los números que
necesita el comando sólo debe haber un espacio), no debería haber ningún mensaje

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

de error. Por ejemplo: espacio espacio espacio suMaR 1,2,3,4,5,6 espacio espacio no
4299 debería dar ningún error de sintaxis. Utilice/cree funciones donde se necesite.

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-
4302 san por parte del usuario.
sumar 1, 2, 4
Suma: 7
4305 RestaR 3,4
Resta: -1
MultiPlicar 4,5,3,2,4
4308 Multiplicación: 480
Dividir 4,3
División: 1,333333333
4311 ReSTar 5,4
Resta: 1
Suma 4,5,6,12,13,5,8,7
4314 Hubo un error de sintaxis en el comando ingresado.
EstAdísticAS
Número de veces que se utilizó correctamente cada comando
4317 Sumar: 1 vez
Restar: 2 veces
Multiplicar: 1 vez
4320 Dividir: 1 vez
Salir

* Mantenimiento de datos de personas

4323 Se requiere realizar un programa que permita hacer un mantenimiento de los datos
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
4326 y búsqueda, por lo general, se realiza en base a un campo específico (que identifica
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
4329 persona).

Cédula Nombre Apellido Edad

01064634657 Juan Pérez 23

01064636638 Víctor Guzmán 21

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

01064688644 Pedro Flores 20

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-
4332 po es cada dato del registro: cédula, nombre, apellido y edad) y el punto y coma es el
separador de registros. La información de la tabla del ejemplo se representaría con la
siguiente cadena:
4335 01064634657,Juan,Pérez,23;01064636638,Víctor,Guzmán,21;01064688644,Pedro,Flor
es,20;
El programa debe permitir, mediante un menú:

4338 1. Ingresar un nuevo registro.


2. Actualizar los valores de los campos de una persona (la cédula no se puede
modificar).
4341 3. Eliminar el registro de una persona.
4. Mostrar los valores de los campos de una persona.
5. Listar los registros de todas las personas.
4344 6. Calcular el promedio de las edades de todas las personas.
7. Terminar el programa.

Este ejercicio pretende mejorar sus destrezas para usar funciones, por eso, usted debe
4347 implementar las funciones que considere necesarias.

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.

4350 Ejemplo:

Ingreso

Se le pide al usuario que ingrese los datos de la persona


4353 Cédula: 01064634657
Nombre: Juan
Apellido: Pérez
4356 Edad: 23
Actualización

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

Se le pide al usuario que ingrese una cédula existente y los nuevos valores del resto de
4359 campos
Cédula: 01064634657
Nombre: Diego
4362 Apellido: Sarmiento
Edad: 25
Si la cédula que se busca no se encuentra en la cadena que contiene la información de
4365 todas las personas, se muestra un mensaje de error: “La persona no ha sido registra-
da.”.

Para este ejemplo, el resultado de la actualización de la cadena que contiene la infor-


4368 mación de las personas es:
01064634657,Diego,Sarmiento,25;01064636638,Víctor,Guzmán,21;01064688644,Pedro
,Flores,20;
4371 Eliminación

Se le pide al usuario que ingrese la cédula de la persona a eliminar

• Cédula: 01064634657

4374 Se elimina el registro de esa persona de la cadena de personas:


01064636638,Víctor,Guzmán,21;01064688644,Pedro,Flores,20;
Visualización

4377 Se le pide al usuario que ingrese la cédula

• Cédula: 01064634657

El programa muestra el resto de campos


4380 Nombre: Juan
Apellido: Pérez
Edad: 23
4383 Si la cédula que se busca no se encuentra en la cadena que contiene la información de
todas las personas, se muestra un mensaje de error: “La persona no ha sido registra-
da.”.

4386 Listar

Se muestran uno a uno todos los registros de personas

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

Cédula: 01064636638
4389 Nombre: Víctor
Apellido: Guzmán
Edad: 21

4392 Cédula: 01064688644


Nombre: Pedro
Apellido: Flores
4395 Edad: 20
Promedio de edades

Se calcula y muestra el promedio de las edades de todas las personas que estén en ese
4398 momento en la lista.

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

Búsquedas

Algunos de los siguientes ejercicios son basados en el libro de Gómez Fuentes y Cer-
4401 vantes Ojeda (2013).

1. 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 den-
4404 tro del arreglo dado y que el programa determine si el número está en el arre-
glo y, de ser así, en qué posición está.

2. Implemente una función llamada busquedaSecuencial que tenga como paráme-


4407 tros un arreglo y un elemento a buscar en el arreglo. La función debe regresar
la posición índice del elemento si se encuentra en el arreglo y -1 si no lo en-
cuentra en el arreglo.

4410 3. Implemente un programa que lea números enteros y que los almacene en un
arreglo. Preguntar al usuario por un número y determinar si este número está
en el arreglo usando búsqueda binaria.

4413 4. Implemente la función busquedaBinaria que tenga como parámetros un arreglo


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-
4416 glo, regresar un -1.

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
4419 que se llevan a cabo en cada algoritmo y el tiempo que se demora cada uno en
la ejecución.

a) Implemente una función que reciba un arreglo de n elementos enteros y el


4422 algoritmo a utilizar para buscar uno de los elementos (son dos parámetros:
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),
4425 el número de comparaciones realizadas para encontrarlo y el tiempo de eje-
cución en segundos.

b) Genere un arreglo de 21 elementos con números aleatorios enteros en el


4428 rango [-15, 15]. Los números no deben repetirse en el arreglo.

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

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

4431 efectos de comprobación de su programa, haga que la búsqueda sea de un


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
4434 el tiempo:
================================================
Tabla de comparación para algoritmos de búsqueda
4437 ================================================
--------------------------------------------------------
Algoritmo # comparaciones Tiempo [seg.]
4440 --------- --------------- -------------
Algoritmo 1 ## ##
Algoritmo 2 ## ##
4443 ... ... ...
--------------------------------------------------------
d) Genere 1000 arreglos que cumplan con las condiciones del literal b. En
4446 cada uno de los arreglos generados se debe buscar un elemento al azar (que
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-
4449 lo utilizado. Finalmente, presente una tabla con estadísticas de eficiencia
(estos datos son empíricos) de los algoritmos y un histograma para repre-
sentar las mismas (el histograma presenta los valores normalizados; los dos
4452 signos de numeral en el histograma significa que debe poner los números
que representa cada barra):
================================================
4455 Tabla de comparación para algoritmos de búsqueda
================================================

Los resultados presentados son el promedio de la búsqueda de un


4458 elemento al azar (se asegura que está dentro del arreglo) en los 1000
arreglos generados aleatoriamente. Con el mismo arreglo generado
aleatoriamente, se realizó la búsqueda del mismo elemento (elegido al
4461 azar) con todos los métodos; así en cada uno de los 1000 arreglos (en
cada nuevo arreglo se eligió un nuevo elemento al azar para buscarlo).

---------------------------------------------------------------
4464 Algoritmo # comparaciones Tiempo [seg.]
promedio promedio
--------- --------------- -------------
4467 Algoritmo 1 ## ##

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

Algoritmo 2 ## ##
... ... ...
4470 ---------------------------------------------------------------

=======================================
Histograma para comparación de métricas
4473 =======================================
-----------------------------------------------------------------
Algoritmo 1 |
4476 # comparaciones (prom) |▬▬▬▬▬▬▬▬▬▬ ##
Tiempo [seg.] (prom) |▬▬▬▬▬▬▬ ##
|
4479 Algoritmo 2 |
# comparaciones (prom) |▬▬▬▬▬▬▬ ##
Tiempo [seg.] (prom) |▬▬▬▬▬▬▬▬ ##
4482 |
. | . .
. | . .
4485 . | . .
-----------------------------------------------------------------
e) De acuerdo a los datos, discuta la eficiencia de los métodos estudiados.
4488 ¿Qué método es el mejor y por qué?, ¿Qué método es el peor y por qué?,
¿Cuándo utilizaría cada método?, etc.

6. Ejercicio

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

4491 Ordenamiento

Miscelánea

Algunos de los siguientes ejercicios son basados en el libro de Joyanes Aguilar et al.
4494 (2003).

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-
4497 namiento se está utilizando?

a) Inserción
b) Selección
4500 c) Burbuja
d) Ninguna de las anteriores

2. Dada la lista de números {-5, 18, -12, 17, -6, -20, -4, -8}, escribir cómo evolu-
4503 cionaría dicha lista hasta quedar completamente ordenada de manera descen-
dente mediante: a) ordenamiento de burbuja, b) algoritmo de selección y c) al-
goritmo de inserción.

4506 3. Dada la lista de letras {o, f, e, s, a, q, v, o}, escribir cómo evolucionaría dicha
lista hasta quedar completamente ordenada de manera ascendente mediante:
a) ordenamiento de burbuja, b) algoritmo de selección y c) algoritmo de inser-
4509 ción.

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ú-
4512 meros impares. Además, los números pares deberán estar ordenados de forma
ascendente, mientras que los números impares deberán estar ordenados de for-
ma descendente. Esto es, el arreglo {1,2,3,4,5,6} quedará como {2,4,6,5,3,1}.

4515 5. Genere un arreglo de 11 elementos guardando en cada elemento un número en-


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-
4518 nes: una para ordenación ascendente y otra ordenación descendente. Por ejem-
plo, si se tuvieran sólo 3 elementos las gráficas serían las siguientes:
Iteración 0 (elementos sin ordenar):
4521 E01 *****

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

E02 *
E03 **

4524 Iteración 1:
E01 *
E02 *****
4527 E03 **

Iteración 2:
E01 *
4530 E02 **
E02 *****

¡Fin! Los elementos se ordenaron luego de 2 iteraciones.


4533 6. Genere un arreglo de 13 elementos guardando en cada elemento un número en-
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-
4536 nes: una para ordenación ascendente y otra ordenación descendente. Además
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-


4539 te una función que reciba una matriz de 2×n en donde en la primera fila estén
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
4542 peso o a la estatura. La función recoge como parámetros matriz, optOrdena-
miento, optVariable, donde optOrdenamiento indica si es ordenamiento ascen-
dente o descendente (una cadena asc o desc) y optVariable indica la variable
4545 con respecto a la cual se ordena (una cadena peso o estatura).

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 -
4548 tén los datos de peso y en la segunda fila los datos de la estatura (para reali-
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
4551 ascendente o descendente con respecto al peso o a la estatura. La función reco-
ge como parámetros matriz, optOrdenamiento, optVariable, algOrdenamiento,
donde optOrdenamiento indica si es ordenamiento ascendente o descendente
4554 (una cadena asc o desc), optVariable indica la variable con respecto a la cual
se ordena (una cadena peso o estatura) y algOrdenamiento indica qué algorit-
mo de ordenamiento que se desea utilizar.

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

4557 9. Implemente un programa que permita la introducción de 10 números enteros


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,
4560 Shell). Terminará con la presentación por pantalla del arreglo ordenado.

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-
4563 tro, con los campos, de tipo entero, día (columna 1), mes (columna 2), año
(columna 3) y número de contrato (columna 4). Damos por supuesto que la
introducción de datos fue correcta, pudiendo existir diversos contratos con la
4566 misma fecha, pero no números de contrato repetidos.

11. Realizar una función que permita ordenar por fechas y de mayor a menor una
matriz de N elementos (filas N <= 40). Cada fila de la matriz es un registro,
4569 con los campos, de tipo entero, día (columna 1), mes (columna 2), año (colum-
na 3) y número de contrato (columna 4). Damos por supuesto que la introduc-
ción de datos fue correcta, pudiendo existir diversos contratos con la misma fe-
4572 cha, pero no números de contrato repetidos. Luego, dada la lista ordenada en
forma decreciente, diseñar una función que devuelva el número de contratos
realizados en una determinada fecha.

4575 12. Ingrese nombres de equipos de fútbol con su respectivo puntaje; visualizarlos
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-
4578 nación.

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-
4581 cambios que se llevan a cabo en cada algoritmo de ordenamiento y el tiempo
que se demora cada uno en la ejecución.

a) Implemente una función que reciba un arreglo de n elementos enteros y el


4584 algoritmo a utilizar para ordenarlos (dos parámetros: elementos y algorit-
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
4587 de cálculo en segundos.

b) Genere un arreglo de 11 elementos con números aleatorios enteros en el


rango [-9, 9].

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

4590 c) Utilice la función desarrollada para ordenar el arreglo generado con cada
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
4593 intercambios y el tiempo de cálculo en segundos:
====================================================
Tabla de comparación para algoritmos de ordenamiento
4596 ====================================================
---------------------------------------------------------------------
Algoritmo # comparaciones # intercambios Tiempo [seg.]
4599 --------- --------------- -------------- -------------
Algoritmo 1 ## ## ##
Algoritmo 2 ## ## ##
4602 Algoritmo 3 ## ## ##
... .. .. ..
---------------------------------------------------------------------
4605 d) Genere 9999 arreglos que cumplan con las condiciones del literal b. Cada
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-
4608 raciones, el número de intercambios y el tiempo de cálculo en segundos. Fi-
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-
4611 lores normalizados; los dos signos de numeral en el histograma significa que
debe poner los números que representa cada barra):
====================================================
4614 Tabla de comparación para algoritmos de ordenamiento
====================================================

Los resultados presentados son el promedio del ordenamiento de 9999


4617 arreglos generados aleatoriamente. Con el mismo arreglo generado
aleatoriamente, se realizó el ordenamiento con todos los algoritmos;
así con cada uno de los 9999 arreglos.

4620 ---------------------------------------------------------------------
# comparaciones # intercambios Tiempo [seg.]
Algoritmo promedio promedio promedio
4623 --------- --------------- -------------- -------------
Algoritmo 1 ## ## ##
Algoritmo 2 ## ## ##
4626 Algoritmo 3 ## ## ##

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

... .. .. ..
---------------------------------------------------------------------

4629 =======================================
Histograma para comparación de métricas
=======================================
4632 -----------------------------------------------------------------
Algoritmo 1 |
# comparaciones (prom) |▬▬▬▬▬▬▬▬▬▬ ##
4635 # intercambios (prom) |▬▬▬▬▬▬▬▬▬▬▬▬ ##
Tiempo [seg.] (prom) |▬▬▬▬▬▬▬ ##
|
4638 Algoritmo 2 |
# comparaciones (prom) |▬▬▬▬▬▬▬ ##
# intercambios (prom) |▬▬▬▬▬▬▬▬▬▬▬ ##
4641 Tiempo [seg.] (prom) |▬▬▬▬▬▬▬▬ ##
|
Algoritmo 3 |
4644 # comparaciones (prom) |▬▬▬▬▬▬▬▬▬▬▬▬▬▬ ##
# intercambios (prom) |▬▬▬▬▬▬▬▬▬ ##
Tiempo [seg.] (prom) |▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬ ##
4647 |
. | . .
. | . .
4650 . | . .
-----------------------------------------------------------------
e) De acuerdo a los datos, discuta la eficiencia de los métodos estudiados.
4653 ¿Qué método es el mejor y por qué?, ¿Qué método es el peor y por qué?,
¿Cuándo utilizaría cada método?, etc.

14. El ejercicio está dividido en los siguientes pasos:

4656 a) Implemente una función que devuelva un número entero aleatorio en el


rango [LímInferior, LímSuperior].
b) Genere un arreglo de n elementos, donde n es un número aleatorio entre 25
4659 y 50.
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-
4662 do de la burbuja.
e) La otra mitad del arreglo ordénelo con el método de la selección.

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

f) Con las dos mitades ordenadas, aplique el método de la inserción para or-
4665 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).

4668 Nota 2: Cada método de ordenamiento debe estar implementado en una fun-
ción diferente.

15. * El ejercicio está dividido en los siguientes pasos:

4671 a) Implemente una función que devuelva un número entero aleatorio en el


rango [LímInferior, LímSuperior].
b) Implemente una función que devuelva una palabra cuyo número de letras
4674 sea dado como parámetro. Cada letra de la palabra es generada individual-
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
4677 y 50.
d) Llene el arreglo con palabras aleatorias de m letras, donde m es un número
aleatorio entre 3 y 5.
4680 e) La mitad (si n/2 no es entero, trúnquelo) del arreglo ordénelo con el méto-
do de la burbuja.
f) La otra mitad del arreglo ordénelo con el método de la selección.
4683 g) Con las dos mitades ordenadas, aplique el método de la inserción para or-
denar el arreglo completo.

Nota 1: Dentro del método principal (main) solamente deben haber el arreglo
4686 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-


ción diferente.

4689 16. Pregunta

* Menú, ordenamiento y búsqueda de registros

Escriba un programa que muestre el siguiente menú:

4692 1. Ingreso de datos de N de estudiantes


2. Ordenar por una columna especificada por el usuario
3. Buscar un registro por apellido

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

4695 4. Listar todos los datos, ordenados alfabéticamente por apellido


5. Salir

Los datos de cada estudiante son: el nombre y apellido y la nota promedio (entre 1 y
4698 20 puntos, inclusivo). Por ejemplo:

Nombre : Juan
Apellido : Pérez
4701 Promedio : 18

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-
4704 pecificado.

* Calificaciones de estudiantes

El objetivo del programa es gestionar calificaciones de estudiantes. Se deben registrar


4707 n estudiantes (n ≥ 3, validar). De cada uno de los estudiantes se deben ingresar, el
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
4710 manera ascendente, obteniendo como resultado una matriz de nx2. Sobre la matriz
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
4713 tres estudiantes con las máximas calificaciones y los nombres de los tres estudiantes
con las mínimas calificaciones.

Detallando los requerimientos utilizando un ejemplo, se tendría lo siguiente:

4716 1. Escribir una función f1 que permita ingresar los datos de los estudiantes.

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

Nombres Calificaciones
Juan 16
Andrés 18
Pedro 15
María 11
Xavier 10
Ximena 17
Fernando 19
... ...
Jaime 5
2. Escribir una función f2 que reciba los dos arreglos ingresados en f1 y devuelva
una matriz con los nombres y calificaciones de forma ascendente, por nombre.

Andrés 18
Fernando 19
Jaime 5
Juan 16
A= María 11
Pedro 15
Xavier 10
... ...
Ximena 17

4719 3. Escribir una función f3 que reciba como entrada la matriz generada en f2 y de-
vuelva una matriz con la calificación mínima y calificación máxima.

Jaime 5
B=
Fernando 19

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

4. Escribir una función f4 que reciba como entrada la matriz generada en f2 y de-
4722 vuelva una matriz con las tres mayores calificaciones y las tres menores califi-
caciones.

Fernando 19
Andrés 18
Ximena 17
C=
Jaime 5
Xavier 10
María 11

Ordenamientos en matriz

4725 Desarrolle un programa que pida al usuario ingresar las dimensiones (nxm) de una
matriz y rellene los elementos de dicha matriz con números enteros aleatorios en un
rango dado por el mismo usuario. Muestre la matriz generada y luego, realice los si-
4728 guientes ordenamientos:

• 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
4731 selección. Muestre la matriz original luego de aplicados estos cambios.
• 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-
4734 se con el método de ordenamiento de burbuja. Muestre la matriz original lue-
go de aplicados estos cambios.
• Las “diagonales derecha-izquierda” ordénelas de manera ascendente con el mé-
4737 todo de inserción; muestre la matriz original luego de aplicados estos cambios.
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-
4740 bios.

A continuación se muestra un ejemplo de ejecución del programa:


Ingreso de datos
4743 ================
Dimensión de la matriz
n: 3

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

4746 m: 4

Rango para generación de números aleatorios


inf: -2
4749 sup: 10

Matriz generada
8 4 9 5
4752 2 1 7 4
3 5 -1 2

Resultados
4755 ==========
Luego de ordenadas las columnas
2 5 -1 5
4758 3 4 7 4
8 1 9 2

Luego de ordenadas las filas


4761 9 8 5 4
1 2 4 7
5 3 2 -1

4764 Luego de ordenadas las “diagonales derecha–izquierda”


8 2 1 5
4 3 5 -1
4767 9 7 4 2

Luego de ordenadas las “diagonales izquierda–derecha”


8 7 9 5
4770 5 1 4 4
3 2 -1 2

* Manejo de datos de personas

4773 Escriba un programa que lea los datos de n personas (el n se pide al usuario), consi-
derando los siguientes campos:

1. Nombre
4776 2. Apellido
3. Edad
4. Profesión

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

4779 La información debe ser validada al momento de ingresar cada uno de los datos. Al-
macene la información ingresada en una estructura que considere adecuada para rea-
lizar las siguientes operaciones:

4782 a) Ordenar los datos de acuerdo a lo que se especifique en el momento de la eje-


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-
4785 mas. Si se ordena por apellido, se muestra: APELLIDO, NOMBRE, EDAD,
PROFESIÓN. Si se ordena por profesión, se muestra: PROFESIÓN, NOM-
BRE, APELLIDO, EDAD.

4788 b) Buscar todas las ocurrencias de un valor ingresado por el usuario. Por ejem-
plo, buscar todos los que tengan 30 años de edad, o todos lo que tengan por
apellido “Pérez”.

4791 Debe mostrarse un menú de opciones que permita ingresar información, buscar y
mostrar los datos ordenados según el criterio que especifique el usuario.

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

Archivos

4794 Miscelánea

1. ¿Qué significa EOF?

a) Empty or full
4797 b) End of file
c) End of floop
d) Las anteriores respuestas no son correctas

4800 2. * Usted recibió dos archivos de texto plano (txt). El primero tiene un mensaje
cifrado que sólo se puede leer (leer por un humano) utilizando la clave del se-
gundo archivo. La clave consiste de series de tres caracteres (siempre tres y se-
4803 guidos), de los que encontrará en el archivo cifrado, a los cuales corresponde
caracteres, de los que tendrá que escribir como descifrados. Por ejemplo, si el
primer archivo contiene
4806 e545ty8452w3
y el segundo archivo tiene la clave
e54 h
4809 5ty o
845 l
2w3 a
4812 el archivo que tiene que escribir, llamado descifrado.txt contendrá
hola
3.

* Metro Interstate Traffic Volume Data Set

4815 Este ejercicio utiliza la base de datos presentada en el Repositorio de Machine Lear-
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
4818 son: temp, date_time y traffic_volume (temperatura en grados Kelvin, fecha y hora
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).

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

4821 1. Agregue los datos de temperatura (atributo temp) a escala mensual, calculan-
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-
4824 mará todos los valores de temperatura de cada mes, calculará la media de esos
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-
4827 gación, se tuvieran solamente 12 registros (uno por mes, i.e., a escala men-
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-
4830 Mensual.csv solamente debe contener dos columnas: date_time y temp. Ade-
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-
4833 gue (el gráfico usa los datos reales del archivo Metro_Interstate_Traffic_Volu-
me.csv).

2. Grafique el tráfico diario por horas y muéstrelo como en el gráfico de arriba


4836 (derecha; el gráfico usa los datos reales del archivo
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-
4839 drá doce valores que corresponden a las sumas del tráfico de cada hora del día
(vea el gráfico).

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

* Formación de grupos de trabajo con archivos

4842 Usted trabajará con un archivo CSV que tiene una lista de estudiantes. El archivo
tiene registros con ocho atributos (columnas/campos), de los cuales los más impor-
tantes para este ejercicio son: Nombre, Prueba 1/ 10 y Excluir (nombre del estudian-
4845 te, calificación de una prueba y si el registro debe excluirse de la formación de gru-
pos). Usted debe pedir la cantidad (N) de personas que habrán en cada grupo que
formará. Luego de eso, mostrará los grupos con las N personas que tiene cada uno,
4848 escogidos de manera aleatoria. Al mostrar los grupos debe mostrarlos de manera des-
cendente de acuerdo a la suma de las calificaciones de la Prueba 1 de cada grupo
(suma las calificaciones de cada estudiante del grupo y esa suma es por la que debe
4851 ordenar); pero luego de ordenar por ese criterio, los nombres de las personas de cada
grupo deben estar ordenados en forma ascendente por el primer apellido, dentro de
cada grupo. Si hay un grupo que no pueda tener N personas, indicarlo con un mensa-
4854 je y mostrar el grupo con menos de N personas.

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
4857 lista al final.

Por ejemplo:
N: 2
4860 Grupo 1 Suma: 19
Dayanna Marcela Pacheco Fajardo 9
Maite Cristina Quinde Peralta 10

4863 Grupo 2 Suma: 17


Bryam Sebastián Arévalo Abril 9
Charlee Emanuel Vintimilla Marquez 8

4866 Grupo 3 Suma: 15


Samantha Gabriela Cabrera Nieto 7
Daviel Lucas Zárate Cuenca 8

4869 El siguiente grupo tiene menos de 2 estudiantes


Grupo 4 Suma: 10
Emilia Carolina Quito Pacurucu 10

4872 Los siguiente estudiantes se excluyen de los grupos


Edwin Humberto Buri Guaman
Anthony José Loayza Aguilar

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

4875 Jean Pierre Quizhpilema Marín


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
4878 nombres están ordenados de manera ascendente, por el primer apellido. Finalmente,
se listan las personas que deben excluirse de la generación de grupos.

Toda la información que se muestra en pantalla, debe ser guardada en un archivo lla-
4881 mado grupos.txt.

* Concrete Compressive Strength Data Set

En este ejercicio se usa datos acerca de la resistencia del concreto de acuerdo a su


4884 compuesto y a las cantidades utilizadas de cada componente. El conjunto de datos
está ubicado en https://archive.ics.uci.edu/ml/datasets/concrete+compressive+stren-
gth. Con el fin de tener una idea más clara acerca de la influencia de los componentes
4887 en la resistencia del concreto (dado en megapascales, mPa), se pide generar gráficas
de cada par de componentes y la resistencia correspondiente.

Los componentes y/o variables de los que se cuenta con datos, y las correspondientes
4890 unidades, son los siguientes:

1. Cemento, en kg/m3
2. Escoria, en kg/m3
4893 3. Ceniza, en kg/m3
4. Agua, en kg/m3
5. Superplastificante, en kg/m3
4896 6. Agregado grueso, en kg/m3
7. Agregado fino, en kg/m3
8. Edad, en días

4899 Haga un gráfico de dispersión (scatter) con cada par de componentes en donde cada
punto muestre la resistencia del concreto con un color en escala de grises y un tama-
ño. Así, los puntos que representan concreto más resistente tendrán un color más
4902 obscuro y serán más grandes. A continuación se muestra, como ejemplo, un par de
gráficos (se utilizaron los datos reales para generarlos), de todos los que se deben ge-
nerar (son más de 55).

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

4905 Una cosa que debe tener muy claro de las gráficas anteriores es que el color y tamaño
del punto está relacionado a la resistencia del concreto. Además, lo que se pide es que
por cada par de componentes se generen dos gráficas, i.e., por ejemplo, para los com-
4908 ponentes Cemento y Agua debe haber una gráfica y para los componentes Agua y
Cemento debe haber otra gráfica. Finalmente, el eje x hace referencia al primer com-
ponente que se indica en el título y el eje y hace referencia al segundo componente
4911 que se indica en el título (vea las gráficas de ejemplo de arriba).

No todas las gráficas tienen las mismas marcas (e.g., círculos o triángulos). Las mar-
cas que se tiene que utilizar, dependiendo de qué componente esté siendo mostrado
4914 en el eje x, son:

1. Cemento: "."
2. Escoria: "v"
4917 3. Ceniza: "1"
4. Agua: "s"
5. Superplastificante: "p"
4920 6. Agregado grueso: "P"
7. Agregado fino: "x"
8. Edad: "D"

4923 Los gráficos deben tener una barra de colores con la etiqueta que indique qué infor-
mación está mostrando y su respectiva unidad (i.e., Resistencia [mPa]). Las etiquetas
de los ejes, además de indicar a qué componente hacen referencia, muestran entre
4926 corchetes la unidad de ese componente (se indicó arriba). El título debe mostrar el
texto

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

Resistencia del Concreto en relación a los


4929 componentes Componente1 y Componente2
Puntos en esta gráfica: N

donde componente1, componente2 y N hacen referencia al componente del concreto


4932 que indica el eje x de la gráfica, al componente que indica el eje y de la gráfica y el
número de puntos que tiene esa gráfica, respectivamente.

Cada gráfica generada debe ser guardada (utilizando programación y no de manera


4935 manual) con el nombre componente1_componente2.png, donde componente1 y com-
ponente2 hacen referencia al componente del concreto que indica el eje x de la gráfica
y al componente que indica el eje y de la gráfica (e.g., Edad_Superplastificante.p-
4938 ng, Agregado grueso_Escoria.png). Fíjese que el formato del archivo es png.

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ú-
4941 mero máximo de puntos mostrados. El siguiente es un ejemplo del contenido del ar-
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).
4944 Las gráficas con el mínimo de puntos mostrados (124) son:
Ceniza y Cemento
Cemento y Ceniza
4947 Agua y Agregado fino
Agregado fino y Agua
Las gráficas con el máximo de puntos mostrados (984) son:
4950 Cemento y Agregado fino
Agregado fino y Cemento
Edad y Escoria
4953 Escoria y Edad
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.

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

4956 Miscelánea de Ejercicios

Un buen lugar para comenzar a practicar más está en http://www.lab.dit.upm.es/


~fprg/examenes/

4959 * 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
4962 de las siguientes opciones del menú:
1.- Ingresar datos de los pokemones
2.- Simular combate
4965 3.- Terminar
Ingresar opción <1-3>:
1)Ingresar datos de los pokemones (i.e. nombres, poder de ataque). Por ejemplo se
4968 ingresa los pokemones: 1) Pikachu con poder de ataque 55 y 2) Jigglypuff con su po-
der de ataque 45

2)Simular combate

4971 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
4974 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-
4977 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
4980 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-
4983 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
4986 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-

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

chu ataca y Jigglypuff termina con -10 de vida, entonces el combate termina. Se tiene
4989 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:
4992 Combate de pokemones
1.- Ingresar datos de los pokemones
2.- Simular combate
4995 3.- Terminar
Ingresar opción <1-3>: 1

Nombre del primer Pokemon: Pikachu


4998 Poder de ataque del primer Pokemon: 55
Nombre del segundo Pokemon: Jigglypuff
Poder de ataque del segundo Pokemon: 45

5001 Combate de pokemones


1.- Ingresar datos de los pokemones
2.- Simular combate
5004 3.- Terminar
Ingresar opción <1-3>: 2

Vidas:Pikachu(100) vs Jigglypuff(100)

5007 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)
5010 Vidas: Pikachu (100) vs Jigglypuff (45)
3.- Turno: Pickachu (55 de poder). (Sí ataca, azar(2) devolvió 1)
Vidas: Pikachu (100) vs Jigglypuff (-10)

5013 Pokemon ganador: Pikachu en 3 turnos.

Combate de pokemones
1.- Ingresar datos de los pokemones
5016 2.- Simular combate
3.- Terminar
Ingresar opción <1-3>: 3
5019 (termina el programa)

204
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

5022 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

5025 Valor futuro de una inversión

Cálculo del capital inicial

Cálculo de la tasa de interés

5028 Cálculo del número de años

Media, mediana y varianza de N datos

Transformación de números decimales a romanos

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

5034 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:

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

5037 • 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 =
5040 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).
5043 • 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
5046 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
5049 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.,
5052 ‘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
5055 ‘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
5058 por 1000:

Romano (miles) Decimal

V 5000

X 10 000

L 50 000

C 100 000

D 500 000

M 1 000 000

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

Dígitos de un número

Elaborar un algoritmo que dado un número entero positivo (>0) cualquiera (validar
5061 para que siga ingresando números mientras no cumple la condición) nos diga el nú-
mero de dígitos que tiene.

* Pirámide invertida

5064 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
5067 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

5070 1 2 3 4 5 4 3 2 1
1 2 3 4 3 2 1
1 2 3 2 1
5073 1 2 1
1

* Cubos e impares
5076 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.
5079 • Sumando los tres siguientes impares se obtiene el tercer cubo, y así
sucesivamente.
Expresado de forma matemática:
5082 13 = 1 =1
2 =3+5
3
=8
3 = 7 + 9 + 11
3
= 27
5085 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.

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

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

5091 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-
5094 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
5097 completar el número de dígitos con ceros a la izquierda.

Ejemplo 1:
Límite inferior: 1
5100 Límite superior: 12
Paso: 3
Lo que se muestra en pantalla es:
5103 01
04
07
5106 10
Ejemplo 2:
Límite inferior: 1
5109 Límite superior: 1500
Paso: 500
Lo que se muestra en pantalla es:
5112 0001
0501
1001

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

5121 1. Implemente el algoritmo de Gauss (página 146).

2. Implemente el método de eliminación de Gauss (página 147).

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

Métodos de Jacobi y de Gauss-Seidel

5124 Vea el libro de Quarteroni et al. (2014, pp. 168–173).

Dados

Escribir un programa que simule el lanzamiento de dos dados y muestre por pantalla
5127 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.

5130 2. Diseñar un procedimiento recursivo que ordene una lista de elementos por el
método Quick Sort.

Interpolación

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

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


5139 mio interpolador que pase por cuatro puntos.

Integración numérica

Para resolver los siguientes ejercicios revise la sección 4.3 Numerical integration del
5142 libro de Quarteroni et al. (2014).

1. Implemente la fórmula de cuadratura de punto medio compuesto para integra-


ción numérica.

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

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

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

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

5154 desde x0 = 0 hasta xn = 4 con un tamaño de paso 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.

El método de Euler consiste en dividir el intervalo que va desde x 0 a xn en su-


5157 bintervalos de ancho

(1)

y aplicar la fórmula iterativa

5160 (2)

Para comprobar sus resultados sepa que la integral analítica de la función dy/
dx es y = − 0.5x4 + 4x3 − 10x2 + 8.5x + 1. La figura 15 muestra las gráficas
5163 de la solución analítica y la solución numérica cuyos valores de yi (aproxima-
dos) usted debe encontrar. La tabla 2 muestra los valores de los puntos de la
aproximación mediante el método de Euler.

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

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

Figura 15: Comparación de la solución analítica con una solución numérica


5169 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
11 2.2 2.98
12 2.4 3.2368
13 2.6 3.6312

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

i xi yi (aproximación)
14 2.8 4.1248
15 3 4.66
16 3.2 5.16
17 3.4 5.5288
18 3.6 5.6512
19 3.8 5.3928
20 4 4.6
• * Implemente el método de Euler y úselo para integrar numéricamente la
5172 ecuación

dy/dx = f(x, y) = − 2x3 + 12x2 − 20x + 8.5

desde x0 = 0 (este es un valor fijo) hasta un xn dado por el usuario (>x0) con
5175 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
en x0 = 0 es y0 = 1, i.e., la función y (la que se quiere aproximar) en x = 0, es
5178 1 [y(0) = 1].

El método de Euler consiste en dividir el intervalo que va desde x0 a xn en su-


bintervalos de ancho h y aplicar la fórmula iterativa

5181 (3)

Para comprobar sus resultados sepa que la integral analítica de la función dy/
dx (lo que se quiere aproximar) es y = − 0.5x4 + 4x3 − 10x2 + 8.5x + 1.

5184 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
se incluye x0 al comienzo pero no necesariamente se incluye al final xn porque
5187 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
igual a uno. Recuerde cuál es la idea fundamental de usar funciones para po-
5190 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-
tan las funciones) y en ese comentario ponga si usar tuplas, listas, diccionarios
5193 o conjuntos es la mejor opción para devolver (return) los resultados y porqué.
Para que sepa cómo trabaja la función my_range, a continuación se muestran
algunos ejemplos de su ejecución:
5196 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

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

Desde 0 a 1 con paso 0.3: 0, 0.3, 0.6, 0.9


Desde 0 a 4 sin especificar el paso: 0, 1, 2, 3, 4

5199 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
calculadas para los diferentes x0, x1, …, xn (estos varían de acuerdo al h usado).
5202 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
sea una función (recuerde lo que son las funciones de orden superior) y con esa
5205 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
ejercicio, en este caso el 1. Recuerde cuál es la idea fundamental de usar fun-
5208 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
se comentan las funciones) y en ese comentario ponga si usar tuplas, listas,
5211 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
resultados devueltos por esa función (aproximaciones de y en los diferentes
5214 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
Con xn=1 y h=0.33: 1, 3.805, 4.83952558, 4.82375422
5217 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,
5.5, 5.7, 5.5, 4.7

5220 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
en los resultados. Esos resultados deben ser mostrados en una gráfica como se
5223 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-
tra, en Estudiante ponga su primer nombre y primer apellido). Recuerde que
5226 el único dato que pide al usuario es xn, el resto (hs, f(x, y), etc.) son fijos.

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

* Tiempo de Respuesta Facebook

Una de las métricas que usa Facebook para mostrar qué tan activa es una página es
5229 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
relación a esto, se plantea el siguiente ejercicio donde debe tomar en cuenta buenas
5232 prácticas de programación (e.g. documentación en el código para indicar qué hace
cada sección del programa).

Genere un menú con tres opciones:

Menú
1. Datos manuales
2. Datos aleatorios
3. Salir

Opción [1-3]: _

1 En realidad el cálculo tiene más detalles pero se ha modificado para el ejercicio. Más en
https://is.gd/4cHiOQ

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

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


gresar. El ingreso de cada registro implica escribir una cadena de texto en el formato
5238 “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
página en Facebook respondió a ese mensaje 1 (la segunda hora siempre es mayor o
5241 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-
gen), con clases correspondientes a las diferentes horas que se demoran en responder
5244 a los mensajes (24). El gráfico debe tener las etiquetas Frecuencia y Tiempo de Res-
puesta como se muestra.

Cuando el usuario elige la opción 2, el usuario indica un número N de registros que el


5247 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
1. Es decir, en la opción 2 del menú se hace lo mismo que para la opción 1 solamente
5250 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.

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

¿Qué Hace el Algoritmo/Programa?

5253 1. * ¿Cuál es el valor final de las variables a, b y c?


Proceso sin_titulo
a<-5
5256 b<-6
c<-7
aux<-a
5259 b<-a
c<-b
Escribir a, b, c
5262 FinProceso
2. * ¿Cuál es el valor de la variable x?
Proceso sin_titulo
5265 Definir x Como Entero
Definir z Como Entero
x<-2
5268 z<-5
Si z<0 Entonces
x<-x+2
5271 Sino
Si x>1 Entonces
x<-x+1
5274 Sino
x<-5
Fin Si
5277 Fin Si
Escribir x
FinProceso
5280 3. * ¿Cuál es el resultado de ejecutar el siguiente pseudocódigo?
Proceso valorC
c<-50
5283 Mientras c>=0 Hacer
Escribir c
c<-c+1
5286 Fin Mientras
FinProceso
4. * ¿Cuál es el resultado de ejecutar el siguiente pseudocódigo?
5289 Proceso sin_titulo

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

Para i<-1 Hasta 5 Con Paso 1 Hacer


Segun i Hacer
5292 1:
Escribir "a"
2:
5295 Escribir "b"
3:
Escribir "c"
5298 De Otro Modo:
Escribir "d"
Fin Segun
5301 Fin Para
FinProceso
5. ¿Qué realiza o cuál es el fin del siguiente algoritmo o programa?
5304 Proceso sin_titulo
Leer var1
Leer var2

5307 Mientras var1<var2 Hacer


Leer var1
Leer var2
5310 Fin Mientras

var3<-0

Mientras var1 >= var2 Hacer


5313 var1<-var1-var2
var3<-var3+1
Fin Mientras

5316 Escribir var3


Escribir var1
FinProceso
5319 6. ¿Qué realiza o cuál es el fin del siguiente algoritmo o programa?
Proceso sin_titulo
var1<-10
5322 Leer var2

Mientras var2<1 Hacer


Leer var2
5325 Fin Mientras

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

Para var3<-1 Hasta var2 Con Paso 1 Hacer


var4<-1

5328 Mientras var4<=var1 Hacer


var5<-var4*var3
Escribir var5
5331 var4<-var4+1
Fin Mientras

Escribir '***** ****** ***** *****'


5334 Fin Para
FinProceso
7. ¿Qué realiza o cuál es el fin del siguiente algoritmo o programa?
5337 Proceso sin_titulo
Leer var1

Mientras var1<0 Hacer


5340 Leer var1
Fin Mientras

var2<-1
5343 var3<-11

Mientras var2<=var1 Hacer


Leer var4

5346 Mientras var4<1 O var4>10 Hacer


Leer var4
Fin Mientras

5349 Si var4<var3 Entonces


var3<-var4
Fin Si

5352 var2<-var2+1
Fin Mientras

Escribir var3
5355 FinProceso
1. * Con respecto al siguiente algoritmo

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

Proceso sin_titulo
5358 Para i<-1 Hasta 7 Con Paso 3 Hacer
cont<-1
Mientras cont<=5 Hacer
5361 Escribir Sin Saltar i,'^',cont,': ',i^cont, ' '
cont<-cont+2
Fin Mientras
5364 Escribir ''
Fin Para
FinProceso
5367 ¿Cuál de las siguientes versiones hace exactamente lo mismo?

a)
Proceso sin_titulo
5370 cont<-1
Mientras cont<=8 Hacer
Para i<-1 Hasta 5 Con Paso 2 Hacer
5373 Escribir Sin Saltar cont,'^',i,': ',cont^i, ' '
Fin Para
Escribir ''
5376 cont<-cont+4
Fin Mientras
FinProceso
5379 b)
Proceso sin_titulo
cont<-1
5382 Mientras cont<=7 Hacer
Para i<-1 Hasta 5 Con Paso 2 Hacer
Escribir Sin Saltar cont,'^',i,': ',cont^i, ' '
5385 Fin Para
Escribir ''
Fin Mientras
5388 FinProceso
c)
Proceso sin_titulo
5391 cont<-1
Mientras cont<=7 Hacer
Para i<-1 Hasta 5 Con Paso 2 Hacer
5394 Escribir Sin Saltar cont,'^',i,': ',cont^i, ' '
Fin Para

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

Escribir ''
5397 cont<-cont+3
Fin Mientras
FinProceso
5400 d) Ninguna de las anteriores

Lenguaje Java

1. * ¿Para el siguiente segmento de código cuál es la salida del programa?

5403 a) -120
b) 0
c) 60
5406 d) Ninguna de las anteriores
public class Test {

public static void main (String[] args) {


5409 int j = operacion();
System.out.println("Resultado: " + j);
}

5412 public static int operacion(){


j = -1;
for(int i=5; i>=0; i--)
5415 j=j*i;
}
}
5418 2. * ¿Para el siguiente segmento de código cuál es la salida del programa?

a) 8
b) 72
5421 c) 0
d) 36
public class Test {

5424 static int resultado = 0;

public static void main (String[] args) {


operacion(3);
5427 System.out.println("Resultado: " + resultado);
}

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

public static int potencia(int base, int exp){


5430 int j = 1;
for(int i=0; i<exp; i++)
j=j*base;
5433 return j;
}

public static void operacion(int resultado){


5436 int i=1;
for(int j=1; j<resultado; j++)
i=j*potencia(j, 2);

5439 resultado = i;
}
}
5442 8. * ¿Cuál es el tiempo de vida de una variable global?

a) Existe tanto tiempo como el programa


b) Existe mientras una función se encuentra ejecutando
5445 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


5448 porqué.
a) int primos={2,3,5,7,11};
b) int [] resultados=int [30];
5451 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).
5454 public static void imprime(int[][] a){
for(int i=0; i<a.length; i++){
for(int j=0; -------------; j++){
5457 System.out.print(a[i][j] + “ ”);
}
}
5460 }
11. ¿Cuál es la salida del siguiente programa?
public class Ejercicio {
5463 public static void main(String[] args){
int [] matriz = {1,2,3};

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

metodoA(matriz);
5466 for(int i=0; i<matriz.length; i++)
System.out.print(matriz[i]++ + " ");
for(int i=0; i<matriz.length; i++)
5469 System.out.print(matriz[i] + " ");
}
static void metodoA(int [] b){
5472 for(int i=0; i<b.length;i++)
b[i]=b[i]+3;
}
5475 }
12. * ¿Cuál es la salida del siguiente programa?
public class Ejercicio {

5478 public static void main (String[] args) {


char[] matriz = {'e','u','o','i','a'};
metodo(matriz);
5481 for(int i=0; i<matriz.length; i++){
System.out.println(matriz[i]);
}
5484 }

public static void metodo(char[] vocales){


char aux;
5487 for(int i=1; i<vocales.length; i++){
if(vocales[i-1]>vocales[i]){
aux=vocales[i-1];
5490 vocales[i-1]=vocales[i];
vocales[i]=aux;
}
5493 }
}
}
5496 13. * ¿Cuál es la salida del siguiente fragmento de código?
int index = 1;
while(index < 10){
5499 System.out.println(index);
index ++;
}
5502 14. * ¿Cuál es la salida del siguiente programa?
public class Ejercicio {

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

public static void main (String args[]) {


5505 int c = 1;
final int N=5;
while(c<=N){
5508 System.out.println(c);
c--;
}
5511 }
}
15. * Diga si la proposición referente al siguiente método programado en Java es
5514 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.

5517 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) {
5520 for(int i = 0; i < parametro.length; i++)
for(int j = 0; j < parametro.length; j++)
System.out.println(parametro[i][j]);
5523 }
a) La proposición es verdadera

b) La proposición es falsa

5526 16. * ¿Qué retorna la siguiente función?


public static int misterioso(int a, int n)
{
5529 int i, r, x;
i = n;
r = 1;
5532 x = a;
while (i > 0) {
if (i % 2 != 0) {
5535 r = r * x;
}
x = x * x;
5538 i = i / 2;
}
return r;
5541 }

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

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.

5544 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
5547 salida correcta del mismo.
public static void main(String[] args) {
int arreglo[] = {2,7,8,9,4,5,2,6,8,9,3};
5550 String cadena ="";
cadena = cadena + "\nNumeros: ";
for(int i=0;i < arreglo.length;i++){
5553 if(arreglo[i]%2!=0){
cadena = cadena +" "+ arreglo[i];
}
5556 }
System.out.println(cadena);
}

5559 public static void funcion(int[] arreglo) {


for (int i=1; i < arreglo.length; i++) {
int aux = arreglo[i];
5562 int j;
for (j=i-1; j >=0 && arreglo[j] > aux; j--){
arreglo[j+1] = arreglo[j];
5565 }
arreglo[j+1] = aux;
}
5568 }
a) 2 8 5 7 9
b) 2 2 4 6 8
5571 c) 7 9 5 9 3
d) 2 9 9 5 3

18. * ¿Qué es lo que muestra en pantalla el siguiente código?


5574 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++) {
5577 System.out.print(m[i].length + “ “);

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

}
}
5580 a) 4 4 7
b) 5 3 4
c) 0 8 2
5583 d) 6 3 1

19. * ¿Cuál es el ámbito de la variable x?


1) public void counter(int StartingNumber){
5586 2) for (int x = StartingNumber; x<100; x++)
3) {
4) JOptionPane.showMessageDialog(null, x);
5589 5)
6) }
7) JOptionPane.showMessageDialog(null, “Fin del método”, x);
5592 8) }
a) Líneas desde la 2 a 7
b) Líneas desde la 2 a 6
5595 c) Línea 4
d) Líneas desde la 1 a 8

20. * ¿Cuál es la salida correcta del siguiente programa?


5598 public class ProgramacionI {
public static int contador = 0;
public static void main(String[] args) {
5601 String cadena1, cadena2;
cadena1 = "cadena";
cadena2 = "programación";
5604 for (int i = 0; i < cadena2.length(); i++) {
for (int j = 0; j < cadena1.length(); j++) {
if (i == j) {
5607 contar();
}
}
5610 }
System.out.println(contador);
}
5613 public static void contar() {
contador = contador + 2;
}
5616 }

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

21. * ¿Cuál es la salida correcta del siguiente programa?


public class ProgramacionI {
5619 public static void main(String[] args) {
String str = "manejo de cadenas con java";
int inicio = str.indexOf("c");
5622 int fin = str.indexOf("e", inicio + 1);
System.out.println(str.substring(inicio, fin + 3));
}
5625 }
a) cadenas

b) cade

5628 c) cadena

d) de

22. * ¿Qué muestra el siguiente programa?


5631 public class ProgramacionI {
public static void main(String[] args) {
int contador;
5634 int limite;

contador = 2;
5637 limite = 10;

do {
5640 switch (contador % 2) {
case 0:
System.out.print(contador + " es par\n");
5643 break;
case 1:
System.out.print(contador + " es impar\n");
5646 break;
}
contador += 2;
5649 } while (contador < limite);
}
}
5652 23. Pregunta

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

Lenguaje C

1. * Realice la prueba de escritorio del siguiente programa e indique qué se mues-


5655 tra en pantalla.
#include<stdio.h>

int main() {
5658 int a = 4, b = 1, x;
do{
a += 2;
5661 b++;
}while(a<=b);
a += 3;
5664 b += 2;
a = a+b%2+a%3;
x = a/b;
5667 if(x>b){
b = b+4;
a = b%3;
5670 x = a%b;
}
b++;
5673 x = x*(10/8)+a%b;
for(int i=0; i<a; i=i+1)
printf("%d", a);
5676 printf("\n");
for(int i=0; i<b; i+=2)
printf("%d", b);
5679 for(int i=0; i<=b; i++)
printf("%d", x);
printf("\nVariable a: %d\n", a);
5682 printf("Variable b: %d\n", b);
printf("Variable x: %d\n", x);
}
5685 2. Pregunta

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

Fórmulas y Relaciones

Interés

5688 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.
5691 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

5694 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

5697 (1)

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

Interés compuesto
A diferencia del interés simple, el interés compuesto representa la acumulación de
5703 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

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

5706 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
5709 para el cálculo del interés del periodo siguiente.

La fórmula de interés compuesto es

(2)

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

5715 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-
5718 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

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

5721 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
5724 se tratase de interés compuesto.

La fórmula de la composición periódica es

(3)

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

5730 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?

5733 Estadística

Media ponderada

Para una serie de datos no vacía:

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

5736 a la que corresponden los pesos:

la media ponderada es:

(4)

5739 Medidas de longitud

• 1 milla = 1609 metros

• 1 pulgada = 0.0254 metros

5742 • 1 yarda = 3 pies

• 1 pie = 12 pulgadas

Unidades de capacidad

5745 • 1 pie cúbico = 0.0283 metros cúbicos

• 1 metro cúbico = 1000 litros

• 1 yarda cúbica = 27 pies cúbicos.

5748 Unidades de capacidad de información

• 8 bits = 1 byte

• 1024 bytes = 1 kilobyte (KB)

5751 • 1024 KB = 1 megabyte (MB)

• 1024 MB = 1 gigabyte (GB)

• 1024 GB = 1 terabyte (TB)

5754 Tiempo

• 1 hora = 60 minutos

• 1 minuto = 60 segundos

5757 • 1 hora = 3600 segundos

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

Unidades de temperatura

Relación entre grados celsius (centígrados, C) y fahrenheit (F).

5760 (5)

Círculo

r: radio

5763 l: longitud o perímetro

a: área

(6)

5766 (7)

Esfera

• r: radio

5769 • s: superficie o área

• v: volumen

(8)

5772 (9)

Cuadrado

Ángulos

5775 (10)

Ecuación de segundo grado

Dada la ecuación de segundo grado

5778 (11)

las raíces o ceros de la función son:

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

(12)

5781 Logaritmos

El logaritmo de un número en cualquier base puede obtenerse por la relación

(13)

5784 en donde, , ; , .

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

Referencias
Alcalde Lancharro, E., García López, M., 1992. Metodología de la programación:
aplicaciones en COBOL y PASCAL. McGraw-Hill, Madrid.
Chapra, S.C., Canale, R.P., Enríquez Brito, J., Roa Hano, Ma. del C., 2007. Métodos
Numéricos para Ingenieros, 5th ed. McGraw-Hill Interamericana, México.
Charles Lehmann, 1994. Geometría analítica. Editorial Limusa, S.A. de C.V. Grupo
noriega editores, México D.F.
Chaves Torres, A.N., 2012. Diseño de algoritmos. Universidad Nacional Abierta y a
Distancia, Colombia.
Deitel, P.J., Deitel, H.M., 2012. Java: How to Program, 9th ed. Prentice Hall, Upper
Saddle River, N.J.
Editorial Macro, 2001. Turbo Pascal 7.0 Paso a Paso. Editorial Macro, Lima, Perú.
Gómez Fuentes, M. del C., Cervantes Ojeda, J., 2013. Inicialízate en la Programación
con C++, 1st ed. Universidad Autónoma Metropolitana, México.
Guttag, J., 2016. Introduction to computation and programming using Python: with
application to understanding data, 2nd ed. The MIT Press, Cambridge,
Massachusetts.
Joyanes Aguilar, L., Rodríguez Baena, L., Fernández Azuela, M., 2003. Fundamentos
de Programación: Libro de Problemas, 2nd ed. : McGraw-Hill, Madrid.
Olaya, V., 2011. Sistemas de Información Geográfica.
Parra Terrazos, C., n.d. Algoritmos y estructuras de datos I. Universidad Tecnológica
del Perú, Lima, Perú.
Pérez Montes, F.M., 2010. Ejercicios de Programación en Java: Condicionales,
Bucles, Tablas y Funciones. Eduinnova, Sevilla, España.
Pinales Delgado, F.J., Velázquez Amador, C.E., 2014. Algoritmos Resueltos con
Diagramas de Flujo y Pseudocódigo. Departamento Editorial de la
Universidad Autónoma de Aguascalientes, Aguascalientes, México.
Quarteroni, A., Saleri, F., Gervasio, P., 2014. Scientific Computing with MATLAB
and Octave, 4th ed, Texts in Computational Science and Engineering.
Springer Berlin Heidelberg, Berlin, Heidelberg.
Tanenbaum, A.S., Wetherall, D.J., 2012. Redes de computadoras, 5th ed. Pearson
Educación, México D.F., México.
Vázquez Gómez, J.B., 2012. Análisis y diseño de algoritmos, 1st ed. Red tercer
milenio, Tlalnepantla, México.
Vázquez-Patiño, A., 2016. Carrera de caballos. Cuenca, Ecuador.

234