Вы находитесь на странице: 1из 240

Ejercicios Básicos de Programación

13 de mayo de 2021

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

Contenido
1. Introducción..............................................................................................................6
2. Fundamentos.............................................................................................................7
Qué es programar......................................................................................................7
Qué es un lenguaje de programación........................................................................7
Modelización de problemas del mundo real..............................................................9
Del problema real a su solución por computadora...................................................9
Conceptos acerca de software....................................................................................9
Variables y tipos de datos.........................................................................................9
Algoritmos.................................................................................................................9
Diagramas de flujo..................................................................................................12
Pseudocódigo...........................................................................................................12
Prueba de escritorio................................................................................................13
Codificación.............................................................................................................13
Documentación y su importancia............................................................................13
3. Programación Secuencial.........................................................................................14
Miscelánea...............................................................................................................14
Respaldo de información.........................................................................................15
Cálculos espaciales básicos......................................................................................16
Cálculo de interés....................................................................................................18
Costo de llamada.....................................................................................................18
Cálculo de potencia.................................................................................................18
Área de un triángulo dadas las longitudes de los lados..........................................19
Hexágono regular....................................................................................................19
Área de un triángulo dadas las coordenadas de sus vértices..................................19
Puntos colineales.....................................................................................................20
Movimiento rectilíneo uniforme...............................................................................20
Angel Vázquez-Patiño Universidad de Cuenca

Ponderación de calificaciones..................................................................................20
Sistema de ecuaciones lineales.................................................................................20
* E2 Vuelto o cambio de una compra.....................................................................21
* E3 Transformación entre unidades de tiempo......................................................21
Cálculo de tiempo en horas, minutos y segundos...................................................21
Transformación de pies a metros.............................................................................21
Unidades de capacidad............................................................................................21
Cálculo de comisión.................................................................................................22
Cálculo de descuento...............................................................................................22
Calificación de programación..................................................................................22
Porcentaje de mujeres y hombres............................................................................23
* E4 Cálculo de la edad de una persona.................................................................23
Conversión de radianes a grados centesimales y viceversa......................................23
* E5 Conversión de temperaturas de Grados Celsius a Fahrenheit y viceversa.....23
Área y volumen de una esfera.................................................................................23
Longitud y área de un círculo.................................................................................24
Solución de ecuaciones de segundo grado...............................................................24
Intercambio de valores de variables.........................................................................24
Multiplicación de polinomios..................................................................................25
Caída de cuerpos en el vacío...................................................................................25
Ley de gravitación universal....................................................................................25
Logaritmo de un número en cualquier base............................................................25
Trabajo conjunto.....................................................................................................25
4. Estructuras de control.............................................................................................27
Miscelánea...............................................................................................................27
Estructura de decisión IF........................................................................................41
Estructura de selección...........................................................................................50
Estructura de repetición WHILE............................................................................52
Estructura de repetición DO-WHILE.....................................................................71
Estructura de repetición FOR.................................................................................88
5. Estructuras Básicas de Datos................................................................................108
Arreglos unidimensionales.....................................................................................108
Arreglos bidimensionales.......................................................................................116
6. Funciones...............................................................................................................150
Ámbito de las variables.........................................................................................150
Miscelánea.............................................................................................................150
* E24 Histograma..................................................................................................154

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

Aritmética básica...................................................................................................154
Potenciación..........................................................................................................155
* E25 Dado sesgado...............................................................................................155
Aproximación de sinh-1..........................................................................................156
Función W de Lambert.........................................................................................157
Factorial de un número con función recursiva.......................................................157
Máximo común divisor y mínimo común múltiplo................................................158
* E26 Peso adecuado.............................................................................................158
* E27 Raíces de una función.................................................................................160
E28 El método de la bisección..............................................................................160
* E29 El método de Newton.................................................................................160
Ordenamiento de n números.................................................................................162
Búsqueda lineal.....................................................................................................162
E30 Búsqueda binaria o dicotómica......................................................................163
Juego de dados entre dos.......................................................................................163
* E31 Método de la potencia.................................................................................164
7. Manejo de Caracteres y Cadenas..........................................................................168
Miscelánea.............................................................................................................168
* E33 Datos personales.........................................................................................176
Estadísticas de texto.............................................................................................176
* E34 Analizador de tweets...................................................................................177
Eliminación de n-ésima palabra............................................................................178
Cifrado por sustitución..........................................................................................179
Cifrado por transposición......................................................................................180
* E35 Manejo de una cadena con información personal.......................................181
* E36 Línea de comandos......................................................................................182
* E37 Mantenimiento de datos de personas..........................................................184
8. Búsquedas..............................................................................................................187
9. Ordenamiento........................................................................................................190
Miscelánea.............................................................................................................190
* E39 Menú, ordenamiento y búsqueda de registros.............................................195
* E40 Calificaciones de estudiantes.......................................................................196
Ordenamientos en matriz......................................................................................198
* E41 Manejo de datos de personas......................................................................199
10. Archivos...............................................................................................................201
Miscelánea.............................................................................................................201
* E43 Metro Interstate Traffic Volume Data Set..................................................201

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

* E44 Formación de grupos de trabajo con archivos.............................................203


* E45 Concrete Compressive Strength Data Set...................................................204
11. Miscelánea de Ejercicios......................................................................................207
* E46 Combate de pokemones...............................................................................207
Solución de un sistema de ecuaciones por matrices..............................................209
Conversión de un número en base diez a sistema binario.....................................209
Conversión de un número en base binaria a sistema en base diez........................209
Cálculo de las tres alturas de un triángulo dadas las longitudes de sus lados......209
Valor futuro de una inversión................................................................................209
Cálculo del capital inicial......................................................................................209
Cálculo de la tasa de interés..................................................................................209
Cálculo del número de años...................................................................................209
Media, mediana y varianza de N datos.................................................................209
Transformación de números decimales a romanos.................................................209
Dígitos de un número............................................................................................211
* E47 Pirámide invertida......................................................................................211
* E48 Cubos e impares..........................................................................................211
* E49 Cantidad de dígitos fijo de números mostrados..........................................211
Algoritmo de Gauss y Método de eliminación de Gauss.......................................212
Métodos de Jacobi y de Gauss-Seidel....................................................................213
Dados.....................................................................................................................213
Búsquedas y ordenación........................................................................................213
Interpolación..........................................................................................................213
Integración numérica.............................................................................................213
Ecuaciones diferenciales ordinarias (EDO)...........................................................214
*E50 Resolución de EDOs con un método multipaso...........................................218
*E51 Tiempo de Respuesta Facebook...................................................................219
12. ¿Qué Hace el Algoritmo/Programa?....................................................................221
Lenguaje Java........................................................................................................225
Lenguaje C............................................................................................................232
13. Fórmulas y Relaciones.........................................................................................233
Interés....................................................................................................................233
Estadística.............................................................................................................235
Medidas de longitud..............................................................................................236
Unidades de capacidad..........................................................................................236
Unidades de capacidad de información.................................................................236
Tiempo..................................................................................................................236

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

Unidades de temperatura......................................................................................237
Círculo...................................................................................................................237
Esfera.....................................................................................................................237
Cuadrado...............................................................................................................237
Ángulos..................................................................................................................237
Ecuación de segundo grado...................................................................................237
Logaritmos.............................................................................................................238
14. Referencias...........................................................................................................239

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

1. Introducción

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 Mucha de la teoría básica necesaria para resolver los ejercicios de este documento se
la puede encontrar en la Guía de aprendizaje del MOOC de Fundamentos de Progra-
mación que fue desarrollada por el Departamento de Ciencias de la Computación de
33 la Universidad de Cuenca, parte 1 y parte 2.

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

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

36 2. Fundamentos

Qué es programar

1. * Indique qué es programar

39 2. La programación se puede definir como

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


programas de computador

42 b) la ejecución de programas de ordenador desde la línea de comandos

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


mandos

45 d) las anteriores respuestas no son correctas

3. Pregunta

Qué es un lenguaje de programación

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

a) Eiffel

b) C#

51 c) Fortran

d) DOS

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

54 a) 10

b) 13

c) 32

57 d) Las anteriores respuestas no son correctas

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

a) 32

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

60 b) 65

c) 97

d) 126

63 4. En un lenguaje débilmente tipado

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

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

d) Las anteriores respuestas no son correctas

69 5. El lenguaje ensamblador se sitúa

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

72 c) No hay un lenguaje ensamblador

d) Las anteriores respuestas no son correctas

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

75 a) Ada

b) C

c) Fortran

78 d) Java

7. Imperativo, declarativo y orientado a objetos son

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

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

c) Paradigmas de programación

d) Las anteriores respuestas no son correctas

84 8. Pregunta

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

Modelización de problemas del mundo real

Del problema real a su solución por computadora

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

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

Conceptos acerca de software

90 Variables y tipos de datos

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

a) Funciones de acceso a datos

93 b) Instrucciones de acceso a datos

c) Sentencias de control

d) Tipos de datos

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

a) La que almacena un valor entero

b) Una constante que varía su valor

99 c) A la que se le asigna un nombre

d) La que permite la entrada de datos

e) La que permite almacenar un valor capturado

102 Algoritmos

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

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

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

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-
108 cando qué es lo que hace.

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

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


ríbalos.

111 6. ¿Qué es un algoritmo?

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


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

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


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

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-
120 ción para un problema.

d) Las anteriores respuestas no son correctas.

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

123 a) Secuencia de pasos

b) Secuencia de instrucciones

c) Produce un resultado deseado

126 d) Es finito

e) No siempre se alcanza un resultado

Ejercicios desde cero

129 1. E1 Algoritmo para preparar un margarita

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

3. Algoritmo para construir una mesa

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

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

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

135 7. Algoritmo para calcular el IVA de una compra

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

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

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

10. Algoritmo para pasar de grados sexagesimales a radianes

11. Algoritmo para calcular el valor total a pagar por dos productos incluyendo el
141 IVA y un impuesto más del 1% (se impone al valor de los productos, antes de
calcular el IVA)

12. Algoritmo para calcular la distancia entre dos puntos dadas sus coordenadas
144 cartesianas

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

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

15. Sacar el promedio de las notas de 4 estudiantes

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

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

153 18. Algoritmo que calcule el valor de la tangente de los lados opuestos a los cate-
tos de un triángulo rectángulo dados los valores de la hipotenusa y uno de los
catetos

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

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

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

22. Algoritmo que indica si un triángulo es equilátero, isósceles o escaleno dadas


162 las longitudes de sus lados.

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

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

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

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

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

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

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

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

30. Algoritmo para pasar coordenadas polares a cartesianas.

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

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

Diagramas de flujo

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


177 hace el algoritmo del ejemplo).

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


problema

180 a) Verdadero
b) Falso
3.

Pseudocódigo

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


el algoritmo del ejemplo).

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

186 a) Verdadero

b) Falso

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

Prueba de escritorio

189 1. Con respecto a la prueba de escritorio se puede afirmar que (seleccione una o
más opciones según corresponda):

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

192 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


Programación

195 2. Pregunta

Codificación

1. En el contexto de los diferentes tipos de errores que existen al momento de co-


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

201 2. Pregunta

Documentación y su importancia

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


204 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
documentación, debe agregar al código un programa?

207 2. Pregunta

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

3. Programación Secuencial

Miscelánea

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


E S T U D I A N T E
N
213 I
V
E
216 R
S
I N G E N I E R Í A
219 D
A
D
222 2. * Mostrar la salida en pantalla del siguiente algoritmo
Proceso cambioVariable
Definir a, b, c, aux Como Entero;
225 a <- 5;
b <- 6;
c <- 7;
228 aux <- a;
b <- a;
c <- b;
231 Escribir a, “ ”, b, “ ”, c;
FinProceso
3. Se piden dos números y se presentan los resultados de la suma, resta, produc-
234 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.

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


237 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.
Mostrar el resultado de (x-y)(x+y).

240 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

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

de los números ingresados. Represente el algoritmo a través de un diagrama de


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


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

Una vez que haya elaborado su primer algoritmo para solucionar el problema,
249 pregúntese lo siguiente: ¿cuál es el número mínimo de variables que puede uti-
lizar para resolver el problema?

Una vez que resuelva el problema con el mínimo número de variables posible,
252 conteste si el orden de las instrucciones cambiaría el resultado (i.e., ya no re-
solviera el problema).

7. Se ha establecido que el número máximo de latidos de corazón por minuto que


255 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-
ner el número de latidos por minuto durante una sesión de ejercicio físico en
258 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-
sona como dato de entrada.

261 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-
pleado recibe el salario normal. Todas las horas trabajadas por encima de esas
264 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-
rio normal por hora que gana un empleado y el número de horas trabajadas
267 durante la semana. Mostrar el salario total semanal que gana el empleado.

Respaldo de información

Elaborar un algoritmo que permita calcular el número de CDs necesarios para hacer
270 una copia de seguridad de la información almacenada en un disco duro cuya capaci-
dad se conoce (es dada por el usuario). Considerar que el disco duro está lleno de in-
formación y su capacidad está expresada en GB. Cada CD que se utilizará para el
273 respaldo tiene una capacidad de 700 MB; un GB tiene 1024 MB. Represente el algo-

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

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

276 Cálculos espaciales básicos

La mayor parte de los análisis espaciales hacen uso de cálculos geométricos sencillos,
a partir de los cuales se construyen algoritmos más complejos. A continuación se
279 plantean ejercicios relacionados con cálculos básicos que constituyen los fundamentos
del análisis geométrico tanto en el plano como en el espacio. Para más detalles lea la
sección 10.3 Algunos cálculos espaciales básicos del libro de Olaya (2011).

282 Distancia euclidiana

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

(3.1)

Distancia de Manhattan

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


(vea la figura 6),

(3.2)

291 Desarrolle un algoritmo que calcule la distancia de Manhattan de dos puntos A(x 1,
y1) y B(x2, y2) dados.

* Métricas Lp

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

(3.3)

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

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

Distancia ortogonal

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


303 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
define la distancia entre A y D como la distancia mínima entre A y un punto M de
306 D.

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


de la forma A = (xA, yA).

309 (3.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


= 0, se tiene

312 (3.5)

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


del mismo punto a un plano.

315 Distancia de un segmento de recta a un punto

Dado un segmento de recta definido por los extremos A(x1, y1) y B(x2, y2), y un punto
C(x3, y3), la distancia del punto C al segmento AB se calcula como la distancia del
318 punto C hasta la intersección (D) de una recta que pasa por el punto C y es perpen-
dicular al segmento AB (vea la figura 2). El punto de intersección D tiene las coorde-
nadas

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

321 x = x1 + u(x2 – x1)

y = y1 + u(y2 – y1)

donde u se obtiene de

324 (3.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.


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

327 Cálculo de interés

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

Costo de llamada

Se requiere un programa para determinar el costo que tendrá realizar una llamada te-
333 lefónica con base en el tiempo que dura la llamada y en el costo por minuto. Repre-
sente la solución mediante un diagrama de flujo y pseudocódigo; además, verifique la
validez del algoritmo mediante una prueba de escritorio.

336 Cálculo de potencia

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

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

Figura 3: Circuito eléctrico.

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

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


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

(3.7)

345 Desarrolle un algoritmo que permita calcular el área, en cm², de un triángulo, dadas
las longitudes, en metros, de sus lados. Represente el algoritmo con un diagrama de
flujo y pseudocódigo; además, realice las pruebas de escritorio necesarias para verifi-
348 car el correcto funcionamiento del algoritmo.

Hexágono regular

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


351 cule el área del polígono.

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


gono regular inscrito en una circunferencia de un radio dado.

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

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


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

x y1 1

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

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

357 debiendo tomarse el valor absoluto del determinante.

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


de sus vértices.

360 Puntos colineales

Un corolario del teorema 12 de la línea recta (Charles Lehmann, 1994, chap. 3) men-
ciona: una condición necesaria y suficiente para que tres puntos diferentes de coorde-
363 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.

Movimiento rectilíneo uniforme

366 Proponga un algoritmo para calcular la distancia recorrida (m) por un móvil que tie-
ne velocidad constante (km/h) durante un tiempo t (s).

Ponderación de calificaciones

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

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


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

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


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

378 Sistema de ecuaciones lineales

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


incógnitas.

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

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

* E2 Vuelto o cambio de una compra

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

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

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

396 1. Se desea saber el tiempo total utilizado por el primer atleta en horas (at1ho-
ras), minutos (at1min) y segundos.

2. Se desea saber el tiempo total utilizado por el segundo atleta en horas (at2ho-
399 ras), minutos y segundos (at2seg).

Transformación de pies a metros

Dada una cantidad expresada en pies y otra en metros, determinar la suma pero con-
402 vertida a pulgadas, a yardas, a metros y a millas por separado.

Unidades de capacidad

Dos tanques llenos de agua tienen expresadas sus capacidades en litros y en yardas
405 cúbicas respectivamente. De la cantidad total de agua, el 75% se dedica al consumo
doméstico y el 25% se dedica al riego. Diseñe un programa que haga lo siguiente:

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

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


408 cúbicos.

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


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

411 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
414 ventas que realiza en el mes y el total que recibirá en el mes tomando en cuenta su
sueldo base y comisiones.

Cálculo de descuento

417 Una tienda ofrece un descuento sobre el total de la compra y un cliente desea saber
cuánto deberá pagar finalmente por su compra.

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

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

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

426 • 55% del promedio de sus tres calificaciones parciales (cada una de las tres cali-
ficaciones fueron dadas sobre 20 y las tres tienen la misma ponderación)

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

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

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


ción final está dada sobre 30.

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

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


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

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


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

Porcentaje de mujeres y hombres

441 Un maestro desea saber qué porcentaje de hombres y qué porcentaje de mujeres hay
en un grupo de estudiantes. Realice un programa que pida el número de estudiantes
mujeres, el número de estudiantes hombres y muestre el porcentaje de mujeres y el
444 porcentaje de hombres.

* E4 Cálculo de la edad de una persona

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

Conversión de radianes a grados centesimales y viceversa

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


453 viceversa

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

456 • Realice un programa que reciba una temperatura en grados fahrenheit y los
convierta a grados celsius.

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

459 Área y volumen de una esfera

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

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

462 Longitud y área de un círculo

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

Solución de ecuaciones de segundo grado

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


función. Vea la ecuación 13.12.

Intercambio de valores de variables

468 1. Pida al usuario ingresar dos números. El primer número se ingresará en la va-
riable var1 y el segundo número se ingresará en la variable var2. Diseñe un al-
goritmo que, al finalizar el proceso, haga que el valor de la variable var1 tenga
471 el valor de la variable var2 y viceversa. Por ejemplo, si se ingresa primero el
valor 4 y luego el valor 7, la asignación de las variables sería y
; al finalizar el algoritmo, la asignación de las variables sería
474 y .

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


d. Como resultado final se debe tener lo siguiente:

477 a) diagrama de flujo y prueba de escritorio

◦ en a queda el valor de b

◦ en b queda el valor de c

480 ◦ en c queda el valor de d

◦ en d queda el valor de a

b) pseudocódigo y prueba de escritorio

483 ◦ en a queda el valor de d

◦ en b queda el valor de c

◦ en c queda el valor de b

486 ◦ en d queda el valor de a

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


riables.

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

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

492 • var5 debe contener el valor de la variable var3

• var2 debe contener el valor de la variable var4

• var1 debe contener el valor de la variable var5

495 • var3 debe contener el valor de la variable var2

• var4 debe contener el valor de la variable var1

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


498 riables.

Multiplicación de polinomios

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

Caída de cuerpos en el vacío

Ley de gravitación universal

504 (3.8)

Logaritmo de un número en cualquier base

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


507 base. Vea la ecuación 13.13.

Trabajo conjunto

Considere primero los siguientes problemas de razonamiento:

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

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

513 2. Si una persona termina una obra en 3 horas, una segunda persona termina la
obra en 6 horas y una tercera persona termina la obra en 12 horas ¿cuánto se
demoran en terminar la misma obra si trabajan juntas?

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

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

519 4. Estructuras de control

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

522 Miscelánea

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


525 variables?

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

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

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


dora?

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

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

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

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

a) if

b) while

537 c) for

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

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?

540 a) if

b) for

c) while

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

a) if

546 b) for

c) while

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


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

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


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

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

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

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

a) un bucle (lazo) for

b) un bucle (lazo) if

570 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

573 12. if, else, for y while son

a) Funciones de acceso a datos

b) Sentencias de control

576 c) Tipos de datos

d) Las anteriores respuestas no son correctas

13. * Un bucle, ciclo o lazo es

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

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

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

585 d) Todas las anteriores respuestas son correctas

14. ¿Qué muestra el siguiente algoritmo?


Algoritmo misterioso
588 x <- 1
z <- 0
Mientras x <= 10 Hacer
591 y <- x * x
Escribir y
z <- z + y
594 x <- x + 1
FinMientras
Escribir z
597 FinAlgoritmo

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

15. * ¿Cuál de los siguientes algoritmos imprime en pantalla lo que está a conti-
nuación?
600 *
*****
**
603 *****
*
*****
606 **
*****
*
609 *****
a)
Proceso estrellas2
612 b1 <- 1;
b2 <- 0;
c1 <- 20;

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

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

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


Si b1 = 1 Entonces
Si b2 = 1 Entonces
639 Escribir "**";
b2 <- 0;
Sino
642 Escribir "*";
b2 <- 1;
FinSi
645 b1 <- 3;
Sino
Escribir "*****";
648 b1 <- 1;
FinSi
FinPara
651 FinProceso
c)
Proceso estrellas3
654 b1 <- 1;
b2 <- 0;
c1 <- 10;

657 Mientras c1 <= 10 Hacer


Si b1 = 1 Entonces
Si b2 = 1 Entonces
660 Escribir "**";
b2 <- 0;
Sino
663 Escribir "*";
b2 <- 1;
FinSi
666 b1 <- 3;
Sino
Escribir "*****";
669 b1 <- 1;
FinSi
c1 <- c1 + 1;
672 FinMientras
FinProceso
16. ¿Cuál es el resultado de ejecutar el siguiente algoritmo?
675 Algoritmo algortimo_misterioso

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

cont <- "*"


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

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


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

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

18. * ¿Qué muestra el siguiente algoritmo?


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

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

20. ¿Qué muestra el siguiente algoritmo?


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

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

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

732 FinAlgoritmo
a) 1 2 3 4 5

b) 1 1 2 3 4

735 c) 1 1 2 2 3

d) 1 2 2 4 5

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


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

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

Escribir " ";

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

768 Fin Para


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

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

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

a) For

b) Do-while

780 c) Repeat-until

d) If-then

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

a) Arreglo

786 b) Contador

c) Ciclo

d) Acumulador

789 e) Bucle

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

792 a) Arreglo

b) Array

c) Ciclo

795 d) Bandera

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

e) Contador

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

798 a) Array

b) Contador

c) Iteración

801 d) Bucle

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

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

804 b) While, for, if-else

c) While, do-while y for

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

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

a) Arreglo

810 b) Contador

c) Ciclo

d) Array

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

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


cualquier otro caso

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

825 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

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


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

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

864 Escribir ""


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

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

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


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

909 a) El algoritmo opcion_A

b) El algoritmo opcion_B

c) El algoritmo opcion_C

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

915 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

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

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

921 a) El algoritmo opcion_1

b) El algoritmo opcion_2

c) El algoritmo opcion_3

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

a) Escribir el pseudocódigo correspondiente

b) Realizar la prueba de escritorio

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

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

40. Pregunta

Estructura de decisión IF

930 Miscelánea

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


https://goo.gl/SRuAY2

933 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-
936 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:


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

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

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


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

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

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


954 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
957 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.

960 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


963 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
966 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.

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

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

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


crita una persona.

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

Aprobación de curso

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

E6 Índice de masa corporal

993 Es recomendable estar a menudo pendiente del índice de masa corporal para saber si
se mantiene un peso saludable. El índice de masa corporal (IMC) se calcula con el
peso (en kilogramos) y la talla (en metros) de una persona mediante la fórmula

996 (4.1)

El IMC indica una de las siguientes categorías:

• Bajo peso: IMC < 18.5

999 • Normal: 18.5 ≤ IMC < 25

• Sobre peso: 25 ≤ IMC < 30

• Obesidad: IMC ≥ 30

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

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

Nota alfabética

1005 El programa solicita una calificación al usuario que está en el rango [0, 20] y la trans-
forma en nota alfabética según la siguiente tabla:

Nota numérica Nota alfabética

[0; 10,5) Insuficiente

[10,5; 11) Suficiente

[11; 15) Bien

[15; 18) Notable

[18; 20] Sobresaliente

Día de la semana

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

Estación del año

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

Divisibilidad de dos números

1014 Dados dos números n1 y n2:

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

• Realizar un programa que verifique que el número n1 sea mayor o igual al nú-
1017 mero n2, si es así el programa debe indicar si el número n2 es divisor del nú-
mero n1, caso contrario el programa debe decir “¡ERROR! El primer número
ingresado debe ser mayor o igual al segundo.”

1020 Aritmética básica con 3 números

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


do de la suma del primero y el segundo.

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

1023 • Escriba un algoritmo que dados tres números indique si el tercero es el resulta-
do de la resta entre los dos primeros: 1) el primero menos el segundo y 2) el
segundo menos el primero.

1026 • Escriba un algoritmo que dados tres números indique si el tercero es el resulta-
do de la multiplicación del primero por el segundo.

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


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

* Incentivo por producción

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


1035 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
el diagrama de flujo, el pseudocódigo y la prueba de escritorio.

1038 Posición del menor de n números

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


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

2. Determine el menor valor de 3 números, indicando además en qué orden fue


1044 ingresado (i.e., si fue el primero en ser ingresado, si fue el segundo o si fue el
tercero). En caso de que el menor valor se repita, el algoritmo debería actuar
de la siguiente manera. Si los números ingresados fueran el 14, 19, y 14, el re-
1047 sultado debe ser “El menor valor ingresado fue 14 y corresponde al 3° número
ingresado”.

3. Determine el menor valor de 5 números, indicando además en qué orden fue


1050 ingresado. En caso de que el menor valor se repita, el algoritmo debería actuar
de la siguiente manera. Si los números ingresados fueran: 14, 19, 14, 16, 19. El
resultado debe ser: “El menor valor ingresado fue 14 y corresponde al 3° nú-
1053 mero ingresado”.

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

Puntaje en olimpiada

En una olimpiada de tiro al blanco se llega a un acuerdo entre los participantes para
1056 que el puntaje obtenido sea calculado en base al puntaje original (0 a 10) alcanzado
en el tiro efectuado, multiplicado por un factor según la siguiente tabla:

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-
1059 rresponde.

Pago en estacionamiento

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


1062 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.
1065 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-
1068 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
1071 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
1074 de error.

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

Promoción en una papelería

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

• Compra menos que 12, ningún obsequio.

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

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

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

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

Saldos y pagos mínimos

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

Un banco desea calcular para uno de sus clientes el saldo actual (saldoAct), el pago
mínimo (pagoMin) y el pago para no generar intereses (pagoSinInteres). Los datos
1092 que se conocen son: saldo anterior (saldoAnt) del cliente, monto de las compras que
realizó y el pago que depositó en el corte (abono) anterior (corteAnt). Para calcular
el pago mínimo se debe considerar 15% del saldo, y para no generar intereses corres-
1095 ponde 85% del saldo. Considere que este saldo (actual) debe incluir 12% de los inte-
reses causados por no realizar el pago mínimo para no generar intereses en el corte
(abono) anterior y $200 por multa si abonó (en el corte anterior) menos del pago mí-
1098 nimo. Realice el algoritmo correspondiente e impleméntelo.

Ordenamiento de números

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

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


rio.

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

1104 Restricción de ingreso

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

Vocales o consonantes

1107 El usuario puede ingresar un carácter y se debe indicar si el carácter es vocal, conso-
nante, número u otro.

Conversión de unidades de masa

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


menú tiene las siguientes opciones:

1. Hectogramos

1113 2. Gramos

3. Decigramos

4. Centigramos

1116 5. Miligramos

Mayor y menor de 10 números

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


1119 meros ingresados.

* Pares o nones

Implemente el juego de manos pares o nones con la diferencia de que se podría mos-
1122 trar uno hasta todos los dedos de la mano (1-5). Uno de los jugadores es el computa-
dor y el otro es el usuario del programa. El flujo de ejecución del programa es:

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


1125 pantalla.
2. El computador hace su elección del 1 al 5 (“mostrar” uno a cinco dedos) y no
lo muestra en pantalla.
1128 3. El usuario hace su elección del 1 al 5 y lo ingresa mediante el teclado.

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

4. El computador muestra en pantalla la suma de las dos elecciones e indica


quién ganó. Si la suma es par, gana el que haya quedado con la opción pares;
1131 si la suma es impar, gana el que haya quedado con la opción nones.

Notas:

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


1134 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-
tar las librerías stdlib.h y time.h.

1137 En el lenguaje de programación Python podría utilizar la librería random para gene-
rar valores enteros aleatorios mediante la función randint. Por ejemplo, si se quiere
generar valores aleatorios en el rango [-2, 5], se usaría import random; print(random.-
1140 randint(-2, 5))

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

Estructura de selección

Miscelánea

1.

2.

1143 Meses, de números a letras

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
1146 mensaje “¡ERROR! No existe tal mes.”. En caso contrario, si el número ingresado fue
1, se imprimirá en pantalla “Enero”, si el número ingresado fue 2, se imprimirá “Fe-
brero”, etc.

1149 Signo zodiacal

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

• Acuario: enero 21 - febrero 20


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

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

Total de ventas

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

• ecu, sma, mas: descuento 5%.


• ecu, sma, fem: descuento 4%.
1173 • ecu, med, mas: descuento 7%.
• ecu, med, fem: descuento 9%.
• ecu, lar, mas: descuento 10%.
1176 • ecu, lar, fem: descuento 12%.
• ext, sma, mas: descuento 4%.
• ext, sma, fem: descuento 5%.
1179 • ext, med, mas: descuento 9%.
• ext, med, fem: descuento 7%.
• ext, lar, mas: descuento 12%.
1182 • ext, lar, fem: descuento 10%.
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
1185 todas las compras.

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

Estructura de repetición WHILE

Miscelánea

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


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

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


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

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

El primer valor es un número aleatorio entre 2 y 10, inclusive. El segundo va-


lor, y los otros que le siguen, son iguales a la suma de los divisores del valor
1212 anterior en la serie (se incluye el uno y el mismo número). Se debe especificar
el número N de términos de la serie.

Por ejemplo, suponga que se genera el número 4 de manera aleatoria para que
1215 sea el primer valor de la serie. Entonces la serie se forma de la siguiente mane-
ra: 4, 7, 8, 15, …. El valor 7 se obtiene de la suma de los divisores del 4: 1 + 2
+ 4 = 7.

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

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


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

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


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

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

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

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

N: 1 M: 6 N: 1 M: 2
6 6 6 6 6 6 6 6
1236 5. Elabore un algoritmo que calcule independientemente la suma de los pares y
los impares de los números entre 1 y 1000 (inclusivo).

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


1239 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-
tas se han realizado al contado, cuántas al crédito en 6, cuantas al crédito en
1242 12, cuántas al crédito en 18, cuántas al crédito en 24 mensualidades.

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


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

8. Una empresa tiene N trabajadores, a cada uno de ellos se le paga un sueldo se-
gún las horas trabajadas a cierta tarifa por hora. Además a cada trabajador
1248 cuyo sueldo superó los $600 se le descuenta 10% por concepto de impuesto a
la renta. Se desea saber cuántos trabajadores gana más de $600, cuántos ga-

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

nan hasta $600 y cuánto dinero se tiene que pagar al estado por concepto de
1251 impuestos

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


precio de la entrada depende de la tribuna: tribuna norte y sur cuesta $25, tri-
1254 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
asisten a cada tribuna, la cantidad total de personas (asistencia) y el monto
1257 total recaudado por la venta de todas las entradas (recaudación).

10. Pregunta

Ingreso de 5 números

1260 Escriba un programa que lea exactamente cinco números.

Números de n a m

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


1263 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).
1266 5. Hacer un programa que imprima los números enteros de m a n (n<m).

Números pares del 1 al 100

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

Acumulador del 1 al 100

Hacer un programa que imprima la suma de los 100 primeros números naturales. Le
1272 podría resultar de utilidad revisar la sección Acumuladores del documento https://
www.scribd.com/doc/307441670/Fundamentos-de-programacion-estructuras-de-con-
trol

1275 Contador de números impares

Hacer un programa que imprima en pantalla los números impares del 1 hasta el 10 y
que imprima en pantalla la cantidad de números impares. Le podría resultar de utili-

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

1278 zar revisar la sección contadores del documento https://www.scribd.com/doc/


307441670/Fundamentos-de-programacion-estructuras-de-control.

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

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

1290 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


1293 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-
1296 primir el mayor y el menor de los n números ingresados.
4. Ingresar números positivos e imprimir el número mayor y el número menor. El
ingreso de los números positivos termina cuando se ingresa un número negati-
1299 vo o el cero.

Subsidio familiar

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


1302 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.
1305 • Por cada hijo en edad escolar reciben $10 adicionales. Se considera la edad es-
colar entre 6 y 18 años.
• Si la madre de familia fuera viuda, la familia recibe $20 adicionales.

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

1308 Determinar el monto mensual que recibirá una familia de acuerdo a su realidad fami-
liar.

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


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

* Factura

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

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


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


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

Repetición de series

1326 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
1329 1 2 3 4 5 6
1 2 3 4 5 6
1 2 3 4 5 6
1332 2. Pedir el número de veces que el usuario quiere repetir la serie de números del
1 al 6. Repetir las n veces la serie.
3. Pedir el número de veces (n) que el usuario quiere repetir una serie. Pedir el
1335 límite inferior (m) y superior (w) de la serie. Repetir las n veces indicadas la
serie de números desde m a w. Asuma que m < w.

4. Pedir el número de veces que el usuario quiere repetir una serie. Pedir el nú-
1338 mero inicial (m) y final (w) de la serie. Repetir las n veces indicadas la serie de
números desde m a w. No asuma que siempre m < w. Por ejemplo, si se indica

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

que debe repetir 3 veces la serie desde m=6 hasta w=2, el programa debe
1341 mostrar
6 5 4 3 2
6 5 4 3 2
1344 6 5 4 3 2
5. Pedir el número de veces que el usuario quiere repetir una serie (n). Pedir el
número inicial (m) y final (w) de la serie (m puede o no ser mayor que w). Pe-
1347 dir el incremento (o decremento, según sea el caso) que debe haber en la serie
(k). Repetir las n veces indicadas la serie de números desde m a w, con incre-
mentos (decrementos) k. A continuación se muestra ejemplos de ejecución del
1350 algoritmo:
m: 1
w: 10
1353 n: 3
k: 2
1 3 5 7 9
1356 1 3 5 7 9
1 3 5 7 9

m: 10
1359 w: 1
n: 4
k: 3
1362 10 7 4 1
10 7 4 1
10 7 4 1
1365 10 7 4 1
6. asdf

Encuesta a familias

1368 Realice un programa que permita hacer la siguiente encuesta:

• Tienen televisión o no tienen. Contar los que tienen y los que no tienen.
• Es en color o no es en color. Contarlos.
1371 • Piensan compararlos o no. Contarlos.
• Hallar el porcentaje de cada uno.

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

Conteo de votos

1374 Leer 550.000 votos otorgados a 3 candidatos (voto={1, 2, 3}) a alcalde de Cuenca e
imprimir el número del candidato y su cantidad de votos.

* Contador de mayores de edad

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

1380 Interés compuesto

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


rés anual. ¿Cuál será la cantidad de dinero que esta persona tendrá al cabo de
1383 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 234.

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

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


cuenta de ahorros. La cuenta percibe un interés fijo durante un año de 10%
1389 anual. Realice un algoritmo para determinar el total de la inversión final de
cada año en los próximos N años.

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

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

1392 Promedio de edad en escuela

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

Trabajo conjunto

1398 Considere primero los siguientes problemas de razonamiento:

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

2. Si una persona termina una obra en 3 horas, una segunda persona termina la
obra en 6 horas y una tercera persona termina la obra en 12 horas ¿cuánto se
1404 demoran en terminar la misma obra si trabajan juntas?

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

Frases

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

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

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

1419 Con

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

1
2 3
1422 4 5 6
7 8 9 10

Con
1425 1
2 3
4 5 6
1428 7 8 9 10
11 12 13

Número de días entre dos fechas

1431 Elabore un algoritmo que pida dos fechas (día, mes y año) y muestre el número de
días que hay de diferencia entre estas dos fechas. Considerar los meses que tienen 30
días, los meses que tienen 31 días y suponga que febrero tiene 28 días siempre.

1434 Simple random walks

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


yectoria que resulta de hacer sucesivos pasos aleatorios. Por ejemplo, la ruta trazada
1437 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.

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


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

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

Factorial de un número

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

1446 …

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

Por ejemplo, el factorial de 5 es

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

1449 Suma y promedio de factoriales

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


el teclado del computador dos números enteros positivos, encontrar la suma y el pro-
1452 medio de todos los factoriales de los números pares comprendidos entre esos dos nú-
meros ingresados. Mostrar la suma y el promedio.

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


1455 lizar la prueba de escritorio.

Ejemplo:

A=2

1458 B=8

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

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


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

Series y sumatorias

• Sume los primeros 100 números de .

1464 • * 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
para realizar la potencia y el factorial.

1467 Puede comprobar que su algoritmo funcione usando los siguientes ejemplos.
Con n=5 y m=2 el resultado es 713.66; con n=7 y m=3 el resultado es
482443.625; con n=9 y m=4 el resultado es 815457334.7.

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

1470 • * Escriba un programa que calcule el valor del coseno de un ángulo 𝑥 usando
la suma de la serie infinita

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


1473 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
usuario el resultado obtenido con la serie del coseno y con la función del
1476 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
viene incluida en el módulo math (import math; print(math.cos(0.5))).

1479 *E7 Índice de masa corporal

Antes de desarrollar este ejercicio revise el ejercicio E6 de la página 43.

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


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

1491 Además, genere un gráfico que muestre el peso en kilogramos (eje horizontal) vs el
IMC (eje vertical). La barra que indica el peso debe ser “dibujado” utilizando tantos
asteriscos como el peso indique (2 puntos). Para esta parte, redondee el peso a cero
1494 decimales para saber cuántos asteriscos imprimir. El título del “gráfico” debe ser
“Peso adecuado para una persona de X metros”, donde X hace referencia a la talla
ingresada por el usuario (1 punto). Ejemplos de ejecución del algoritmo que debe
1497 implementar se muestran a continuación para que quede claro lo pedido (lo que está
en negrita son valores ingresados mediante el teclado).
Talla [m]: 0.71
1500 ¡ERROR! La talla debe estar en el intervalo [0.72, 2.51].

Talla [m]: 2.52

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

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

1503 Talla [m]: 1.45

IMC Peso [kg] Peso [lb]


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

Peso adecuado para una persona de 1.45 metros


IMC
1521 18.5 ***************************************
19.0 ****************************************
19.5 *****************************************
1524 20.0 ******************************************
20.5 *******************************************
21.0 ********************************************
1527 21.5 *********************************************
22.0 **********************************************
22.5 ***********************************************
1530 23.0 ************************************************
23.5 *************************************************
24.0 **************************************************
1533 24.5 ****************************************************
25.0 *****************************************************
Peso [kg]

1536 Talla [m]: 1.7

IMC Peso [kg] Peso [lb]


18.5 53.46 117.87

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

1539 19.0 54.91 121.06


19.5 56.35 124.24
20.0 57.8 127.43
1542 20.5 59.24 130.61
21.0 60.69 133.8
21.5 62.13 136.98
1545 22.0 63.58 140.17
22.5 65.02 143.36
23.0 66.47 146.54
1548 23.5 67.91 149.73
24.0 69.36 152.91
24.5 70.8 156.1
1551 25.0 72.25 159.28

Peso adecuado para una persona de 1.7 metros


IMC
1554 18.5 *****************************************************
19.0 *******************************************************
19.5 ********************************************************
1557 20.0 **********************************************************
20.5 ***********************************************************
21.0 *************************************************************
1560 21.5 **************************************************************
22.0 ****************************************************************
22.5 *****************************************************************
1563 23.0 ******************************************************************
23.5 ********************************************************************
24.0 *********************************************************************
1566 24.5 ***********************************************************************
25.0 ************************************************************************
Peso [kg]

1569 Combinatoria

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


junto con n elementos es:
1572 (4.2)

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


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

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

* Dibujo de cuadrado

1578 Desarrolle un algoritmo que pida al usuario el tamaño del lado de un cuadrado y que
muestre un cuadrado hueco de ese tamaño, compuesto de asteriscos y espacios en
blanco. Su algoritmo debe funcionar con cuadrados que tengan lados de todas las
1581 longitudes entre 1 y 20 (validar). Por ejemplo, si su programa lee un tamaño de 5,
debe imprimir
*****
1584 * *
* *
* *
1587 *****

* Dibujo de cuadrado y rombo

Dado un valor N, muestre un cuadrado de lado 2N con un rombo en el centro. Por


1590 ejemplo
Ingrese N: 5 Ingrese N: 6 Ingrese N: 3
********** ************ ******
**** **** ***** ***** ** **
*** *** **** **** * *
** ** *** *** * *
* * ** ** ** **
* * * * ******
** ** * *
*** *** ** **
**** **** *** ***
********** **** ****
***** *****
************

* E8 Onda cuadrada

Información de onda cuadrada tomada de Wikipedia.

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

1596 1. Considere la siguiente onda cuadrada.

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

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


datos que deben especificarse son:

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


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

1602 Escriba un programa que genere la onda mostrada en la figura anterior (igual
al del primer punto pero se presenta de forma vertical). Los datos que deben
especificarse son:

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


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

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

1608 * Onda triangular

Dados tres valores por parte del usuario, li, ls y ciclos, “dibujar” una onda trian-
gular según se muestra en los ejemplos de abajo:

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

li: -9 li: 0 li: 10 li: 0


ls: -1 ls: 5 ls: 11 ls: 1
ciclos: 2 ciclos: 1 ciclos: 3 ciclos: 4
-9 0 10 0
-8 1 11 1
-7 2 10 0
-6 3 11 1
-5 4 10 0
-4 5 11 1
-3 4 10 0
-2 3 11 1
-1 2 10 0
-2 11 1
-3 10 0
-4 11 1
-5 10 0
-6 11 1
-7 10 0
-8 11 1
-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

1611 * Onda de sierra

Dados dos valores por parte del usuario, li ≥ 0 y ciclos, “dibujar” una onda de
sierra según se muestra en los ejemplos de abajo. Dependiendo del número de dígitos
1614 del último número impreso (el de abajo), se debe agregar dígitos ceros en la parte iz-

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

quierda de los primeros números, con esto, todos los números impresos deben tener la
misma cantidad de dígitos.
li = 1 li = 98
ciclos = 2 ciclos = 3

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
20 117
21 123 122 121 120 119 118
124
125
126
127
128

1617 Fórmula del binomio

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


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

1620 (4.3)

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

1623 Triángulo de Pascal

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

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


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

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

(4.4)

1629 para todo entero positivo n y todo entero positivo k entre 0 y n (la fórmula para cal-
cular combinaciones está en la ecuación 4.2), entonces los valores de la combinatoria
son los coeficientes del desarrollo del binomio.

1632 Su construcción es de la siguiente manera:

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

2. se escriben una serie de números en las casillas situadas en sentido diagonal


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

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


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

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

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


de f. Represente el algoritmo con un diagrama de flujo y pseudocódigo; además, reali-

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

1644 ce las pruebas de escritorio necesarias para verificar el correcto funcionamiento del al-
goritmo. Finalmente, implemente el algoritmo.

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

Estructura de repetición DO-WHILE

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

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

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ú-
1656 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-
1659 tivo (validar).

5. El promedio ponderado se calcula en dos pasos:

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


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


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

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

1671 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
1674 6. * Realice la prueba de escritorio del siguiente pseudocódigo e indique cuál es
la salida en pantalla del mismo.
Algoritmo misterioso
1677 Definir c1, c2 Como Entero;
Para i <- 8 Hasta 0 Con Paso -2 Hacer
c1 <- -1;
1680 Hacer
Escribir Sin Saltar '*';
c1 <- c1 + 1;
1683 Mientras Que c1 < i
c1 <- 8 - i;
c2 <- 0;
1686 Mientras c2 < c1 Hacer
Escribir Sin Saltar '0';
c2 <- c2 + 1;
1689 Fin Mientras
Escribir ' ';
Fin Para
1692 FinAlgoritmo
7. Indique cuál es el resultado de la ejecución del siguiente algoritmo:
Algoritmo misterioso
1695 fila = 5;

Mientras fila >= 1 Hacer


columna = 1;

1698 Mientras columna <= 10 Hacer

Si (fila Mod 2) = 0 Entonces


Escribir Sin Saltar “<”;

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

1701 Sino
Escribir Sin Saltar “>”;
FinSi

1704 columna = columna + 1;


FinMientras

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

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


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

rt <- (mr+Mr1)/2;

Escribir "Ingrese precisión:";


1722 Leer precision;

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


Si rt*rt < num Entonces
1725 mr <- rt;
rt <- (rt + Mr1)/2;
FinSi
1728 Si rt*rt > num Entonces
Mr1 <- rt;
rt <- (rt + mr)/2;
1731 FinSi
FinMientras
Escribir "El resultado de ", num, " es: ", rt;
1734 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.
1737 #include <stdio.h>
int main(int argc, char **argv)
{
1740 int i=0;
do {
--i;
1743 printf("%d", i);
i++;
}while(i >= 0);
1746 return 0;
}
¿Cuántas veces el bucle incluido en el código fuente se ejecutará?

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

1755 Números de n a m

Para los siguientes ejercicios NO utilice FOR, utilice WHILE.

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


1758 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).
1761 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-
1764 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-
1767 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
1770 que imprima en pantalla la cantidad de números pares. Utilice WHILE para hacer las
iteraciones.

Codificación de caracteres

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

Ingreso de binarios

Hacer un algoritmo que sólo nos permita introducir 0 o 1. Si se ingresa un número di-
1788 ferente, el programa termina.

Ingreso de números mientras sean positivos

Realizar un programa que lea números. Mientras el número ingresado sea positivo, el
1791 programa sigue leyendo números desde el teclado. El momento que ingresa un núme-
ro igual o menor a cero, el programa termina.

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

Conteo de frases

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

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

1797 Dado el radio (r) de un círculo, calcular la longitud (l) y el área (a). Dado que el va-
lor del radio no debe ser negativo (sí puede ser igual a cero), valide el ingreso de di -
cho valor.

1800 Cantidad de números ingresados

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

1803 Cuadrado de números menores a n

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.

1806 Contador de pares e impares

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

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


1812 leer números cuando se ingresa un número negativo o menor a cero. Antes de termi-
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
1815 de seis miembros.

*E9 Números con vocales

Imprima los números del 00000 al 99999 con la particularidad de que cada vez que
1818 debiera imprimirse el 1 (en cualquiera de los dígitos) se sustituya con A, el 3 con E,
el 5 con I, el 7 con O y el 9 con U, i.e., 00000, 0000A, 00002, … , UUUUO, UUUU8,

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

UUUUU. No utilice más de una estructura de control FOR, ni más de dos estructu-
1821 ras de control WHILE, ni más de dos estructuras de control REPEAT.

*E10 Operador potencia

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

Bases y exponentes

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


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

1830 2. *E11 Escriba un programa que pida al usuario ingresar un número entero (N)
e imprima todos los pares de número enteros, raíz (r) y potencia (p), de mane-
ra tal que 0 ≤ p ≤ N, r ∈ (-N, N) y rp = N. Si no existe ningún par de en-
1833 teros, r y p, que cumplan lo pedido, se debe imprimir un mensaje adecuado
debido a tal causa. Para calcular la potencia debe realizar el código fuente
para tal efecto, i.e., no debe utilizar ninguna función ni otro operador como
1836 **. A continuación se muestra, como ejemplo, algunas ejecuciones del progra-
ma:
Bases y Exponentes Bases y Exponentes Bases y Exponentes Bases y Exponentes
------------------ ------------------ ------------------ ------------------
Ingrese N: 51 Ingrese N: 1 Ingrese N: 81 Ingrese N: 64
Ningún par cumple. 0 ^ 0 = 1 -9 ^ 2 = 81 -8 ^ 2 = 64
9 ^ 2 = 81 8 ^ 2 = 64
-3 ^ 4 = 81 4 ^ 3 = 64
3 ^ 4 = 81 -2 ^ 6 = 64
2 ^ 6 = 64

1 Tomado del libro de Guttag (2016).

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

Factores de un número entero

1839 *E12 Factorial

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


). No se debe usar ninguna función predeterminada de
1842 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-
grese un número entero positivo o el cero, avisa del error y vuelve a pedir el número.

1845 *E13 Números perfectos

Un número perfecto es un entero positivo, que es igual a la suma de todos los enteros
positivos (excluido él mismo) que son divisores del número. El primer número perfec-
1848 to es 6, ya que los divisores de 6 son 1, 2, 3 y 1 + 2 + 3 = 6. Elabore un algoritmo
que lea un número entero positivo n (validar que se positivo; suponga que el número
ingresado siempre es entero) y muestre en pantalla si ese número es o no perfecto.
1851 Sólo si es perfecto, deberá sacar la suma del factorial de cada uno de los números que
son divisores (excluido él mismo).

Números primos

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

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


1863 programa sigue pidiendo números mientras no sean primos.

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

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


1866 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

Número separado:
1869 2 unidades
3 decenas
4 centenas
1872 5 miles

Valor relativo de un número

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


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

1878 5 × 10^3 = 5000


4 × 10^2 = 400
3 × 10^1 = 30
1881 2 × 10^0 = 2
----
5432

1884 Cálculo de comisiones

Ordenamientos

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


1887 meros.

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


meros.

1890 Juego: adivina el número

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

1 http://pseint.sourceforge.net

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

Cara o cruz

1896 Simular el lanzamiento de una moneda al aire e imprimir si ha salido cara o cruz. El
momento que adivina, termina el algoritmo.

Análisis de frecuencias en lanzamientos de un dado

1899 Utilice una función para generar números aleatorios enteros en el rango [1, 6] para si-
mular el resultado del lanzamiento de un dado (e.g., en PseInt, Azar()). Realice “lan-
zamientos” hasta que tres veces seguidas salga el mismo número. Una vez que se ter-
1902 minen los lanzamientos, muestre una tabla de frecuencias que indique la cantidad de
veces que salieron los números 1, 2, … y 6. Finalmente, haga un gráfico de barras ho-
rizontales con esos datos. Por ejemplo, suponga que al azar salieron los siguientes nú-
1905 meros: 2, 4, 1, 6, 6, 2, 1, 5, 4, 1, 6, 5, 4, 4, 2, 5, 1, 3, 3, 3. El resultado en pantalla de-
bería ser:
Tabla de frecuencias
1908 1 4
2 3
3 3
1911 4 4
5 3
6 3
1914 Gráfico de barras
1 ****
2 ***
1917 3 ***
4 ****
5 ***
1920 6 ***

Series y sumatorias

1. Hallar la sumatoria de la serie

1923 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


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

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

1926 1. Indicar cuál es el valor de la siguiente sumatoria, sumando los términos hasta
que el último término sumado sea menor a 0.0001.

Número de cifras de un número


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

Reloj de 24 horas

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

1938 *E14 Progresión geométrica

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


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

*E15 Números de la serie Fibonacci

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


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

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

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

*E16 Aproximación de π

1956 Dado que es la suma de la serie

, (4.5)

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


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

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

(4.6)

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

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

(4.7)

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

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

1971 *E17 Aproximación del arco seno

Para n→∞ (en la práctica un número suficientemente alto) el arco seno de x se pue-
de calcular con la siguiente serie de Taylor:

1974 Realizar lo siguiente:

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


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

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

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


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

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

1983 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


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

*E18 Dibujo de triángulos

• Escriba un programa que lea dos enteros: el primero debe ser impar (validar)
1989 y el segundo puede ser par o impar. La salida debe ser un triángulo dibujado
con el segundo número dado y de anchura máxima dada por primer entero leí-
do. Se debe presentar la multiplicación de los números de cada fila del triángu-
1992 lo. Dos ejemplos: si el primer entero es 7 y 9 y el segundo entero es 1 y 2, los
triángulos deben ser:
Angel Vázquez-Patiño Universidad de Cuenca

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


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

1 1 2 2
111 1 222 8
1998 11111 1 22222 32
1111111 1 2222222 128
222222222 512

2001 • Escriba un programa que lea dos enteros (mayores a cero, validar): el primero
de ellos necesariamente debe ser impar (validar) mientras que el segundo pue-
de ser par o impar. La salida debe ser un triángulo dibujado con el segundo
2004 número dado y de anchura máxima dada por primer entero leído. Se debe pre-
sentar la suma de los números de cada fila del triángulo. Dos ejemplos: si el
primer entero es 7 y 9 y el segundo entero es 1 y 2, los triángulos deben ser:
2007 Primer número : 7 Primer número: 9
Segundo número: 1 Segundo número: 2

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

Menú

• Introducir dos números por teclado y mediante un menú, calcule su suma, su


2016 resta, su multiplicación o su división; se sale del programa luego de seleccionar
la opción salir del menú.

• Hacer un programa que permita introducir un número por teclado y sobre él


2019 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
sale del programa luego de seleccionar la opción salir del menú.

2022 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

No se debe usar la función potencia, ni ninguna función que calcule el factorial (debe
2025 hacer el algoritmo para calcular la potencia y para calcular el factorial).

Número en cualquier base

Reciba dos números enteros, el primero representa un número y el segundo represen-


2028 ta la base de numeración. Proponga un algoritmo para retornar el número expresado
en dicha base de numeración.

Menú: revisión de número

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


con las siguientes opciones:

1. Ingresar un Número: pide un número positivo mayor a cero; si no cumple esta


2034 condición, debe mostrar el mensaje “¡El número debe ser positivo mayor a
cero!” y vuelve a pedir un número

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


2037 par o impar, si es primo o no es primo

3. Terminar el Algoritmo

Menú: permutaciones, variaciones y combinaciones

2040 Presente el siguiente menú en pantalla


-----------------------------
Combinatoria y probabilidades
2043 -----------------------------
1. Permutaciones
2. Variaciones
2046 3. Combinaciones
4. Salir

Opción [1-4]: _
2049 Cuando el usuario ingrese una opción fuera del intervalo [1, 4] imprima el mensaje
“¡Error! Debe ingresar una opción válida (número del 1 al 4)”. Cuando el usuario in-
dica la opción cuatro, el programa termina y antes imprime el mensaje “Saliendo...”.
2052 Si el usuario indica la opción 1 (Permutaciones) se debe presentar el submenú

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

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

Opción [1-4]: _
2061 Cuando el usuario ingrese una opción incorrecta, presente algún mensaje que indique
el error. Si el usuario escoge la opción cuatro, se vuelve al menú principal. Cuando el
usuario escoge una de las opciones del uno al tres, se piden los datos necesarios, se
2064 realizan las operaciones necesarias y se presentan los resultados; luego de presentar
los resultados se vuelve al submenú Permutaciones. Cuando se escoja una opción del
uno al tres indique con texto cuándo se utiliza esa operación (sin repetición, con re-
2067 petición, etc) y si es necesario ponga un ejemplo de uso.

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


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

2076 Opción [1-3]: _


Cuando el usuario ingrese una opción incorrecta, presente algún mensaje que indique
el error. Si el usuario escoge la opción tres, se vuelve al menú principal. Cuando el
2079 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
los resultados se vuelve al submenú Variaciones. Cuando se escoja la opción uno o
2082 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.

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


2085 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

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

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

Estructura de repetición FOR

Miscelánea

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


cutar el siguiente algoritmo:
Algoritmo misterioso
2094 Definir suma, i, j Como Entero;
Para i <- 1 Hasta 4 Con Paso 1 Hacer
Para j <- 3 Hasta 0 Con Paso -1 Hacer
2097 suma <- i * (10^i) + j;
Escribir Sin Saltar suma, " ";
Fin Para
2100 Escribir " ";
Fin Para
FinAlgoritmo
2103 2. *E19 Haga la prueba de escritorio e indique cuál es el resultado en pantalla de
ejecutar el siguiente algoritmo:
Algoritmo misterioso
2106 n = 7;
Para i = 0 hasta n Con Paso 1
Para j = n-i hasta 1 Con Paso -1
2109 Mostrar Sin Saltar "#";
FinPara
Mostrar "";
2112 FinPara
FinAlgoritmo
3. Desarrolle un algoritmo que lea N valores de números positivos y que imprima
2115 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
lea el valor cero y que imprima la suma de aquellos que son negativos. Siem-
2118 pre el usuario ingresa al menos un valor diferente a cero.

5. Desarrolle un algoritmo que pregunte una contraseña, el usuario sólo tiene de-
recho a 3 intentos. Cuando el usuario escriba la contraseña correcta se impri-
2121 mirá "¡Enhorabuena!" y terminará el algoritmo. En caso de no escribir la
contraseña correcta se imprimirá “Lo siento, contraseña equivocada”. Si se

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

cumplen los 3 intentos y el usuario no escribe la contraseña correcta se impri-


2124 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


control, cuántos tienen sello municipal de cada color (amarillo, rosado, rojo,
2127 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
Desarrolle un algoritmo que permita ingresar las placas de automóviles. Se ter-
2130 mina de registrar autos cuando se ingresa una placa xxx. Todos los días se
presenta al menos un automóvil a revisión.

7. N miembros de un club contra la obesidad desean saber cuánto han bajado o


2133 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
de su peso. Si existe diferencia positiva entre el peso promedio y el peso de la
2136 ú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ó
de peso y qué cantidad de Kilos.

2139 8. Una persona recopila ciertos datos aplicando encuestas para el último Censo
Nacional de Población y Vivienda. Desea obtener de todas las personas que al-
cance a encuestar en un día, qué porcentaje tiene estudios de primaria, secun-
2142 daria, carrera técnica, profesional y posgrado. Desarrolle el algoritmo que le
permita calcular esa información.

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


2145 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
hará descuento alguno, si es verde se le hará un 10% de descuento, si es amari-
2148 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
los colores mencionados.

2151 10. Se leen los nombres, edad y sueldo de 5000 personas y se desea saber el monto
total que la empresa pagará a las personas que son mayores de 35 años y que
perciben un sueldo mensual mayor o igual a $500.

2154 11. Una cadena de 754 tiendas reporta sus ventas brutas y sus costos de venta
mensuales. Desarrolle un algoritmo que lea los costos y ventas, que calcule e
imprima la utilidad neta de cada tienda, y que informe cuántas tiendas obtu-
2157 vieron utilidad neta superior a los $50000 mensuales.

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


Min). El par para terminar la lectura será cuando ambas temperaturas sean
2160 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.
Imprimir cuántos días se proporcionaron datos y el número de veces que hubo
2163 error (lectura 9 y 9).

13. Mostrar la tabla de cuadrados y cubos de los números desde el 1 hasta el valor
ingresado por el usuario. El siguiente es un ejemplo donde el usuario ingresó el
2166 número 5:

1 1 1

2 4 8

2169 3 9 27

4 16 64

5 25 125

2172 14. *E20 Desarrolle un algoritmo que muestre el tiempo (en formato 24h00) se-
gundo a segundo desde 00:00:00 hasta una hora (con sus minutos y segundos)
dada por el usuario. Por ejemplo 00:00:00, 00:00:01, 00:00:02,…, 20:20:17. An-
2175 tes de realizar este ejercicio desarrolle el ejercicio Reloj de 24 horas de la pági-
na 81.

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

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.

2181 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)
2184 xxxx
x x
xxxx
2187 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
2190 x
xxxxx
x
2193 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-
2196 cos, dado un valor de número de asteriscos máximo en el punto central del
diamante. Por ejemplo, si el valor en el punto central es 5 el rombo sería
**
2199 ****
******
********
2202 **********
********
******
2205 ****
**
18. *E21 Dado el siguiente código fuente en lenguaje C, cuya salida se muestra
2208 como “Solución actual” en la parte derecha superior de la tabla siguiente:

SOLUCIÓN ACTUAL

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

SOLUCIÓN REQUERIDA

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

2214 19. *E22 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.

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


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

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

2223 mientras valor>MAXIMO o valor<=0 hacer


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

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

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

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

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

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

• 21/marzo - 20/abril Aries


• 21/abril - 20/mayo Tauro
2283 • 21/mayo - 20 junio Géminis
• 21/junio - 20/julio Cáncer
• 21/julio - 20/agosto Leo
2286 • 21/agosto - 20/septiembre Virgo
• 21/septiembre - 20/octubre Libra
• 21/octubre - 20/noviembre Escorpión
2289 • 21/noviembre - 20/diciembre Sagitario
• 21/diciembre - 20/enero Capricornio
• 21/enero - 20/febrero Acuario
2292 • 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

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


2298 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

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

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

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


Término: 24
• Pregunta

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

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

li: 1
ls: 20
2319 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
10 11 12 13 14 15 16 17 18 19 20
10 11 12 13 14 15
2322 12 13 14 15
12 13
12 13
2325 12

* Impresión de patrones

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

Menú: media, mayor y menor

Implemente un algoritmo que muestre el siguiente menú:


2331 Menú

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

2337 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-
2340 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
2343 escoge la opción 5.

Manejo contable

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


2346 inicial de la cuenta es $0. El programa debe tener el siguiente menú:
1. Depósito
2. Retiro
2349 3. Saldo
4. Salir
El programa debe solicitar al usuario que indique si desea realizar un depósito o un
2352 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-
2355 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-
2358 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


2361 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-
2364 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.

2367 Ejemplo

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

Salida:

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

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

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

Salida:

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

2385 Número a analizar: -188


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

Número a analizar: 15423

2388 Suma: 1 + 5 + 4 + 2 + 3 = 15
Producto: 1 × 5 × 4 × 2 × 3 = 120
Media: (1 + 5 + 4 + 2 + 3) / 5 = 3
2391 Máximo: max(1, 5, 4, 2, 3) = 5
Mínimo: min(1, 5, 4, 2, 3) = 1
*******************************************************
2394 Suma: 1^5 + 5^5 + 4^5 + 2^5 + 3^5 = 4425
Producto: 1^5 × 5^5 × 4^5 × 2^5 × 3^5 = 24883200000
Media: (1^5 + 5^5 + 4^5 + 2^5 + 3^5) / 5 = 885
2397 Máximo: max(1^5, 5^5, 4^5, 2^5, 3^5) = 3125
Mínimo: min(1^5, 5^5, 4^5, 2^5, 3^5) = 1

* Serie de Leibniz

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

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

(4.8)

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

(4.9)

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


mando n−1 términos.

* Examen de manejo

2409 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
2412 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
2415 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
2418 número total de parejas que pueden haber para el examen final e imprima todas esas
posibles parejas. Quizá le sea útil saber que el número de permutaciones que se pue-
den realizar con m elementos tomados de k en k es m!/(m−k)!.

2421 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
2424 Pareja 1: {Conductor: 1, Acompañante: 2}
Pareja 2: {Conductor: 2, Acompañante: 1}
Pareja 3: {Conductor: 1, Acompañante: 3}
2427 Pareja 4: {Conductor: 3, Acompañante: 1}
Pareja 5: {Conductor: 1, Acompañante: 4}
Pareja 6: {Conductor: 4, Acompañante: 1}
2430 Pareja 7: {Conductor: 2, Acompañante: 3}
Pareja 8: {Conductor: 3, Acompañante: 2}
Pareja 9: {Conductor: 2, Acompañante: 4}
2433 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}

2436 * 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 -
2439 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-
2442 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 caballos 2. El siguiente
2445 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.
2448 **********************************************************
Turno: caballo 5
>
2451 Metros avanzados por el caballo 5: -1
**********************************************************
------------------------
2454 Caballo 1 X
------------------------
------------------------
2457 Caballo 2 X
------------------------
------------------------
2460 Caballo 3 X X X X X X
------------------------
------------------------
2463 Caballo 4 X X X X X
------------------------
------------------------
2466 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

2469 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,
2472 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).

2475 * 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
2478 dividendo > divisor. Realizar la división entre los dos números y la prueba del 9 para
comprobar si el resultado de la división es correcto. A continuación se da un ejemplo
de cómo se realiza la prueba del nueve.

2481 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
2484 un valor dado y son valores enteros; además, indicar la cantidad de dichos triángulos.
Por ejemplo, si el usuario ingresa 10, el algoritmo deberá mostrar todas las tripletas
para las cuales las longitudes del cateto 1, cateto 2 e hipotenusa son números enteros
2487 y ninguno de ellos es mayor que 10. A continuación se muestra un ejemplo del resul-
tado de la ejecución del algoritmo.
Valor máximo:> 20

2490 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
2493 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
2496 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
2499 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

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


rectángulos.

* Número triangular

2505 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

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

La diagonal de Cantor

2517 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
2520 usó un argumento conocido como el argumento de la diagonal para demostrar que el
conjunto de números reales es no-numerable. En este ejercicio vamos a considerar
una simplificación del argumento de Cantor para proponer un algoritmo que ejecute
2523 la siguiente tarea.

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

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

Random walks

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


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

2550 * Suma de dos números decimales

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

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

+4794 +5689 + 999


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

2553 * 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-
2556 les). Muestre los dos números binarios y el resultado obtenido de la suma. Por ejem-
plo, para los números 34 y 45, el programa debe imprimir
100010
2559 101101
-------
1001111, que equivale a 79 en decimal.

2562 * 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
2565 ejemplo:

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

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

2568 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-
2571 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

5. Estructuras Básicas de Datos

2574 Arreglos unidimensionales

Los arreglos podrían ser llamados de diferentes maneras. En general, hacen referencia
a un conjunto de elementos (en algunos lenguajes de programación estos elementos
2577 no solamente son números) bajo un mismo nombre, que se diferencian entre ellos me-
diante un índice. Por ejemplo, se los puede llamar vectores o matrices (de una dimen-
sión en este caso). Dependiendo del lenguaje de programación que utilice para imple-
2580 mentar los algoritmos, puede utilizar estructuras de datos con otros nombres. Por
ejemplo, si utiliza Python, se pueden utilizar listas o arreglos de la librería numpy.

Miscelánea

2583 Algunos de los ejercicios están basados en los libros de Pinales Delgado y Velázquez
Amador (2014), Alcalde Lancharro y García López (1992), Chaves Torres (2012) y
Parra Terrazos (n.d.).

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

a) Almacenar tipos de datos


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

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


2592 den inverso.

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


número.

2595 4. Implemente un programa que genere aleatoriamente los sueldos de 200 em-
pleados de una empresa en un arreglo y determine el menor sueldo, el mayor
sueldo, el sueldo promedio y el total a pagar por parte de la empresa.

2598 5. Implemente un programa que ingrese los sueldos de N empleados de una em-
presa en un arreglo con capacidad máxima para 100 empleados. Imprima lue-
go un listado de los sueldos superiores al sueldo promedio.

2601 6. Implemente un programa que lea 5000 notas de un examen en un arreglo y de-
termine: a) la nota promedio, b) la mayor nota, c) la menor nota, d) el núme-

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

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


2604 comparten la mayor nota.

7. Implemente un algoritmo que lea los nombres y las edades de diez estudiantes,
y que almacene los datos en dos arreglos. Con base en esto se debe imprimir el
2607 nombre del estudiante con la mayor edad.

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
2610 pase a ser el tercero y así sucesivamente (el último pasa a ser el primer ele-
mento).

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


2613 ne un arreglo C tal que sus elementos vengan dados por: C(0) = A(0) + B(N-
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
2616 una columna.

10. Implemente una función que reciba como parámetros un arreglo de enteros A
y un número entero n, y devuelva un nuevo arreglo B que sea igual al arreglo
2619 A pero desplazado n posiciones hacia la izquierda. Tenga en cuenta que los n
primeros elementos en el arreglo A al ser desplazados hacia la izquierda pasan
a ser los últimos elementos del arreglo B. Por ejemplo, con n = 3:

2622 A={1, 2, 3, 4, 5, 6, 7}
B={4, 5, 6, 7, 1, 2, 3}

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


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

2628 12. Una empresa requiere controlar la existencia de diez productos, los cuales se
almacenan en un arreglo A, mientras que los pedidos de los clientes de estos
productos se almacenan en un arreglo B. Se requiere generar un tercer arreglo
2631 C, con base en los anteriores, que represente lo que se requiere comprar para
mantener la existencia de inventario. Para este fin se considera lo siguiente: si
los valores correspondientes de los arreglos A y B son iguales, se almacena este
2634 mismo valor; si el valor de B es mayor que el de A, se almacena el doble de la
diferencia entre B y A; si se da el caso de que A es mayor que B, se almacena

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

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


2637 tario.

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
2640 elemento del arreglo; la suma de los elementos de las cinco primeras filas del
arreglo; y el total de elementos negativos en las columnas de la quinta a la
nueve.

2643 14. Para facturar el servicio de energía la empresa eléctrica cuenta con una lista
de usuarios almacenada en un arreglo y las lecturas del mes anterior (en KW)
en un segundo arreglo. Se requiere un algoritmo que lea el costo de cada KW,
2646 tome la lectura actual de cada usuario y la registre en un tercer arreglo, calcu-
le el consumo del mes por diferencia de lecturas y muestre para cada usuario:
nombre, consumo y valor a pagar.

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

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-
2655 lificación promedio del grupo, además, que cuente los estudiantes que obtuvie-
ron calificaciones arriba del promedio del grupo.

17. Realice un algoritmo que lea un vector de cien elementos y que calcule su
2658 magnitud y represéntelo mediante diagrama de flujo y pseudocódigo.

18. Implemente un algoritmo que calcule el producto de dos vectores. Uno de ellos
es de una fila con diez elementos y el otro con una columna de diez elementos.

2661 19. Cree un arreglo de 20 elementos con nombres de personas. Visualice los ele-
mentos de la lista debiendo ir cada uno en una fila distinta.

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


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

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-
2667 ve la posición en el arreglo).

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

22. Elabore un diccionario simple de inglés a español utilizando dos arreglos de


tipo cadena con 20 palabras como mínimo.

2670 23. Lea un arreglo de N elementos y luego imprima cuántos y cuáles elementos
(i.e., número de índice) son múltiplos de 6.

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


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

25. Generar con números aleatorios dos arreglos A y B de 45 elementos cada uno,
sumar el elemento uno del arreglo A con el elemento uno del arreglo B y así
2676 sucesivamente hasta 45, almacenar el resultado en un arreglo C, e imprimir el
arreglo resultante.

26. Desarrolle un programa que lea un arreglo de N elementos y rote todas sus
2679 componentes un lugar hacia su derecha. Teniendo en cuenta que la última
componente se ha de desplazar al primera lugar.

27. Dado un número entero positivo de 10 cifras, desarrolle un programa que com-
2682 pruebe si el número es capicúa utilizando un arreglo de 10 componentes. La
palabra capicúa (en matemáticas, número palíndromo) se refiere a cualquier
número que se lee igual de izquierda a derecha que de derecha a izquierda.
2685 Ejemplos: 161, 2992, 3003, 2882.

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.
2688 Estos números se deben almacenar en un arreglo y se debe calcular e imprimir
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


2691 rango [-50, 50], pudiéndose repetir hasta dos veces un mismo número. Estos
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).

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


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-
2697 nor número, y la frecuencia de estos.

31. * Desarrolle un programa que genere los números de la serie Fibonacci y los
guarde en un arreglo de 55 elementos (debe generar 55 términos de la serie).

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

2700 Luego, dar la opción al usuario de poder visualizar un elemento de la serie


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


2703 rango [1, 6]. Genere un segundo arreglo con 50 elementos con números aleato-
rios enteros en el rango [2, 7]. Genere un tercer arreglo donde se guarden los
resultados de elevar el elemento del primer arreglo al exponente indicado en el
2706 segundo arreglo; los cálculos se hacen con elementos con el mismo número de
índice. Muestre los arreglos de manera vertical en tres columnas, cada una
para cada arreglo:
2709 Base Exponente Potencia
arreglo11 arreglo21 arreglo11^arreglo21
arreglo12 arreglo22 arreglo12^arreglo22
2712 arreglo13 arreglo23 arreglo13^arreglo23
arreglo14 arreglo24 arreglo14^arreglo24
arreglo15 arreglo25 arreglo15^arreglo25
2715 33. Generar un arreglo con 100 números aleatorios enteros en el rango [1, 2020],
sin que se repitan dichos números. En un segundo arreglo guardar la palabra
sí, en la posición correspondiente del arreglo uno donde el número represente
2718 un año bisiesto, caso contrario guardar la palabra no. Mostrar los valores de
los dos arreglos de manera vertical (en columnas):
Año Bisiesto
2721 1563 No
4 Sí

Manejo de arreglos

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

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

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

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

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

* Eliminación de duplicados

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

2733 Use una arreglo para resolver el siguiente problema: Escriba una aplicación que per-
mita el ingreso de n números, cada uno en el rango [10, 100]. Cada vez que un núme-
ro sea leído, muéstrelo sólo si no es un duplicado de un número ya ingresado. Prever
2736 el “peor caso”, en el que todos los n números son diferentes. Use el arreglo más pe-
queño posible para resolver este problema. Muestre el conjunto completo de valores
únicos ingresados después de que el usuario ingrese cada nuevo valor.

2739 Ordenamiento de n números

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


ascendente como descendente.

2742 Ángulo entre vectores

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

2745 Relleno de arreglo con números aleatorios

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

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


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

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


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

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


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

Graficación de frecuencias

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


guardar el número de veces que el dado salió con el número respectivo de índi-

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

ce del arreglo. Por último, mostrar la tabla de frecuencias y un gráfico de las


2760 mismas. Por ejemplo, si 20 veces salió 6, 30 veces salió 5, 10 veces salió 4, 5
veces salió 3, 10 veces salió 2, 25 veces salió 1, la tabla de frecuencias y el grá-
fico serían:
2763 TABLA
Valor Frecuencia
1 25
2766 2 10
3 5
4 10
2769 5 30
6 20

Gráfica
2772 1 *************************
2 **********
3 *****
2775 4 **********
5 ******************************
6 ********************
2778 • Simular el lanzamiento de dos dados al mismo tiempo en 100 ocasiones. En un
arreglo guardar el número de veces que la suma de los valores de los dados
salió con el número respectivo de índice del arreglo (el índice desde dos). Por
2781 último, mostrar la tabla de frecuencias y un gráfico de las mismas.

Criba de Eratóstenes

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

2784 Un número primo es cualquier entero mayor que 1 que es divisible solamente para sí
mismo y para 1. La criba de Eratóstenes es un método para encontrar números pri-
mos. Esta opera de la siguiente manera:

2787 1. Se crea un arreglo de tipo primitivo booleano con todos los elementos iniciali-
zados con el valor TRUE. Los elementos del arreglo cuyos índices correspon-
den a un número primo se mantendrán con el valor TRUE. Todos los demás
2790 elementos eventualmente contendrán el valor FALSE.

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

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

2793 como FALSE todo elemento cuyo índice es múltiplo del índice para el elemen-
to con valor TRUE. Entonces, se continúa el proceso con el siguiente elemento
con valor TRUE. Para el índice 2 del arreglo, todos los elementos más allá del
2796 elemento 2 en el arreglo, que tengan índices que sean múltiplos de 2 (índices 4,
6, 8, 10, etc.), serán establecidos como FALSE; para el índice 3 del arreglo, to-
dos los elementos más allá del elemento 3 en el arreglo, que tengan índices que
2799 sean múltiplos de 3 (índices 6, 9, 12, 15, etc.), serán establecidos como FALSE;
y así en adelante.

Cuando este proceso termina, los elementos del arreglo que tienen el valor TRUE in-
2802 dican que el índice de ese elemento corresponde a un número primo. Estos índices de-
ben ser visualizados. Una animación del proceso se puede encontrar en Wikipedia
https://goo.gl/6w5Atn. A continuación se muestra el proceso para encontrar los nú-
2805 meros primos entre 2 y 20.

Escriba una aplicación que use un arreglo para encontrar y mostrar los números pri-
mos entre 2 y 1000. Ignore los elementos con índices menores que 2.

2808 Algoritmo de Havel-Hakimi

Implemente una función cuyo parámetro sea un arreglo con una serie de números en-
teros no negativos (el cero sí es aceptado) que puede estar ordenado o no, y devuelva
2811 True si la serie corresponde a una serie gráfica o False en caso de que la serie no co-
rresponda a una serie gráfica. Vea la explicación del algoritmo mediante el siguiente
enlace https://youtu.be/-prrZd_NJqQ.

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

2814 Arreglos bidimensionales

Miscelánea

Algunos de los siguientes ejercicios se basan en los libros de Pinales Delgado y Veláz-
2817 quez Amador (2014), Alcalde Lancharro and García López (1992) y Chaves Torres
(2012).

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

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


entre 1 y 100.

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

2826 4. Desarrolle un programa que genere e imprima una matriz unitaria de orden N.
Una matriz unitaria de orden N es la que tiene N filas y N columnas con todas
sus componentes iguales a 0, excepto las de su diagonal principal, que son
2829 iguales a 1.

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

2835 6. Implemente una función que construya y devuelva matrices cuadradas de cual-
quier dimensión mayor o igual a 1, cuyos elementos sigan el patrón mostrado
en la tabla 1 (cada elemento es la suma de sus índices). La dimensión se pasa-
2838 rá como parámetro a la función. El resultado se imprimirá desde el
programa/función principal.

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

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

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


calcule la suma de los elementos de la diagonal principal.

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

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


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

11. Se tiene una matriz de seis filas y ocho columnas y se sabe que se tiene un ele-
2850 mento negativo. Realice un algoritmo que indique la posición que ese elemento
ocupa en el arreglo (en la fila y la columna en la que se encuentra ese elemen-
to).

2853 12. Se tienen dos matrices cuadradas (de 12 filas y 12 columnas cada una). Reali-
ce un algoritmo que lea las matrices y que determine si la diagonal principal
de la primera es igual a la diagonal principal de la segunda. (Diagonal princi-
2856 pal es donde los subíndices i y j son iguales).

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

14. Realice un algoritmo que lea una matriz de seis filas y seis columnas y que
cuente los elementos negativos que contiene y los elementos de la diagonal
2862 principal que son igual a cero.

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

15. Una compañía de transporte cuenta con cinco chóferes, de los cuales se cono-
ce: nombre, horas trabajadas cada día de la semana (seis días) y sueldo por
2865 hora. Realice un algoritmo que:

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


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

2871 16. Indurama cuenta con N chóferes, de los cuales se conoce el nombre y los kiló-
metros que conducen durante cada día de la semana; esa información se guar-
da en un arreglo de Nx6. Se requiere un programa que capture esa informa-
2874 ción y genere un arreglo con el total de kilómetros que recorrió cada chófer du-
rante la semana. Al final se debe presentar un reporte donde se muestre el
nombre del chófer, los kilómetros recorridos cada día y el total de éstos, como
2877 se muestra en la tabla. Adicionalmente, se debe mostrar un reporte con el chó-
fer que ha recorrido más kilómetros en un día determinado de la semana y el
número de kilómetros recorridos por todos los chóferes en un día de la semana.
2880 La información del día de la semana será solicitada al usuario.

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


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

18. Implemente un algoritmo que calcule el valor que se obtiene al multiplicar en-
tre sí los elementos de la diagonal principal de una matriz de 5 por 5 elemen-
2886 tos.

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


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

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

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


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

21. Cargar en una matriz las notas de los alumnos de un colegio en función del
número de cursos (filas) y del número de alumnos por curso (columnas). Pre-
2895 sentar la mediana de cada curso.

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


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

-5 0 2
10 11 99
Para que no tenga que ingresar datos en cada prueba que haga de su algorit-
2901 mo, desarrolle una función que devuelva una matriz de f filas y c columnas
con número aleatorios (no ordenados).

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


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

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

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


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

Para que no tenga que ingresar datos en cada prueba que haga de su algorit-
2916 mo, desarrolle una función igenerarMatriz3D(int p, int f, int c) que
devuelva una matriz de p páginas, f filas y c columnas con número aleatorios.

26. Una empresa guarda en arreglo multidimensional de 3×12×4 las ventas realiza-
2919 das por sus tres representantes a lo largo de doce meses de sus cuatro produc-

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

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


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

27. Desarrolle un programa que lea una matriz cuadrada de orden 3 y calcule e
2925 imprima su potencia N-ésima, siendo N un dato de entrada. Vea https://goo.-
gl/NYT4Xi

28. * Implemente un algoritmo que lea una matriz de n×m, en la cual se registra
2928 números. El proceso de llenado de la matriz debe realizarse en una función.
Sobre esta matriz se pide calcular la media y mediana de cada fila. Los resul-
tados de la media y mediana deben ser almacenados en arreglos independien-
2931 tes. Los cálculos de la media y mediana deben ser realizados en funciones dis-
tintas. El programa debe mostrar los resultados de la media y mediana en fun-
ciones independientes.

2934 29. * Desarrolle un programa que, ingresadas por parte del usuario dos matrices,
A y B, de diferentes dimensiones, intercambie los tres mínimos números de A
con los tres máximos números de B. El intercambio tiene que darse en orden
2937 inverso, es decir, el mínimo número de A con el máximo de B y así sucesiva-
mente. El programa debe mostrar en pantalla las matrices ingresadas por el
usuario y las matrices luego del intercambio.

2940 Por ejemplo, si A y B son:

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-
2943 nes de los mínimos y máximos, así (los índices de filas y columnas comienzan
en cero en este ejemplo específico):

30. * Desarrolle una función que dada una matriz A de n×m devuelva una matriz
2946 B de m×n que sea formada leyendo la matriz en el sentido mostrado a conti-
nuación:

← 8 ← 4← 9 ← 5 5 9 4
A= → 2 → 1 → 7 → 4 8 2 1
B=
← 3 ← 5← 6 ← 2 7 4 2
6 5 3
31. Pregunta

2949 Suma y resta de matrices

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

Producto de un escalar por una matriz

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

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

2958 Diagonal principal de una matriz

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


triz.

2961 * Transpuesta de una matriz

• 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
2964 mostrarla al usuario.

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


100, y hacer su matriz transpuesta.

2967 Simetría de una matriz

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єℕ ^
2970 1≤c≤n}. Implemente un programa que emplee funciones para determinar si una ma-
triz es simétrica. Trate de implementar una solución que reduzca el número de opera-
ciones, una vez que hay cualquier información que indique que la matriz no es simé-
2973 trica.

Determinante de una matriz

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


2976 usuario.

Producto de matrices

Pedir al usuario el número de filas y columnas de dos matrices que ingresará. Ingre-
2979 sar las dos matrices. Calcular el producto de las matrices y presentarla al usuario.

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

Punto de silla de una matriz

1. Se dice que una matriz tiene un punto de silla si algún elemento de la matriz
2982 es el menor valor de su fila y a la vez el mayor de su columna. Escribir un pro-
grama que genere una matriz de números enteros aleatorios (el usuario debe
ingresar las dimensiones) y calcule la posición de un punto de silla (si es que
2985 existe).

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
2988 más) punto de silla.

Tablero de ajedrez

Visualice en pantalla un tablero de ajedrez: los peones con el número 1, las torres con
2991 el 7, los caballos con 0, los alfiles con 4, el rey con 8 y la reina con 2.

* Distancia de Chebyshov

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


2994 (o métrica máxima, o métrica L∞) es una métrica definida en un espacio vectorial
donde la distancia entre dos puntos (representados por sus vectores) es la mayor de
sus diferencias a lo largo de cualquiera de sus dimensiones coordenadas. También es
2997 conocida como distancia del tablero de ajedrez (vea el ejercicio Cálculos espaciales
básicos, página 16), 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
3000 coordenadas espaciales, entre los centros de las casillas, y con los ejes alineados con
los bordes del tablero). Esto es debido a que el rey se puede mover tanto en diagonal
como en horizontal o vertical. En el tablero de la figura 5 se muestra las distancias de
3003 Chebyshov desde la casilla f6.

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

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,


3006 desde una casilla del tablero de ajedrez dada por el usuario.

* El cuadrado latino

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

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
3012 primeros números naturales y cada una de las siguientes N-1 filas contiene la rotación
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

3015 El cuadrado mágico

1. Un cuadrado mágico 3×3 es una matriz de 3×3 formada por números del 1 al 9
donde la suma de sus filas, sus columnas y sus diagonales son idénticas. Crear

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

3018 un programa que permita introducir una matriz cuadrada de 3×3 por teclado
y determine si este cuadrado es mágico o no. El programa deberá comprobar
que los números introducidos son correctos, es decir, están entre el 1 y el 9;
3021 además, se debe comprobar que los números no se repitan en el ingreso.

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
3024 hasta N2. La suma de los números que figuran en cada fila, cada columna y
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:

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

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


anterior y columna posterior.

3030 3. Si un número generado cae en una casilla ocupada, no aplique la regla an-
terior, sino que debe colocarlo en la casilla de la fila posterior e igual co-
lumna.

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


terior a la última es la primera.

* Lotería en Cuenca

3036 Por las fiestas de Cuenca, la Junta de Beneficencia de Guayaquil hará un sorteo espe-
cial de lotería. Imprimirá 243 boletos para cada una de las 27 parroquias más pobla-
das de Cuenca. Los boletos serán de cuatro dígitos (9⁴ = 6561 boletos en total); cada
3039 dígito está en el intervalo [0, 9]. La Junta de Beneficencia desea tener una idea bas-
tante clara de dónde y qué persona compró el boleto ganador.

Implemente un programa que utilice una matriz de 27 filas (parroquias) y 243 colum-
3042 nas (boletos por parroquia) para guardar los números de los boletos que imprimirá la
Junta de Beneficencia para el sorteo. Los números serán generados al azar y no habrá
ninguna posibilidad de que hayan dos o más ganadores. Para simular en qué parro-
3045 quia y qué número de comprador ganó, genere un número aleatorio que represente un
número ganador e indique la parroquia en la se vendería el boleto y el número de

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

comprador del boleto (asuma que cada persona compra un sólo boleto en el orden de-
3048 terminado por el número de columna de la matriz). A continuación se muestra los re-
sultados de dos ejecuciones del programa:

Boleto ganador : 1991 Boleto ganador : 514


3051 Parroquia ganadora: 26 3054 Parroquia ganadora: 8
Comprador ganador : 61 Comprador ganador : 114

Cadena de ADN

3057 Una cadena de ADN se representa como una secuencia circular de bases (adenina, ti-
mina, citosina y guanina) que es única para cada ser vivo, por ejemplo

A T G
T C
A T G
Esta cadena se puede representar como un arreglo de caracteres recorriéndola en sen-
3060 tido horario desde la parte superior izquierda:

A T G C G T A T
Se pide diseñar una función que devuelva true si dos cadenas de ADN, enviadas como
parámetros, coinciden.

3063 Muy importante: la secuencia de ADN es cíclica, por lo que puede comenzar en
cualquier posición. Por ejemplo, las dos secuencias siguientes coinciden:

A T G C G T A T

A T A T G C G T

Gimnasia cerebral

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


Implemente un programa que tenga el menú:
=======================
3069 El juego del alfabeto
=======================
Menú
3072 a. Nivel básico

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

b. Nivel intermedio
c. Nivel avanzado
3075 d. Salir
______________________
Opción[a-d]:
3078 ======================
Para el nivel básico se debe imprimir el alfabeto de izquierda a derecha y de arriba
hacia abajo en una matriz de 5x5. No tome en cuenta la letra ñ ni w. Debajo de cada
3081 letra del abecedario se debe imprimir la letra I o D o J de manera aleatoria pero sólo
se pueden repetir dos veces seguidas las letras I y D pero no la J (viendo la matriz de
izquierda a derecha y de arriba hacia abajo). Un ejemplo se muestra a continuación:
3084 A B C D E
I D J I D

F G H I J
3087 I I J D J

K L M N O
D D I J I

3090 P Q R S T
I J I I J

U V X Y Z
3093 D I J D D
Para el nivel intermedio se debe imprimir el alfabeto de izquierda a derecha y de arri-
ba hacia abajo en una matriz de 5x5 pero en orden inverso, i.e., de la zeta hasta la a.
3096 No tome en cuenta la letra ñ ni w. Debajo de cada letra del abecedario se debe im-
primir la letra I o D o J de manera aleatoria pero sólo se pueden repetir dos veces se-
guidas las letras I y D pero no la J (viendo la matriz de izquierda a derecha y de
3099 arriba hacia abajo). Un ejemplo se muestra a continuación:
Z Y X V U
I D J I D

3102 T S R Q P
I I J D J

O N M L K
3105 D D I J I

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

J I H G F
I J I I J

3108 E D C B A
D I J D D
Para el nivel avanzado se debe imprimir el alfabeto de arriba hacia abajo y de iz -
3111 quierda a derecha en una matriz de 5x5. No tome en cuenta la letra ñ ni w. Debajo
de cada letra del abecedario se debe imprimir la letra I o D o J de manera aleatoria
pero sólo se pueden repetir dos veces seguidas las letras I y D pero no la J (viendo la
3114 matriz de izquierda a derecha y de arriba hacia abajo). Un ejemplo se muestra a con-
tinuación:
A F K P U
3117 I D J I D

B G L Q V
I I J D J

3120 C H M R X
D D I J I

D I N S Y
3123 I J I I J

E J O T Z
D I J D D

3126 Cálculos espaciales básicos

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

3129 Distancia de tablero de ajedrez

Cuando se utilizan imágenes raster pueden definirse distintos tipos de distancias con-
siderando principalmente el número de celdas por las que debe pasarse para ir de una
3132 celda a otra. Por ejemplo, si se permite el movimiento en todas direcciones, las ocho
celdas aledañas a un píxel tienen una distancia de uno, puesto que se necesita un úni-
co paso para llegar a cualquiera de ellas. Por similitud a la forma en que uno puede

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

3135 moverse en un tablero de ajedrez, este tipo de distancia se conoce como distancia de
tablero de ajedrez.

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


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

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


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

3144 Distancia Manhattan

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


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

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

3150 1. Genere una matriz de 8 filas y 8 columnas con números enteros aleatorios en
el rango [1, 32]. Se deben generar dos celdas (de las 64) con el mismo número
y sólo dos celdas pueden tener el mismo número (por eso el rango [1, 32]).
3153 Como ejemplo vea la siguiente matriz generada.

1 2 3 4 5

1 2 8 7 8 9

2 13 1 15 17 20

3 14 16 14 3 22

4 24 25 11 26 1

5 2 18 29 30 31

Figura 7: Matriz de 8×8 (se muestran sólo 25 celdas) con números enteros
aleatorios en el rango [1, 32]. Sólo dos celdas tienen el mismo número.

2. Muestre en pantalla la matriz generada.


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

3168 Formación de grupos de trabajo

Con una matriz en donde se tiene como campos el número, apellido 1, apellido 2,
nombre 1 y nombre 2 de cada estudiante, implemente un programa que genere gru-

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

3171 pos de trabajo con estudiantes escogidos al azar. Para generar los grupos de trabajo
el usuario indica el número de estudiantes de cada grupo a generar. Es posible que
algún grupo quede con un número inferior al indicado por el usuario; en ese caso so-
3174 lamente se debe indicar en pantalla cuál es el grupo que tiene menos estudiantes que
el pedido (ver el segundo ejemplo de ejecución).

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


3177 donde se indican los campos de los estudiantes del curso. Un ejemplo de archivo es el
siguiente (podría llamarse listaEstudiantes.csv):
1,Abad,Sigcho,Carlos,Daniel
3180 2,Agudo,Güiracocha,Dayana,Isabel
3,Andrade,Carchi,Julio,César
4,Arévalo,Angamarca,Moisés,Santiago
3183 El siguiente es un primer ejemplo de ejecución del programa:
Número de estudiantes por grupo: 2
Grupo 1
3186 1. Julio César Andrade Carchi
2. Carlos Daniel Abad Sigcho

Grupo 2
3189 1. Dayana Isabel Agudo Güiracocha
2. Moisés Santiago Arévalo Angamarca
El siguiente es un segundo ejemplo de ejecución del programa en donde hay un grupo
3192 que tiene menos estudiantes de los pedidos por el usuario:
Número de estudiantes por grupo: 3
Grupo 1
3195 1. Moisés Santiago Arévalo Angamarca
2. Dayana Isabel Agudo Güiracocha
3. Julio César Andrade Carchi

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


1. Carlos Daniel Abad Sigcho
Una vez que pueda generar los grupos dado el número de estudiantes que se desean
3201 en cada grupo, haga otro programa que genere los grupos dado el número total de
grupos que se desean hacer (analice muy bien cuál es la diferencia con el primer pro-
grama realizado). Por ejemplo, el siguiente es una ejecución del segundo programa en
3204 donde el usuario quiso generar tres grupos:
Número de grupos: 3

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

Grupo 1
3207 1. Julio César Andrade Carchi
Grupo 2
1. Carlos Daniel Abad Sigcho
3210 Grupo 3
1. Dayana Isabel Agudo Güiracocha
2. Moisés Santiago Arévalo Angamarca

3213 Puesto que el objetivo de este ejercicio es el manejo de matrices, se presenta a conti-
nuación una solución para leer el archivo en el lenguaje de programación Java. En su
programa, para cargar los datos a una matriz (la matriz lista en el código presenta-
3216 do), debe usar la función String[][] cargarLista(String rutaArchivo,
int numEstudiantes); rutaArchivos es la ruta absoluta del archivo que contiene
la lista de estudiantes y numEstudiantes es el número total de estudiantes.
3219 import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
3222 import java.util.Arrays;

public class listaEstudiantes {


public static void main (String args[]) {
3225 String[][] lista = cargarLista("listaEstudiantes.csv", 24);
}

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


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

// separador de campos del archivo csv


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

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

BufferedReader br = null;

3237 try {
br = new BufferedReader(new

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

FileReader(rutaArchivo));
3240 String line = br.readLine();
int i = 0;
while (null!=line) {
3243 String [] campos = line.split(SEPARADOR);
//System.out.println(Arrays.toString(campos));

3246 campos = removeTrailingQuotes(campos, QUOTE);


lista[i++] = campos;
line = br.readLine();
3249 }

} catch (Exception e) {
3252 System.out.println(e.getMessage());
} finally {
try{
3255 br.close();
}catch(IOException e){
System.out.println(e.getMessage());
3258 }
}
return lista;
3261 }

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


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

* Matriz de adyacencia

3273 Una de las implementaciones más frecuentes para la representación de grafos son las
matrices de adyacencia. Una matriz de adyacencia A (implementada como una ma-
triz bidimensional) determina las adyacencias entre pares de vértices de un grafo. En
3276 una matriz de adyacencia, los vértices se conciben como enteros en el conjunto {1, 2,
…, n} y las aristas como pares de tales enteros. Esto permite almacenar referencias a

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

las aristas en las celdas de una matriz bidimensional de nxn. Cada fila y cada colum-
3279 na representan un vértice del grafo y cada posición representa una arista (o la ausen-
cia de esta) cuyo vértice origen se encuentra en la fila y vértice final se encuentra en
la columna. Las siguientes figuras muestran la representación gráfica de un grafo diri-
3282 gido simple, un grafo no dirigido simple, un grafo euleriano y un multigrafo con sus
respectivas matrices de adyacencia.

Escribir un programa que implemente las funciones que se detallan a continuación.


3285 Todas las funciones reciben como entrada el grafo representado mediante su matriz
de adyacencia:

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


3288 grafo no es euleriano. Un grafo es euleriano si cada vértice tiene un grado par.
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


3291 no es Simple. Un grafo simple es aquel que no tiene aristas paralelas o múlti-
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


3294 grafo no es multigrafo. Un grafo que cuente con múltiples aristas entre dos
vértices se denomina multigrafo

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


3297 el grafo simple es no dirigido. Si G es un grafo simple con n vértices y m aris-
tas, entonces:

◦ Si G es no dirigido, m≤n(n-1)/2

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

3300 ◦ Si G es dirigido, m≤n(n-1)

Craps

Un juego de azar muy popular es el juego de dados conocido como craps, el cual es
3303 jugado en casinos y callejones de todo el mundo. Las reglas del juego son muy fáciles
(Deitel and Deitel, 2012):

Usted lanza dos dados. Cada dado tiene seis caras, que contienen uno, dos,
3306 tres, cuatro, cinco y seis puntos, respectivamente. Después que los dados pa-
ran, se calcula la suma de los puntos en las dos caras que están hacia arriba.
Si la suma es 7 u 11 en el primer lanzamiento, usted gana (termina el juego).
3309 Si la suma es 2, 3 o 12 en el primer lanzamiento (llamado “craps”), usted pier-
de (es decir, la “casa” gana; termina el juego). Si la suma es 4, 5, 6, 8, 9 o 10
en el primer lanzamiento, esa suma se convierte en su “punto” (continúa el
3312 juego). Para ganar, debe continuar lanzando los dados hasta que “hace su
punto” (es decir, la suma de los puntos en las dos caras que están hacia arriba
es igual que la suma en el primer lanzamiento). Se pierde por sacar un 7 antes
3315 de que “hace su punto”.

Escriba una aplicación que ejecute 1'000.000 de juegos de craps y conteste las si-
guientes preguntas:

3318 1. ¿Cuántos juegos fueron ganados en el primer lanzamiento, en el segundo lan-


zamiento, en el tercer lanzamiento, …, en el vigésimo lanzamiento y después
del vigésimo lanzamiento?

3321 2. ¿Cuántos juegos fueron perdidos en el primer lanzamiento, en el segundo lan-


zamiento, en el tercer lanzamiento, …, en el vigésimo lanzamiento y después
del vigésimo lanzamiento?

3324 3. ¿Cuáles son las probabilidades de ganar en el juego de craps? Nota: debe des-
cubrir que el juego de craps es uno de los juegos de casino más justos; ¿Qué
cree que esto significa?

3327 4. ¿Cuál es la duración promedio de un juego de craps? Nota: la duración hace


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

3330 Hormiga de Langton

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


3333 reglas muy sencillo y que da lugar a comportamientos emergentes complejos. La hor-
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).

3336 En la matriz se identifica arbitrariamente una celda como la hormiga. La hormiga


siempre está mirando en una de las cuatro direcciones cardinales y se mueve una cel-
da cada vez, de acuerdo con las siguientes reglas:

3339 1. Si está sobre una celda blanca, cambia el color de la celda, gira noventa grados
a la derecha y avanza una celda.

2. Si está sobre una celda negra, cambia el color de la celda, gira noventa grados
3342 a la izquierda y avanza una celda.

Implemente un programa que realice lo siguiente:

1. Genere una matriz de 100×100 con 5000 celdas blancas (valor 1) y 5000 celdas
3345 negras (valor 0). Las celdas deben ser “pintadas” al azar.

2. Identifique arbitrariamente una celda como la hormiga.

3. Haga que la homiga camine hasta que llegue a los límites de la matriz.

3348 4. Cada vez que la hormiga se mueva una celda, muestre la información de la
matriz como se muestra en la figura 8.

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

Figura 8: imagen tomada de Wikipedia https://goo.gl/6dNIEW.

* Las ocho reinas

3351 Este problema clásico en ciencias de la computación fue propuesto por René Estrella.

Este problema consiste en ubicar ocho reinas en un tablero de ajedrez de tal manera
que no se ataquen entre sí. Por lo tanto, la solución requiere que no existan dos
3354 reinas que se encuentren en la misma fila, columna o diagonal. En este sentido, una
configuración candidata consiste en una forma específica de ubicar las ocho reinas en
el tablero (que pueden o no atacarse entre sí), mientras que una solución es una
3357 configuración candidata que cumple el requerimiento de que las reinas no se ataquen
entre sí. Se sabe que este problema tiene 92 soluciones distintas, es decir, existen 92
formas de ubicar las ocho reinas en el tablero de forma que el requerimiento del
3360 problema se cumpla (vea https://goo.gl/fFo9WL). En la siguiente figura se muestra
una de las posibles soluciones:

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


3363 las soluciones a este problema. El programa además debe permitir al usuario ingresar
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-
3366 nes:

1. Generar solución

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

2. Ingresar configuración candidata


3369 3. Salir

A continuación, se detalla cada una de estas tareas.

1. Generar solución

3372 El programa genera una configuración candidata y verifica si esa configuración co-
rresponde a una solución. Si este es el caso, muestra la solución en pantalla simulan-
do un tablero de ajedrez e indicando la ubicación de las ocho reinas. Si la configura-
3375 ción generada no corresponde a una solución, se descarta y se repite el proceso, vol-
viéndose a generar otra configuración candidata.

2. Ingresar configuración candidata

3378 Cuando el usuario escoge esta opción se le solicita que ingrese ocho pares de coorde-
nadas numéricas que indiquen la ubicación de las reinas en el tablero. Cada coorde-
nada será un número entero en el rango [1, 8], considerando que el par de coordena-
3381 das (1, 1) corresponde a la casilla superior izquierda del tablero y la coordenada (8,
8) corresponde a la casilla inferior derecha. A continuación, el programa mostrará la
configuración ingresada en forma de un tablero con la ubicación de las ocho reinas e
3384 indicando si se trata de una solución o no. Por ejemplo, si el usuario ingresa las si-
guientes coordenadas:
Coordenadas Reina 1: 1, 3
3387 Coordenadas Reina 2: 2, 6
Coordenadas Reina 3: 3, 4
Coordenadas Reina 4: 4, 2
3390 Coordenadas Reina 5: 5, 8
Coordenadas Reina 6: 6, 5
Coordenadas Reina 7: 7, 7
3393 Coordenadas Reina 8: 8, 1
La configuración resultante sería la que se muestra en la figura 9, la cual evidente-
mente corresponde a una solución del problema.

3396 3. Salir

El programa solamente termina cuando se escoja esta opción.

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

* Recorridos de matriz

3399 Espiral hacia el interior

Genere una matriz de n filas y m columnas (pueden ser números pares o impares),
con números aleatorios enteros en el intervalo [0, n+m); y muestre la matriz en pan-
3402 talla. Lea la matriz en forma de espiral comenzando por el último elemento, hacia
arriba, como se muestra en la figura 10. A medida que vaya leyendo la matriz, llene
un arreglo unidimensional que contenta los números que se van leyendo, y muestre el
3405 arreglo en pantalla. Usando el arreglo, extraiga el número que se encuentra en la últi-
ma posición y almacénelo en la variable nro_a. Además, extraiga el número que se
encuentra en la posición correspondiente a nro_a y almacénelo en la variable
3408 nro_b. Con estos números forme una matriz en donde la primera columna tenga la
cantidad de números menores, mayores e iguales a nro_a; y la segunda columna ten-
ga la cantidad de números menores, mayores e iguales a nro_b (en la figura se asu-
3411 me que el primer elemento es el de subíndice cero). Finalmente muestre la última
matriz.

Figura 10: Recorrido en espiral hacia el interior de una matriz de n×m.

Espiral hacia el exterior

3414 Genere una matriz de n filas y n columnas, siendo n impar (validar), con números
aleatorios enteros en el intervalo [0, n+n); y muestre la matriz en pantalla. Lea la ma-
triz en forma de espiral comenzando por el elemento central, como se muestra en la
3417 figura 11. A medida que vaya leyendo la matriz, llene un arreglo unidimensional que

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

contenta los números que se van leyendo, y muestre el arreglo en pantalla. Ordene los
números del arreglo ascendentemente y muestre el arreglo en pantalla. Usando el
3420 arreglo ordenado, extraiga el número que se encuentra en la última posición y alma-
cénelo en la variable nro_a. Además, extraiga el número que se encuentra en la posi-
ción correspondiente a nro_a y almacénelo en la variable nro_b. Con estos números
3423 forme una matriz en donde la primera columna tenga la cantidad de números meno-
res, mayores e iguales a nro_a; y la segunda columna tenga la cantidad de números
menores, mayores e iguales a nro_b (en la figura se asume que el primer elemento es
3426 el de subíndice cero). Finalmente muestre la última matriz.

Figura 11: Recorrido en espiral hacia el exterior de una matriz cuadrada .

* Datos de estudiantes

Escriba un programa que forme una matriz de n×5 elementos (n debe ser un entero
3429 positivo, ingresado por el usuario), bajo el siguiente esquema:

• La primera columna debe ser ingresada por el usuario y debe ser numérica de
dos cifras. Esta columna representa el código del alumno y debe ser validado
3432 para que sea único dentro de los datos ingresados en la columna.

• 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-
3435 mule la obtención de las calificaciones generándolas aleatoriamente.

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

• La quinta columna debe ser calculada como el promedio de las tres columnas
de calificaciones, redondeada como el entero más cercano al valor promedio
3438 calculado.

Forme una segunda matriz, de n×3 elementos. La primera columna lleva los códigos
de estudiantes ingresados para la primera matriz. La segunda columna lleva la equi-
3441 valencia de las calificaciones en base al siguiente cuadro:

Rango Equivalencia Observación

01-09 R Regular

10-12 B Buena

13-17 A Aceptable

18-20 S Sobresaliente

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

Determine cuántos alumnos aprobarán el curso con Buena, cuántos con Aceptable y
cuántos con Sobresaliente.

3447 Se deben mostrar las dos matrices para verificar los resultados obtenidos.

* Datos de personas

El programa va a almacenar registros en una matriz. Para ello se debe hacer lo si-
3450 guiente:

1. Ingreso de campos de los registros

Solicite al usuario que ingrese uno a uno los campos de una matriz que almacenará
3453 los registros y cree un índice que asocie el campo a una columna de la matriz. Luego,
cree la matriz que almacenará los registros.

Ejemplo
3456 cédula
nombre
apellido
3459 edad

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

...
Índice
cédula 0
nombre 1
apellido 2
edad 3
... ...
2. Ingreso de datos

3462 Una vez ingresados los campos con los que se va a trabajar, pida al usuario que in -
grese los registros como cadenas, de la siguiente manera (en base a los campos pues-
tos en el ejemplo anterior):
3465 apellido:cevallos;edad:22;cedula:0104132548
cedula:0108562554;edad:25;nombre:juan;apellido:malo
Nóte que los registros no necesariamente contienen todos los campos, ni se ingresan
3468 los datos en orden de acuerdo a los campos ingresados en el punto 1.

Cada vez que se ingresa un registro, éste se debe pasar a la matriz de datos. Para
ello, procese la cadena que representa cada registro y basado en el índice creado en el
3471 punto 1 guarde cada campo en la columna correspondiente de la matriz. Después de
cada ingreso, muestre la matriz de datos.

Para los dos registros de ejemplo la matriz de datos sería la siguiente:

0104132548 cevallos 22
0108562554 juan malo 25
3474 Si un registro contiene un campo que inicialmente no se consideró, el programa debe-
rá indicar con una mensaje que el campo no fue encontrado. Por ejemplo, si se ingre-
sa el siguiente registro, el programa deberá mostrar un mensaje de error y la matriz
3477 de datos resultante.
cedula:0305677824;teléfono:4023568;nombre:sara;apellido:abril
¡Advertencia! El campo teléfono no existe pero se ingresa el registro.

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

0104132548 cevallos 22
0108562554 juan malo 25
0305677824 sara abril
3480 3. Búsquedas

El programa debe permitir buscar un registro por cualquier campo. Es decir, se pre-
gunta al usuario por qué campo desea buscar, se busca ese registro utilizando la bús-
3483 queda binaria y se muestran los datos de ese registro. Además, se muestra la matriz
antes y después de cada búsqueda. Por ejemplo:
¿Por qué campo desea buscar?
3486 apellido
Ingrese el valor a buscar: malo
El programa deberá mostrar la matriz antes y después de la búsqueda y los datos del
3489 registro si existe.
cédula: 0108562554
nombre: juan
3492 apellido: malo
edad: 25

* Datos de empresas y empleados

3495 Dados los siguientes datos de entrada en formato de cadena:


String datosEmpresas = "emp1,Marcimex;emp2,Etapa;emp3,Elecaustro;";
String datosEmpleados = "emp1,Juan,1500;emp2,Arturo,1200;emp1,Pedro,1100;"
3498 + "emp2,Ramiro,1400;emp1,Jaime,900;emp3,Xavier,800;"
+ "emp3,Jorge,1000;emp1,Edgar,1200;emp3,Daniel,950;";
La variable datosEmpresas almacena el código y nombre de una lista de empresas, en
3501 donde cada dato está separado por coma y cada registro por punto y coma.

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
3504 cada dato está separado por coma y cada registro por punto y coma.

Realizar un programa que haga lo siguiente:

1. Mostrar los datos de una empresa en particular dado el código de la misma.


3507 2. Listar todas las empresas.

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

3. Listar los empleados de una empresa en particular ordenados de forma descen-


dente según el salario.
3510 4. Mostrar un listado de empresas con el salario promedio de los empleados de la
misma.

Ejemplo

3513 1. Mostrar los datos de una empresa

Se pide al usuario el código de la empresa que desea mostrar

• Código: emp3

3516 El sistema muestra los datos de la empresa

• Código: emp3

• Nombre: Elecaustro

3519 2. Listar todas las empresas.

Código Nombre
emp1 Marcimex
emp2 Etapa
emp3 Elecaustro
3. Listar los empleados de una empresa en particular ordenados de forma descen-
dente según el salario.

3522 Se pide al usuario el código de la empresa que desea mostrar

• Código: emp1

El sistema muestra los empleados de la empresa emp1 (Marcimex) ordenados de for-


3525 ma descendente según el salario.

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


3528 misma. (Tenga en cuenta que los datos pueden tener decimales)

Empresa Salario promedio


Marcimex 1175
Etapa 1300
Elecaustro 916.67

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


3531 tervalo [10, 25].
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-
3534 ción de que R sea un divisor de la nota máxima posible (20).
4. Generar la matriz de resumen (explicada en el ejemplo).
5. Generar y mostrar el histograma utilizando una matriz.

3537 Ejemplo

1. El programa solicita al usuario el número de datos a generar

Número de datos: 20

3540 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

3. Pedir al usuario el número de rangos R para crear el histograma.

Número de rangos: 4

3543 4. Generar la matriz de resumen.

1 5 4
6 10 7
11 15 3
16 20 6
Nota: las columnas de esta matriz representan, de izquierda a derecha, el límite infe-
rior, el límite superior y la frecuencia de cada rango.

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

3546 5. Generar y mostrar el histograma utilizando una matriz

#
# #
# #
# # #
# # # #
# # # #
# # # #
1-5 6-10 11-15 16-20

* Cifrado básico 1

Escriba un programa que lea una frase y que la almacene en una matriz siguiendo el
3549 esquema mostrado en la figura 12. Luego debe mostrarse la matriz leyéndola en las
filas impares de izquierda a derecha y en las filas pares de derecha a izquierda. Las
columnas que no contienen información, no deben ser consideradas en la visualización
3552 de la matriz.

Por ejemplo, la frase: “hola mundo, que tal? Hoy es viernes 26 de enero.” se almacena
en la matriz como se muestra en la figura 12.

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

Figura 12: Matriz para caracteres en un cifrado básico de texto.

3555 La matriz se debe leer siguiendo el sentido especificado, según la fila sea par o impar
dará como resultado:

h, ee rH olqoneneyua e ser e muts2o.6 andlv di?o

3558 Cifrado básico 2

Implemente una función que reciba una frase y la devuelva cifrada. El cifrado a utili-
zar es básico y sigue el siguiente algoritmo:

3561 1. Se utiliza una matriz cuadrada cuyo orden permita tener un número de ele-
mentos igual o mayor al total de caracteres de la frase. Pero, la matriz no
debe tener más elementos de los necesarios de manera que no se utilice memo-
3564 ria innecesaria. Por ejemplo, si la longitud de la frase es 9, el orden de la ma-
triz cuadrada es 3; o si la longitud de la frase es 17, el orden de la matriz es 5.

2. Los caracteres de la frase deben ser asignados a los elementos de la matriz co-
3567 menzando desde el elemento de la primera fila y primera columna. Luego, el
siguiente carácter de la frase debe ser asignado al elemento de la matriz cuya
fila sea una menos a la anterior y cuya columna sea una más a la anterior
3570 (“diagonal ascendente”). Si la fila es la primera, la siguiente debe ser la última

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

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
3573 debe asignar el carácter al elemento que está a la derecha (misma fila, siguien-
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
3576 la que se muestra en la figura 13.

Figura 13: Asignación de caracteres de una frase en una matriz cuadrada que
es usada para cifrar el texto. Los subíndices indican número de carácter de la
3579 frase. El subguión indica un espacio.

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
3582 ningún carácter (el espacio se considera un carácter) no son tomados en cuen-
ta. Por ejemplo, el texto cifrado de la matriz de la figura 13 es “URDCAA
CEENVDEIIDNS U”.

3585 Para efectos de verificación se debe mostrar la matriz cuadrada; parecida a la figura
13 pero sin los subíndices. Usted puede verificar el correcto funcionamiento de su pro-
grama utilizando las siguientes frases:

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

3588 Un algoritmo voraz para el número cromático

Vea https://youtu.be/DyRh5UhtVvw

Algoritmo de Floyd-Warshall

3591 El algoritmo de Floyd-Warshall es un algoritmo de análisis sobre grafos para encon-


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://
3594 youtu.be/T_eGloMib1w y https://youtu.be/DTfrTDQEfNk e implemente el algorit-
mo. Muestre también el diagrama de flujo del algoritmo.

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

6. Funciones

3597 Ámbito de las variables

1. * ¿Cómo se conocen a las variables que son creadas dentro del programa y
fuera de cualquier función?

3600 a) Estáticas
b) Globales
c) Instancia
3603 d) Locales

2. ¿Cuál es la diferencia entre una llamada de función por valor y una llamada
de función por referencia?

3606 3. ¿Cómo se conocen a las variables que son declaradas dentro de una función o
bloque de código que pueden ser usadas sólo por sentencias que están dentro
de esa función o bloque y no pueden ser conocidas por funciones fuera de don-
3609 de fueron declaradas?

4. ¿Cuando se declara una variable global, es inicializada automáticamente por el


sistema?

3612 5. ¿Cuando se declara una variable local, es inicializada automáticamente por el


sistema?

6. ¿Cuando una variable global y una variable local tienen el mismo nombre cuál
3615 tiene prioridad dentro de la función donde se declaró la variable local?

7.

Miscelánea

Algunos de los siguientes ejercicios son tomados del libro de Pérez Montes (2010) o
3618 del libro de la Editorial Macro (2001).

1. Implemente una función que imprima en pantalla el doble del valor que se le
pasa como parámetro.

3621 2. Implemente una función que reciba como parámetro un número N, y muestre
por pantalla N veces el mensaje “Función ejecutándose”. Validar N para que
sea mayor o igual a cero.

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

3624 3. Implemente una función que devuelva el valor absoluto de cualquier número
real dado.

4. Implemente una función que indique si un año es bisiesto o no. Un año es bi-
3627 siesto si es múltiplo de 4 (por ejemplo 1984). Sin embargo, los años múltiplos
de 100 sólo son bisiestos si a la vez son múltiplos de 400 (por ejemplo, 1800 no
fue bisiesto, mientras que 2000 sí lo fue).

3630 5. Implemente una función que calcule la distancia euclídea entre dos puntos.

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;
3633 para distinguir el uno del otro use otro parámetro.

7. Implemente una función que sume los 137 primeros números pares (>0).

8. Implemente una función que sume los n primeros números impares (>0).

3636 9. Implemente una función que genere un número aleatorio real entre un rango
enviado como parámetro.

10. Implemente una función que imprima en pantalla un número dado de asteris-
3639 cos indicado en el parámetro recibido. El argumento indica el número de aste-
riscos del cateto del triángulo rectángulo que se “dibuja”. Por ejemplo, para un
triángulo rectángulo de cateto 8, se imprimiría en pantalla
3642 *
* *
* * *
3645 * * * *
* * * * *
* * * * * *
3648 * * * * * * *
* * * * * * * *
11. Implemente una función que reciba dos números y que devuelva el número ma-
3651 yor.

12. Implemente una función que reciba tres números y que devuelva el máximo.

13. Implemente una función que tenga como parámetro un arreglo de números
3654 reales y que devuelva el máximo de los números.

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

14. Implemente una función que tenga como parámetro una matriz de números
reales y que devuelva el mínimo de los números.

3657 15. Implemente una función que reciba dos enteros y muestre todos los números
comprendidos entre ellos (de manera ascendente, desde el número menor hasta
el número mayor), inclusive. Los números pueden ser ingresados en orden as-
3660 cendente o descendente.

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
3663 para realizar la potencia)

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


3666 cilindro, según se especifique. Para distinguir un caso de otro se le enviará a la
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.

3669 20. Implemente una función que reciba como parámetros una cadena de caracteres
y un carácter; la función devuelve el número de veces que se encuentra el ca-
rácter en la cadena.

3672 21. Implemente una función que indique si un número entero es primo.

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.

3675 23. Implemente una función que indique si dos números enteros positivos son ami-
gos. Dos números amigos son dos números enteros positivos a y b tales que la
suma de los divisores propios de uno es igual al otro número y viceversa, es
3678 decir SD(a)=b y SD(b)=a, donde SD(n) es igual a la suma de los divisores de
n, sin incluir a n. Vea https://is.gd/KHBfs1.

24. Implemente una función que calcule el máximo común divisor de dos números.

3681 25. Implemente una función que calcule el máximo común divisor de tres números.

26. Implemente una función que calcule el mínimo común múltiplo de dos núme-
ros.

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

3684 27. Implemente una función que calcule el mínimo común múltiplo de tres núme-
ros.

28. Implemente una función que voltee un número entero positivo dado. Por ejem-
3687 plo, si se ingresa 98786, se devuelve 68789.

29. Implemente una función que reciba un arreglo de números enteros y devuelva
el máximo común divisor de esos números.

3690 30. Implemente una función que reciba un arreglo de números enteros y devuelva
el mínimo común múltiplo de esos números.

31. Implemente una función que reciba como parámetros dos arreglos. La primera
3693 con los 6 números de una apuesta de la primitiva y la segunda con los 6 núme-
ros ganadores. La función debe devolver el número de aciertos.

32. Implemente una función que reciba un arreglo que debe rellenar. Se leerá por
3696 teclado una serie de números hasta que el usuario escriba “PARAR” o hasta
que el arreglo se llene: guarde sólo los pares e ignore los impares. Se devuelve
la cantidad de impares ignorados.

3699 33. Implemente una función que reciba una matriz de enteros y un número, e indi-
que si el número se encuentra en la matriz.

34. Implemente una función que devuelva el valor máximo de una matriz.

3702 35. Implemente una función que devuelva, en un arreglo, el área y el volumen de
un cilindro. Hemos de pasarle a la función el radio y la altura.

36. Implemente una función que recibe un número entero y devuelve, en un arre-
3705 glo, los divisores primos que tiene.

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
3708 carácter: 's', 'r', 'm', 'd'). La función devuelve una matriz con los resulta-
dos.

38. Implemente una función que calcule el n-ésimo término de la serie de Fibonac-
3711 ci. En esta serie el n-ésimo valor se calcula sumando los dos valores anteriores.
Es decir fibonacci(n) = fibonacci(n-1) + fibonacci(n-2), siendo fibonacci(0) =
1 y fibonacci(1) = 1.

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

3714 39. Igual que el ejercicio anterior, pero pudiendo configurar los valores de los dos
primeros términos de la serie.

40. Implemente una función que reciba una matriz de enteros, representando un
3717 tablero de ajedrez. Disponemos de las constantes PB (peón blanco), TN (torre
negra), etc. (P, T, C, A, R, D). La función debe devolver un valor booleano,
que indique si el rey negro está amenazado.

3720 41. Igual que el ejercicio anterior, pero indicando si existe jaque mate a las negras.

42.

* E24 Histograma

Implemente un programa, usando funciones, que lea N números de enteros positivos


3723 entre 0 y 250 (validar).

Se han definido los siguientes rangos: 0-50, 51-100, 101-150, 151-200 y 201-250.

Se debe mostrar el número de datos que está en cada uno de los rangos especificados
3726 (frecuencias), separados por un TAB. Además, se debe mostrar un histograma. Por
ejemplo:
Tabla de valores por rango
3729 ---------------------------------------------------------------------------
0-50 51-100 101-150 151-200 201-250
---------------------------------------------------------------------------
3732 17 8 10 5 32
---------------------------------------------------------------------------

Histograma
3735 |-----------------------------------------------------------------
0-50 | *******************
51-100 | *********
3738 101-150 | ***********
151-200 | *****
201-250 | ****************************************************
3741 |-----------------------------------------------------------------

Aritmética básica

Visualizar el siguiente menú


3744 1. Suma

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

2. Resta
3. Multiplicación
3747 4. División
5. Salir

Opción [1-5]: _
3750 Si no se ingresa un número del 1 al 5, se debe mostrar un error que lo indique y debe
pedir el ingreso de una opción válida. Opción 1: suma dos números, el primero en el
rango [-1000, -1] y el segundo en el rango [1, 1000]. Opción 2: resta dos números, el
3753 primero en el rango [-1000, 1] y el segundo en el rango [-1, 1000]. Opción 3: multipli-
ca dos números, el primero en el rango [100, 200] y el segundo en el rango [-10, 2].
Opción 4: división del primer número entre el segundo; el primero en el rango [-10,
3756 10] y el segundo en el rango [-5, -1] U [1, 5].

Potenciación

Desarrolle un programa que pida dos números. Se debe calcular la potencia tomando
3759 como base el primer número y como exponente el segundo número dado. El resulta-
do, luego de visualizarlo, debe elevarlo al cubo, ese resultado, luego de visualizarlo,
debe elevarlo al cuadrado (se debe presentar este último resultado también).

3762 * E25 Dado sesgado

Para resolver este ejercicio no puede usar la función choices del módulo random (Py-
thon).

3765 1. Escriba una función que devuelva una lista de seis números aleatorios. Los nú-
meros aleatorios son números de un decimal cuya suma es igual a uno.

2. Escriba una función para normalizar los números de una lista (lista con núme-
3768 ros mayores iguales a cero). Normalizar en este contexto se debe entender
como que los elementos de la lista que devuelve la función, luego de ser suma-
dos, dan igual a uno. Por ejemplo, si la función se llama normalizar, normali-
3771 zar([1, 3]) devuelve la lista [0.25, 0.75].

3. Escriba una función que devuelva el resultado de lanzamientos de un dado ses-


gado (como una lista). La función tiene como parámetros una lista con las
3774 probabilidades de que salga 1, 2, 3, 4, 5 y 6 del dado, respectivamente y un
número que indica cuántos resultados de lanzamientos devuelve la función (si
no se envía este argumento a la función, por defecto la función debe trabajar

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

3777 con el valor igual a uno, esto es, devuelve una lista con solamente un valor de
lanzamiento). Por ejemplo, si la función se llama dado, dado([0.3, 0.4, 0.1, 0.1,
0.1, 0.0])1 devuelve una lista con un valor de lanzamiento (quizá2 [1]). Las pro-
3780 babilidades de que salga 1 es 0.3, la probabilidad de que salga 2 es 0.4, la pro-
babilidad de que salga 3 es 0.1, etc. Como otro ejemplo, dado([0.1, 0.1, 0.3,
0.3, 0.1, 0.1], 5) devuelve una lista con cinco valores de lanzamiento (quizá [3,
3783 4, 3, 4, 1]).

4. Genere muchos lanzamientos de dados con su “dado” sesgado. Con los resulta-
dos de todos sus lanzamientos haga una gráfica (stem) como la que se muestra
3786 como ejemplo a continuación.

La gráfica del ejemplo anterior es el resultado de 100 lanzamientos del dado


con las probabilidades [0.1, 0.2, 0.1, 0.2, 0.2, 0.2]. La frecuencia con la que el
3789 dado dio los valores 1, 2, 3, 4, 5 y 6 fueron 10, 21, 6, 18, 19 y 26, respectiva-
mente. Sin embargo, y muy importante, la gráfica no muestra esos valores de
frecuencia sino la probabilidad empírica de acuerdo a los resultados de los lan-
3792 zamientos del dado sesgado.

Aproximación de sinh-1

Para n→∞ (en la práctica un número suficientemente alto) la función sinh -1 de x se


3795 puede calcular con la siguiente serie de Taylor:

1 Tome muy en cuenta que se envía solamente un argumento en este caso.


2 Recuerde que son valores al azar.

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

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
3798 (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.,
3801 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

3804 La función W de Lambert o también conocida como función Omega o log producto,
es la función inversa de f(w)=wew donde ew es la función exponencial natural y w es
cualquier número complejo. Para n→∞ (en la práctica un número suficientemente
3807 alto) la función W de Lambert de x se puede calcular con la siguiente serie de Taylor:

Desarrolle un programa que pida los valores de x (cualquier número real) y n (cual-
3810 quier número entero) para calcular el valor de la función W de Lambert de x con n
términos de la serie de Taylor. El programa debe hacer uso de una función desarrolla-
da por usted mismo llamada funcionW. No se pueden usar funciones predetermina-
3813 das de ningún lenguaje de programación para calcular el factorial o la potencia de un
número (tampoco se puede usar el acento circunflejo, ^); esto quiere decir que debe
desarrollar las funciones para calcular la potencia (llámela miPotencia) y el factorial
3816 (llámela miFactorial) de un número. Además, debe validar el valor de x como se indi-
ca en la serie de Taylor; para este fin, desarrolle una función llamada xValido (de-
vuelve verdadero o falso de acuerdo a la validación) y una función miABS (devuelve
3819 el valor absoluto de cualquier número real).

Factorial de un número con función recursiva

Desarrolle un algoritmo para calcular el factorial de un número dado. Este algoritmo


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

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

Máximo común divisor y mínimo común múltiplo

3825 Desarrolle un programa que calcule el máximo común divisor (MCD) y el mínimo co-
mún múltiplo (MCM) de dos números ingresados por el usuario. El programa deberá
manejar un menú con las siguientes opciones.
3828 1. Ingreso de datos (Se pide al usuario que ingrese los dos números)
2. Máximo Común Divisor (Calcula el MCD)
3. Mínimo Común Múltiplo (Calcula el MCM)
3831 4. Salir
Ejemplo:
1. Ingreso de datos
3834 número1: 12
número2: 30

El MCD de 12 y 30 es: 6
3837 El MCM de 12 y 30 es: 60

* E26 Peso adecuado

Escriba un programa, usando funciones, que determine cuántas personas (el número
3840 de personas es indicado por el usuario) están con un peso adecuado o no, según su
estatura. Para ello, considere la tabla 1.

Tabla 1: Peso ideal de una persona según su estatura.

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

El programa debe tener registrado en una matriz, los pesos y las estaturas correspon-
3843 dientes según lo mostrado en la tabla 1. El usuario debe indicar los datos de cuántas
personas va a ingresar y a continuación ingresar los valores de peso, estatura y sexo
de cada persona. Estos valores ingresados se deben almacenar en arreglos separados
3846 de pesos, de estaturas y de sexo. El programa debe verificar si esos valores están de
acuerdo a la tabla anterior. En base a la verificación las personas deben clasificarse
como:

3849 • A: si el peso de la persona está por debajo del rango considerado ideal.
• B: si el peso de la persona está en el rango de peso considerado ideal.
• C: si el peso de la persona está por debajo del rango considerado ideal.

3852 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-
3855 sultado así:
============================================================
CLASIFICACIÓN MUJERES HOMBRES
3858 ============================================================

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

A ValorA_m ValorA_h
B ValorB_m ValorB_h
3861 C ValorC_m ValorC_h
============================================================

* E27 Raíces de una función


3864 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
3867 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
3870 en el intervalo dado debe mostrarse un mensaje que indique al usuario ese resultado.

E28 El método de la bisección

Implemente una función que utilice el método de la bisección (vea Quarteroni et al.,
3873 2014, pp. 43–47) para encontrar uno de los dos ceros de la función en
el rango indicado por el usuario.

* E29 El método de Newton

3876 El método de Newton es un algoritmo iterativo que permite encontrar los ceros (i.e.,
cortes con el eje de las abscisas) de una función f(x). El método trabaja con los valo-
res de f(x) y f'(x) (i.e., la derivada de la función). Las aproximaciones del cero de la
3879 función están dadas por la fórmula iterativa

que permite calcular una secuencia de valores x(k) (las aproximaciones del cero de la
función) comenzando con un valor inicial x(0). El algoritmo termina cuando el valor
3882 absoluto de la diferencia entre una aproximación (x(k+1)) y la anterior (x(k)) es menor
a un valor llamado tolerancia o cuando se cumple un número máximo de iteraciones.
En la siguiente figura se pueden apreciar las primeras iteraciones generadas por el
3885 método de Newton con un valor inicial x(0) para la función f(x) = x + ex + 10/(1 +
x2) - 5.

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

Para este ejercicio se va a aproximar el cero de la función f(x) = π/3 - x + x2 - x3;


3888 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
3891 usar el valor de π, no una aproximación.

2. Escriba una función funcionEvaluada(x) que devuelva el valor de la función


f(x) evaluada en el punto x que se envía como argumento. Utilice una función
3894 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.

3897 4. Escriba una función newton(x0, tol, nmax) que devuelva en una matriz los
resultados del método. x0, tol y nmax son respectivamente x(0), tolerancia y
número máximo de iteraciones.

3900 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
3903 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-


3906 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-
3909 rar el número de columnas que tendría cada fila)

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

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


3915 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é
3918 corresponde cada valor) y luego las aproximaciones del cero de la función (se-
gunda fila) en forma vertical.

Ordenamiento de n números

3921 • Diseñe una función que ordene los números de un arreglo que se le pasa. Se
devuelve un arreglo con los números ordenados.

• Diseñe una función que ordene los números de una matriz que se le pasa. Se
3924 devuelve una matriz con los números ordenados.

Búsqueda lineal

• Diseñe una función que realice la búsqueda lineal de un arreglo. La función de-
3927 vuelve el índice (del arreglo original) en donde se encuentra el número busca-
do; si no se encuentra el número, la función devuelve -1. Una explicación de la
búsqueda lineal se puede encontrar en la sección 6.2 del libro de Alcalde Lan-
3930 charro y García López (1992).

• Diseñe una función que realice la búsqueda lineal de una matriz. La función
devuelve el índice (de la matriz original) en donde se encuentra el número bus-
3933 cado; si no se encuentra el número, la función devuelve (-1, -1). Una explica-
ción de la búsqueda lineal en matrices se puede encontrar en la sección 6.2.3
del libro de Alcalde Lancharro y García López (1992).

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

3936 E30 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-
3939 cado; si no se encuentra el número, la función devuelve -1. Una explicación de la bús-
queda binaria o dicotómica se puede encontrar en la sección 6.3 del libro de Alcalde
Lancharro y García López (1992). Este ejercicio NO se debe resolver utilizando fun-
3942 ciones recursivas, una explicación de la implementación utilizando funciones recursi-
vas se la puede encontrar en https://youtu.be/oMx3f8ffYUo.

Juego de dados entre dos

3945 En el juego cada jugador tiene dos dados (hay cuatro dados en total). En cada turno
los dos jugadores lanzan los dos dados al mismo tiempo. El juego termina cuando la
suma de los valores de ambos jugadores es igual, e.g., el un jugador saca 3 y 5 (su -
3948 man 8), y el segundo jugador saca 6 y 2 (suman 8). El ganador es la persona cuya
suma de valores de lanzamientos sea mayor. Por ejemplo, en la siguiente tabla se
muestra un juego que concluye en el turno 4 (pues la suma es igual); el ganador es el
3951 jugador 2.

En el caso de que la suma total sea igual para ambos jugadores, se debe continuar el
juego; nuevamente, termina cuando la suma de los valores de ambos jugadores es
3954 igual. Esto significa que siempre uno y sólo uno de los jugadores es ganador.

Se debe ir mostrando los valores sacados por los dos jugadores en cada turno. Por
ejemplo, lo siguiente es una ejecución del programa:
3957 Inicia el juego.

Jugador 1 Jugador 2
Turno Dados 1 y 2 Suma Dados 1 y 2 Suma
3960 1 1 y 3 4 2 y 2 4
2 4 y 1 5 3 y 5 8
3 6 y 6 12 2 y 4 6

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

3963 4 5 y 4 9 6 y 3 9

Suma total 30 Suma total 27

Finaliza el juego.

3966 El ganador es: Jugador 1.


1. Implemente una función que devuelva un número entero al azar en el rango [1,
6].

3969 2. Implemente una función que devuelva la suma (como número entero) de dos
números al azar en el rango [1, 6]. En esta función tiene que utilizar la función
implementada en el punto anterior.

3972 3. Debe mostrar los valores sacados en cada turno mediante una función. Debe
utilizar secuencias de escape para poder presentar la información con las tabu-
laciones pertinentes que presenten los resultados como se mostró en el ejemplo
3975 de ejecución del programa (i.e., perfectamente alineados).

* E31 Método de la potencia

El siguiente es el método de la potencia para estimar un valor propio estrictamente


3978 dominante (valor propio mayor a todo el resto de valores propios) y su respectivo
vector propio de una matriz cuadrada A. Una explicación del método se puede encon-
trar en el libro de Lay et al. (2016). El algoritmo del método es el siguiente:

3981 1. Inicialice un vector x0 cuyo componente más grande es 1.

2. Para k = 0, 1, 2, 3, …

a) Calcular Axk.

3984 b) Asigne uk con el componente de mayor valor absoluto de Axk.

c) Calcular xk+1 = (1/uk)Axk.

Para la mayoría de vectores x0, la secuencia {uk} se aproxima al valor propio domi-
3987 nante y la secuencia {xk} se aproxima al correspondiente vector propio.

En el desarrollo de este ejercicio utilice una lista de números como un vector (esto es
obligatorio). Por ejemplo, la lista v = [1, 2, 3] haría referencia al vector

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

3990 .

Así mismo, utilice una lista de listas de números como una matriz (esto es obligato-
rio). Por ejemplo, la lista A = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] haría referencia a la matriz

3993 .

Realice lo siguiente:

1. Programe una función que devuelva un vector con componentes aleatorios en


3996 el intervalo abierto (-1, 1), pero uno (y sólo uno) de los componentes debe ser
igual a uno. Los componentes deben tener como máximo dos decimales. La
función recibe un argumento que indica el número de componentes del vector
3999 a devolver.

2. Programe una función que multiplique una matriz por un vector (esos son los
parámetros de la función) y devuelva el resultado.

4002 3. Programe una función que devuelva el resultado de multiplicar un escalar por
un vector. Los parámetros son el escalar y el vector.

4. Programe una función que implemente el algoritmo del método de la potencia.


4005 La función tiene como único parámetro la matriz A de la que se quiere aproxi-
mar su valor propio dominante. La función devuelve una lista cuyo primer ele-
mento es la aproximación del valor propio de mayor magnitud de la matriz, el
4008 segundo elemento es la aproximación del vector propio asociado al valor pro-
pio de mayor magnitud y el tercer elemento tiene el número de iteraciones que
el método de la potencia realizó.

4011 Las iteraciones del algoritmo se realizan hasta que el error aproximado relativo
sea menor o igual a 0.0000000001. El error aproximado relativo está dado por

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

donde uk es la aproximación de u en la iteración k y uk-1 es la aproximación an-


4014 terior de u, es decir, en la iteración k−1. Tome mucho en cuenta el signo de
valor absoluto en la fórmula.

5. Las primeras diez aproximaciones del valor y vector propio deben ser mostra-
4017 das y, al final, también la última aproximación (que está condicionada por el
error aproximado relativo).

6. Documente adecuadamente el código fuente.

4020 Un ejemplo de ejecución del programa usando la función del método de la potencia
para la matriz A = [[6, 5], [1, 2]] es (recuerde que x0 es aleatorio)1:
Valor propio aproximado 0 : 9.3
4023 Vector propio aproximado 0: [1.0, 0.66]

Valor propio aproximado 1 : 7.247311827956989


Vector propio aproximado 1: [1.0, 0.24946236559139784]
4026 .
.
.
4029 Valor propio aproximado 8 : 7.000000288414237
Vector propio aproximado 8: [1.0, 0.20000005768284743]

Valor propio aproximado 9 : 7.000000041202032


4032 Vector propio aproximado 9: [1.0, 0.20000000824040642]

******** Resultados en la iteración 14 ********


Valor propio aproximado : 7.00000000001716
4035 Vector propio aproximado : [0.9999999999999999, 0.20000000000343207]
Un ejemplo de ejecución del programa para la matriz A = [[6, 5, -3, 7], [0, 2, 8, -2],
[0, 0, 9, 1], [0, 0, 0, 4]] es:
4038 Valor propio aproximado 0 : 12.3
Vector propio aproximado 0: [1.0, 0.56, -0.07, 0.47]

Valor propio aproximado 1 : 6.954471544715448


4041 Vector propio aproximado 1: [1.0, -0.03089430894308942, -
0.013008130081300825, 0.15284552845528454]
.

1 Los puntos suspensivos indican que hay más resultados intermedios. No se los muestra pues usan
mucho más espacio y los resultados mostrados dejan claro el funcionamiento del programa.

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

4044 .
.
Valor propio aproximado 8 : 6.559193444859399
4047 Vector propio aproximado 8: [0.9999999999999999, 0.22782416900328784,
0.20785577545585915, 0.006234275172933884]

Valor propio aproximado 9 : 6.773552562705645


4050 Vector propio aproximado 9: [1.0, 0.3210800243981408, 0.28615351415602286,
0.003801854740429916]

******** Resultados en la iteración 34 ********


4053 Valor propio aproximado : 9.000000000368226
Vector propio aproximado : [0.7918003236842618, 1.0, 0.8750000000562567,
4.091396521609436e-11]

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

4056 7. Manejo de Caracteres y Cadenas

Miscelánea

1. Dada una cadena, presentar de manera vertical cada letra de la cadena con su
4059 respectivo valor ASCII (primera columna la letra, segunda columna el valor).

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

4062 3. Hacer un programa que ingrese una cadena de caracteres y determine el núme-
ro de mayúsculas y el número de minúsculas.

4. Sustituir todos los espacios en blanco de una frase por un asterisco.

4065 5. Muestre el número de veces que aparecen las letras a, o y e en la cadena “Ma-
ñana es sábado y voy a irme a pasear por los hermosos parques de Cuenca”.
Además, si el número de veces que se repite la a es superior a 10 debe apare-
4068 cer el mensaje “Exceso de a”, si el número de veces que se repite la o es supe-
rior a 5 debe mostrarse “Exceso de o” y si se repite más de 3 veces la letra e
debe mostrarse “Exceso de e”.

4071 6. Implemente una función que devuelva una cadena sin los espacios en blanco.

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-


4074 cando si son iguales o distintos.

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
4077 una sola cadena el nombre y apellido de una persona y como otra cadena el
nombre y apellido de la otra persona.

10. Solicitar el ingreso del apellido, nombre y edad de dos personas como cadenas
4080 (validar que sea una edad correcta entre 0 y 130 años). Mostrar el nombre de
la persona con mayor edad.

11. Leer una cadena y decir si es un número entero o real válido. Asuma que el
4083 usuario ingresa solamente números (0-9) y puntos (.).

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

12. Contar cuántas palabras tiene una cadena. Escribir dos versiones del progra-
ma:

4086 a) Asumir que cada palabra está separada por un sólo espacio en blanco.
b) No se sabe cómo están separadas las palabras: pueden estar separadas por
más de un espacio en blanco.

4089 13. Escriba un programa que lea una frase y a continuación visualice cada palabra
de la frase en columnas, seguida del número de letras que tiene cada palabra.

14. Ingresar una frase y modificarla convirtiendo el primer carácter de cada pala-
4092 bra, si esta fuera una letra, de minúsculas a mayúsculas. Cada palabra está se-
parada por uno o más espacios o comas.

15. Contar el número de letras del alfabeto español de un texto ingresado.

4095 16. Contar el número de vocales que se encuentran en una cadena.

17. Contar el número de consonantes que se encuentran en una cadena.

18. El usuario ingresa una frase y el programa debe mostrar cuántas palabras de
4098 una letra, de dos letras, de tres letras, de cuatro letras y de cinco o más letras
existen en el texto ingresado. Asuma que no hay signos de puntuación ni inte-
rrogación (i.e. sólo se ingresan letras). Ejemplo:
4101 Ingrese una frase

Una frase no debe contener palabras innecesarias así como un párrafo no


debe contener frases innecesarias

4104 Resultados

1 letra : 0 palabras
2 letras: 3 palabras
4107 3 letras: 2 palabras
4 letras: 3 palabras
5+ letras: 8 palabras
4110 19. Dada la cadena “En mi próxima vida, creeré en la reencarnación”, mostrar lo
siguiente:

a) Su longitud
4113 b) El carácter asociado al índice 7
c) La subcadena “creeré”

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

d) El índice que ocupa el carácter ‘x’, desde la izquierda


4116 e) El índice que ocupa el carácter ‘x’, desde la derecha
f) La cadena transformada a mayúsculas
g) La cadena transformada a minúsculas
4119 h) La cadena transformadas las minúsculas a mayúsculas y las mayúsculas a
minúsculas
i) Por último, comprobar si el primer carácter de la cadena es ‘E’ y mostrar
4122 un mensaje que lo indique

20. Verificar si una cadena de texto almacenada en la cadena nif, es un NIF co-
rrecto o no. Si lo es, se imprimirá en pantalla su parte numérica; si no lo es, se
4125 mostrará el mensaje “NIF no válido”. Se tendrá en cuenta lo siguiente: Supo-
ner que los NIFs tienen 8 dígitos y, a continuación, una letra (no importa que
sea mayúscula o minúscula).

4128 Pista: dos condiciones que debe cumplir el NIF: tener 9 caracteres y que el úl-
timo sea una letra. Comprobado esto, verificar que el resto de caracteres son
dígitos.

4131 21. Solicitar el ingreso del nombre y edad de dos personas. Validar el nombre in-
gresado: 1) que no hayan espacios o caracteres diferentes a las vocales (vocales
con tildes o diéresis también), consonantes, o la ñ (u otros caracteres usados
4134 en nombres en español) y 2) que sólo la primera letra del nombre esté en ma-
yúscula (si no lo está, transformar el nombre a un formato donde la primera
letra sea mayúscula y las demás minúsculas). Validar que sea una edad correc-
4137 ta: 1) que no hayan caracteres que no sean números y 2) verificar que la edad
esté entre 0 y 150 años. Mostrar el nombre de la persona con mayor edad.

22. Invertir las palabras de una cadena. Por ejemplo, si la cadena es “Esta es una
4140 prueba de programación”, el resultado es “programación de prueba una es
Esta”.

23. Implemente un programa que reciba una cadena S y una letra X, y coloque en
4143 mayúsculas cada ocurrencia de X en S (el programa debe modificar la variable
S).

24. Ingresar una cadena de caracteres formadas por números y letras (en ese or-
4146 den) y obtenga otra cadena donde aparezca cada letra tantas veces como lo in-
dique el número que lo precede. Por ejemplo, si la cadena es 2w4r5f se debe
obtener la siguiente cadena: wwrrrrfffff.

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

4149 25. Leer una frase y encontrar la palabra de mayor longitud. El programa debe
imprimir la palabra y el número de caracteres de la misma.

26. Ingresar una cadena de caracteres y obtener otra con todos los caracteres de
4152 las posiciones impares de la cadena.

27. Hacer un programa que al recibir como dato una cadena de caracteres que re-
presente una fecha en formato (dd/mm/aa), genere otra cadena con la misma
4155 fecha pero con formato (dd de nombre del mes de aaaa). E.g. si se ingresa la
cadena 20/11/2006 la otra cadena será 20 de Noviembre de 2006.

28. Escriba un programa para ingresar un número telefónico en formato de cadena


4158 y que luego lo convierta de la siguiente manera:

Número Telefónico: 5256284000


Nueva Cadena: (52)-5-6284000

4161 29. Escribir un programa que al recibir como datos dos cadenas de caracteres for-
me una tercera cadena intercalando los caracteres de las palabras de las cade-
nas recibidas.

4164 30. Implementar una función cuya entrada sea una cadena S y un factor de multi-
plicación N, y genere la cadena N veces. Por ejemplo:
Hola, 3 se convertirá en Hola Hola Hola.

4167 31. Contar cuántas veces se encuentra una subcadena dentro de una cadena.

32. Hacer un programa que elimine todas las ocurrencias de una subcadena dentro
de una cadena.

4170 33. Ingrese un texto e indique qué caracteres alfanuméricos no han aparecido en el
texto.

34. Ingrese un texto e indique el porcentaje de palabras que tiene menos de 5 ca-
4173 racteres y el porcentaje de palabras con 5 o más caracteres.

35. Escriba un programa que lea una frase y sustituya todas las secuencias de dos
o varios blancos por un solo blanco y visualizar la frase obtenida.

4176 36. Escriba un programa que calcule la frecuencia de aparición de las vocales de
un texto proporcionado por el usuario. Esta solución se debe presentar en for-
ma de histograma, e.g.:

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

4179 a 15 ***************
e 8 ********
i 5 *****
4182 o 1 *
u 6 ******
37. Dada una cadena de caracteres. Realizar lo siguiente:

4185 a) Extraer los n primeros caracteres de la cadena.


b) Extraer los n últimos caracteres de la cadena.
c) Eliminar los espacios en blanco que haya al final de la cadena.
4188 d) Eliminar los espacios en blanco que haya al comienzo de la cadena.
e) Eliminar de una cadena los n caracteres que aparecen a partir de la posi-
ción p.
4191 f) Eliminar la primera aparición de una cadena dentro de otra.
g) Insertar una cadena dentro de otra a partir de la posición p.
h) Contar el número de veces que aparece una cadena dentro de otra.
4194 i) Borrar todas las apariciones de una cadena dentro de otra.
j) Sustituir todas las apariciones de una cadena dentro de otra, por una ter-
cera.

4197 38. Un grupo de inteligencia militar desea codificar los mensajes secretos de tal
forma que no puedan ser interpretados con una lectura directa, para lo cual
han establecido las siguientes reglas:

4200 a) Todo mensaje debe tener sus letras en mayúsculas.


b) Reemplazar cada letra por la que sigue según abecedario, excepto Z que se
deberá reemplazar con la letra A.
4203 c) Reemplazar cada dígito encontrado por el siguiente número excepto el 9
que deberá ser reemplazado por el 0.

39. Dada una palabra (una sola palabra) indicar si es palíndromo. Puede ver más
4206 información en https://goo.gl/NkkZw.

40. Dada una frase (una o más palabras) indicar si es palíndromo. Ignore mayús-
culas y minúsculas, signos de puntuación y espacios en blanco.

4209 41. El usuario ingresa una hora como cadena de caracteres; la hora no necesaria-
mente cumple con el formato hh:mm:ss (e.g., 01:09:04) sino que puede estar
expresada, por ejemplo, de la siguiente manera: 1:09:4, 1:9:4, 01:09:4, etc
4212 (siempre primero la hora, segundo los minutos y luego los segundos). El pro-

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

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-
4215 coge de un menú si quiere que n sean segundos, minutos u horas. Ejemplo, si
se ingresa 1:8:04, y se escoge 60 segundos (se suma 60 segundos a la hora in-
gresada), el resultado es 01:09:04 (el resultado sí debe seguir el formato
4218 hh:mm:ss).

42. * Escribir una función llamada terminaEnVocal que verifique si una palabra
termina en vocal independientemente de si está en mayúsculas o minúsculas.
4221 También escribir una función denominada manipulacionDeCadenas que reciba
como parámetro una frase y visualice en pantalla (una en cada línea) las pala-
bras de la misma y el número total de palabras que terminan en vocal. La fun-
4224 ción de verificación de si termina en vocal o no, debe ser utilizada para contar
el número total de palabras que terminan en vocal. A continuación se muestra
un ejemplo:

4227 Entrada
Ingrese la frase: HolA mundo cruel
Salida
4230 HolA
mundo
cruel

4233 El número de palabras que terminan en vocal es: 2


43. * Implementar un algoritmo que permita gestionar las siguientes opciones:

a) Función que permita mostrar un menú de las diferentes opciones


4236 b) Función que permita ingresar un listado de números enteros separados por
comas (,) en una variable global de tipo cadena.
c) Función que permita calcular el promedio de los números ingresados en la
4239 cadena
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-
4242 trae el menor o el mayor. A continuación se muestra un ejemplo de ejecu-
ción del programa:
Ingrese los números separados por comas: 4,5,6,12,13,5,8,7

4245 Menú

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

1. Promedio
2. Máximo
4248 3. Mínimo
4. Salir

Elija una opción [1-4]: 1


4251 El promedio es: 7.5

Menú
1. Promedio
4254 2. Máximo
3. Mínimo
4. Salir

4257 Elija una opción [1-4]: 2


El máximo es: 13

Menú
4260 1. Promedio
2. Máximo
3. Mínimo
4263 4. Salir

Elija una opción [1-4]: 3


El mínimo es: 4

4266 Menú
1. Promedio
2. Máximo
4269 3. Mínimo
4. Salir

Elija una opción [1-4]: 4


4272 Saliendo del programa...
44. Dados dos números en forma de arreglo de caracteres, implemente una función
que genere el arreglo suma.

4275 Ejemplo:

Sea A = { ‘2’, ‘0’, ‘1’, ‘2’ } 2 0 1 2

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

Sea B = { ‘1’, ‘9’ } 1 9


4278 suma(A, B) = { ‘2’, ‘0’, ‘3’, ‘1’ } 2 0 3 1

La función que se pide recibe como argumentos dos arreglos de caracteres, y


devuelve como resultado un arreglo de caracteres. El arreglo resultado tendrá
4281 el mínimo tamaño necesario para contener el número; o sea, sin “ceros a la iz-
quierda”

45. Escribir un programa que elimine la k-ésima palabra de una cadena. Debe es-
4284 cribir una función para realizar esto. La función recoge como parámetros la ca-
dena y k, y devuelve la cadena de resultado.

46. Construir una función para que busque una subcadena en una cadena a partir
4287 de una determinada posición y que devuelva la posición donde se encuentra la
subcadena en caso contrario que devuelva cero.

47. Escriba un programa que cuente el número de palabras que tengan al menos
4290 cuatro vocales diferentes dado un párrafo. Luego, escribir una función que re-
coja como parámetros un párrafo y el número mínimo de vocales diferentes
que deben tener las palabras a buscar; la función devuelve el número de pala-
4293 bras en el párrafo con el mínimo de vocales indicado. Finalmente, edite la fun-
ción para que recoja un parámetro más que indique si el número mínimo es de
vocales o consonantes; la función devuelve el número de palabras en el párrafo
4296 que tiene mínimo el número de vocales o consonantes de acuerdo a lo que se
indique.

48. Implemente una función que voltee una palabra (cadena) dada. Por ejemplo, si
4299 se ingresa arepa, se devuelve apera. Además, indicar si esas dos palabras son
iguales.

49. * E32 Un anagrama es una palabra o frase formada intercambiando (en cual-
4302 quier orden) las letras de otra palabra o frase. Por ejemplo Esponja es un ana-
grama de Japonés. Escriba una función que determine si una cadena es un
anagrama de otra (“las palabras poseen las mismas letras, con la misma canti-
4305 dad de apariciones, pero en un orden diferente”). Ignore mayúsculas y minús-
culas, signos de puntuación y espacios en blanco. Puede ver más información
en https://goo.gl/hXM1vS.

4308 50. Dada una cadena de caracteres, escriba una función que imprima en pantalla
todas las permutaciones de los caracteres de la cadena de entrada.

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

Ejemplo:

4311 permutaciones(“abc”)
imprime: {“abc”, “acb”, “bac”, “bca”, “cab”, “cba”}

51. Ejercicio

4314 * E33 Datos personales

Implemente un programa usando funciones que lea cadenas de caracteres en el si-


guiente formato:
4317 Nombres;Apellidos;Profesión;Edad;Lugar de Residencia
Los valores entre punto y comas pueden estar formados por letras, números o espa-
cios en blanco.

4320 Por ejemplo:


Juan;Pérez Torres;Ingeniero;37;Cuenca
Karen Susana;López Alvear;Economista;32;Loja
4323 El programa debe separar de cada cadena de caracteres, cada valor entre punto y
coma y mostrarlos como resultado en líneas separadas:

Por ejemplo:
4326 Nombres: Juan
Apellidos: Pérez Torres
Profesión: Ingeniero
4329 Edad: 37
Vive en: Cuenca

Nombres: Karen Susana


4332 Apellidos: López Alvear
Profesión: Economista
Edad: 32
4335 Vive en: Loja

Estadísticas de texto

Ejercicio propuesto por René Estrella.

4338 El usuario ingresa un texto. El programa muestra las siguientes estadísticas acerca
del texto ingresado:

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

1. conteo de vocales
4341 2. conteo de consonantes
3. conteo de dígitos
4. conteo de caracteres especiales
4344 5. conteo de mayúsculas
6. conteo de minúsculas
7. conteo de palabras categorizadas por longitud
4347 8. conteo total de palabras

Ejemplo:

El usuario ingresa:
4350 Náufrago (título original en inglés: Cast Away) es una película dirigida por
el cineasta estadounidense Robert Zemeckis, protagonizada por Tom Hanks y
estrenada en el año 2000.
4353 El programa muestra:
Vocales: 59
Consonantes: 78
4356 Dígitos: 4
Caracteres especiales: 10
Mayúsculas: 7
4359 Minúsculas: 130
Palabras categorizadas por número de caracteres:
1: 1
4362 2: 5
3: 5
4: 2
4365 5 o más: 14
Total palabras: 27
El ejemplo ilustra los siguientes aspectos:

4368 1. Las vocales tildadas se cuentan como caracteres especiales, y no como vocales.
2. El conteo de vocales y consonantes considera tanto mayúsculas y minúsculas.
Por ejemplo, el número de consonantes (78), corresponde a 6 mayúsculas y 72
4371 minúsculas.

* E34 Analizador de tweets

Ejercicio propuesto por René Estrella.

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

4374 El objetivo de este ejercicio es escribir un analizador simple de tweets. El dato de en -


trada para el programa sería el texto de un tweet y el programa debería mostrar la
siguiente información:

4377 1. Número y lista de cuentas de twitter mencionadas (las cuentas de twitter em-
piezan con @)
2. Número y lista de hashtags mencionados (los hashtags empiezan por #)
4380 3. Conteo de palabras según el número de letras: número de palabras con una le-
tra, con dos letras, con tres letras, con cuatro letras, con cinco letras, y con
más de cinco letras. Este conteo incluye cuentas y hashtags.

4383 Ejemplo
Tweet:
Sigue las últimas noticias de #Cuenca, #Ecuador y el Mundo en @eltiempocuenca
4386 #marcandodiferencia @IGecuador

Resultados
2 cuentas:
4389 eltiempocuenca
IGecuador

3 hashtags:
4392 Cuenca,
Ecuador
marcandodiferencia

4395 Conteo de palabras:


1 letra: 1
2 letras: 3
4398 3 letras: 1
4 letras: 0
5 letras: 2
4401 5+ letras: 7

Eliminación de n-ésima palabra

Ejercicio propuesto por René Estrella.

4404 El usuario ingresa un texto, una palabra y un entero n. El programa elimina la n-ési-
ma ocurrencia de la palabra en el texto y muestra el texto resultante. No se conside-
ra distinción entre mayúsculas y minúsculas.

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

4407 Ejemplo:

Supongamos que el usuario ingresa el siguiente texto:


El rally se correrá también en Bolivia, específicamente en el extremo sur del
4410 Lago Titicaca, el más alto del mundo, y el ya clásico Salar de Uyuni.
Luego ingresa la palabra “el” y el número 3. En el texto ingresado hay 6 ocurrencias
de la cadena “el”, pero sólo 4 de ellas corresponden a una palabra, ya que no se con -
4413 sideran las ocurrencias de “el” que no forman una palabra completa, por ejemplo
“...del Lago Titicaca...” y “...más alto del mundo...”. Como asumimos que el usuario
desea eliminar la 3ra ocurrencia de la palabra en el texto, se eliminaría la que corres-
4416 ponde a “...el más alto...”, y por lo tanto lo que debería mostrar el programa es:
El rally se correrá también en Bolivia, específicamente en el extremo sur del
Lago Titicaca, más alto del mundo, y el ya clásico Salar de Uyuni.

4419 Cifrado por sustitución

“En un sistema de cifrado por sustitución, cada letra o grupo de letras se reemplazan
por otra letra o grupo de letras para disfrazarla. Uno de los sistemas de cifrado más
4422 viejos conocido es el sistema de cifrado de César, atribuido a Julio César. En este
método, a se vuelve D, b se vuelve E, c se vuelve F, ... , y z se vuelve C. Por ejemplo,
ataque se vuelve DWDTXH.” (Tanenbaum y Wetherall, 2012, p. 662)

4425 1. Escribir un programa que permita codificar mensajes secretos de forma que no
puedan ser interpretados con una lectura directa. Se debe utilizar las siguien-
tes reglas:

4428 a) Se debe reemplazar cada letra por la siguiente más uno, es decir en lugar
de la “a” iría la “c”, excepto las letras “y” y “z”, que se deberá reemplazar
con la letra “a” y “b” respectivamente.
4431 b) De la cadena resultante en el numeral 1 se deberá remplazar las letras vo-
cales por los números 0,1,2,3,4, respectivamente.
c) El mensaje resultante debe contener la primera letra de cada palabra del
4434 mensaje en mayúscula.

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
4437 el mensaje encriptado.

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

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

4440 fijo]. En este caso, k se convierte en una clave del método general de alfabetos
desplazados circularmente.” (Tanenbaum y Wetherall, 2012, p. 662) Si k=2,
por ejemplo, sustituiremos la “a” por la “c”, la “b” por la “e”, y así
4443 sucesivamente. El problema que aparece en las últimas “k” letras del alfabeto
tiene fácil solución: en el ejemplo, la letra “y” se sustituirá por la “a” y la
letra “z” por la “b”. La sustitución debe aplicarse a las letras minúsculas y
4446 mayúsculas y a los dígitos de igual manera: el “0” se sustituye por el “2”, el
“1” por el “3” y así hasta llegar al “9”, que se sustituye por el “1”.
Escriba un programa que lea un texto y el valor de k, y muestre su versión en-
4449 criptada.

Cifrado por transposición

La información acerca de los sistemas de cifrado por transposición se basa en el libro


4452 de Tanenbaum y Wetherall (2012).

Los sistemas de cifrado por sustitución (vea el ejercicio llamado Cifrado por sustitu-
ción, página 179) conservan el orden de los símbolos de texto plano, pero los disfra-
4455 zan. En contraste, los sistemas de cifrado por transposición reordenan las letras pero
no las disfrazan. En la figura 14 se presenta un sistema de cifrado por transposición
común, la transposición columnar. La clave del sistema de cifrado es una palabra o
4458 frase que no contiene letras repetidas. En este ejemplo, la clave es MEGABUCK. El
propósito de la clave es ordenar las columnas; la columna 1 está bajo la letra clave
más cercana al inicio del alfabeto, y así sucesivamente. El texto plano se escribe de
4461 manera horizontal, en filas, las cuales se rellenan para completar la matriz si es nece-
sario. El texto cifrado se lee por columnas, comenzando por la columna cuya letra
clave es la más baja.

Figura 14: Un sistema de cifrado por transposición.Tomado de Tanenbaum y


Wetherall (2012, p. 664).

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

4464 Desarrolle un programa de cifrado y descifrado por transposición. Una de las funcio-
nes que se desarrollen (cifrar) en el programa debe tener como parámetros el texto
a cifrar y la clave, y debe devolver el texto cifrado. Otra de las funciones que se desa-
4467 rrollen (descifrar) en el programa debe tener como parámetros el texto cifrado y
la clave, y debe devolver el texto descifrado.

* E35 Manejo de una cadena con información personal

4470 a) Escriba un programa con funciones que permita al usuario ingresar una línea de
texto en el siguiente formato:
NOMBRE APELLIDO, EDAD; NOMBRE APELLIDO, EDAD; NOMBRE APELLIDO, EDAD; NOMBRE
4473 APELLIDO, EDAD.
Por ejemplo:
Pedro Pérez, 35; Lara Muñoz, 45; José Calle, 20; María Cárdenas, 22; Clara
4476 Arévalo, 65.
El programa debe encontrar la persona que tiene mayor edad. Debe mostrar al usua-
rio los datos de la persona con mayor edad, de la siguiente forma:

Por ejemplo:
NOMBRE: nombre ingresado NOMBRE: Clara
APELLIDO: apellido ingresado APELLIDO: Arévalo
EDAD: edad ingresada EDAD: 65
4479 b) Escriba un programa utilizando funciones, que permita al usuario ingresar una lí-
nea de texto en el siguiente formato:
NOMBRE APELLIDO, SUELDO; NOMBRE APELLIDO, SUELDO; NOMBRE APELLIDO, SUELDO;
4482 NOMBRE APELLIDO, SUELDO.
Por ejemplo:
Pedro Pérez, 3500; Luis Muñoz, 2450; José Calle, 1200; María Cárdenas, 2200;
4485 Clara Arévalo, 3650.
El programa debe encontrar la persona que tiene menor sueldo. Debe mostrar al
usuario los datos de la persona con menor sueldo, de la siguiente forma:

Por ejemplo:
NOMBRE: nombre ingresado NOMBRE: José
APELLIDO: apellido ingresado APELLIDO: Calle
SUELDO: sueldo ingresado SUELDO: 1200

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

4488 * E36 Línea de comandos

Simule una terminal que ejecute comandos para operaciones aritméticas básicas (su-
mar, restar, multiplicar, dividir) y de información de uso. Los comandos sumar, res-
4491 tar, multiplicar, dividir y estadísticas (sólo hay cinco comandos) tienen la siguiente
sintaxis y funcionalidad:

• Sumar num1,num2,num3,…,numN

4494 Uno se ingresa mediante el teclado el comando sumar (cualquier carácter del coman-
do puede ser minúscula o mayúscula), un espacio y la lista de números (pueden ser
reales; el separador de decimales es el punto) a sumar; todo en una misma línea. Lue-
4497 go de “dar enter” el resultado en la línea siguiente de la pantalla es Suma: valor de la
suma. Si hay un error en la sintaxis, el programa debe mostrar un error; por ejemplo
si se ingresa suma 1;3,4, el programa debe decir “Hubo un error de sintaxis en el co-
4500 mando ingresado.”

• Restar num1,num2

Uno se ingresa mediante el teclado el comando restar (cualquier carácter del coman-
4503 do puede ser minúscula o mayúscula), un espacio y dos (2) números (pueden ser rea-
les; el separador de decimales es el punto) a restar; todo en una misma línea. Luego
de “dar enter” el resultado en la línea siguiente de la pantalla es Resta: valor de la
4506 resta (la resta es num1-num2). Si hay un error en la sintaxis, el programa debe mos-
trar un error; por ejemplo si se ingresa restar 1,3,4, el programa debe decir “Hubo un
error de sintaxis en el comando ingresado.”

4509 • Multiplicar num1,num2,num3,…,numN

Uno se ingresa mediante el teclado el comando multiplicar (cualquier carácter del co-
mando puede ser minúscula o mayúscula), un espacio y la lista de números (pueden
4512 ser reales; el separador de decimales es el punto) a multiplicar; todo en una misma lí-
nea. Luego de “dar enter” el resultado en la línea siguiente de la pantalla es Multipli-
cación: valor de la multiplicación. Si hay un error en la sintaxis, el programa debe
4515 mostrar un error; por ejemplo si se ingresa multiplicar 1;3.2,4.2, el programa debe de-
cir “Hubo un error de sintaxis en el comando ingresado.”

• Dividir num1,num2

4518 Uno se ingresa mediante el teclado el comando dividir (cualquier carácter del coman-
do puede ser minúscula o mayúscula), un espacio y dos (2) números (pueden ser rea-

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

les; el separador de decimales es el punto) a dividir; todo en una misma línea. Luego
4521 de “dar enter” el resultado en la línea siguiente de la pantalla es División: valor de la
división (la división es num1/num2). Si hay un error en la sintaxis, el programa debe
mostrar un error; por ejemplo si se ingresa dividir 1,3,4,5, el programa debe decir
4524 “Hubo un error de sintaxis en el comando ingresado.”

• Estadísticas

Uno se ingresa mediante el teclado el comando estadísticas (cualquier carácter del co-
4527 mando puede ser minúscula o mayúscula, o tener la letra i con tilde o sin tilde). Lue -
go de “dar enter” el resultado en la línea siguiente de la pantalla es
Número de veces que se utilizó correctamente cada comando
4530 Sumar: num veces
Restar: num veces
Multiplicar: num veces
4533 Dividir: num veces
Si el número de veces es 1, debe decir 1 vez (y no 1 veces).

• Salir

4536 Uno se ingresa mediante el teclado el comando salir (cualquier carácter del comando
puede ser minúscula o mayúscula) y se termina la ejecución del programa.

Nota: antes del comando y después de los números que necesita el comando (en los
4539 comandos sumar, restar, multiplicar y dividir) no importa si se ingresan espacios en
blanco; con que no haya un error en la sintaxis (entre el comando y los números que
necesita el comando sólo debe haber un espacio), no debería haber ningún mensaje
4542 de error. Por ejemplo: espacio espacio espacio suMaR 1,2,3,4,5,6 espacio espacio no
debería dar ningún error de sintaxis. Utilice/cree funciones donde se necesite.

A continuación se muestra un ejemplo de ejecución del programa. Las líneas en negri-


4545 ta son los comandos (y los respectivos números que necesita el mismo) que se ingre-
san por parte del usuario.
sumar 1, 2, 4
4548 Suma: 7
RestaR 3,4
Resta: -1
4551 MultiPlicar 4,5,3,2,4
Multiplicación: 480
Dividir 4,3

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

4554 División: 1,333333333


ReSTar 5,4
Resta: 1
4557 Suma 4,5,6,12,13,5,8,7
Hubo un error de sintaxis en el comando ingresado.
EstAdísticAS
4560 Número de veces que se utilizó correctamente cada comando
Sumar: 1 vez
Restar: 2 veces
4563 Multiplicar: 1 vez
Dividir: 1 vez
Salir

4566 * E37 Mantenimiento de datos de personas

Se requiere realizar un programa que permita hacer un mantenimiento de los datos


de personas. Generalmente un mantenimiento significa realizar operaciones de inser-
4569 ción, actualización, eliminación y búsquedas de registros; la actualización, eliminación
y búsqueda, por lo general, se realiza en base a un campo específico (que identifica
unívocamente a cada registro). Por ejemplo, la siguiente tabla muestra la información
4572 de tres personas (en este caso la cédula es el valor que identifica unívocamente a cada
persona).

Cédula Nombre Apellido Edad

01064634657 Juan Pérez 23

01064636638 Víctor Guzmán 21

01064688644 Pedro Flores 20

Los registros (un registro es el conjunto de valores de una misma persona) se deben
4575 ingresar en forma de cadena. La coma es el separador de valores de los campos (cam-
po es cada dato del registro: cédula, nombre, apellido y edad) y el punto y coma es el
separador de registros. La información de la tabla del ejemplo se representaría con la
4578 siguiente cadena:
01064634657,Juan,Pérez,23;01064636638,Víctor,Guzmán,21;01064688644,Pedro,Flor
es,20;
4581 El programa debe permitir, mediante un menú:

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

1. Ingresar un nuevo registro.


2. Actualizar los valores de los campos de una persona (la cédula no se puede
4584 modificar).
3. Eliminar el registro de una persona.
4. Mostrar los valores de los campos de una persona.
4587 5. Listar los registros de todas las personas.
6. Calcular el promedio de las edades de todas las personas.
7. Terminar el programa.

4590 Este ejercicio pretende mejorar sus destrezas para usar funciones, por eso, usted debe
implementar las funciones que considere necesarias.

Una restricción con la que debe cumplir su programa es que utilice una variable glo-
4593 bal para la cadena de datos de personas y para el número total de personas.

Ejemplo:

Ingreso

4596 Se le pide al usuario que ingrese los datos de la persona


Cédula: 01064634657
Nombre: Juan
4599 Apellido: Pérez
Edad: 23
Actualización

4602 Se le pide al usuario que ingrese una cédula existente y los nuevos valores del resto de
campos
Cédula: 01064634657
4605 Nombre: Diego
Apellido: Sarmiento
Edad: 25
4608 Si la cédula que se busca no se encuentra en la cadena que contiene la información de
todas las personas, se muestra un mensaje de error: “La persona no ha sido registra-
da.”.

4611 Para este ejemplo, el resultado de la actualización de la cadena que contiene la infor-
mación de las personas es:
01064634657,Diego,Sarmiento,25;01064636638,Víctor,Guzmán,21;01064688644,Pedro
4614 ,Flores,20;

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

Eliminación

Se le pide al usuario que ingrese la cédula de la persona a eliminar

4617 • Cédula: 01064634657

Se elimina el registro de esa persona de la cadena de personas:


01064636638,Víctor,Guzmán,21;01064688644,Pedro,Flores,20;
4620 Visualización

Se le pide al usuario que ingrese la cédula

• Cédula: 01064634657

4623 El programa muestra el resto de campos


Nombre: Juan
Apellido: Pérez
4626 Edad: 23
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-
4629 da.”.

Listar

Se muestran uno a uno todos los registros de personas


4632 Cédula: 01064636638
Nombre: Víctor
Apellido: Guzmán
4635 Edad: 21

Cédula: 01064688644
Nombre: Pedro
4638 Apellido: Flores
Edad: 20
Promedio de edades

4641 Se calcula y muestra el promedio de las edades de todas las personas que estén en ese
momento en la lista.

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

8. Búsquedas

4644 Algunos de los siguientes ejercicios son basados en el libro de Gómez Fuentes y Cer-
vantes Ojeda (2013).

1. Implemente un programa que pida al usuario el tamaño de un arreglo y que


4647 pida sus datos (números reales). Solicitar al usuario un número a buscar den-
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á.

4650 2. Implemente una función llamada busquedaSecuencial que tenga como paráme-
tros un arreglo y un elemento a buscar en el arreglo. La función debe regresar
la posición índice del elemento si se encuentra en el arreglo y -1 si no lo en-
4653 cuentra en el arreglo.

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á
4656 en el arreglo usando búsqueda binaria.

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-
4659 dice del elemento si se encuentra en el arreglo y, si no se encuentra en el arre-
glo, regresar un -1.

5. El siguiente es un programa que le permitirá tener una idea de la eficiencia de


4662 los métodos de búsqueda en cuanto al número de comparaciones necesarias
que se llevan a cabo en cada algoritmo y el tiempo que se demora cada uno en
la ejecución.

4665 a) Implemente una función que reciba un arreglo de n elementos enteros y el


algoritmo a utilizar para buscar uno de los elementos (son dos parámetros:
arreglo de elementos y algoritmo de búsqueda). La función devuelve la po-
4668 sición en la que se encuentra el elemento (si no se encuentra, devuelve -1),
el número de comparaciones realizadas para encontrarlo y el tiempo de eje-
cución en segundos.

4671 b) Genere un arreglo de 21 elementos con números aleatorios enteros en el


rango [-15, 15]. Los números no deben repetirse en el arreglo.

c) Utilice la función desarrollada en el literal a para buscar un elemento dado


4674 en el arreglo generado con cada uno de los algoritmos de búsqueda. Para

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

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
4677 una tabla en donde se muestre el algoritmo, el número de comparaciones y
el tiempo:
================================================
4680 Tabla de comparación para algoritmos de búsqueda
================================================
--------------------------------------------------------
4683 Algoritmo # comparaciones Tiempo [seg.]
--------- --------------- -------------
Algoritmo 1 ## ##
4686 Algoritmo 2 ## ##
... ... ...
--------------------------------------------------------
4689 d) Genere 1000 arreglos que cumplan con las condiciones del literal b. En
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-
4692 da se debe ir guardando el número de comparaciones y el tiempo de cálcu-
lo utilizado. Finalmente, presente una tabla con estadísticas de eficiencia
(estos datos son empíricos) de los algoritmos y un histograma para repre-
4695 sentar las mismas (el histograma presenta los valores normalizados; los dos
signos de numeral en el histograma significa que debe poner los números
que representa cada barra):
4698 ================================================
Tabla de comparación para algoritmos de búsqueda
================================================

4701 Los resultados presentados son el promedio de la búsqueda de un


elemento al azar (se asegura que está dentro del arreglo) en los 1000
arreglos generados aleatoriamente. Con el mismo arreglo generado
4704 aleatoriamente, se realizó la búsqueda del mismo elemento (elegido al
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).

4707 ---------------------------------------------------------------
Algoritmo # comparaciones Tiempo [seg.]
promedio promedio
4710 --------- --------------- -------------
Algoritmo 1 ## ##

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

Algoritmo 2 ## ##
4713 ... ... ...
---------------------------------------------------------------

=======================================
4716 Histograma para comparación de métricas
=======================================
-----------------------------------------------------------------
4719 Algoritmo 1 |
# comparaciones (prom) |▬▬▬▬▬▬▬▬▬▬ ##
Tiempo [seg.] (prom) |▬▬▬▬▬▬▬ ##
4722 |
Algoritmo 2 |
# comparaciones (prom) |▬▬▬▬▬▬▬ ##
4725 Tiempo [seg.] (prom) |▬▬▬▬▬▬▬▬ ##
|
. | . .
4728 . | . .
. | . .
-----------------------------------------------------------------
4731 e) De acuerdo a los datos, discuta la eficiencia de los métodos estudiados.
¿Qué método es el mejor y por qué?, ¿Qué método es el peor y por qué?,
¿Cuándo utilizaría cada método?, etc.

4734 6. Ejercicio

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

9. Ordenamiento

Miscelánea

4737 Algunos de los siguientes ejercicios son basados en el libro de Joyanes Aguilar et al.
(2003).

1. * Dada la siguiente lista {a, m, c, j, k} después de dos pasadas de un algorit-


4740 mo de ordenación, la lista ha quedado {a, c, m, j, k}. ¿Qué algoritmo de orde-
namiento se está utilizando?

a) Inserción
4743 b) Selección
c) Burbuja
d) Ninguna de las anteriores

4746 2. Dada la lista de números {-5, 18, -12, 17, -6, -20, -4, -8}, escribir cómo evolu-
cionaría dicha lista hasta quedar completamente ordenada de manera descen-
dente mediante: a) ordenamiento de burbuja, b) algoritmo de selección y c) al-
4749 goritmo de inserción.

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:
4752 a) ordenamiento de burbuja, b) algoritmo de selección y c) algoritmo de inser-
ción.

4. Dado un arreglo de números reales, escriba un método que ordene los elemen-
4755 tos del arreglo de tal forma que los números pares aparezcan antes que los nú-
meros impares. Además, los números pares deberán estar ordenados de forma
ascendente, mientras que los números impares deberán estar ordenados de for-
4758 ma descendente. Esto es, el arreglo {1,2,3,4,5,6} quedará como {2,4,6,5,3,1}.

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
4761 cada elemento y vaya mostrando paso a paso la ordenación. Haga dos versio-
nes: una para ordenación ascendente y otra ordenación descendente. Por ejem-
plo, si se tuvieran sólo 3 elementos las gráficas serían las siguientes:
4764 Iteración 0 (elementos sin ordenar):
E01 *****

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

E02 *
4767 E03 **

Iteración 1:
E01 *
4770 E02 *****
E03 **

Iteración 2:
4773 E01 *
E02 **
E02 *****

4776 ¡Fin! Los elementos se ordenaron luego de 2 iteraciones.


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
4779 cada elemento y vaya mostrando paso a paso la ordenación. Haga dos versio-
nes: una para ordenación ascendente y otra ordenación descendente. Además
se debe presentar un menú para elegir el método de ordenamiento a utilizar.

4782 7. Se ha recolectado información del peso y la estatura de n personas. Implemen-


te una función que reciba una matriz de 2×n en donde en la primera fila estén
los datos de peso y en la segunda fila los datos de la estatura. La función de -
4785 vuelve la matriz ordenada de manera ascendente o descendente con respecto al
peso o a la estatura. La función recoge como parámetros matriz, optOrdena-
miento, optVariable, donde optOrdenamiento indica si es ordenamiento ascen-
4788 dente o descendente (una cadena asc o desc) y optVariable indica la variable
con respecto a la cual se ordena (una cadena peso o estatura).

8. Se ha recolectado información del peso y la estatura de n personas. Implemen-


4791 te una función que reciba una matriz de 2 x n en donde en la primera fila es -
tén los datos de peso y en la segunda fila los datos de la estatura (para reali-
zar pruebas usted puede generar números reales aleatorios para el peso y la es-
4794 tatura de las n personas). La función devuelve la matriz ordenada de manera
ascendente o descendente con respecto al peso o a la estatura. La función reco-
ge como parámetros matriz, optOrdenamiento, optVariable, algOrdenamiento,
4797 donde optOrdenamiento indica si es ordenamiento ascendente o descendente
(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-
4800 mo de ordenamiento que se desea utilizar.

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

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-
4803 denación estudiados (e.g., Selección, Burbuja, Inserción, Inserción binaria,
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
4806 una matriz de N elementos (filas N <= 40). Cada fila de la matriz es un regis-
tro, con los campos, de tipo entero, día (columna 1), mes (columna 2), año
(columna 3) y número de contrato (columna 4). Damos por supuesto que la
4809 introducción de datos fue correcta, pudiendo existir diversos contratos con la
misma fecha, pero no números de contrato repetidos.

11. Realizar una función que permita ordenar por fechas y de mayor a menor una
4812 matriz de N elementos (filas N <= 40). Cada fila de la matriz es un registro,
con los campos, de tipo entero, día (columna 1), mes (columna 2), año (colum-
na 3) y número de contrato (columna 4). Damos por supuesto que la introduc-
4815 ción de datos fue correcta, pudiendo existir diversos contratos con la misma fe-
cha, pero no números de contrato repetidos. Luego, dada la lista ordenada en
forma decreciente, diseñar una función que devuelva el número de contratos
4818 realizados en una determinada fecha.

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.
4821 El usuario puede seleccionar el método que quiere utilizar para hacer la orde-
nación.

13. El siguiente es un programa que le permitirá tener una idea de la eficiencia de


4824 los métodos de ordenamiento en cuanto al número de comparaciones e inter-
cambios que se llevan a cabo en cada algoritmo de ordenamiento y el tiempo
que se demora cada uno en la ejecución.

4827 a) Implemente una función que reciba un arreglo de n elementos enteros y el


algoritmo a utilizar para ordenarlos (dos parámetros: elementos y algorit-
mo). La función devuelve los elementos ordenados, el número de compara-
4830 ciones y el número de intercambios realizados para ordenarlos, y el tiempo
de cálculo en segundos.

b) Genere un arreglo de 11 elementos con números aleatorios enteros en el


4833 rango [-9, 9].

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

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
4836 donde se muestre el algoritmo, el número de comparaciones, el número de
intercambios y el tiempo de cálculo en segundos:
====================================================
4839 Tabla de comparación para algoritmos de ordenamiento
====================================================
---------------------------------------------------------------------
4842 Algoritmo # comparaciones # intercambios Tiempo [seg.]
--------- --------------- -------------- -------------
Algoritmo 1 ## ## ##
4845 Algoritmo 2 ## ## ##
Algoritmo 3 ## ## ##
... .. .. ..
4848 ---------------------------------------------------------------------
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
4851 literal a. De cada arreglo ordenado debe ir guardando el número de compa-
raciones, el número de intercambios y el tiempo de cálculo en segundos. Fi-
nalmente, presente una tabla con estadísticas de eficiencia de los métodos y
4854 un histograma para representar las mismas (el histograma presenta los va-
lores normalizados; los dos signos de numeral en el histograma significa que
debe poner los números que representa cada barra):
4857 ====================================================
Tabla de comparación para algoritmos de ordenamiento
====================================================

4860 Los resultados presentados son el promedio del ordenamiento de 9999


arreglos generados aleatoriamente. Con el mismo arreglo generado
aleatoriamente, se realizó el ordenamiento con todos los algoritmos;
4863 así con cada uno de los 9999 arreglos.

---------------------------------------------------------------------
# comparaciones # intercambios Tiempo [seg.]
4866 Algoritmo promedio promedio promedio
--------- --------------- -------------- -------------
Algoritmo 1 ## ## ##
4869 Algoritmo 2 ## ## ##
Algoritmo 3 ## ## ##

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

... .. .. ..
4872 ---------------------------------------------------------------------

=======================================
Histograma para comparación de métricas
4875 =======================================
-----------------------------------------------------------------
Algoritmo 1 |
4878 # comparaciones (prom) |▬▬▬▬▬▬▬▬▬▬ ##
# intercambios (prom) |▬▬▬▬▬▬▬▬▬▬▬▬ ##
Tiempo [seg.] (prom) |▬▬▬▬▬▬▬ ##
4881 |
Algoritmo 2 |
# comparaciones (prom) |▬▬▬▬▬▬▬ ##
4884 # intercambios (prom) |▬▬▬▬▬▬▬▬▬▬▬ ##
Tiempo [seg.] (prom) |▬▬▬▬▬▬▬▬ ##
|
4887 Algoritmo 3 |
# comparaciones (prom) |▬▬▬▬▬▬▬▬▬▬▬▬▬▬ ##
# intercambios (prom) |▬▬▬▬▬▬▬▬▬ ##
4890 Tiempo [seg.] (prom) |▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬ ##
|
. | . .
4893 . | . .
. | . .
-----------------------------------------------------------------
4896 e) De acuerdo a los datos, discuta la eficiencia de los métodos estudiados.
¿Qué método es el mejor y por qué?, ¿Qué método es el peor y por qué?,
¿Cuándo utilizaría cada método?, etc.

4899 14. El ejercicio está dividido en los siguientes pasos:

a) Implemente una función que devuelva un número entero aleatorio en el


rango [LímInferior, LímSuperior].
4902 b) Genere un arreglo de n elementos, donde n es un número aleatorio entre 25
y 50.
c) Llene el arreglo con números aleatorios enteros entre -99 y 99.
4905 d) La mitad (si n/2 no es entero, trúnquelo) del arreglo ordénelo con el méto-
do de la burbuja.
e) La otra mitad del arreglo ordénelo con el método de la selección.

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

4908 f) Con las dos mitades ordenadas, aplique el método de la inserción para or-
denar el arreglo completo.

Nota 1: Dentro del método principal (main) solamente deben haber el arreglo
4911 generado con n elementos y máximo un arreglo auxiliar (dos arreglos en total).

Nota 2: Cada método de ordenamiento debe estar implementado en una fun-


ción diferente.

4914 15. * E38 El ejercicio está dividido en los siguientes pasos:

a) Implemente una función que devuelva un número entero aleatorio en el


rango [LímInferior, LímSuperior].
4917 b) Implemente una función que devuelva una palabra cuyo número de letras
sea dado como parámetro. Cada letra de la palabra es generada individual-
mente al azar; las letras deben ser sólo minúsculas.
4920 c) Genere un arreglo de n elementos, donde n es un número aleatorio entre 25
y 50.
d) Llene el arreglo con palabras aleatorias de m letras, donde m es un número
4923 aleatorio entre 3 y 5.
e) La mitad (si n/2 no es entero, trúnquelo) del arreglo ordénelo con el méto-
do de la burbuja.
4926 f) La otra mitad del arreglo ordénelo con el método de la selección.
g) Con las dos mitades ordenadas, aplique el método de la inserción para or-
denar el arreglo completo.

4929 Nota 1: Dentro del método principal (main) solamente deben haber el arreglo
generado con n elementos y máximo un arreglo auxiliar (dos arreglos en total).

Nota 2: Cada método de ordenamiento debe estar implementado en una fun-


4932 ción diferente.

16. Pregunta

* E39 Menú, ordenamiento y búsqueda de registros

4935 Escriba un programa que muestre el siguiente menú:

1. Ingreso de datos de N de estudiantes


2. Ordenar por una columna especificada por el usuario
4938 3. Buscar un registro por apellido

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

4. Listar todos los datos, ordenados alfabéticamente por apellido


5. Salir

4941 Los datos de cada estudiante son: el nombre y apellido y la nota promedio (entre 1 y
20 puntos, inclusivo). Por ejemplo:

Nombre : Juan
4944 Apellido : Pérez
Promedio : 18

Se debe almacenar los datos en una matriz. Si hay más de un estudiante con el ape -
4947 llido buscado, se debe mostrar todos los estudiantes que coinciden con el apellido es-
pecificado.

* E40 Calificaciones de estudiantes

4950 El objetivo del programa es gestionar calificaciones de estudiantes. Se deben registrar


n estudiantes (n ≥ 3, validar). De cada uno de los estudiantes se deben ingresar, el
nombre y una calificación; los datos se registran en arreglos separados. A partir de
4953 los dos arreglos se deben ordenar los datos de acuerdo al nombre del estudiante de
manera ascendente, obteniendo como resultado una matriz de nx2. Sobre la matriz
resultante se tienen que obtener los nombres de los estudiantes que tienen la mínima
4956 calificación y la máxima calificación. Además, se deben obtener los nombres de los
tres estudiantes con las máximas calificaciones y los nombres de los tres estudiantes
con las mínimas calificaciones.

4959 Detallando los requerimientos utilizando un ejemplo, se tendría lo siguiente:

1. Escribir una función f1 que permita ingresar los datos de los estudiantes.

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

Nombres Calificaciones
Juan 16
Andrés 18
Pedro 15
María 11
Xavier 10
Ximena 17
Fernando 19
... ...
Jaime 5
2. Escribir una función f2 que reciba los dos arreglos ingresados en f1 y devuelva
4962 una matriz con los nombres y calificaciones de forma ascendente, por nombre.

Andrés 18
Fernando 19
Jaime 5
Juan 16
A= María 11
Pedro 15
Xavier 10
... ...
Ximena 17

3. Escribir una función f3 que reciba como entrada la matriz generada en f2 y de-
vuelva una matriz con la calificación mínima y calificación máxima.

Jaime 5
B=
Fernando 19

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

4965 4. Escribir una función f4 que reciba como entrada la matriz generada en f2 y de-
vuelva una matriz con las tres mayores calificaciones y las tres menores califi-
caciones.

Fernando 19
Andrés 18
Ximena 17
C=
Jaime 5
Xavier 10
María 11

4968 Ordenamientos en matriz

Desarrolle un programa que pida al usuario ingresar las dimensiones (nxm) de una
matriz y rellene los elementos de dicha matriz con números enteros aleatorios en un
4971 rango dado por el mismo usuario. Muestre la matriz generada y luego, realice los si-
guientes ordenamientos:

• Las columnas pares ordénelas de manera descendente con el método de inser-


4974 ción y las columnas impares ordénelas de manera ascendente con el método de
selección. Muestre la matriz original luego de aplicados estos cambios.
• Las filas pares ordénelas de manera ascendente y las filas impares ordénelas de
4977 manera descendente; este ordenamiento de filas, en ambos casos, debe realizar-
se con el método de ordenamiento de burbuja. Muestre la matriz original lue-
go de aplicados estos cambios.
4980 • Las “diagonales derecha-izquierda” ordénelas de manera ascendente con el mé-
todo de inserción; muestre la matriz original luego de aplicados estos cambios.
Las "diagonales izquierda–derecha" ordénelas de manera descendente con el
4983 método de selección; muestre la matriz original luego de aplicados estos cam-
bios.

A continuación se muestra un ejemplo de ejecución del programa:


4986 Ingreso de datos
================
Dimensión de la matriz
4989 n: 3

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

m: 4

Rango para generación de números aleatorios


4992 inf: -2
sup: 10

Matriz generada
4995 8 4 9 5
2 1 7 4
3 5 -1 2

4998 Resultados
==========
Luego de ordenadas las columnas
5001 2 5 -1 5
3 4 7 4
8 1 9 2

5004 Luego de ordenadas las filas


9 8 5 4
1 2 4 7
5007 5 3 2 -1

Luego de ordenadas las “diagonales derecha–izquierda”


8 2 1 5
5010 4 3 5 -1
9 7 4 2

Luego de ordenadas las “diagonales izquierda–derecha”


5013 8 7 9 5
5 1 4 4
3 2 -1 2

5016 * E41 Manejo de datos de personas

Escriba un programa que lea los datos de n personas (el n se pide al usuario), consi-
derando los siguientes campos:

5019 1. Nombre
2. Apellido
3. Edad
5022 4. Profesión

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

La información debe ser validada al momento de ingresar cada uno de los datos. Al-
macene la información ingresada en una estructura que considere adecuada para rea-
5025 lizar las siguientes operaciones:

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.
5028 Se debe mostrar los datos ordenados con todos los campos separados por co-
mas. Si se ordena por apellido, se muestra: APELLIDO, NOMBRE, EDAD,
PROFESIÓN. Si se ordena por profesión, se muestra: PROFESIÓN, NOM-
5031 BRE, APELLIDO, EDAD.

b) Buscar todas las ocurrencias de un valor ingresado por el usuario. Por ejem-
plo, buscar todos los que tengan 30 años de edad, o todos lo que tengan por
5034 apellido “Pérez”.

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.

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

5037 10. Archivos

Miscelánea

1. ¿Qué significa EOF?

5040 a) Empty or full


b) End of file
c) End of floop
5043 d) Las anteriores respuestas no son correctas

2. * E42 Usted recibió dos archivos de texto plano (txt). El primero tiene un
mensaje cifrado que sólo se puede leer (leer por un humano) utilizando la cla-
5046 ve del segundo archivo. La clave consiste de series de tres caracteres (siempre
tres y seguidos), de los que encontrará en el archivo cifrado, a los cuales co-
rresponde caracteres, de los que tendrá que escribir como descifrados. Por
5049 ejemplo, si el primer archivo contiene
e545ty8452w3
y el segundo archivo tiene la clave
5052 e54 h
5ty o
845 l
5055 2w3 a
el archivo que tiene que escribir, llamado descifrado.txt contendrá
hola
3.

5058 * E43 Metro Interstate Traffic Volume Data Set

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
5061 atributos (columnas/campos), de los cuales los más importantes para este ejercicio
son: temp, date_time y traffic_volume (temperatura en grados Kelvin, fecha y hora
del registro y el volumen de tráfico). Los registros están a escala horaria, i.e., cada
5064 hora existe un registro (vea los datos del atributo date_time).

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

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
5067 debería estar a escala mensual y no horaria. Agregar los datos significa que to-
mará todos los valores de temperatura de cada mes, calculará la media de esos
datos y lo presentará como la temperatura de ese mes. Por ejemplo, si se tu-
5070 vieran 8760 registros (los datos de un año a escala horaria), luego de la agre-
gación, se tuvieran solamente 12 registros (uno por mes, i.e., a escala men-
sual). Luego de realizado el cálculo, guarde en un nuevo archivo, llamado se-
5073 rieMensual.csv, la nueva serie temporal (a escala mensual). El archivo serie-
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,
5076 características de ejes, etc.) como se muestra en el gráfico (izquierda) que si-
gue (el gráfico usa los datos reales del archivo Metro_Interstate_Traffic_Volu-
me.csv).

5079 2. Grafique el tráfico diario por horas y muéstrelo como en el gráfico de arriba
(derecha; el gráfico usa los datos reales del archivo
Metro_Interstate_Traffic_Volume.csv). Para esto, sume el tráfico (atributo
5082 traffic_volume) por cada hora del día, sin importar la fecha. Así, en total, ten-
drá doce valores que corresponden a las sumas del tráfico de cada hora del día
(vea el gráfico).

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

5085 * E44 Formación de grupos de trabajo con archivos

Usted trabajará con un archivo CSV que tiene una lista de estudiantes. El archivo
tiene registros con ocho atributos (columnas/campos), de los cuales los más impor-
5088 tantes para este ejercicio son: Nombre, Prueba 1/ 10 y Excluir (nombre del estudian-
te, calificación de una prueba y si el registro debe excluirse de la formación de gru-
pos). Usted debe pedir la cantidad (N) de personas que habrán en cada grupo que
5091 formará. Luego de eso, mostrará los grupos con las N personas que tiene cada uno,
escogidos de manera aleatoria. Al mostrar los grupos debe mostrarlos de manera des-
cendente de acuerdo a la suma de las calificaciones de la Prueba 1 de cada grupo
5094 (suma las calificaciones de cada estudiante del grupo y esa suma es por la que debe
ordenar); pero luego de ordenar por ese criterio, los nombres de las personas de cada
grupo deben estar ordenados en forma ascendente por el primer apellido, dentro de
5097 cada grupo. Si hay un grupo que no pueda tener N personas, indicarlo con un mensa-
je y mostrar el grupo con menos de N personas.

Una cosa muy importante es que si un estudiante tiene en la columna “Excluir” el


5100 valor “Sí”, esa persona no debe tomarse en cuenta para generar grupos sino que se lo
lista al final.

Por ejemplo:
5103 N: 2
Grupo 1 Suma: 19
Dayanna Marcela Pacheco Fajardo 9
5106 Maite Cristina Quinde Peralta 10

Grupo 2 Suma: 17
Bryam Sebastián Arévalo Abril 9
5109 Charlee Emanuel Vintimilla Marquez 8

Grupo 3 Suma: 15
Samantha Gabriela Cabrera Nieto 7
5112 Daviel Lucas Zárate Cuenca 8

El siguiente grupo tiene menos de 2 estudiantes


Grupo 4 Suma: 10
5115 Emilia Carolina Quito Pacurucu 10

Los siguiente estudiantes se excluyen de los grupos


Edwin Humberto Buri Guaman
5118 Anthony José Loayza Aguilar

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

Jean Pierre Quizhpilema Marín


Tome en cuenta que los grupos estás ordenados descendentemente por la suma de las
5121 calificaciones de las personas que los componen. Luego, dentro de cada grupo, los
nombres están ordenados de manera ascendente, por el primer apellido. Finalmente,
se listan las personas que deben excluirse de la generación de grupos.

5124 Toda la información que se muestra en pantalla, debe ser guardada en un archivo lla-
mado grupos.txt.

* E45 Concrete Compressive Strength Data Set

5127 En este ejercicio se usa datos acerca de la resistencia del concreto de acuerdo a su
compuesto y a las cantidades utilizadas de cada componente. El conjunto de datos
está ubicado en https://archive.ics.uci.edu/ml/datasets/concrete+compressive+stren-
5130 gth. Con el fin de tener una idea más clara acerca de la influencia de los componentes
en la resistencia del concreto (dado en megapascales, mPa), se pide generar gráficas
de cada par de componentes y la resistencia correspondiente.

5133 Los componentes y/o variables de los que se cuenta con datos, y las correspondientes
unidades, son los siguientes:

1. Cemento, en kg/m3
5136 2. Escoria, en kg/m3
3. Ceniza, en kg/m3
4. Agua, en kg/m3
5139 5. Superplastificante, en kg/m3
6. Agregado grueso, en kg/m3
7. Agregado fino, en kg/m3
5142 8. Edad, en días

Haga un gráfico de dispersión (scatter) con cada par de componentes en donde cada
punto muestre la resistencia del concreto con un color en escala de grises y un tama-
5145 ño. Así, los puntos que representan concreto más resistente tendrán un color más
obscuro y serán más grandes. A continuación se muestra, como ejemplo, un par de
gráficos (se utilizaron los datos reales para generarlos), de todos los que se deben ge-
5148 nerar (son más de 55).

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

Una cosa que debe tener muy claro de las gráficas anteriores es que el color y tamaño
del punto está relacionado a la resistencia del concreto. Además, lo que se pide es que
5151 por cada par de componentes se generen dos gráficas, i.e., por ejemplo, para los com-
ponentes Cemento y Agua debe haber una gráfica y para los componentes Agua y
Cemento debe haber otra gráfica. Finalmente, el eje x hace referencia al primer com-
5154 ponente que se indica en el título y el eje y hace referencia al segundo componente
que se indica en el título (vea las gráficas de ejemplo de arriba).

No todas las gráficas tienen las mismas marcas (e.g., círculos o triángulos). Las mar-
5157 cas que se tiene que utilizar, dependiendo de qué componente esté siendo mostrado
en el eje x, son:

1. Cemento: "."
5160 2. Escoria: "v"
3. Ceniza: "1"
4. Agua: "s"
5163 5. Superplastificante: "p"
6. Agregado grueso: "P"
7. Agregado fino: "x"
5166 8. Edad: "D"

Los gráficos deben tener una barra de colores con la etiqueta que indique qué infor-
mación está mostrando y su respectiva unidad (i.e., Resistencia [mPa]). Las etiquetas
5169 de los ejes, además de indicar a qué componente hacen referencia, muestran entre
corchetes la unidad de ese componente (se indicó arriba). El título debe mostrar el
texto

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

5172 Resistencia del Concreto en relación a los


componentes Componente1 y Componente2
Puntos en esta gráfica: N

5175 donde componente1, componente2 y N hacen referencia al componente del concreto


que indica el eje x de la gráfica, al componente que indica el eje y de la gráfica y el
número de puntos que tiene esa gráfica, respectivamente.

5178 Cada gráfica generada debe ser guardada (utilizando programación y no de manera
manual) con el nombre componente1_componente2.png, donde componente1 y com-
ponente2 hacen referencia al componente del concreto que indica el eje x de la gráfica
5181 y al componente que indica el eje y de la gráfica (e.g., Edad_Superplastificante.p-
ng, Agregado grueso_Escoria.png). Fíjese que el formato del archivo es png.

Finalmente, se pide que se escriba un archivo con el nombre maxminresultados.txt


5184 que contenga información de la(s) gráfica(s) que tiene(n) el número mínimo y el nú-
mero máximo de puntos mostrados. El siguiente es un ejemplo del contenido del ar-
chivo mencionado, pero que no tiene información real relacionada al conjunto de da-
5187 tos analizado (solo muestra cómo debe estar escrita la información en el archivo).
Las gráficas con el mínimo de puntos mostrados (124) son:
Ceniza y Cemento
5190 Cemento y Ceniza
Agua y Agregado fino
Agregado fino y Agua
5193 Las gráficas con el máximo de puntos mostrados (984) son:
Cemento y Agregado fino
Agregado fino y Cemento
5196 Edad y Escoria
Escoria y Edad
Los números que están entre paréntesis hacen referencia al número de puntos mínimo
5199 y máximo de las gráficas generadas.

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

11. Miscelánea de Ejercicios

Un buen lugar para comenzar a practicar más está en http://www.lab.dit.upm.es/


5202 ~fprg/examenes/

* E46 Combate de pokemones

Vea el vídeo https://youtu.be/SDv2vOIFIj8.

5205 Realizar un programa que permita simular el combate entre dos pokemones a través
de las siguientes opciones del menú:
1.- Ingresar datos de los pokemones
5208 2.- Simular combate
3.- Terminar
Ingresar opción <1-3>:
5211 1)Ingresar datos de los pokemones (i.e. nombres, poder de ataque). Por ejemplo se
ingresa los pokemones: 1) Pikachu con poder de ataque 55 y 2) Jigglypuff con su po-
der de ataque 45

5214 2)Simular combate

Se tiene que usar una función para decidir aleatoriamente qué jugador inicia la pelea.
Para ello se usará la función azar(2). Esta función devolverá 0 ó 1. Si es 0 el Juga-
5217 dor1 inicia la pelea, caso contrario inicia el Jugador2. Recuerde que una vez que se
define el jugador que tiene el primer turno, los siguientes turnos son intercalados, i.e.,
un jugador, el otro, un jugador, el otro, etc. Ambos jugadores inician sus vidas con
5220 100 puntos y se tienen que ir simulando el combate restando de la vida de los poke-
mones el poder de ataque de su contrincante, esto se hace en base al turno de ataque.

Por cada turno se debe nuevamente utilizar la función azar(2) para determinar si un
5223 jugador ataca o no. Solamente si el resultado es 1, el jugador al que le toca el turno
ataca. Recuerde que luego de definido al azar el jugador que comienza (el que tiene el
primer turno), los turnos son intercalados entre los dos.

5226 Como ejemplo, suponga que la función azar(2) devuelve 0. Por lo tanto Pikachu ini-
cia con el primer turno. Entonces se usa la función azar(2) para determinar si Pika-
chu ataca o no. Suponga que la función azar(2) devuelve 1. Cómo el resultado es 1
5229 éste ataca y en el primer turno Jigglypuff queda con 45 de vida. Luego es el turno de
Jigglypuff y suponga que la función azar(2) devuelve 0. Cómo es 0, Jigglypuffno ata-
ca. Para el siguiente turno de Pikachu la función azar(2) devuelve 1. Cómo es 1 Pika-

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

5232 chu ataca y Jigglypuff termina con -10 de vida, entonces el combate termina. Se tiene
que mostrar por cada turno: de quién fue el turno y cómo quedaron las vidas de los
dos contrincantes y al final quien ganó y en qué turno.

5235 Ejemplo de ejecución:


Combate de pokemones
1.- Ingresar datos de los pokemones
5238 2.- Simular combate
3.- Terminar
Ingresar opción <1-3>: 1

5241 Nombre del primer Pokemon: Pikachu


Poder de ataque del primer Pokemon: 55
Nombre del segundo Pokemon: Jigglypuff
5244 Poder de ataque del segundo Pokemon: 45

Combate de pokemones
1.- Ingresar datos de los pokemones
5247 2.- Simular combate
3.- Terminar
Ingresar opción <1-3>: 2

5250 Vidas:Pikachu(100) vs Jigglypuff(100)

1.- Turno: Pickachu (55 de poder). (Sí ataca, azar(2) devolvió 1)


Vidas: Pikachu (100) vs Jigglypuff (45)
5253 2.- Turno: Jigglypuff (45 de poder). (No ataca, azar(2) devolvió 0)
Vidas: Pikachu (100) vs Jigglypuff (45)
3.- Turno: Pickachu (55 de poder). (Sí ataca, azar(2) devolvió 1)
5256 Vidas: Pikachu (100) vs Jigglypuff (-10)

Pokemon ganador: Pikachu en 3 turnos.

Combate de pokemones
5259 1.- Ingresar datos de los pokemones
2.- Simular combate
3.- Terminar
5262 Ingresar opción <1-3>: 3
(termina el programa)

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

Solución de un sistema de ecuaciones por matrices

5265 Conversión de un número en base diez a sistema binario

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


5268 lados

Valor futuro de una inversión

Cálculo del capital inicial

5271 Cálculo de la tasa de interés

Cálculo del número de años

Media, mediana y varianza de N datos

5274 Transformación de números decimales a romanos

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
5277 para este ejercicio, fue tomada de Wikipedia (https://goo.gl/auCPx7).

La siguiente tabla muestra los símbolos válidos en el sistema de los números romanos,
y sus equivalencias en el sistema decimal.

Signo Valor
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
5280 Para la notación moderna de los números romanos se utilizan las siguientes normas:

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

• Los números se leen de izquierda a derecha empezando por los símbolos con
mayor valor, o conjunto de símbolos de mayor valor.
5283 • Un símbolo seguido de otro de igual o inferior valor, suma (e.g., X·X·I =
10+10+1 = 21), mientras que si está seguido de otro de mayor valor, ambos
símbolos forman un conjunto en el cual debe restarse el valor del primero al
5286 valor del siguiente (e.g., X·IX = 10+[10-1] = 19).
• La unidad (I) y los números con base 10 (X, C y M) pueden repetirse hasta 3
veces consecutivas como sumandos.
5289 • Los números con base 5 (V, L y D), no pueden repetirse seguidos, ya que la
suma de esos dos símbolos tiene representación con alguno de los símbolos an-
teriores.
5292 • La unidad y los símbolos de base 10 también pueden estar restando antes de
un símbolo de mayor valor, pero con las siguientes normas:

1. solo pueden aparecer restando sobre los símbolos con base 5 y 10 de valor
5295 inmediatamente superiores, pero no de otros con valores más altos (e.g.,
‘IV’ y ‘IX’, pero no ‘IL’ ni ‘IC’).
2. en el caso de estar restando, no pueden repetirse.
5298 • Los símbolos con base 5 no pueden utilizarse para restar (e.g., 45 se escribe
‘XLV’ y no ‘VL’).

• Para números con valores igual o superiores a 4000, se coloca una línea hori-
5301 zontal por encima del número, para indicar que la base de la multiplicación es
por 1000:

Romano (miles) Decimal

V 5000

X 10 000

L 50 000

C 100 000

D 500 000

M 1 000 000

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

Dígitos de un número

5304 Elaborar un algoritmo que dado un número entero positivo (>0) cualquiera (validar
para que siga ingresando números mientras no cumple la condición) nos diga el nú-
mero de dígitos que tiene.

5307 * E47 Pirámide invertida

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-
5310 de que el usuario ingrese números mayores o iguales a uno (vuelva a solicitar si no
cumple la condición). La siguiente pirámide muestra el ejemplo de la ejecución del al-
goritmo con n igual a 5.
5313 Ingrese la altura (n): 5

1 2 3 4 5 4 3 2 1
1 2 3 4 3 2 1
5316 1 2 3 2 1
1 2 1
1

5319 * E48 Cubos e impares


Considere la siguiente propiedad:
• Sumando el primer número impar positivo se obtiene el primer cubo.
5322 • Sumando los dos siguientes impares se obtiene el segundo cubo.
• Sumando los tres siguientes impares se obtiene el tercer cubo, y así
sucesivamente.
5325 Expresado de forma matemática:
13 = 1 =1
2 =3+5
3
=8
5328 3 = 7 + 9 + 11
3
= 27
4 = 13 + 15 + 17 + 19 = 64
3

El usuario ingresa un entero positivo n. El programa debe mostrar los n primeros


5331 cubos calculándolos mediante la propiedad descrita.

* E49 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
5334 un valor máximo de 9999 (validar valores mínimos y máximos de los límites y que el

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

límite superior no sea menor al límite inferior). Se ingresa un paso (incremento) entre
1 y 1000 (validar para que siga ingresando números mientras no cumple la condi-
5337 ción). Imprimir los valores desde el límite inferior al límite superior con el paso (in-
cremento) dado por el usuario. Los números que se muestran deben tener el número
de dígitos que tenga el límite superior; es decir, los número que se van a mostrar que
5340 tienen un número de dígitos menor al número de dígitos del límite superior, deben
completar el número de dígitos con ceros a la izquierda.

Ejemplo 1:
5343 Límite inferior: 1
Límite superior: 12
Paso: 3
5346 Lo que se muestra en pantalla es:
01
04
5349 07
10
Ejemplo 2:
5352 Límite inferior: 1
Límite superior: 1500
Paso: 500
5355 Lo que se muestra en pantalla es:
0001
0501
5358 1001

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


5361 LU. Un algoritmo que se utiliza para implementar este método es el algoritmo de
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-
5364 teroni et al. (2014, pp. 146–147).

1. Implemente el algoritmo de Gauss (página 146).

2. Implemente el método de eliminación de Gauss (página 147).

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

5367 Métodos de Jacobi y de Gauss-Seidel

Vea el libro de Quarteroni et al. (2014, pp. 168–173).

Dados

5370 Escribir un programa que simule el lanzamiento de dos dados y muestre por pantalla
la frecuencia de los resultados de mil lanzamientos.

Búsquedas y ordenación

5373 1. Diseñar una función recursiva que realice una búsqueda binaria.

2. Diseñar un procedimiento recursivo que ordene una lista de elementos por el


método Quick Sort.

5376 Interpolación

Para resolver los siguientes ejercicios revise las páginas 80-83 del libro de Quarteroni
et al. (2014).

5379 1. Implemente la interpolación polinómica mediante la matriz de Vandermonde.

2. Implemente la interpolación polinómica de Lagrange para encontrar el polino-


mio interpolador que pase por tres puntos.

5382 3. Implemente la interpolación polinómica de Lagrange para encontrar el polino-


mio interpolador que pase por cuatro puntos.

Integración numérica

5385 Para resolver los siguientes ejercicios revise la sección 4.3 Numerical integration del
libro de Quarteroni et al. (2014).

1. Implemente la fórmula de cuadratura de punto medio compuesto para integra-


5388 ción numérica.

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


5391 con un polinomio integrador de Lagrange de segundo grado.

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

4. Implemente la fórmula de cuadratura de Simpson para integración numérica


con un polinomio integrador de Lagrange de tercer grado.

5394 Ecuaciones diferenciales ordinarias (EDO)

• Implemente el método de Euler y úselo para integrar numéricamente la ecua-


ción

5397 dy/dx = f(x, y) = − 2x3 + 12x2 − 20x + 8.5

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.

5400 El método de Euler consiste en dividir el intervalo que va desde x 0 a xn en su-


bintervalos de ancho

(11.1)

5403 y aplicar la fórmula iterativa

(11.2)

Para comprobar sus resultados sepa que la integral analítica de la función


5406 dy/dx es y = − 0.5x4 + 4x3 − 10x2 + 8.5x + 1. La figura 15 muestra las gráfi-
cas de la solución analítica y la solución numérica cuyos valores de yi (aproxi-
mados) usted debe encontrar. La tabla 2 muestra los valores de los puntos de
5409 la aproximación mediante el método de Euler.

Si desea más información acerca del método puede leer la definición en el libro
de Chapra et al. (2007), páginas 719-722.

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

5412 Figura 15: Comparación de la solución analítica con una solución numérica
usando el método de Euler, para la integral dy/dx desde x0 = 0 hasta xn = 4
con un tamaño de paso h = 0.2. La condición inicial en x0 = 0 es y0 = 1.

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

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

i xi yi (aproximación)
14 2.8 4.1248
15 3 4.66
16 3.2 5.16
17 3.4 5.5288
18 3.6 5.6512
19 3.8 5.3928
20 4 4.6
5415 • * Implemente el método de Euler y úselo para integrar numéricamente la
ecuación

dy/dx = f(x, y) = − 2x3 + 12x2 − 20x + 8.5

5418 desde x0 = 0 (este es un valor fijo) hasta un xn dado por el usuario (>x0) con
tamaños de paso h = {0.5, 0.33, 0.21, 0.14, 0.09}. Por ejemplo, con h = 0.21,
x0 = 0, x1 = x0 + 0.21, x2 = x1 + 0.21, x3 = x2 + 0.21, etc. La condición inicial
5421 en x0 = 0 es y0 = 1, i.e., la función y (la que se quiere aproximar) en x = 0, es
1 [y(0) = 1].

El método de Euler consiste en dividir el intervalo que va desde x0 a xn en su-


5424 bintervalos de ancho h y aplicar la fórmula iterativa

(11.3)

Para comprobar sus resultados sepa que la integral analítica de la función


5427 dy/dx (lo que se quiere aproximar) es y = − 0.5x4 + 4x3 − 10x2 + 8.5x + 1.

1. Escriba una función llamada my_range que genere una tupla de números
desde x0 a xn con un tamaño de paso dado (h). En la tupla de números siempre
5430 se incluye x0 al comienzo pero no necesariamente se incluye al final xn porque
depende del tamaño de paso (vea los ejemplos). Cuando no se indica explícita-
mente un tamaño de paso, por defecto se debe utilizar un tamaño de paso
5433 igual a uno. Recuerde cuál es la idea fundamental de usar funciones para po-
der saber qué parámetro(s) usar en la definición de la función. Comente la
función para poder saber exactamente qué hace (de la forma como se comen-
5436 tan las funciones) y en ese comentario ponga si usar tuplas, listas, diccionarios
o conjuntos es la mejor opción para devolver (return) los resultados y porqué.
Para que sepa cómo trabaja la función my_range, a continuación se muestran
5439 algunos ejemplos de su ejecución:
Desde 0 a 4 con paso 0.5: 0, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0

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

Desde 0 a 1 con paso 0.3: 0, 0.3, 0.6, 0.9


5442 Desde 0 a 4 sin especificar el paso: 0, 1, 2, 3, 4

2. Escriba una función llamada my_euler que implemente el método de Euler


y devuelva la serie de números que corresponden a las aproximaciones de y
5445 calculadas para los diferentes x0, x1, …, xn (estos varían de acuerdo al h usado).
Para que esa función sea general (i.e., se pueda usar con otras funciones dife-
rentes a la específica de este ejercicio, f(x, y)) haga que uno de los parámetros
5448 sea una función (recuerde lo que son las funciones de orden superior) y con esa
función genere los resultados que devuelve. En la serie de números devuelto
siempre se incluye la condición inicial al comienzo, que siempre es dado con el
5451 ejercicio, en este caso el 1. Recuerde cuál es la idea fundamental de usar fun-
ciones para poder saber qué parámetro(s) usar en la definición de la función.
Comente la función para poder saber exactamente qué hace (de la forma como
5454 se comentan las funciones) y en ese comentario ponga si usar tuplas, listas,
diccionarios o conjuntos es la mejor opción para devolver (return) los resulta-
dos y porqué (use la mejor opción para devolver sus resultados). Ejemplos de
5457 resultados devueltos por esa función (aproximaciones de y en los diferentes
x’s), con f(x, y) y las condiciones iniciales de este ejercicio, son los siguientes:
Con xn=2 y h=0.5: 1, 5.25, 5.875, 5.125, 4.5
5460 Con xn=1 y h=0.33: 1, 3.805, 4.83952558, 4.82375422
Con xn=4 y h=0.21 (he redondeado a un decimal para mostrar): 1, 2.8,
3.8, 4.2, 4.3, 4.0, 3.7, 3.4, 3.1, 2.9, 3.0, 3.1, 3.5, 4.0, 4.5, 5.1,
5463 5.5, 5.7, 5.5, 4.7

3. Utilizar la(s) función(es) implementadas para comparar las aproximaciones


de y con h = {0.5, 0.33, 0.21, 0.14, 0.09} y comparar cuáles son las diferencias
5466 en los resultados. Esos resultados deben ser mostrados en una gráfica como se
muestran en los ejemplos siguientes (son dos imágenes independientes, no se
generan subplots; debe poner el título y las etiquetas de los ejes como se mues-
5469 tra, en Estudiante ponga su primer nombre y primer apellido). Recuerde que
el único dato que pide al usuario es xn, el resto (hs, f(x, y), etc.) son fijos.

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

*E50 Resolución de EDOs con un método multipaso

5472 Un ejemplo notable de los métodos explícitos multipaso para resolver ecuaciones dife-
renciales ordinarias (EDOs) es la fórmula de Adams-Bashforth (AB3), un método de
tres pasos y tercer orden (Quarteroni et al., 2014).

5475 El método consiste en dividir el intervalo en el que se va a hacer la integración numé-


rica, que va desde a , en subintervalos de ancho

y aplicar la fórmula iterativa

5478 (11.4)

con . Esta función es la que está en el miembro derecho de la


fórmula iterativa y es la derivada de la función que es la que se trata de aproximar
5481 con dicha fórmula (la función se quiere aproximar). La evaluación de la función
en los puntos , y es , y , y en general
, además, y . está dada por la condi-
5484 ción inicial del problema, esto es, . Además, en general, , pero
recuerde que no es conocida, así que esta información es importante para hacer la
graficación de la aproximación de .

5487 Implemente la fórmula de Adams-Bashforth (6 puntos), utilizando funciones donde


se deba (3 puntos), y úsela para integrar numéricamente la ecuación (2 puntos)

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

desde hasta con un tamaño de paso de (i.e., ,


5490 , , etc.). La condición inicial en es , esto es,
.

Para comprobar sus resultados sepa que la integral analítica de la función dy/dx, con
5493 la condición inicial indicada, es y = − 0.5x4 + 4x3 − 10x2 + 8.5x + 1. Grafique la so-
lución analítica junto con la aproximación que ha calculado con la fórmula de Ada-
ms-Bashforth, como se muestra en la siguiente figura (los colores de las líneas no im-
5496 portan pero deben ser diferentes, además, tome en cuenta la leyenda) (3 puntos).

Documente su código fuente para que pueda ser fácilmente entendido (1 punto).

*E51 Tiempo de Respuesta Facebook

5499 Una de las métricas que usa Facebook para mostrar qué tan activa es una página es
el Tiempo de Respuesta. El Tiempo de Respuesta es el promedio del 90% de los tiem-
pos de respuesta más rápidos a los mensajes que recibió una página de Facebook 1. En
5502 relación a esto, se plantea el siguiente ejercicio donde debe tomar en cuenta buenas
prácticas de programación (e.g., documentación en el código para indicar qué hace
cada sección del programa).

5505 Genere un menú con tres opciones:

1 En realidad el cálculo tiene más detalles pero se ha modificado para el ejercicio. Más en
https://is.gd/4cHiOQ

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

Menú
1. Datos manuales
2. Datos aleatorios
3. Salir

Opción [1-3]: _

Del menú se sale solamente cuando el usuario escribe la opción 3.

Cuando el usuario elige la opción 1, el usuario indica un número N de registros a in -


5508 gresar. El ingreso de cada registro implica escribir una cadena de texto en el formato
“00h01 23h59”, que significa la hora y minuto (00h01) en que una persona escribió a
la página en Facebook y la hora y minuto (23h59) en la que el administrador de la
5511 página en Facebook respondió a ese mensaje 1 (la segunda hora siempre es mayor o
igual a la primera). Luego de que el usuario ingrese esos N registros, debe mostrar el
Tiempo de Respuesta según lo define Facebook y luego un histograma (vea la ima-
5514 gen), con clases correspondientes a las diferentes horas que se demoran en responder
a los mensajes (24). El gráfico debe tener las etiquetas Frecuencia y Tiempo de Res-
puesta como se muestra.

5517 Cuando el usuario elige la opción 2, el usuario indica un número N de registros que el
computador generará al azar. Luego de ingresar el número N, debe imprimir los N re-
gistros generados al azar. Luego de eso, haga todos los pasos indicados para la opción
5520 1. Es decir, en la opción 2 del menú se hace lo mismo que para la opción 1 solamente
que los registros no son ingresados por el usuario sino que son generados aleatoria-
mente por el computador.

1 Para este ejercicio se supone que los mensajes son respondidos el mismo día. Esa es la razón para
ingresar solamente la hora y no la fecha.

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

5523 12. ¿Qué Hace el Algoritmo/Programa?

1. * ¿Cuál es el valor final de las variables a, b y c?


Proceso sin_titulo
5526 a<-5
b<-6
c<-7
5529 aux<-a
b<-a
c<-b
5532 Escribir a, b, c
FinProceso
2. * ¿Cuál es el valor de la variable x?
5535 Proceso sin_titulo
Definir x Como Entero
Definir z Como Entero
5538 x<-2
z<-5
Si z<0 Entonces
5541 x<-x+2
Sino
Si x>1 Entonces
5544 x<-x+1
Sino
x<-5
5547 Fin Si
Fin Si
Escribir x
5550 FinProceso
3. * ¿Cuál es el resultado de ejecutar el siguiente pseudocódigo?
Proceso valorC
5553 c<-50
Mientras c>=0 Hacer
Escribir c
5556 c<-c+1
Fin Mientras
FinProceso
5559 4. * ¿Cuál es el resultado de ejecutar el siguiente pseudocódigo?
Proceso sin_titulo

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

Para i<-1 Hasta 5 Con Paso 1 Hacer


5562 Segun i Hacer
1:
Escribir "a"
5565 2:
Escribir "b"
3:
5568 Escribir "c"
De Otro Modo:
Escribir "d"
5571 Fin Segun
Fin Para
FinProceso
5574 5. ¿Qué realiza o cuál es el fin del siguiente algoritmo o programa?
Proceso sin_titulo
Leer var1
5577 Leer var2

Mientras var1<var2 Hacer


Leer var1
5580 Leer var2
Fin Mientras

var3<-0

5583 Mientras var1 >= var2 Hacer


var1<-var1-var2
var3<-var3+1
5586 Fin Mientras

Escribir var3
Escribir var1
5589 FinProceso
6. ¿Qué realiza o cuál es el fin del siguiente algoritmo o programa?
Proceso sin_titulo
5592 var1<-10
Leer var2

Mientras var2<1 Hacer


5595 Leer var2
Fin Mientras

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

Para var3<-1 Hasta var2 Con Paso 1 Hacer


5598 var4<-1

Mientras var4<=var1 Hacer


var5<-var4*var3
5601 Escribir var5
var4<-var4+1
Fin Mientras

5604 Escribir '***** ****** ***** *****'


Fin Para
FinProceso
5607 7. ¿Qué realiza o cuál es el fin del siguiente algoritmo o programa?
Proceso sin_titulo
Leer var1

5610 Mientras var1<0 Hacer


Leer var1
Fin Mientras

5613 var2<-1
var3<-11

Mientras var2<=var1 Hacer


5616 Leer var4

Mientras var4<1 O var4>10 Hacer


Leer var4
5619 Fin Mientras

Si var4<var3 Entonces
var3<-var4
5622 Fin Si

var2<-var2+1
Fin Mientras

5625 Escribir var3


FinProceso
1. * Con respecto al siguiente algoritmo

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

5628 Proceso sin_titulo


Para i<-1 Hasta 7 Con Paso 3 Hacer
cont<-1
5631 Mientras cont<=5 Hacer
Escribir Sin Saltar i,'^',cont,': ',i^cont, ' '
cont<-cont+2
5634 Fin Mientras
Escribir ''
Fin Para
5637 FinProceso
¿Cuál de las siguientes versiones hace exactamente lo mismo?

a)
5640 Proceso sin_titulo
cont<-1
Mientras cont<=8 Hacer
5643 Para i<-1 Hasta 5 Con Paso 2 Hacer
Escribir Sin Saltar cont,'^',i,': ',cont^i, ' '
Fin Para
5646 Escribir ''
cont<-cont+4
Fin Mientras
5649 FinProceso
b)
Proceso sin_titulo
5652 cont<-1
Mientras cont<=7 Hacer
Para i<-1 Hasta 5 Con Paso 2 Hacer
5655 Escribir Sin Saltar cont,'^',i,': ',cont^i, ' '
Fin Para
Escribir ''
5658 Fin Mientras
FinProceso
c)
5661 Proceso sin_titulo
cont<-1
Mientras cont<=7 Hacer
5664 Para i<-1 Hasta 5 Con Paso 2 Hacer
Escribir Sin Saltar cont,'^',i,': ',cont^i, ' '
Fin Para

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

5667 Escribir ''


cont<-cont+3
Fin Mientras
5670 FinProceso
d) Ninguna de las anteriores

Lenguaje Java

5673 1. * ¿Para el siguiente segmento de código cuál es la salida del programa?

a) -120
b) 0
5676 c) 60
d) Ninguna de las anteriores
public class Test {

5679 public static void main (String[] args) {


int j = operacion();
System.out.println("Resultado: " + j);
5682 }

public static int operacion(){


j = -1;
5685 for(int i=5; i>=0; i--)
j=j*i;
}
5688 }
2. * ¿Para el siguiente segmento de código cuál es la salida del programa?

a) 8
5691 b) 72
c) 0
d) 36
5694 public class Test {

static int resultado = 0;

public static void main (String[] args) {


5697 operacion(3);
System.out.println("Resultado: " + resultado);
}

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

5700 public static int potencia(int base, int exp){


int j = 1;
for(int i=0; i<exp; i++)
5703 j=j*base;
return j;
}

5706 public static void operacion(int resultado){


int i=1;
for(int j=1; j<resultado; j++)
5709 i=j*potencia(j, 2);

resultado = i;
}
5712 }
8. * ¿Cuál es el “tiempo de vida” de una variable global?

a) Existe tanto tiempo como el programa


5715 b) Existe mientras una función se encuentra ejecutando
c) Existe mientras un bucle for se encuentra ejecutando
d) Existe mientras un parámetro de una función cambie de valor

5718 9. Indicar cuáles de las siguientes declaraciones de matrices no son válidas y el


porqué.
a) int primos={2,3,5,7,11};
5721 b) int [] resultados=int [30];
c) int [] primos= new{2,3,5,7,11};
10. Completar el siguiente método que imprime los elementos de una matriz bidi-
5724 mensional (la matriz puede tener distinto número de elementos en cada fila).
public static void imprime(int[][] a){
for(int i=0; i<a.length; i++){
5727 for(int j=0; -------------; j++){
System.out.print(a[i][j] + “ ”);
}
5730 }
}
11. ¿Cuál es la salida del siguiente programa?
5733 public class Ejercicio {
public static void main(String[] args){
int [] matriz = {1,2,3};

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

5736 metodoA(matriz);
for(int i=0; i<matriz.length; i++)
System.out.print(matriz[i]++ + " ");
5739 for(int i=0; i<matriz.length; i++)
System.out.print(matriz[i] + " ");
}
5742 static void metodoA(int [] b){
for(int i=0; i<b.length;i++)
b[i]=b[i]+3;
5745 }
}
12. * ¿Cuál es la salida del siguiente programa?
5748 public class Ejercicio {

public static void main (String[] args) {


char[] matriz = {'e','u','o','i','a'};
5751 metodo(matriz);
for(int i=0; i<matriz.length; i++){
System.out.println(matriz[i]);
5754 }
}

public static void metodo(char[] vocales){


5757 char aux;
for(int i=1; i<vocales.length; i++){
if(vocales[i-1]>vocales[i]){
5760 aux=vocales[i-1];
vocales[i-1]=vocales[i];
vocales[i]=aux;
5763 }
}
}
5766 }
13. * ¿Cuál es la salida del siguiente fragmento de código?
int index = 1;
5769 while(index < 10){
System.out.println(index);
index ++;
5772 }
14. * ¿Cuál es la salida del siguiente programa?
public class Ejercicio {

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

5775 public static void main (String args[]) {


int c = 1;
final int N=5;
5778 while(c<=N){
System.out.println(c);
c--;
5781 }
}
}
5784 15. * Diga si la proposición referente al siguiente método programado en Java es
verdadera o falsa: El método llamado funcion muestra (imprime en panta-
lla) los elementos de cualquier tipo de arreglo bidimensional enviado como
5787 argumento sin que haya ningún error al momento de la ejecución.

Nota: el método no tiene absolutamente ningún error de sintaxis, es decir, sí


se compila sin ningún error.
5790 public static void funcion (int[][] parametro) {
for(int i = 0; i < parametro.length; i++)
for(int j = 0; j < parametro.length; j++)
5793 System.out.println(parametro[i][j]);
}
a) La proposición es verdadera

5796 b) La proposición es falsa

16. * ¿Qué retorna la siguiente función?


public static int misterioso(int a, int n)
5799 {
int i, r, x;
i = n;
5802 r = 1;
x = a;
while (i > 0) {
5805 if (i % 2 != 0) {
r = r * x;
}
5808 x = x * x;
i = i / 2;
}
5811 return r;
}

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

a) El mínimo común múltiplo de los parámetros a y n.

5814 b) El resultado de elevar el parámero n a la a-ésima potencia.

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.

5817 17. * Dada las siguientes líneas de código del siguiente programa, identifique la
salida correcta del mismo.
public static void main(String[] args) {
5820 int arreglo[] = {2,7,8,9,4,5,2,6,8,9,3};
String cadena ="";
cadena = cadena + "\nNumeros: ";
5823 for(int i=0;i < arreglo.length;i++){
if(arreglo[i]%2!=0){
cadena = cadena +" "+ arreglo[i];
5826 }
}
System.out.println(cadena);
5829 }

public static void funcion(int[] arreglo) {


for (int i=1; i < arreglo.length; i++) {
5832 int aux = arreglo[i];
int j;
for (j=i-1; j >=0 && arreglo[j] > aux; j--){
5835 arreglo[j+1] = arreglo[j];
}
arreglo[j+1] = aux;
5838 }
}
a) 2 8 5 7 9
5841 b) 2 2 4 6 8
c) 7 9 5 9 3
d) 2 9 9 5 3

5844 18. * ¿Qué es lo que muestra en pantalla el siguiente código?


public static void main(String[] args) {
int[][] m = { {6, 7, 5, 0, 4}, {3, 8, 4}, {1, 0, 2, 7} };
5847 for(int i = 0; i < m.length; i++) {
System.out.print(m[i].length + “ “);

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

}
5850 }
a) 4 4 7
b) 5 3 4
5853 c) 0 8 2
d) 6 3 1

19. * ¿Cuál es el ámbito de la variable x?


5856 1) public void counter(int StartingNumber){
2) for (int x = StartingNumber; x<100; x++)
3) {
5859 4) JOptionPane.showMessageDialog(null, x);
5)
6) }
5862 7) JOptionPane.showMessageDialog(null, “Fin del método”, x);
8) }
a) Líneas desde la 2 a 7
5865 b) Líneas desde la 2 a 6
c) Línea 4
d) Líneas desde la 1 a 8

5868 20. * ¿Cuál es la salida correcta del siguiente programa?


public class ProgramacionI {
public static int contador = 0;
5871 public static void main(String[] args) {
String cadena1, cadena2;
cadena1 = "cadena";
5874 cadena2 = "programación";
for (int i = 0; i < cadena2.length(); i++) {
for (int j = 0; j < cadena1.length(); j++) {
5877 if (i == j) {
contar();
}
5880 }
}
System.out.println(contador);
5883 }
public static void contar() {
contador = contador + 2;
5886 }
}

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

21. * ¿Cuál es la salida correcta del siguiente programa?


5889 public class ProgramacionI {
public static void main(String[] args) {
String str = "manejo de cadenas con java";
5892 int inicio = str.indexOf("c");
int fin = str.indexOf("e", inicio + 1);
System.out.println(str.substring(inicio, fin + 3));
5895 }
}
a) cadenas

5898 b) cade

c) cadena

d) de

5901 22. * ¿Qué muestra el siguiente programa?


public class ProgramacionI {
public static void main(String[] args) {
5904 int contador;
int limite;

5907 contador = 2;
limite = 10;

5910 do {
switch (contador % 2) {
case 0:
5913 System.out.print(contador + " es par\n");
break;
case 1:
5916 System.out.print(contador + " es impar\n");
break;
}
5919 contador += 2;
} while (contador < limite);
}
5922 }
23. Pregunta

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

Lenguaje C

5925 1. * Realice la prueba de escritorio del siguiente programa e indique qué se mues-
tra en pantalla.
#include<stdio.h>

5928 int main() {


int a = 4, b = 1, x;
do{
5931 a += 2;
b++;
}while(a<=b);
5934 a += 3;
b += 2;
a = a+b%2+a%3;
5937 x = a/b;
if(x>b){
b = b+4;
5940 a = b%3;
x = a%b;
}
5943 b++;
x = x*(10/8)+a%b;
for(int i=0; i<a; i=i+1)
5946 printf("%d", a);
printf("\n");
for(int i=0; i<b; i+=2)
5949 printf("%d", b);
for(int i=0; i<=b; i++)
printf("%d", x);
5952 printf("\nVariable a: %d\n", a);
printf("Variable b: %d\n", b);
printf("Variable x: %d\n", x);
5955 }
2. Pregunta

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

13. Fórmulas y Relaciones

5958 Interés

Interés simple

Beneficio de una inversión cuando los intereses producidos se deben solamente al ca-
5961 pital inicial, i.e., los intereses no se agregan al capital productivo en cada periodo.
Por ejemplo, si se desea invertir un capital de 100 dólares a una tasa de interés anual
(periodo anual) de 12%, a 10 años plazo, los intereses ganados al terminar cada año
5964 serían como se muestra en la siguiente tabla.
Capital
Al terminar Interés
el año [$] 100
01 12 112.00
02 12 124.00
03 12 136.00
04 12 148.00
05 12 160.00
06 12 172.00
07 12 184.00
08 12 196.00
09 12 208.00
10 12 220.00

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

5967 La formula del interés simple es

(13.1)

donde CF es el capital final, CI es el capital inicial, i es el interés por cada periodo y


5970 n es el número total de periodos. Utilizando el ejemplo anterior se tendría
.

Interés compuesto
5973 A diferencia del interés simple, el interés compuesto representa la acumulación de
intereses que se han generado en un período para ser considerados como capital
productivo para el siguiente período. Por ejemplo, si se desea invertir un capital de
5976 100 dólares a una tasa de interés compuesto anual (periodo anual) de 12%, a 10 años

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

plazo, los intereses ganados al terminar cada año serían como se muestra en la
siguiente tabla.

5979 Es decir, para cada periodo se calcula el interés y ese interés es aumentado al capital
para el cálculo del interés del periodo siguiente.

La fórmula de interés compuesto es

5982 (13.2)

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

Composición periódica o Capitalización continua

Para hacer sencillo el concepto se utilizará un ejemplo. En algunos casos el interés se


5988 cobra componiendo varias veces dentro del mismo periodo (del que se menciona el in-
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),
5991 los intereses y capital serían los que se muestran en la siguiente tabla

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

Es decir, se saca el 12% del capital y se divide para el número de veces de composi-
ciones por periodo (12 composiciones por un periodo de un año, en el ejemplo). Ese
5994 interés se suma al capital para calcular el capital de la siguiente composición como si
se tratase de interés compuesto.

La fórmula de la composición periódica es

5997 (13.3)

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.
6000 Utilizando los datos del ejemplo, se tendría .

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
6003 si la ganancia trimestral es reinvertida?

Estadística

Media ponderada

6006 Para una serie de datos no vacía:

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

a la que corresponden los pesos:

la media ponderada es:

6009 (13.4)

Medidas de longitud

• 1 milla = 1609 metros

6012 • 1 pulgada = 0.0254 metros

• 1 yarda = 3 pies

• 1 pie = 12 pulgadas

6015 Unidades de capacidad

• 1 pie cúbico = 0.0283 metros cúbicos

• 1 metro cúbico = 1000 litros

6018 • 1 yarda cúbica = 27 pies cúbicos.

Unidades de capacidad de información

• 8 bits = 1 byte

6021 • 1024 bytes = 1 kilobyte (KB)

• 1024 KB = 1 megabyte (MB)

• 1024 MB = 1 gigabyte (GB)

6024 • 1024 GB = 1 terabyte (TB)

Tiempo

• 1 hora = 60 minutos

6027 • 1 minuto = 60 segundos

• 1 hora = 3600 segundos

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

Unidades de temperatura

6030 Relación entre grados celsius (centígrados, C) y fahrenheit (F).

(13.5)

Círculo

6033 r: radio

l: longitud o perímetro

a: área

6036 (13.6)

(13.7)

Esfera

6039 • r: radio

• s: superficie o área

• v: volumen

6042 (13.8)

(13.9)

Cuadrado

6045 Ángulos

(13.10)

Ecuación de segundo grado

6048 Dada la ecuación de segundo grado

(13.11)

las raíces o ceros de la función son:

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

6051 (13.12)

Logaritmos

El logaritmo de un número en cualquier base puede obtenerse por la relación

6054 (13.13)

en donde, , ; , .

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

14. Referencias
Alcalde Lancharro, E., García López, M., 1992. Metodología de la programación:
aplicaciones en COBOL y PASCAL. McGraw-Hill, Madrid.
Chapra, S.C., Canale, R.P., Enríquez Brito, J., Roa Hano, Ma. del C., 2007. Métodos
Numéricos para Ingenieros, 5th ed. McGraw-Hill Interamericana, México.
Charles Lehmann, 1994. Geometría analítica. Editorial Limusa, S.A. de C.V. Grupo
noriega editores, México D.F.
Chaves Torres, A.N., 2012. Diseño de algoritmos. Universidad Nacional Abierta y a
Distancia, Colombia.
Deitel, P.J., Deitel, H.M., 2012. Java: How to Program, 9th ed. Prentice Hall, Upper
Saddle River, N.J.
Editorial Macro, 2001. Turbo Pascal 7.0 Paso a Paso. Editorial Macro, Lima, Perú.
Gómez Fuentes, M. del C., Cervantes Ojeda, J., 2013. Inicialízate en la Programación
con C++, 1st ed. Universidad Autónoma Metropolitana, México.
Guttag, J., 2016. Introduction to computation and programming using Python: with
application to understanding data, 2nd ed. The MIT Press, Cambridge,
Massachusetts.
Joyanes Aguilar, L., Rodríguez Baena, L., Fernández Azuela, M., 2003. Fundamentos
de Programación: Libro de Problemas, 2nd ed. : McGraw-Hill, Madrid.
Lay, D.C., Lay, S.R., McDonald, J.J., 2016. Linear algebra and its applications, 5th
ed. Pearson, Boston.
Olaya, V., 2011. Sistemas de Información Geográfica.
Parra Terrazos, C., n.d. Algoritmos y estructuras de datos I. Universidad Tecnológica
del Perú, Lima, Perú.
Pérez Montes, F.M., 2010. Ejercicios de Programación en Java: Condicionales,
Bucles, Tablas y Funciones. Eduinnova, Sevilla, España.
Pinales Delgado, F.J., Velázquez Amador, C.E., 2014. Algoritmos Resueltos con
Diagramas de Flujo y Pseudocódigo. Departamento Editorial de la
Universidad Autónoma de Aguascalientes, Aguascalientes, México.
Quarteroni, A., Saleri, F., Gervasio, P., 2014. Scientific Computing with MATLAB
and Octave, 4th ed, Texts in Computational Science and Engineering.
Springer Berlin Heidelberg, Berlin, Heidelberg.
Tanenbaum, A.S., Wetherall, D.J., 2012. Redes de computadoras, 5th ed. Pearson
Educación, México D.F., México.
Vázquez Gómez, J.B., 2012. Análisis y diseño de algoritmos, 1st ed. Red tercer
milenio, Tlalnepantla, México.

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

Vázquez-Patiño, A., 2016. Carrera de caballos. Cuenca, Ecuador.

240

Вам также может понравиться