Sie sind auf Seite 1von 228

Ejercicios Básicos de Programación

31 de octubre de 2019

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

Miscelánea.............................................................................................................162
* Datos personales.................................................................................................170
Estadísticas de texto.............................................................................................170
* Analizador de tweets..........................................................................................172
Eliminación de n-ésima palabra............................................................................172
Cifrado por sustitución..........................................................................................173
Cifrado por transposición......................................................................................174
* Manejo de una cadena con información personal...............................................175
* Línea de comandos.............................................................................................176
* Mantenimiento de datos de personas.................................................................178
Búsquedas..................................................................................................................182
Ordenamiento............................................................................................................185
Miscelánea.............................................................................................................185
* Menú, ordenamiento y búsqueda de registros....................................................190
* Calificaciones de estudiantes..............................................................................191
Ordenamientos en matriz......................................................................................193
* Manejo de datos de personas.............................................................................194
Archivos.....................................................................................................................196
Miscelánea.............................................................................................................196
Miscelánea de Ejercicios............................................................................................197
* Combate de pokemones......................................................................................197
Solución de un sistema de ecuaciones por matrices..............................................199
Conversión de un número en base diez a sistema binario.....................................199
Conversión de un número en base binaria a sistema en base diez........................199
Cálculo de las tres alturas de un triángulo dadas las longitudes de sus lados......199
Valor futuro de una inversión................................................................................199
Cálculo del capital inicial......................................................................................199
Cálculo de la tasa de interés..................................................................................199
Cálculo del número de años...................................................................................199
Media, mediana y varianza de N datos.................................................................199
Transformación de números decimales a romanos.................................................199
Dígitos de un número............................................................................................201
* Pirámide invertida..............................................................................................201
* Cubos e impares.................................................................................................201
* Cantidad de dígitos fijo de números mostrados.................................................201
Algoritmo de Gauss y Método de eliminación de Gauss.......................................202
Métodos de Jacobi y de Gauss-Seidel....................................................................203

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

Dados.....................................................................................................................203
Búsquedas y ordenación........................................................................................203
Interpolación..........................................................................................................203
Integración numérica.............................................................................................203
Ecuaciones diferenciales ordinarias (EDO)...........................................................204
* Tiempo de Respuesta Facebook.........................................................................208
¿Qué Hace el Algoritmo/Programa?.........................................................................210
Lenguaje Java........................................................................................................214
Lenguaje C............................................................................................................221
Fórmulas y Relaciones...............................................................................................222
Interés....................................................................................................................222
Interés simple....................................................................................................222
Interés compuesto..............................................................................................222
Composición periódica o Capitalización continua.............................................223
Estadística.............................................................................................................224
Media ponderada...............................................................................................224
Medidas de longitud..............................................................................................225
Unidades de capacidad..........................................................................................225
Unidades de capacidad de información.................................................................225
Tiempo..................................................................................................................225
Unidades de temperatura......................................................................................226
Círculo...................................................................................................................226
Esfera.....................................................................................................................226
Cuadrado...............................................................................................................226
Ángulos..................................................................................................................226
Ecuación de segundo grado...................................................................................226
Logaritmos.............................................................................................................227
Referencias.................................................................................................................228

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

Introducción

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

1. https://www.slideshare.net/angenio2/programacin-presentacin-del-curso
2. https://www.slideshare.net/angenio2/programacin-fundamentos-64227508
10 3. https://www.slideshare.net/angenio2/programacin-algoritmos
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
7. https://www.slideshare.net/angenio2/programacin-1-introduccin-a-c
15 8. https://www.slideshare.net/angenio2/programacin-tipos-de-datos-java
9. https://www.slideshare.net/angenio2/programacin-1-tipos-bsicos-de-datos-en-c
10. https://www.slideshare.net/angenio2/programacin-estructuras-de-datos
11. https://www.slideshare.net/angenio2/programacin-1-estructuras-de-datos-en-c
12. https://www.slideshare.net/angenio2/programacin-funciones
20 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

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

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

Fundamentos

Qué es programar

1. * Indique qué es programar

2. La programación se puede definir como

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


programas de computador

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

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


mandos

10 d) las anteriores respuestas no son correctas

3. Pregunta

Qué es un lenguaje de programación

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

a) Eiffel

15 b) C#

c) Fortran

d) DOS

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

a) 10

20 b) 13

c) 32

d) Las anteriores respuestas no son correctas

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

a) 32

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

b) 65

c) 97

d) 126

4. En un lenguaje débilmente tipado

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

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

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

d) Las anteriores respuestas no son correctas

10 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

c) No hay un lenguaje ensamblador

d) Las anteriores respuestas no son correctas

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

a) Ada

b) C

c) Fortran

d) Java

20 7. Imperativo, declarativo y orientado a objetos son

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

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

c) Paradigmas de programación

d) Las anteriores respuestas no son correctas

25 8. Pregunta

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

Modelización de problemas del mundo real

Del problema real a su solución por computadora

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

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

5 Conceptos acerca de software

Variables y tipos de datos

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

a) Funciones de acceso a datos

b) Instrucciones de acceso a datos

10 c) Sentencias de control

d) Tipos de datos

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

15 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

Algoritmos

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

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

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

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


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

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

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


ríbalos.

6. ¿Qué es un algoritmo?

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


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

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


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

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


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

d) Las anteriores respuestas no son correctas.

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

15 a) Secuencia de pasos

b) Secuencia de instrucciones

c) Produce un resultado deseado

d) Es finito

e) No siempre se alcanza un resultado

20 Ejercicios desde cero

1. Algoritmo para preparar un margarita

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

3. Algoritmo para construir una mesa

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

25 5. Algoritmo para calcular el volumen de una esfera

6. Algoritmo para calcular el IVA de una compra

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

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

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

9. Algoritmo para pasar de grados sexagesimales a radianes

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

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

10 12. 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.

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

14. Sacar el promedio de las notas de 4 estudiantes

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

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

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

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

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

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

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


las longitudes de sus lados.

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

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

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

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

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

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

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

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

29. Algoritmo para pasar coordenadas polares a cartesianas

30. Algoritmo para pasar coordenadas cartesianas a esféricas

10 31. 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é


hace el algoritmo del ejemplo).

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


15 problema

a) Verdadero

b) Falso

3.

Pseudocódigo

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


20 el algoritmo del ejemplo).

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

a) Verdadero

b) Falso

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

Prueba de escritorio

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

5 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

2. Pregunta

Codificación

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


dificar y ejecutar un programa. Si en un lenguaje compilado usted pudo reali-
zar la compilación de su código fuente sin errores, ¿qué otros tipos de errores
podrían aparecer en la ejecución del programa?

2. Pregunta

15 Documentación y su importancia

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


que hace para que los humanos entiendan cuál es el objetivo de cada instruc-
ción o conjunto de instrucciones. En este contexto, ¿qué información, como
documentación, debe agregar al código un programa?

20 2. Pregunta

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

Programación Secuencial

Miscelánea

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


E S T U D I A N T E
5 N
I
V
E
R
10 S
I N G E N I E R Í A
D
A
D
15 2. * Mostrar la salida en pantalla del siguiente algoritmo
Proceso cambioVariable
Definir a, b, c, aux Como Entero;
a <- 5;
b <- 6;
20 c <- 7;
aux <- a;
b <- a;
c <- b;
Escribir a, “ ”, b, “ ”, c;
25 FinProceso
3. Se piden dos números y se presentan los resultados de la suma, resta, produc-
to y división. Primero elabore un algoritmo que resuelva el problema y luego
trate de editarlo para que use la menor cantidad de variables posible.

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


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

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


san 5 números por el teclado del computador, encontrar la suma y el promedio

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

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


flujo, pseudocódigo; realice la prueba de escritorio.

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


presada como un porcentaje; por ejemplo 10, 20, 60). Calcular la población de
5 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,
pregúntese lo siguiente: ¿cuál es el número mínimo de variables que puede uti-
lizar para resolver el problema?

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

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


cualquier persona puede alcanzar sin correr riesgos de salud es igual a 220 me-
15 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
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.

20 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
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-
25 rio normal por hora que gana un empleado y el número de horas trabajadas
durante la semana. Mostrar el salario total semanal que gana el empleado.

Respaldo de información

Elaborar un algoritmo que permita calcular el número de CDs necesarios para hacer
una copia de seguridad de la información almacenada en un disco duro cuya capaci-
30 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
respaldo tiene una capacidad de 700 MB; un GB tiene 1024 MB. Represente el algo-

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

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

Cálculos espaciales básicos

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

Distancia euclidiana

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

(1)

Distancia de Manhattan

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


(vea la figura 6),

(2)

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


y1) y B(x2, y2) dados.

20 * Métricas Lp

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

(3)

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

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

Distancia ortogonal

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


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

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


de la forma A = (xA, yA).

(4)

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

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


= 0, se tiene

(5)

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


del mismo punto a un plano.

15 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
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-
20 nadas

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

x = x1 + u(x2 – x1)

y = y1 + u(y2 – y1)

donde u se obtiene de

(6)

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

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

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
10 algoritmo que permita hacer el cálculo.

Costo de llamada

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

Cálculo de potencia

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

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

Figura 3: Circuito eléctrico.

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

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


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

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

5 (7)

Desarrolle un algoritmo que permita calcular el área, en cm², de un triángulo, dadas


las longitudes, en metros, de sus lados. Represente el algoritmo con un diagrama de
flujo y pseudocódigo; además, realice las pruebas de escritorio necesarias para verifi-
car el correcto funcionamiento del algoritmo.

10 Hexágono regular

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


cule el área del polígono.

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


gono regular inscrito en una circunferencia de un radio dado.

15 Á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

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

debiendo tomarse el valor absoluto del determinante.

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


de sus vértices.

Puntos colineales

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

10 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

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

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


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

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


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

Sistema de ecuaciones lineales

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


incógnitas.

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

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


incógnitas.

* Vuelto/cambio de una compra

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

* Transformación entre unidades de tiempo

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

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.

15 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-
ras), minutos y segundos (at2seg).

Transformación de pies a metros

20 Dada una cantidad expresada en pies y otra en metros, determinar la suma pero con-
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
cúbicas respectivamente. De la cantidad total de agua, el 75% se dedica al consumo
25 doméstico y el 25% se dedica al riego. Diseñe un programa que haga lo siguiente:

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


cúbicos.

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

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


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

Cálculo de comisión

Un vendedor recibe un sueldo base más un 10% extra por comisión de sus ventas, el
5 vendedor desea saber cuánto dinero obtendrá por concepto de comisiones por las tres
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

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

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

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.

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

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

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

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

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


25 ción final está dada sobre 30.

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


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

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

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


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

5 Porcentaje de mujeres y hombres

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

10 * Cálculo de la edad de una persona

Realice un algoritmo que determine aproximadamente (i.e., asuma que todos los años
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
15 mismo realizando la prueba de escritorio.

Conversión de radianes a grados centesimales y viceversa

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

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

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

Área y volumen de una esfera

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

Longitud y área de un círculo

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

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

Solución de ecuaciones de segundo grado

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


función. Vea la ecuación 12.

Intercambio de valores de variables

5 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
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
10 ; al finalizar el algoritmo, la asignación de las variables sería
y .

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


d. Como resultado final se debe tener lo siguiente:

a) diagrama de flujo y prueba de escritorio

15 ◦ en a queda el valor de b

◦ en b queda el valor de c

◦ en c queda el valor de d

◦ en d queda el valor de a

b) pseudocódigo y prueba de escritorio

20 ◦ en a queda el valor de d

◦ en b queda el valor de c

◦ en c queda el valor de b

◦ en d queda el valor de a

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


25 riables.

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:

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

• 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

• var3 debe contener el valor de la variable var2

5 • var4 debe contener el valor de la variable var1

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


riables.

Multiplicación de polinomios

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

Caída de cuerpos en el vacío

Ley de gravitación universal

(8)

Logaritmo de un número en cualquier base

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


base. Vea la ecuación 13.

Trabajo conjunto

Considere primero los siguientes problemas de razonamiento:

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

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

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

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

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

Estructuras de control

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

Miscelánea

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

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


variables?

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

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

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

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

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

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

a) if

b) while

c) for

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

a) if

b) for

5 c) while

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


bloque de acciones?

a) if

b) for

10 c) while

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


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

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

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-
cular de acumulador? Explique su respuesta.

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

25 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-
ted podría utilizar (escoja 1 opción):

a) un bucle (lazo) for

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

b) un bucle (lazo) if

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

5 12. if, else, for y while son

a) Funciones de acceso a datos

b) Sentencias de control

c) Tipos de datos

d) Las anteriores respuestas no son correctas

10 13. * Un bucle, ciclo o lazo es

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

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

15 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

d) Todas las anteriores respuestas son correctas

14. ¿Qué muestra el siguiente algoritmo?


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

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

*
*****
**
*****
5 *
*****
**
*****
*
10 *****
a)
Proceso estrellas2
b1 <- 1;
b2 <- 0;
15 c1 <- 20;

Repetir
Si b1 = 1 Entonces
Si b2 = 1 Entonces
Escribir "**";
20 b2 <- 0;
Sino
Escribir "*";
b2 <- 1;
FinSi
25 b1 <- 3;
Sino
Escribir "*****";
b1 <- 1;
FinSi
30 c1 <- c1 + 2;
Hasta Que c1 < 1
FinProceso
b)
Proceso estrellas1
35 b1 <- 1;
b2 <- 0;

Para i<-10 Hasta 100 Con Paso 10 Hacer


Si b1 = 1 Entonces
Si b2 = 1 Entonces

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

Escribir "**";
b2 <- 0;
Sino
Escribir "*";
5 b2 <- 1;
FinSi
b1 <- 3;
Sino
Escribir "*****";
10 b1 <- 1;
FinSi
FinPara
FinProceso
c)
15 Proceso estrellas3
b1 <- 1;
b2 <- 0;
c1 <- 10;

Mientras c1 <= 10 Hacer


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

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

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

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


miento iterativo que utilizando un for.

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


20 para obtener el mismo comportamiento iterativo que utilizando un for.

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

18. * ¿Qué muestra el siguiente algoritmo?


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

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

20. ¿Qué muestra el siguiente algoritmo?


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

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

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

FinAlgoritmo
a) 1 2 3 4 5

b) 1 1 2 3 4

c) 1 1 2 2 3

5 d) 1 2 2 4 5

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


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

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

Escribir " ";

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

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

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

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

a) For

b) Do-while

c) Repeat-until

d) If-then

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

a) Arreglo

b) Contador

20 c) Ciclo

d) Acumulador

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.

25 a) Arreglo

b) Array

c) Ciclo

d) Bandera

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

e) Contador

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

a) Array

b) Contador

5 c) Iteración

d) Bucle

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

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

b) While, for, if-else

10 c) While, do-while y for

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

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

a) Arreglo

15 b) Contador

c) Ciclo

d) Array

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


Algoritmo valorDeI
20 i <- 1;
Leer n;
Mientras i < n Hacer
i <- i + 1;
Fin Mientras
25 FinAlgoritmo
a) 1 si el valor introducido es igual o menor que 0; el valor introducido menos
uno en cualquier otro caso

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


cualquier otro caso

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

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


uno en cualquier otro caso

d) Las anteriores respuestas no son correctas

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


5 Algoritmo misterioso
a = 0
b = a+10
Según b Hacer
0:
10 Mientras b > a Hacer
Escribir a
b = b + a
Fin Mientras
10:
15 Si a = 0 Entonces
Escribir b + 11
b = b + a
FinSi
11:
20 Escribir '11'
De Otro Modo:
Escribir a
Fin Según
FinAlgoritmo
25 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
fila = 5
Mientras fila >= 1 Hacer
30 columna = 1
Mientras columna <= 10 Hacer
Si (fila Mod 2) = 0 Entonces
Escribir Sin Saltar "<"
Sino
35 Escribir Sin Saltar ">"
FinSi
columna = columna + 1
FinMientras
fila = fila - 1

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

Escribir ""
FinMientras
FinAlgoritmo
34. * ¿Cuál es el resultado de ejecutar el siguiente algoritmo?
5 Algoritmo misterioso
n = -1
Mientras n <= 3 Hacer
Si (n >= 0)
Si (n = 2)
10 Escribir "uno"
FinSi
Sino
Escribir "dos"
FinSi
15 n = n + 1
FinMientras
Escribir "tres"
FinAlgoritmo
35. ¿Cuál es el resultado de ejecutar el siguiente algoritmo?
20 Proceso algoritmo_misterioso
definir a Como Entero;
definir b Como Entero;
definir x Como Entero;
a<-4;
25 b<-0;
Repetir
a<-a+2;
b<-b+1;
Hasta Que a>b;
30 a<-a+3;
b<-b+2;
a<-a+b%2+a MOD 3;
x<-trunc(a/b);
Si (x>b) entonces
35 b<-b+4;
a<-b mod 3;
x<-a MOD b;
Finsi
b<-b+1;
40 x<-x*trunc(10/8) + a mod b;
Escribir "el valor de la variable a es : ", a;

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

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


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?

5 a) El algoritmo opcion_A

b) El algoritmo opcion_B

c) El algoritmo opcion_C

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


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

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

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

c) El while se ejecuta por lo menos una vez

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

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

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

a) El algoritmo opcion_1

b) El algoritmo opcion_2

c) El algoritmo opcion_3

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

a) Escribir el pseudocódigo correspondiente

5 b) Realizar la prueba de escritorio

c) Mostrar cual sería la salida en pantalla

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

40. Pregunta

Estructura de decisión IF

Miscelánea

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


5 https://goo.gl/SRuAY2

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


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

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

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


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

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

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


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

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

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

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


lo cumplen con la condición para formar un triángulo.

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


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

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

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


20 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
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
25 prueba de escritorio.

13. El IESS necesita clasificar a las personas que se jubilarán este año. Existen
tres tipos de jubilaciones: por edad, por antigüedad joven y por antigüedad
adulta. Las personas adscritas a la jubilación por edad deben tener 60 años o
más y una antigüedad en su empleo de menos de 25 años. Las personas adscri-
30 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-
ción por antigüedad adulta deben tener 60 años o más y una antigüedad en su

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

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


crita una persona.

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-
5 cos).
i f ( a < b && c != d ) && ( b > d | | b == d ) b1 ;
i f ( a < b && c != d ) && ( b > d | | b == e ) b2 ;
15.

Aprobación de curso

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

Aumento de sueldo en base a sueldo actual

Nota alfabética

El programa solicita una calificación al usuario que está en el rango [0, 20] y la trans-
15 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

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.

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

Estación del año

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


año pertenece.

Divisibilidad de dos números

5 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ú-
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
10 ingresado debe ser mayor o igual al segundo.”

Aritmética básica con 3 números

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


do de la suma del primero y el segundo.

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


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

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


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

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


20 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
cero.

* Incentivo por producción

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


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

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

Posición del menor de n números

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


ingresado (i.e., si fue el primer número o el segundo). Considere que el menor
valor no puede repetirse. Por ejemplo, si los números ingresados fueran: 14, 19.
5 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


ingresado (i.e., si fue el primero en ser ingresado, si fue el segundo o si fue el
tercero). Considere que el menor valor no puede repetirse. Por ejemplo, si los
10 números ingresados fueran: 14, 19, 14. El resultado 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


ingresado. Considere que el menor valor no puede repetirse. Por ejemplo, si los
números ingresados fueran: 14, 19, 14, 16, 19. El resultado debe ser: “El menor
15 valor ingresado fue 14 y corresponde al 3° número ingresado”.

Puntaje en olimpiada

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

Pago en estacionamiento

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


Miércoles, $2.5 los días Jueves y Viernes, $3 los días Sábado y Domingo. Se considera
25 fracción de hora cuando haya pasado de 5 minutos. Diseñe un programa que determi-

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

ne cuánto debe pagar un cliente por su estacionamiento en un solo día de la semana.


Si el día ingresado es incorrecto imprima un mensaje de error.

Número de cifras de un número

Diseñe un programa que lea un número entero (positivo o negativo) de máximo 4 ci-
5 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
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
10 deberá ser 0018. Si el número ingresado no fuera correcto debe imprimir un mensaje
de error.

Promoción en una papelería

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

• Compra menos que 12, ningún obsequio.

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

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

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

25 Saldos y pagos mínimos

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

El banco “Bandido de peluche” desea calcular para uno de sus clientes el saldo actual
(saldoAct), el pago mínimo (pagoMin) y el pago para no generar intereses (pagoSi-

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

nInteres). Los datos que se conocen son: saldo anterior (saldoAnt) del cliente, monto
de las compras que realizó y el pago que depositó en el corte (abono) anterior (cor-
teAnt). Para calcular el pago mínimo se debe considerar 15% del saldo, y para no ge-
nerar intereses corresponde 85% del saldo. Considere que este saldo (actual) debe in-
5 cluir 12% de los intereses causados por no realizar el pago mínimo para no generar
intereses en el corte (abono) anterior y $200 por multa si abonó (en el corte ante -
rior) menos del pago mínimo. Realice el algoritmo correspondiente y represéntelo me-
diante el diagrama de flujo y pseudocódigo.

Ordenamiento de números

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

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

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


rio.

Restricción de ingreso

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

Vocales o consonantes

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


nante, número u otro.

Conversión de unidades de masa

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


menú tiene las siguientes opciones:

1. Hectogramos

2. Gramos

3. Decigramos

25 4. Centigramos

5. Miligramos

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

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


meros ingresados.

* Pares o nones

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

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


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

Nota: en el lenguaje de programación C rand()%N genera un número aleatorio ente-


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

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

Estructura de selección

Miscelánea

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


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

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


crédito en 6, 12, 18, 24 mensualidades sus artefactos: televisores, refrigerado-
ras, hornos micro hondas. Se desea saber en cualquier momento cuántas ven-
tas se han realizado al contado, cuántas al crédito en 6, cuantas al crédito en
12, cuántas al en 18, cuántas en 24 mensualidades.

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


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

4. 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
15 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-
nan hasta $600 y cuánto dinero se tiene que pagar al estado por concepto de
impuestos

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


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

6.

25 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
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-
30 brero”, etc.

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

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
un mensaje que diga “Fecha no reconocida.”. Tome en cuenta la siguiente informa-
5 ción:

• Acuario: enero 21 - febrero 20


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

Total de ventas

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

• ecu, sma, mas: descuento 5%.


• ecu, sma, fem: descuento 4%.
25 • ecu, med, mas: descuento 7%.
• ecu, med, fem: descuento 9%.
• ecu, lar, mas: descuento 10%.
• ecu, lar, fem: descuento 12%.
• ext, sma, mas: descuento 4%.
30 • ext, sma, fem: descuento 5%.
• ext, med, mas: descuento 9%.
• ext, med, fem: descuento 7%.
• ext, lar, mas: descuento 12%.
• ext, lar, fem: descuento 10%.

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

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


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

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

Estructura de repetición WHILE

Miscelánea

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


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

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


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

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

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

Por ejemplo:

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

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

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

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


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

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


programa:
N: 5 M: 5 N: 3 M: 9
10 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

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

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

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

20 Números de n a m

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


2. Hacer un programa que imprima los números enteros desde 1 a n.
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).
25 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 ,
100].

57
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 naturales.

Contador de números impares

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

Múltiplos de n
1. Mostrar los múltiplos de 3 comprendidos entre los números 1 y 15.
2. Contar los números múltiplos de 3 comprendidos entre los números 1 y 15.
3. Contar y sumar los números múltiplos de 3 comprendidos entre los números 1
10 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).

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-


15 gresados.

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


1. Imprimir el mayor de una serie de cinco números ingresados por el usuario.
20 2. Imprimir el menor de una serie de cinco números ingresados por el usuario.
3. Preguntar al usuario cuántos números va a ingresar. Leer los n números. Im-
primir el mayor y el menor de los n números ingresados.

Subsidio familiar

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


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

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

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


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


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

* Factura

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
10 que hay algunos productos que se les impone el 14% del IVA. El programa deberá te-
ner las siguientes opciones de menú:

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


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

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


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

Repetición de series

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


2. Pedir el número de veces que el usuario quiere repetir la serie de números del
1 al 6. Repetir las n veces la serie.
3. Pedir el número de veces que el usuario quiere repetir una serie. Pedir el límite
inferior (m) y superior (w) de la serie. Repetir las n veces indicadas la serie de
25 números desde m a w.

Encuesta a familias

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


cuesta:

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

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

• Piensan compararlos o no. Contarlos.


• Hallar el porcentaje de cada uno.

Conteo de votos

Leer 550.000 votos otorgados a 3 candidatos ( ) a alcalde de Cuenca e


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

* Contador de mayores de edad

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

10 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
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 223.

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

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


cuenta de ahorros. La cuenta percibe un interés fijo durante un año de 10%

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

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

Promedio de edad en escuela

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

10 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
juntas?

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

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

20 Frases

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

Tirada de dados
25 • 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
tiene.

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

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

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

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

Número de días entre dos fechas

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

Simple random walks

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


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

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


camina; 1, camina un paso) y probabilidad P(0) = 0,5 y P(1) = 0,5. Realice un algo-
25 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.

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:

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

Suma y promedio de factoriales

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


el teclado del computador 2 números enteros positivos, encontrar la suma y el prome-
dio de todos los factoriales de los números pares comprendidos entre esos dos núme-
ros ingresados. Mostrar la suma y el promedio.

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


10 lizar la prueba de escritorio.

Ejemplo:

A= 2

B= 8

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

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


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

Series y sumatorias

• Sume los primeros 100 números de .

• * Ingresados un valor de n y m, donde n es mayor que m (validar), calcular la


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

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

• * 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 y 2) el


valor del ángulo 𝑥 en radianes. Verifique el valor obtenido calculando el coseno
5 del ángulo 𝑥. Debe mostrarse un mensaje que indique al usuario el resultado
obtenido con la serie del coseno y con la función del coseno. Por ejemplo, en el
lenguaje C puede usar la función cos(𝑥) que viene incluida en math.h.

Combinatoria

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


10 junto con n elementos es:

(1)

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-
dar). Puede comprobar la validez de su programa introduciendo los valores n=15,
15 m=10; el resultado es 3003.

* Dibujo de cuadrado

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

* Dibujo de cuadrado y rombo

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


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

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

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


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

* Onda cuadrada

Información de onda cuadrada tomada de Wikipedia.

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

1. Considere la siguiente onda cuadrada.

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


datos que deben especificarse son:

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


10 M: representa el número de “dientes” a dibujar, debe ser entero.
2. 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 (igual


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

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


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

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

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

-7 10 0
-8 11 1
-9 10 0
11 1
10 0
11 1
10 0
11 1
10 0
11 1
10 0
1
0
1
0
1
0
1
0

* Onda de sierra

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

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

125
126
127
128

Fórmula del binomio

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


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

10 (2)

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

Triángulo de Pascal

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


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

(3)

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

Su construcción es de la siguiente manera:

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

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


descendente, a ambos lados, del siguiente modo: se suman las parejas de cifras
25 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
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 n=7.

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

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

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


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

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

Estructura de repetición DO-WHILE

Miscelánea

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


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

5 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
los cálculos el número -9999.

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


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

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

15 5. El promedio ponderado se calcula en dos pasos:

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


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

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

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


20 den llevar un número variable de asignaturas.

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

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
5 deberá emitir un mensaje de error y deberá comenzar nuevamente.

Desarrolle un algoritmo que calcule e imprima:

• El número de asignaturas cursó el estudiante


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

Mientras fila >= 1 Hacer


columna = 1;

Mientras columna <= 10 Hacer

Si (fila Mod 2) = 0 Entonces


35 Escribir Sin Saltar “<”;

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

Sino
Escribir Sin Saltar “>”;
FinSi

columna = columna + 1;
5 FinMientras

fila = fila – 1;
Escribir “”;
FinMientras
FinAlgoritmo
10 ¿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


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

20 rt <- (mr+Mr1)/2;

Escribir "Ingrese precisión:";


Leer precision;

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


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

72
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.
#include <stdio.h>
int main(int argc, char **argv)
5 {
int i=0;
do {
--i;
printf("%d", i);
10 i++;
}while(i >= 0);
return 0;
}
¿Cuántas veces el bucle incluido en el código fuente se ejecutará?

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

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.


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

Números impares del 1 al 100

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

73
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-
LE para hacer las iteraciones.

Contador de números pares

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

Codificación de caracteres

Desarrolle un algoritmo que permita leer caracteres hasta que el usuario ingrese el
10 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-
tos). A continuación se muestra un ejemplo
h
104: --.-...
15 O
79: -..----
l
108: --.--..
A
20 65: -.....-
x

Ingreso de binarios

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

25 Ingreso de números mientras sean positivos

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

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

Conteo de frases

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


desea ingresar más frases; sí=1, no=0.

Ingreso de 5 números

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

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

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

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

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.


15 Utilizar la estructura de repetición while.

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
while e if.

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

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


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

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

* Números con vocales

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

* Operador potencia

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

10 Bases y exponentes

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


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

15 2. * 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 manera
tal que 0 ≤ p ≤ N, r ∈ (-N, N) y rp = N. Si no existe ningún par de ente-
ros, r y p, que cumplan lo pedido, se debe imprimir un mensaje adecuado de-
bido a tal causa. Para calcular la potencia debe realizar el código fuente para
20 tal efecto, i.e., no debe utilizar ninguna función ni otro operador como **. A
continuación se muestra, como ejemplo, algunas ejecuciones del programa:
Bases y Exponentes Bases y Exponentes Bases y Exponentes Bases y Exponentes
------------------ ------------------ ------------------ ------------------
Ingrese N: 51 Ingrese N: 1 Ingrese N: 81 Ingrese N: 64
Ningún par cumple. 0 ^ 0 = 1 -9 ^ 2 = 81 -8 ^ 2 = 64
9 ^ 2 = 81 8 ^ 2 = 64
-3 ^ 4 = 81 4 ^ 3 = 64
3 ^ 4 = 81 -2 ^ 6 = 64
2 ^ 6 = 64

1 Tomado del libro de Guttag (2016).

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

Factores de un número entero

* Factorial

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


). No se debe usar ninguna función predeterminada de
5 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.

* Números perfectos

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

Números primos

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


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-
20 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-
gresa el número cuatro, el algoritmo debe indicar que no es primo y además
presentar la suma de (8).

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


programa sigue pidiendo números mientras no sean primos.

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

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


dígitos y mostrarlos según el siguiente ejemplo para el número 5432:
30 Número: 5432

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

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

Valor relativo de un número

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


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

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

Cálculo de comisiones

Ordenamientos

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


20 meros.

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


meros.

Juego: adivina el número

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

1 http://pseint.sourceforge.net

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

Cara o cruz

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


momento que adivina, termina el algoritmo.

Análisis de frecuencias en lanzamientos de un dado

5 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-
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-
10 rizontales con esos datos. Por ejemplo, suponga que al azar salieron los siguientes nú-
meros: 2, 4, 1, 6, 6, 2, 1, 5, 4, 1, 6, 5, 4, 4, 2, 5, 1, 3, 3, 3. El resultado en pantalla de-
bería ser:
Tabla de frecuencias
1 4
15 2 3
3 3
4 4
5 3
6 3
20 Gráfico de barras
1 ****
2 ***
3 ***
4 ****
25 5 ***
6 ***

Series y sumatorias

1. Hallar la sumatoria de la serie

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

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

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

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


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

Número de cifras de un número


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

Reloj de 24 horas

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


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

* Progresión geométrica

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


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

* Números de la serie Fibonacci

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


, , y cada uno de los siguientes términos se calculan sumando los
dos anteriores: . Escriba un programa que genere dicha suce-
25 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í).

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

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


sean menores a 100000:

* Aproximación de π

Dado que es la suma de la serie

5 , (4)

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


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

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


10 0.001. El error aproximado está dado por

(5)

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

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

(6)

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

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

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

10 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
Mientras o Repetir Hasta.

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

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


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

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

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

20 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-
les. Tenga en cuenta que 1 radián es igual a 57.2958 grados sexagesimales.

* Dibujo de triángulos

• Escriba un programa que lea dos enteros: el primero debe ser impar (validar)
25 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-
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


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

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

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

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

Menú

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


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

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


se realicen las siguientes operaciones: comprobar si es primo, hallar su factorial
o imprimir su tabla de multiplicar de acuerdo a lo seleccionado en un menú; se
sale del programa luego de seleccionar la opción salir del menú.

Función exponencial

30 Realice un algoritmo para obtener una función exponencial, la cual está dada por:

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


5 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

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


con las siguientes opciones:

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


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

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


par o impar, si es primo o no es primo

15 3. Terminar el Algoritmo

Menú: permutaciones, variaciones y combinaciones

Presente el siguiente menú en pantalla


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

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

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

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

Opción [1-4]: _
Cuando el usuario ingrese una opción incorrecta, presente algún mensaje que indique
10 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
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-
15 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ú
--------------------------------------
Variaciones
20 --------------------------------------
1. Sin repetición (n!/(n-p)!)
2. Con repetición (n^p o n1!n2!n3!...)
3. Volver

Opción [1-3]: _
25 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
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
30 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)!))


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

85
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
un ejemplo de uso.

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

Estructura de repetición FOR

Miscelánea

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


cutar el siguiente algoritmo:
5 Algoritmo misterioso
Definir suma, i, j Como Entero;
Para i <- 1 Hasta 4 Con Paso 1 Hacer
Para j <- 3 Hasta 0 Con Paso -1 Hacer
suma <- i * (10^i) + j;
10 Escribir Sin Saltar suma, " ";
Fin Para
Escribir " ";
Fin Para
FinAlgoritmo
15 2. * Haga la prueba de escritorio e indique cuál es el resultado en pantalla de eje-
cutar el siguiente algoritmo:
Algoritmo misterioso
n = 7;
Para i = 0 hasta n Con Paso 1
20 Para j = n-i hasta 1 Con Paso -1
Mostrar Sin Saltar "#";
FinPara
Mostrar "";
FinPara
25 FinAlgoritmo
3. Desarrolle un algoritmo que lea N valores de números positivos y que imprima
la suma de aquellos que sean impares y menores a 200.

4. Desarrolle un algoritmo que lea una serie de valores que terminará cuando se
lea el valor cero y que imprima la suma de aquellos que son negativos. Siem-
30 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-
mirá "¡Enhorabuena!" y terminará el algoritmo. En caso de no escribir la
contraseña correcta se imprimirá “Lo siento, contraseña equivocada”. Si se

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

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


mirá “Oportunidades Agotadas” y finaliza la ejecución del algoritmo.

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


control, cuántos tienen sello municipal de cada color (amarillo, rosado, rojo,
5 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-
mina de registrar autos cuando se ingresa una placa xxx. Todos los días se
presenta al menos un automóvil a revisión.

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


subido de peso desde la última vez que se reunieron. Para esto es necesario
que cada uno se pese en 10 básculas distintas y después obtener el promedio
de su peso. Si existe diferencia positiva entre el peso promedio y el peso de la
última reunión significa que subieron. Si la diferencia es negativa, significa que
15 bajaron. Desarrolle un algoritmo que informe a cada persona si subió o bajó
de peso y qué cantidad de Kilos.

8. Una persona recopila ciertos datos aplicando encuestas para el último Censo
Nacional de Población y Vivienda. Desea obtener de todas las personas que al-
cance a encuestar en un día, qué porcentaje tiene estudios de primaria, secun-
20 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


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
25 hará descuento alguno, si es verde se le hará un 10% de descuento, si es amari-
lla un 25%, si es azul un 50% y si es roja un 100%. Determinar la cantidad fi-

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

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
5 perciben un sueldo mensual mayor o igual a $500.

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

10 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
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
15 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
número 5:

1 1 1

20 2 4 8

3 9 27

4 16 64

5 25 125

14. * Desarrolle un algoritmo que muestre el tiempo (en formato 24h00) segundo
25 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. Antes de
realizar este ejercicio desarrolle el ejercicio Reloj de 24 horas de la página 80.

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

30 16. Desarrollar un algoritmo que realice lo siguiente:

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

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

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


mostrará un rectángulo de lados 4 y N de la siguiente manera (en el ejemplo
la suma fue múltiplo de cuatro con N=3)
5 xxxx
x x
xxxx
c) Con el primer número impar que se ingrese se muestra una “cruz” de lado
igual al número impar. Por ejemplo con el impar 5
10 x
x
xxxxx
x
x
15 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-
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
**
20 ****
******
********
**********
********
25 ******
****
**
18. * Dado el siguiente código fuente en lenguaje C, cuya salida se muestra como
“Solución actual” en la parte derecha superior de la tabla siguiente:

SOLUCIÓN ACTUAL

90
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,
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
5 el centro de la X hacia abajo, en forma descendente.

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

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


ción), y viceversa.

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


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

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

mientras valor>MAXIMO o valor<=0 hacer


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

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

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

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

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

Signo zodiacal y número de suerte

Desarrollar un algoritmo que pida el nombre del usuario, el día, mes y año actual y el
día, mes y año de nacimiento del usuario. En base a esos datos el algoritmo indica el
signo zodiacal, la edad en horas y segundos y número de suerte del usuario. El núme-
15 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-
cal se calcula en base a la siguiente información:

• 21/marzo - 20/abril Aries


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

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

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

• 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


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

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

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

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


término anterior (ni-1)

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

N-ésimo término a mostrar: 7


Término: 24
15 • Pregunta

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

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

li: 1
ls: 20
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
5 10 11 12 13 14 15
12 13 14 15
12 13
12 13
12

10 * Impresión de patrones

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

Menú: media, mayor y menor

Implemente un algoritmo que muestre el siguiente menú:


15 Menú

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

Opción [1-5]:

95
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-
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
5 acción pertinente, debe siempre volver al menú. La ejecución se termina si y sólo si se
escoge la opción 5.

Manejo contable

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


inicial de la cuenta es $0. El programa debe tener el siguiente menú:
10 1. Depósito
2. Retiro
3. Saldo
4. Salir
El programa debe solicitar al usuario que indique si desea realizar un depósito o un
15 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-
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ú.
20 La opción 3 del menú muestra el saldo que se tiene en ese momento. La opción 4 ter-
mina la ejecución del programa.

* Factorización de trinomio

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


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

30 Ejemplo

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

Salida:

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

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

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

Salida:

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

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

Desarrolle un algoritmo que pida un número positivo de tres dígitos o más (se pide
un solo valor); si no cumple esta condición, debe mostrar el mensaje “¡El número
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-
10 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-
dos):
Número a analizar: 27
15 ¡El número debe ser positivo de más de dos dígitos!

Número a analizar: -188


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

Número a analizar: 15423

Suma: 1 + 5 + 4 + 2 + 3 = 15
20 Producto: 1 × 5 × 4 × 2 × 3 = 120
Media: (1 + 5 + 4 + 2 + 3) / 5 = 3
Máximo: max(1, 5, 4, 2, 3) = 5
Mínimo: min(1, 5, 4, 2, 3) = 1
*******************************************************
25 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
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

30 * Serie de Leibniz

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


converge a π/4:

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

(7)

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


0.0001. El error aproximado está dado por

(8)

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


mando n−1 términos.

* Examen de manejo

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-


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

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

20 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
Pareja 1: {Conductor: 1, Acompañante: 2}
Pareja 2: {Conductor: 2, Acompañante: 1}
25 Pareja 3: {Conductor: 1, Acompañante: 3}
Pareja 4: {Conductor: 3, Acompañante: 1}
Pareja 5: {Conductor: 1, Acompañante: 4}
Pareja 6: {Conductor: 4, Acompañante: 1}
Pareja 7: {Conductor: 2, Acompañante: 3}
30 Pareja 8: {Conductor: 3, Acompañante: 2}
Pareja 9: {Conductor: 2, Acompañante: 4}
Pareja 10: {Conductor: 4, Acompañante: 2}

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

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


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

* Carrera de caballos

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


5 cada turno un caballo puede avanzar dos o tres metros pero también puede no avan -
zar o incluso, por algún motivo, puede retroceder un metro. El caballo ganador es
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-
troceder un metro, se entiende que el caballo se queda en el punto de partida (i.e., no
10 sigue retrocediendo más atrás del punto de partida). El vídeo Carrera de caballos1
(Vázquez-Patiño, 2016) muestra la simulación con cinco y dos caballos2. El siguiente
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.
15 **********************************************************
Turno: caballo 5
>
Metros avanzados por el caballo 5: -1
**********************************************************
20 ------------------------
Caballo 1 X
------------------------
------------------------
Caballo 2 X
25 ------------------------
------------------------
Caballo 3 X X X X X X
------------------------
------------------------
30 Caballo 4 X X X X X
------------------------
------------------------
Caballo 5 X X X X
------------------------
35 *********************************************************

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.

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

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,
al número de dígitos del número es igual al número analizado. Por ejemplo, 153 = 1 3
5 + 53 + 33 = 1 + 125 + 27 = 153; 9474 = 94 + 44 + 74 + 44. El número ingresado
debe ser positivo (validar).

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

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

* Encontrando triángulos rectángulos

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

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
25 4) Hipotenusa: 10 Cateto 1: 8 Cateto 2: 6

100
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
7) Hipotenusa: 15 Cateto 1: 9 Cateto 2: 12
8) Hipotenusa: 15 Cateto 1: 12 Cateto 2: 9
5 9) Hipotenusa: 17 Cateto 1: 8 Cateto 2: 15
10) Hipotenusa: 17 Cateto 1: 15 Cateto 2: 8
11) Hipotenusa: 20 Cateto 1: 12 Cateto 2: 16
12) Hipotenusa: 20 Cateto 1: 16 Cateto 2: 12

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


10 rectángulos.

* Número triangular

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


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

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

15 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
forma triangular, éstos generan un triángulo equilátero de lado 4
*
20 * *
* * *
* * * *

La diagonal de Cantor

Ejercicio propuesto por René Estrella.

25 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
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
30 la siguiente tarea.

101
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-
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
5 contendrá un dígito decimal (0 - 9). En el ejemplo que se muestra a continuación n =
4, lo que significa que el usuario ingresó 4 números enteros de 4 dígitos cada uno.
1234
4815
1623
10 4211
El resultado que debe mostrar el algoritmo es un número entero de n dígitos, para el
cual el primer dígito es distinto del primer dígito del primero número, el segundo dí-
gito es distinto del segundo dígito del segundo número, el tercer dígito es diferente al
tercer dígito del tercer número y así sucesivamente. Como una ilustración, para el
15 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
números se van a ingresar.

Random walks

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


Error: Reference source not found.

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-
ritmo que imprima la trayectoria del caminante aleatorio hasta que haya dado n pa-
25 sos (no en los tiempos 1 al n sino hasta que haya logrado dar n pasos sin importar en
cuántos tiempos).

* Suma de dos números decimales

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

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

+4794 +5689 + 999


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

* Suma de dos números binarios

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

10 * 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
ejemplo:

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

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

Raíz cuadrada de un número

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


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

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

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

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

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

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

Estructuras Básicas de Datos

Arreglos unidimensionales

Miscelánea

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

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

a) Almacenar tipos de datos


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

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


den inverso.

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


15 número.

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.

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


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

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


termine: a) la nota promedio, b) la mayor nota, c) la menor nota, d) el núme-
ro de alumnos que comparten la menor nota y e) el número de alumnos que
25 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
nombre del estudiante con la mayor edad.

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

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


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

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


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

10 10. Implemente una función que reciba como parámetros un arreglo de enteros A
y un número entero n, y devuelva un nuevo arreglo B que sea igual al arreglo
A pero desplazado n posiciones hacia la izquierda. Tenga en cuenta que los n
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:

15 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


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
20 dato y se muestra un mensaje.

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
C, con base en los anteriores, que represente lo que se requiere comprar para
25 mantener la existencia de inventario. Para este fin se considera lo siguiente: si
los valores correspondientes de los arreglos A y B son iguales, se almacena este
mismo valor; si el valor de B es mayor que el de A, se almacena el doble de la
diferencia entre B y A; si se da el caso de que A es mayor que B, se almacena
B, que indica lo que se requiere comprar para mantener la existencia en inven-
30 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
elemento del arreglo; la suma de los elementos de las cinco primeras filas del

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

arreglo; y el total de elementos negativos en las columnas de la quinta a la


nueve.

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

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

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-
15 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
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
20 es de una fila con diez elementos y el otro con una columna de diez elementos.

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

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


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

25 21. Hacer un programa que genere de manera aleatoria 10 calificaciones entre 0 y


100, muestre las calificaciones y permita buscar una nota en el arreglo (devuel-
ve la posición en el arreglo).

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


tipo cadena con 20 palabras como mínimo.

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

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

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


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

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í
5 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
componentes un lugar hacia su derecha. Teniendo en cuenta que la última
componente se ha de desplazar al primera lugar.

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

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


rango [-50, 50], sin que se pueda generar un mismo número más de una vez.
Estos números se deben almacenar en un arreglo y se debe calcular e imprimir
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


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

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
25 números se deben almacenar en un arreglo y se deben mostrar el mayor y me-
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).
Luego, dar la opción al usuario de poder visualizar un elemento de la serie
30 dado su número ordinal (los números ordinales comienzan desde uno).

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


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

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

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


segundo arreglo; los cálculos se hacen con elementos con el mismo número de
índice. Muestre los arreglos de manera vertical en tres columnas, cada una
para cada arreglo:
5 Base Exponente Potencia
arreglo11 arreglo21 arreglo11^arreglo21
arreglo12 arreglo22 arreglo12^arreglo22
arreglo13 arreglo23 arreglo13^arreglo23
arreglo14 arreglo24 arreglo14^arreglo24
10 arreglo15 arreglo25 arreglo15^arreglo25
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
un año bisiesto, caso contrario guardar la palabra no. Mostrar los valores de
15 los dos arreglos de manera vertical (en columnas):
Año Bisiesto
1563 No
4 Sí

Manejo de arreglos

20 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
llamado evenAngles.

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

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

* Eliminación de duplicados

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

Use una arreglo para resolver el siguiente problema: Escriba una aplicación que per-
30 mita el ingreso de n números, cada uno en el rango [10, 100]. Cada vez que un núme-
ro sea leído, muéstrelo sólo si no es un duplicado de un número ya ingresado. Prever
el “peor caso”, en el que todos los n números son diferentes. Use el arreglo más pe-

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

queño posible para resolver este problema. Muestre el conjunto completo de valores
únicos ingresados después de que el usuario ingrese cada nuevo valor.

Ordenamiento de n números

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


5 ascendente como descendente.

Ángulo entre vectores

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

Relleno de arreglo con números aleatorios

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

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


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

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


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

20 Graficación de frecuencias

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


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

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

2 10
3 5
4 10
5 30
5 6 20

Gráfica
1 *************************
2 **********
3 *****
10 4 **********
5 ******************************
6 ********************
• 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
15 salió con el número respectivo de índice del arreglo (el índice desde dos). Por
último, mostrar la tabla de frecuencias y un gráfico de las mismas.

Criba de Eratóstenes

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

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

1. Se crea un arreglo de tipo primitivo booleano con todos los elementos iniciali-
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
25 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
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
30 con valor TRUE. Para el índice 2 del arreglo, todos los elementos más allá del
elemento 2 en el arreglo, que tengan índices que sean múltiplos de 2 (índices 4,
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

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

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-
dican que el índice de ese elemento corresponde a un número primo. Estos índices de-
5 ben ser visualizados. Una animación del proceso se puede encontrar en Wikipedia
https://goo.gl/6w5Atn. A continuación se muestra el proceso para encontrar los nú-
meros primos entre 2 y 20.

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.

10 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
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
15 enlace https://youtu.be/-prrZd_NJqQ.

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

Arreglos bidimensionales

Miscelánea

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

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

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


entre 1 y 100.

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

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
15 sus componentes iguales a 0, excepto las de su diagonal principal, que son
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
para indicar si se desea que la función actúe 1) comparando las dos matrices
20 elemento a elemento o 2) comparando las dos matrices aunque los elementos
no se presenten en el mismo orden.

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


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

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

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


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

0 1 2 3
1 2 3 4
2 3 4 5
3 4 5 6
7. Dada la matriz Letras[20][20], llenar de caracteres del alfabeto, calcular la
frecuencia absoluta y la frecuencia relativa para cada una de las vocales.

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.

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


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.

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

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

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

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

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


5 b) Calcule el sueldo semanal para cada uno de ellos.
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.

16. Indurama cuenta con N chóferes, de los cuales se conoce el nombre y los kiló-
10 metros que conducen durante cada día de la semana; esa información se guar-
da en un arreglo de Nx6. Se requiere un programa que capture esa informa-
ción y genere un arreglo con el total de kilómetros que recorrió cada chófer du-
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
15 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.
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
20 de ellas genere dos arreglos que contengan la suma de sus filas y la suma de
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-
tos.

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


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

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

21. Cargar en una matriz las notas de los alumnos de un colegio en función del
5 número de cursos (filas) y del número de alumnos por curso (columnas). Pre-
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-
cendente (muestra dos matrices). Por ejemplo, la siguiente es una matriz de
10 2×3 ordenada ascendentemente.

-5 0 2
10 11 99
Para que no tenga que ingresar datos en cada prueba que haga de su algorit-
mo, desarrolle una función que devuelva una matriz de f filas y c columnas
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


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

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

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


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

Para que no tenga que ingresar datos en cada prueba que haga de su algorit-
mo, desarrolle una función igenerarMatriz3D(int p, int f, int c) que
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-
30 das por sus tres representantes a lo largo de doce meses de sus cuatro produc-

118
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,
TOTAL [ mes, producto ], para lo cual se suma las ventas de cada producto
de cada mes de todos los representantes. Imprima ambos arreglos.

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

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

15 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
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
20 usuario y las matrices luego del intercambio.

Por ejemplo, si A y B son:

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

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

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

30. * Desarrolle una función que dada una matriz A de n×m devuelva una matriz
5 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

Suma y resta de matrices

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

Producto de un escalar por una matriz

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

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

Diagonal principal de una matriz

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


triz.

* Transpuesta de una matriz

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


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

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


100, y hacer su matriz transpuesta.

10 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єℕ ^
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-
15 ciones, una vez que hay cualquier información que indique que la matriz no es simé-
trica.

Determinante de una matriz

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


usuario.

20 Producto de matrices

Pedir al usuario el número de filas y columnas de dos matrices que ingresará. Ingre-
sar las dos matrices. Calcular el producto de las matrices y presentarla al usuario.

121
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
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
5 ingresar las dimensiones) y calcule la posición de un punto de silla (si es que
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
más) punto de silla.

10 Tablero de ajedrez

Visualice en pantalla un tablero de ajedrez: los peones con el número 1, las torres con
el 7, los caballos con 0, los alfiles con 4, el rey con 8 y la reina con 2.

* Distancia de Chebyshov

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


15 (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
conocida como distancia del tablero de ajedrez (vea el ejercicio Cálculos espaciales
básicos, página 20), porque coincide con el número mínimo de movimientos que nece-
20 sita el rey para ir de una casilla a otra (este caso se corresponde a un sistema de dos
coordenadas espaciales, entre los centros de las casillas, y con los ejes alineados con
los bordes del tablero). Esto es debido a que el rey se puede mover tanto en diagonal
como en horizontal o vertical. En el tablero de la figura 5 se muestra las distancias de
Chebyshov desde la casilla f6.

122
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,


desde una casilla del tablero de ajedrez dada por el usuario.

* El cuadrado latino

5 Este problema puede ser resuelto también sin matrices (así fue tomado en la prueba
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
primeros números naturales y cada una de las siguientes N-1 filas contiene la rotación
10 de la fila anterior un lugar a la derecha. Por ejemplo, es siguiente es un cuadrado la -
tino de orden 4. Fuente: (Alcalde Lancharro and García López, 1992).

1 2 3 4
4 1 2 3
3 4 1 2
2 3 4 1

El cuadrado mágico

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

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

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;
además, se debe comprobar que los números no se repitan en el ingreso.

5 2. Genere un cuadrado mágico dado el orden N (validar). Un cuadrado mágico es


una matriz cuadrada de orden impar N que contiene números enteros desde 1
hasta N2. La suma de los números que figuran en cada fila, cada columna y
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:

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

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-
15 lumna.

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

Por las fiestas de Cuenca, la Junta de Beneficencia de Guayaquil hará un sorteo espe-
20 cial de lotería. Imprimirá 243 boletos para cada una de las 27 parroquias más pobla-
das de Cuenca. Los boletos serán de cuatro dígitos (9⁴ = 6561 boletos en total); cada
dígito está en el intervalo [0, 9]. La Junta de Beneficencia desea tener una idea bas-
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-
25 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-
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

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

comprador del boleto (asuma que cada persona compra un sólo boleto en el orden de-
terminado por el número de columna de la matriz). A continuación se muestra los re-
sultados de dos ejecuciones del programa:

Boleto ganador : 1991 Boleto ganador : 514


5 Parroquia ganadora: 26 Parroquia ganadora: 8
Comprador ganador : 61 Comprador ganador : 114

10 Cadena de ADN

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-
tido horario desde la parte superior izquierda:

A T G C G T A T
15 Se pide diseñar una función que devuelva true si dos cadenas de ADN, enviadas como
parámetros, coinciden.

Muy importante: la secuencia de ADN es cíclica, por lo que puede comenzar en


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

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


Implemente un programa que tenga el menú:
=======================
El juego del alfabeto
=======================
25 Menú
a. Nivel básico

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

b. Nivel intermedio
c. Nivel avanzado
d. Salir
______________________
5 Opción[a-d]:
======================
Para el nivel básico se debe imprimir el alfabeto de izquierda a derecha y de arriba
hacia abajo en una matriz de 5x5. No tome en cuenta la letra ñ ni w. Debajo de cada
letra del abecedario se debe imprimir la letra I o D o J de manera aleatoria pero sólo
10 se pueden repetir dos veces seguidas las letras I y D pero no la J (viendo la matriz de
izquierda a derecha y de arriba hacia abajo). Un ejemplo se muestra a continuación:
A B C D E
I D J I D

F G H I J
15 I I J D J

K L M N O
D D I J I

P Q R S T
I J I I J

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

30 T S R Q P
I I J D J

O N M L K
D D I J I

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

J I H G F
I J I I J

E D C B A
D I J D D
5 Para el nivel avanzado se debe imprimir el alfabeto de arriba hacia abajo y de iz -
quierda a derecha en una matriz de 5x5. No tome en cuenta la letra ñ ni w. Debajo
de cada letra del abecedario se debe imprimir la letra I o D o J de manera aleatoria
pero sólo se pueden repetir dos veces seguidas las letras I y D pero no la J (viendo la
matriz de izquierda a derecha y de arriba hacia abajo). Un ejemplo se muestra a con-
10 tinuación:
A F K P U
I D J I D

B G L Q V
I I J D J

15 C H M R X
D D I J I

D I N S Y
I J I I J

E J O T Z
20 D I J D D

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

Distancia de tablero de ajedrez

25 Cuando se utilizan imágenes raster pueden definirse distintos tipos de distancias con-
siderando principalmente el número de celdas por las que debe pasarse para ir de una
celda a otra. Por ejemplo, si se permite el movimiento en todas direcciones, las ocho
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

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

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


que quiere calcular la distancia de tablero de ajedrez.
5 2. La celda indicada por el usuario tendrá el valor cero, a las demás celdas de la
matriz póngales el valor que corresponde a la distancia de tablero de ajedrez
desde la celda a la mencionada por el usuario. La figura 6.a muestra un ejem-
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).

10 Distancia Manhattan

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


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

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

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

5 2. Muestre en pantalla la matriz generada.


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

Formación de grupos de trabajo

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

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

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-
lamente se debe indicar en pantalla cuál es el grupo que tiene menos estudiantes que
5 el pedido (ver el segundo ejemplo de ejecución).

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


donde se indican los campos de los estudiantes del curso. Un ejemplo de archivo es el
siguiente (podría llamarse listaEstudiantes.csv):
1,Abad,Sigcho,Carlos,Daniel
10 2,Agudo,Güiracocha,Dayana,Isabel
3,Andrade,Carchi,Julio,César
4,Arévalo,Angamarca,Moisés,Santiago
El siguiente es un primer ejemplo de ejecución del programa:
Número de estudiantes por grupo: 2
15 Grupo 1
1. Julio César Andrade Carchi
2. Carlos Daniel Abad Sigcho

Grupo 2
1. Dayana Isabel Agudo Güiracocha
20 2. Moisés Santiago Arévalo Angamarca
El siguiente es un segundo ejemplo de ejecución del programa en donde hay un grupo
que tiene menos estudiantes de los pedidos por el usuario:
Número de estudiantes por grupo: 3
Grupo 1
25 1. Moisés Santiago Arévalo Angamarca
2. Dayana Isabel Agudo Güiracocha
3. Julio César Andrade Carchi

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


1. Carlos Daniel Abad Sigcho
30 Una vez que pueda generar los grupos dado el número de estudiantes que se desean
en cada grupo, haga otro programa que genere los grupos dado el número total de
grupos que se desean hacer (analice muy bien cuál es la diferencia con el primer pro-
grama realizado). Por ejemplo, el siguiente es una ejecución del segundo programa en
donde el usuario quiso generar tres grupos:
35 Número de grupos: 3

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

Grupo 1
1. Julio César Andrade Carchi
Grupo 2
1. Carlos Daniel Abad Sigcho
5 Grupo 3
1. Dayana Isabel Agudo Güiracocha
2. Moisés Santiago Arévalo Angamarca

Puesto que el objetivo de este ejercicio es el manejo de matrices, se presenta a conti-


nuación una solución para leer el archivo en el lenguaje de programación Java. En su
10 programa, para cargar los datos a una matriz (la matriz lista en el código presenta-
do), debe usar la función String[][] cargarLista(String rutaArchivo,
int numEstudiantes); rutaArchivos es la ruta absoluta del archivo que contiene
la lista de estudiantes y numEstudiantes es el número total de estudiantes.
import java.io.BufferedReader;
15 import java.io.FileReader;
import java.io.IOException;
import java.util.Arrays;

public class listaEstudiantes {


public static void main (String args[]) {
20 String[][] lista = cargarLista("listaEstudiantes.csv", 24);
}

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


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

// separador de campos del archivo csv


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

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

BufferedReader br = null;

try {
br = new BufferedReader(new

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

FileReader(rutaArchivo));
String line = br.readLine();
int i = 0;
while (null!=line) {
5 String [] campos = line.split(SEPARADOR);
//System.out.println(Arrays.toString(campos));

campos = removeTrailingQuotes(campos, QUOTE);


lista[i++] = campos;
10 line = br.readLine();
}

} catch (Exception e) {
System.out.println(e.getMessage());
15 } finally {
try{
br.close();
}catch(IOException e){
System.out.println(e.getMessage());
20 }
}
return lista;
}

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


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

* Matriz de adyacencia

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

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

las aristas en las celdas de una matriz bidimensional de nxn. Cada fila y cada colum-
na representan un vértice del grafo y cada posición representa una arista (o la ausen-
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-
5 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.


Todas las funciones reciben como entrada el grafo representado mediante su matriz
de adyacencia:

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


grafo no es euleriano. Un grafo es euleriano si cada vértice tiene un grado par.
El grado o valencia de un vértice es el número de aristas incidentes al vértice.

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


no es Simple. Un grafo simple es aquel que no tiene aristas paralelas o múlti-
15 ples que unan el mismo par de vértices.

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


grafo no es multigrafo. Un grafo que cuente con múltiples aristas entre dos
vértices se denomina multigrafo

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


20 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

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

◦ 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
jugado en casinos y callejones de todo el mundo. Las reglas del juego son muy fáciles
5 (Deitel and Deitel, 2012):

Usted lanza dos dados. Cada dado tiene seis caras, que contienen uno, dos,
tres, cuatro, cinco y seis puntos, respectivamente. Después que los dados pa-
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).
10 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
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
15 es igual que la suma en el primer lanzamiento). Se pierde por sacar un 7 antes
de que “hace su punto”.

Escriba una aplicación que ejecute 1'000.000 de juegos de craps y conteste las si-
guientes preguntas:

1. ¿Cuántos juegos fueron ganados en el primer lanzamiento, en el segundo lan-


20 zamiento, en el tercer lanzamiento, …, en el vigésimo lanzamiento y después
del vigésimo lanzamiento?

2. ¿Cuántos juegos fueron perdidos en el primer lanzamiento, en el segundo lan-


zamiento, en el tercer lanzamiento, …, en el vigésimo lanzamiento y después
del vigésimo lanzamiento?

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

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.

30 5. ¿Las probabilidades de ganar mejoran con la duración del juego?

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

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


reglas muy sencillo y que da lugar a comportamientos emergentes complejos. La hor-
5 miga de Langton clásica opera sobre una matriz cuadrada, en que cada celda puede
estar en uno de dos estados: blanco o negro (1 o 0).

En la matriz se identifica arbitrariamente una celda como la hormiga. La hormiga


siempre está mirando en una de las cuatro direcciones cardinales y se mueve una cel-
da cada vez, de acuerdo con las siguientes reglas:

10 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
a la izquierda y avanza una celda.

Implemente un programa que realice lo siguiente:

15 1. Genere una matriz de 100×100 con 5000 celdas blancas (valor 1) y 5000 celdas
negras (valor 0). Las celdas deben ser “pintadas” al azar.

2. Identifique arbitrariamente una celda como la hormiga.

3. Haga que la homiga camine hasta que llegue a los límites de la matriz.

4. Cada vez que la hormiga se mueva una celda, muestre la información de la


20 matriz como se muestra en la figura 8.

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

Figura 8: imagen tomada de Wikipedia https://goo.gl/6dNIEW.

* Las ocho reinas

Este problema clásico en ciencias de la computación fue propuesto por René Estrella.

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
5 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
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
10 formas de ubicar las ocho reinas en el tablero de forma que el requerimiento del
problema se cumpla (vea https://goo.gl/fFo9WL). En la siguiente figura se muestra
una de las posibles soluciones:

Figura 9: Una de las posibles soluciones al problema de las ocho reinas.

El objetivo de este ejercicio es escribir un programa que encuentre, al menos, una de


las soluciones a este problema. El programa además debe permitir al usuario ingresar
15 una configuración candidata indicando las coordenadas de la ubicación de cada una
de las ocho reinas. En particular, el programa debe mostrar un menú con tres opcio-
nes:

1. Generar solución

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

2. Ingresar configuración candidata


3. Salir

A continuación, se detalla cada una de estas tareas.

1. Generar solución

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

10 2. Ingresar configuración candidata

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-
das (1, 1) corresponde a la casilla superior izquierda del tablero y la coordenada (8,
15 8) corresponde a la casilla inferior derecha. A continuación, el programa mostrará la
configuración ingresada en forma de un tablero con la ubicación de las ocho reinas e
indicando si se trata de una solución o no. Por ejemplo, si el usuario ingresa las si-
guientes coordenadas:
Coordenadas Reina 1: 1, 3
20 Coordenadas Reina 2: 2, 6
Coordenadas Reina 3: 3, 4
Coordenadas Reina 4: 4, 2
Coordenadas Reina 5: 5, 8
Coordenadas Reina 6: 6, 5
25 Coordenadas Reina 7: 7, 7
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.

3. Salir

30 El programa solamente termina cuando se escoja esta opción.

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

* Recorridos de matriz

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-
5 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
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
10 encuentra en la posición correspondiente a nro_a y almacénelo en la variable
nro_b. Con estos números forme una matriz en donde la primera columna tenga la
cantidad de números menores, mayores e iguales a nro_a; y la segunda columna ten-
ga la cantidad de números menores, mayores e iguales a nro_b (en la figura se asu-
me que el primer elemento es el de subíndice cero). Finalmente muestre la última
15 matriz.

Figura 10: Recorrido en espiral hacia el interior de una matriz de n×m.

Espiral hacia el exterior

Genere una matriz de n filas y n columnas, siendo n impar (validar), con números
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
20 figura 11. A medida que vaya leyendo la matriz, llene un arreglo unidimensional que

138
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
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-
5 ción correspondiente a nro_a y almacénelo en la variable nro_b. Con estos números
forme una matriz en donde la primera columna tenga la cantidad de números meno-
res, mayores e iguales a nro_a; y la segunda columna tenga la cantidad de números
menores, mayores e iguales a nro_b (en la figura se asume que el primer elemento es
el de subíndice cero). Finalmente muestre la última matriz.

Figura 11: Recorrido en espiral hacia el exterior de una matriz cuadrada .

10 * Datos de estudiantes

Escriba un programa que forme una matriz de n×5 elementos (n debe ser un entero
positivo, ingresado por el usuario), bajo el siguiente esquema:

• 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
15 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-
mule la obtención de las calificaciones generándolas aleatoriamente.

139
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
calculado.

Forme una segunda matriz, de n×3 elementos. La primera columna lleva los códigos
5 de estudiantes ingresados para la primera matriz. La segunda columna lleva la equi-
valencia de las calificaciones en base al siguiente cuadro:

Rango Equivalencia Observación

01-09 R Regular

10-12 B Buena

13-17 A Aceptable

18-20 S Sobresaliente

La tercera columna lleva un 1 si el alumno aprueba el curso, considerando que deben


obtener 10 puntos o más para aprobarlo. Lleva un 0, si ha obtenido menos de 10 pun-
tos.

10 Determine cuántos alumnos aprobarán el curso con Buena, cuántos con Aceptable y
cuántos con Sobresaliente.

Se deben mostrar las dos matrices para verificar los resultados obtenidos.

* Datos de personas

El programa va a almacenar registros en una matriz. Para ello se debe hacer lo si-
15 guiente:

1. Ingreso de campos de los registros

Solicite al usuario que ingrese uno a uno los campos de una matriz que almacenará
los registros y cree un índice que asocie el campo a una columna de la matriz. Luego,
cree la matriz que almacenará los registros.

20 Ejemplo
cédula
nombre
apellido
edad

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

...
Índice
cédula 0
nombre 1
apellido 2
edad 3
... ...
2. Ingreso de datos

Una vez ingresados los campos con los que se va a trabajar, pida al usuario que in -
grese los registros como cadenas, de la siguiente manera (en base a los campos pues-
5 tos en el ejemplo anterior):
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
los datos en orden de acuerdo a los campos ingresados en el punto 1.

10 Cada vez que se ingresa un registro, éste se debe pasar a la matriz de datos. Para
ello, procese la cadena que representa cada registro y basado en el índice creado en el
punto 1 guarde cada campo en la columna correspondiente de la matriz. Después de
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
15 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
de datos resultante.
cedula:0305677824;teléfono:4023568;nombre:sara;apellido:abril
20 ¡Advertencia! El campo teléfono no existe pero se ingresa el registro.

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

0104132548 cevallos 22
0108562554 juan malo 25
0305677824 sara abril
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-
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:
5 ¿Por qué campo desea buscar?
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
registro si existe.
10 cédula: 0108562554
nombre: juan
apellido: malo
edad: 25

* Datos de empresas y empleados

15 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;"
+ "emp2,Ramiro,1400;emp1,Jaime,900;emp3,Xavier,800;"
+ "emp3,Jorge,1000;emp1,Edgar,1200;emp3,Daniel,950;";
20 La variable datosEmpresas almacena el código y nombre de una lista de empresas, en
donde cada dato está separado por coma y cada registro por punto y coma.

La variable datosEmpleados almacena el código de la empresa a la que pertenece un


empleado, el nombre del empleado y el salario de una lista de empleados, en donde
cada dato está separado por coma y cada registro por punto y coma.

25 Realizar un programa que haga lo siguiente:

1. Mostrar los datos de una empresa en particular dado el código de la misma.


2. Listar todas las empresas.

142
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.
4. Mostrar un listado de empresas con el salario promedio de los empleados de la
misma.

5 Ejemplo

1. Mostrar los datos de una empresa

Se pide al usuario el código de la empresa que desea mostrar

• Código: emp3

El sistema muestra los datos de la empresa

10 • Código: emp3

• Nombre: Elecaustro

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.

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


ma descendente según el salario.

Empresa: Marcimex

Empleado Salario
Juan 1500
Edgar 1200
Pedro 1100
Jaime 900

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

4. Mostrar un listado de empresas con el salario promedio de los empleados de la


misma. (Tenga en cuenta que los datos pueden tener decimales)

Empresa Salario promedio


Marcimex 1175
Etapa 1300
Elecaustro 916.67

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


5 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-
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).
10 5. Generar y mostrar el histograma utilizando una matriz.

Ejemplo

1. El programa solicita al usuario el número de datos a generar

Número de datos: 20

2. Generar un arreglo de N datos aleatorios entre 1 y 20, inclusivo.

1 2 3 3 7 7 6 9 8 6 10 12 13 15 17 18 18 19 20 20

15 3. Pedir al usuario el número de rangos R para crear el histograma.

Número de rangos: 4

4. Generar la matriz de resumen.

1 5 4
6 10 7
11 15 3
16 20 6
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.

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

5. Generar y mostrar el histograma utilizando una matriz

#
# #
# #
# # #
# # # #
# # # #
# # # #
1-5 6-10 11-15 16-20

* Cifrado básico 1

Escriba un programa que lea una frase y que la almacene en una matriz siguiendo el
esquema mostrado en la figura 12. Luego debe mostrarse la matriz leyéndola en las
5 filas impares de izquierda a derecha y en las filas pares de derecha a izquierda. Las
columnas que no contienen información, no deben ser consideradas en la visualización
de la matriz.

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.

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

Figura 12: Matriz para caracteres en un cifrado básico de texto.

La matriz se debe leer siguiendo el sentido especificado, según la fila sea par o impar
dará como resultado:

h, ee rH olqoneneyua e ser e muts2o.6 andlv di?o

Cifrado básico 2

5 Implemente una función que reciba una frase y la devuelva cifrada. El cifrado a utili-
zar es básico y sigue el siguiente algoritmo:

1. Se utiliza una matriz cuadrada cuyo orden permita tener un número de ele-
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-
10 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-
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
15 fila sea una menos a la anterior y cuya columna sea una más a la anterior
(“diagonal ascendente”). Si la fila es la primera, la siguiente debe ser la última

146
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
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
5 asignación en la matriz cuadrada de orden 5 (hay 21 caracteres en la frase) es
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
frase. El subguión indica un espacio.

10 3. El texto cifrado corresponde a la lectura de la matriz de fila en fila y en cada


fila columna por columna. Los elementos de la matriz que no tienen asignado
ningún carácter (el espacio se considera un carácter) no son tomados en cuen-
ta. Por ejemplo, el texto cifrado de la matriz de la figura 13 es “URDCAA
CEENVDEIIDNS U”.

15 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

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

Un algoritmo voraz para el número cromático

Vea https://youtu.be/DyRh5UhtVvw

Algoritmo de Floyd-Warshall

El algoritmo de Floyd-Warshall es un algoritmo de análisis sobre grafos para encon-


5 trar el camino mínimo en grafos dirigidos ponderados. El algoritmo encuentra el ca-
mino entre todos los pares de vértices en una única ejecución. Vea https://youtu.be/
T_eGloMib1w y https://youtu.be/DTfrTDQEfNk e implemente el algoritmo. Mues-
tre también el diagrama de flujo del algoritmo.

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

Funciones

Ámbito de las variables

1. * ¿Cómo se conocen a las variables que son creadas dentro del programa y
fuera de cualquier función?

5 a) Estáticas
b) Globales
c) Instancia
d) Locales

2. ¿Cuál es la diferencia entre una llamada de función por valor y una llamada
10 de función por referencia?

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-
de fueron declaradas?

15 4. ¿Cuando se declara una variable global, es inicializada automáticamente por el


sistema?

5. ¿Cuando se declara una variable local, es inicializada automáticamente por el


sistema?

6. ¿Cuando una variable global y una variable local tienen el mismo nombre cuál
20 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
del libro de la Editorial Macro (2001).

1. Implemente una función que imprima en pantalla el doble del valor que se le
25 pasa como parámetro.

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.

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

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-
siesto si es múltiplo de 4 (por ejemplo 1984). Sin embargo, los años múltiplos
5 de 100 sólo son bisiestos si a la vez son múltiplos de 400 (por ejemplo, 1800 no
fue bisiesto, mientras que 2000 sí lo fue).

5. Implemente una función que calcule la distancia euclídea entre dos puntos.

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

9. Implemente una función que genere un número aleatorio real entre un rango
enviado como parámetro.

15 10. Implemente una función que imprima en pantalla un número dado de asteris-
cos indicado en el parámetro recibido. El argumento indica el número de aste-
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
*
20 * *
* * *
* * * *
* * * * *
* * * * * *
25 * * * * * * *
* * * * * * * *
11. Implemente una función que reciba dos números y que devuelva el número ma-
yor.

12. Implemente una función que reciba tres números y que devuelva el máximo.

30 13. Implemente una función que tenga como parámetro un arreglo de números
reales y que devuelva el máximo de los números.

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

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
5 el número mayor), inclusive. Los números pueden ser ingresados en orden as-
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
para realizar la potencia)

10 18. Implemente una función que transforme a binario un número entre 0 y 255.

19. Implemente una función que imprima en pantalla el área o el volumen de un


cilindro, según se especifique. Para distinguir un caso de otro se le enviará a la
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.

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

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


20 número (i.e., la cantidad) de divisores primos que tiene.

23. Implemente una función que indique si dos números enteros positivos son ami-
gos. Dos números amigos son dos números enteros positivos a y b tales que la
suma de los divisores propios de uno es igual al otro número y viceversa, es
decir SD(a)=b y SD(b)=a, donde SD(n) es igual a la suma de los divisores de
25 n, sin incluir a n. Vea https://is.gd/KHBfs1.

24. Implemente una función que calcule el máximo común divisor de dos números.

25. Implemente una función que calcule el máximo común divisor de tres números.

26. Implemente una función que calcule el mínimo común múltiplo de dos núme-
ros.

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

27. Implemente una función que calcule el mínimo común múltiplo de tres núme-
ros.

28. Implemente una función que voltee un número entero positivo dado. Por ejem-
plo, si se ingresa 98786, se devuelve 68789.

5 29. Implemente una función que reciba un arreglo de números enteros y devuelva
el máximo común divisor de esos números.

30. Implemente una función que reciba un arreglo de números enteros y devuelva
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
10 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
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
15 la cantidad de impares ignorados.

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.

35. Implemente una función que devuelva, en un arreglo, el área y el volumen de


20 un cilindro. Hemos de pasarle a la función el radio y la altura.

36. Implemente una función que recibe un número entero y devuelve, en un arre-
glo, los divisores primos que tiene.

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
25 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-
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) =
30 1 y fibonacci(1) = 1.

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

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
tablero de ajedrez. Disponemos de las constantes PB (peón blanco), TN (torre
5 negra), etc. (P, T, C, A, R, D). La función debe devolver un valor booleano,
que indique si el rey negro está amenazado.

41. Igual que el ejercicio anterior, pero indicando si existe jaque mate a las negras.

42.

* Histograma

Implemente un programa usando funciones que lea N números de enteros positivos


10 entre 1 y 250.

Se han definido los siguientes rangos: 0-50, 51-100, 101-150, 151-200, 201-250.

Se debe mostrar el número de datos que está en cada uno de los rangos especificados,
separados por un TAB. Además, se debe mostrar un histograma. Por ejemplo:
Tabla de valores por rango
15 ---------------------------------------------------------------------------
0-50 51-100 101-150 151-200 201-250
---------------------------------------------------------------------------
17 8 10 5 32
---------------------------------------------------------------------------

20 Histograma
|-----------------------------------------------------------------
0-50 | *******************
51-100 | *********
101-150 | ***********
25 151-200 | *****
201-250 | ****************************************************
|-----------------------------------------------------------------

Aritmética básica

Visualizar el siguiente menú


30 1. Suma
2. Resta

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

3. Multiplicación
4. División
5. Salir
Si no se ingresa un número del 1 al 5, se debe mostrar un error que lo indique y debe
5 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
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,
10 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
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,
15 debe elevarlo al cuadrado (se debe presentar este último resultado también).

Aproximación de sinh-1

Para n→∞ (en la práctica un número suficientemente alto) la función sinh -1 de x se


puede calcular con la siguiente serie de Taylor:

Desarrollar un programa que calcule el valor de la función sinh -1 de un valor x dado.


20 Las funciones para calcular el factorial y la potencia deben ser realizadas por usted
(i.e., no utilizar ninguna función predefinida de ningún lenguaje de programación).
La serie de Taylor nos da el valor de la función sinh -1 de x en radianes, el algoritmo
que usted proponga debe mostrar el valor en radianes y en grados sexagesimales (i.e.,
escribir una función que pase radianes a grados sexagesimales). Tenga en cuenta que
25 1 radián es igual a 57.2958 grados sexagesimales.

Función W de Lambert

La función W de Lambert o también conocida como función Omega o log producto,


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
30 alto) la función W de Lambert de x se puede calcular con la siguiente serie de Taylor:

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

Desarrolle un programa que pida los valores de x (cualquier número real) y n (cual-
quier número entero) para calcular el valor de la función W de Lambert de x con n
términos de la serie de Taylor. El programa debe hacer uso de una función desarrolla-
5 da por usted mismo llamada funcionW. No se pueden usar funciones predetermina-
das de ningún lenguaje de programación para calcular el factorial o la potencia de un
número (tampoco se puede usar el acento circunflejo, ^); esto quiere decir que debe
desarrollar las funciones para calcular la potencia (llámela miPotencia) y el factorial
(llámela miFactorial) de un número. Además, debe validar el valor de x como se indi-
10 ca en la serie de Taylor; para este fin, desarrolle una función llamada xValido (de-
vuelve verdadero o falso de acuerdo a la validación) y una función miABS (devuelve
el valor absoluto de cualquier número real).

Factorial de un número con función recursiva

Desarrolle un algoritmo para calcular el factorial de un número dado. Este algoritmo


15 debe tener una función recursiva. Una explicación de funciones recursivas se encuen-
tra en la sección 7.8 del libro de Alcalde Lancharro y García López (1992).

Máximo común divisor y mínimo común múltiplo

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á
20 manejar un menú con las siguientes opciones.
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)
4. Salir
25 Ejemplo:
1. Ingreso de datos
número1: 12
número2: 30

El MCD de 12 y 30 es: 6
30 El MCM de 12 y 30 es: 60

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

* Peso adecuado

Escriba un programa, usando funciones, que determine cuántas personas (el número
de personas es indicado por el usuario) están con un peso adecuado o no según su es-
tatura. Para ello, considere la tabla 1.

Tabla 1: Peso ideal de una persona según su estatura.

5 El programa debe tener registrado en una matriz, los pesos y las estaturas correspon-
dientes según lo mostrado en la tabla 1. El usuario debe indicar los datos de cuántas
personas va a ingresar y a continuación ingresar los valores de peso, estatura y sexo
de cada persona. Estos valores ingresados se deben almacenar en arreglos separados
de pesos, de estaturas y de sexo. El programa debe verificar si esos valores están de
10 acuerdo a la tabla anterior. En base a la verificación las personas deben clasificarse
como:

• A: si el peso de la persona está por debajo del rango considerado ideal.


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

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

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-
sultado así:
5 ============================================================
CLASIFICACIÓN MUJERES HOMBRES
============================================================
A ValorA_m ValorA_h
B ValorB_m ValorB_h
10 C ValorC_m ValorC_h
============================================================

* Raíces de una función


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:
15 (1) coeficientes enteros de la ecuación de segundo grado, (2) el valor inicial y el valor
final del intervalo de búsqueda de las raíces y (3) el número de partes en las que se
dividirá el intervalo para hacer la búsqueda de las raíces. Si existe alguna posible raíz
en el intervalo especificado, debe mostrarse en pantalla. En caso de no existir raíces
en el intervalo dado debe mostrarse un mensaje que indique al usuario ese resultado.

20 El método de la bisección

Implemente una función que utilice el método de la bisección (vea Quarteroni et al.,
2014, pp. 43–47) para encontrar uno de los dos ceros de la función en
el rango indicado por el usuario.

157
* El método de Newton

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
5 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
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.
10 En la siguiente figura se pueden apreciar las primeras iteraciones generadas por el
método de Newton con un valor inicial x(0) para la función f(x) = x + ex + 10/(1 +
x2) - 5.

Para este ejercicio se va a aproximar el cero de la función f(x) = π/3 - x + x2 - x3;


f'(x) = - 1 + 2x - 3x2.

15 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
usar el valor de π, no una aproximación.

2. Escriba una función funcionEvaluada(x) que devuelva el valor de la función


f(x) evaluada en el punto x que se envía como parámetro. Utilice una función
20 predeterminada para usar el valor de π, no una aproximación.

3. Escriba una función funcionDerivada(x) que devuelva el valor de la función


f'(x) evaluada en el punto x que se envía como parámetro.
Angel Vázquez-Patiño Universidad de Cuenca

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.

En la primera fila de la matriz se debe devolver 1) la aproximación del cero de


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


10 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-
rar el número de columnas que tendría cada fila)
1.023 0.002 31.000 0.001
-0.010 2.100 1.200 1.010 0.900 ... 1.019 1.022 1.023

Si en algún momento el valor de f'(x) llega a ser cero, escribir en pantalla “La
15 derivada de la función fue cero en m” (m es el valor de x donde se evaluó la
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-


vuelve la función newton(x0, tol, nmax) enviando como parámetro x0 el
20 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é
corresponde cada valor) y luego las aproximaciones del cero de la función (se-
gunda fila) en forma vertical.

Ordenamiento de n números

25 • 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
devuelve una matriz con los números ordenados.

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

Búsqueda lineal

• Diseñe una función que realice la búsqueda lineal de un arreglo. La función de-
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
5 búsqueda lineal se puede encontrar en la sección 6.2 del libro de Alcalde Lan-
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-
cado; si no se encuentra el número, la función devuelve (-1, -1). Una explica-
10 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).

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

Juego de dados entre dos

En el juego cada jugador tiene dos dados (hay cuatro dados en total). En cada turno
20 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 -
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
25 jugador 2.

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

En el caso de que la suma total sea igual para ambos jugadores, se debe continuar el
juego; nuevamente, termina cuando la suma de los valores de ambos jugadores es
igual. Esto significa que siempre uno y sólo uno de los jugadores es ganador.

Se debe ir mostrando los valores sacados por los dos jugadores en cada turno. Por
5 ejemplo, lo siguiente es una ejecución del programa:
Inicia el juego.

Jugador 1 Jugador 2
Turno Dados 1 y 2 Suma Dados 1 y 2 Suma
1 1 y 3 4 2 y 2 4
10 2 4 y 1 5 3 y 5 8
3 6 y 6 12 2 y 4 6
4 5 y 4 9 6 y 3 9

Suma total 30 Suma total 27

Finaliza el juego.

15 El ganador es: Jugador 1.


1. Implemente una función que devuelva un número entero al azar en el rango [1,
6].

2. Implemente una función que devuelva la suma (como número entero) de dos
números al azar en el rango [1, 6]. En esta función tiene que utilizar la función
20 implementada en el punto anterior.

3. Debe mostrar los valores sacados en cada turno mediante una función. Debe
utilizar secuencias de escape para poder presentar la información con las tabu-
laciones pertinentes que presenten los resultados como se mostró en el ejemplo
de ejecución del programa (i.e., perfectamente alineados).

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

Manejo de Caracteres y Cadenas

Miscelánea

1. Dada una cadena, presentar de manera vertical cada letra de la cadena con su
respectivo valor ASCII (primera columna la letra, segunda columna el valor).

5 2. Mostrar el número de veces que aparece la letra a en la cadena “Mañana es


sábado y voy a irme a pasear por los hermosos parques de Cuenca”.

3. Hacer un programa que ingrese una cadena de caracteres y determine el núme-


ro de mayúsculas y el número de minúsculas.

4. Sustituir todos los espacios en blanco de una frase por un asterisco.

10 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-
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
15 debe mostrarse “Exceso de e”.

6. Implemente una función que devuelva una cadena sin los espacios en blanco.

7. Ingresar una frase y reportar cada palabra en una línea diferente.

8. Solicitar el ingreso de los apellidos de dos personas. Mostrar un mensaje indi-


cando si son iguales o distintos.

20 9. Desarrolle un algoritmo que pida el ingreso de un nombre y un apellido de dos


personas e indique si las dos personas tienen el mismo apellido. Se pide como
una sola cadena el nombre y apellido de una persona y como otra cadena el
nombre y apellido de la otra persona.

10. Solicitar el ingreso del apellido, nombre y edad de dos personas como cadenas
25 (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
usuario ingresa solamente números (0-9) y puntos (.).

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

12. Contar cuántas palabras tiene una cadena. Escribir dos versiones del progra-
ma:

a) Asumir que cada palabra está separada por un sólo espacio en blanco.
b) No se sabe cómo están separadas las palabras: pueden estar separadas por
5 más de un espacio en blanco.

13. Escriba un programa que lea una frase y a continuación visualice cada palabra
de la frase en columnas, seguida del número de letras que tiene cada palabra.

14. Ingresar una frase y modificarla convirtiendo el primer carácter de cada pala-
bra, si esta fuera una letra, de minúsculas a mayúsculas. Cada palabra está se-
10 parada por uno o más espacios o comas.

15. Contar el número de letras del alfabeto español de un texto ingresado.

16. Contar el número de vocales que se encuentran en una cadena.

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
15 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:
Ingrese una frase

Una frase no debe contener palabras innecesarias así como un párrafo no


20 debe contener frases innecesarias

Resultados

1 letra : 0 palabras
2 letras: 3 palabras
3 letras: 2 palabras
25 4 letras: 3 palabras
5+ letras: 8 palabras
19. Dada la cadena “En mi próxima vida, creeré en la reencarnación”, mostrar lo
siguiente:

a) Su longitud
30 b) El carácter asociado al índice 7
c) La subcadena “creeré”

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

d) El índice que ocupa el carácter ‘x’, desde la izquierda


e) El índice que ocupa el carácter ‘x’, desde la derecha
f) La cadena transformada a mayúsculas
g) La cadena transformada a minúsculas
5 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
un mensaje que lo indique

20. Verificar si una cadena de texto almacenada en la cadena nif, es un NIF co-
10 rrecto o no. Si lo es, se imprimirá en pantalla su parte numérica; si no lo es, se
mostrará el mensaje “NIF no válido”. Se tendrá en cuenta lo siguiente: Supo-
ner que los NIFs tienen 8 dígitos y, a continuación, una letra (no importa que
sea mayúscula o minúscula).

Pista: dos condiciones que debe cumplir el NIF: tener 9 caracteres y que el úl-
15 timo sea una letra. Comprobado esto, verificar que el resto de caracteres son
dígitos.

21. Solicitar el ingreso del nombre y edad de dos personas. Validar el nombre in-
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
20 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-
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.

25 22. Invertir las palabras de una cadena. Por ejemplo, si la cadena es “Esta es una
prueba de programación”, el resultado es “programación de prueba una es
Esta”.

23. Implemente un programa que reciba una cadena S y una letra X, y coloque en
mayúsculas cada ocurrencia de X en S (el programa debe modificar la variable
30 S).

24. Ingresar una cadena de caracteres formadas por números y letras (en ese or-
den) y obtenga otra cadena donde aparezca cada letra tantas veces como lo in-
dique el número que lo precede. E.g. si la cadena es 2w4r5f se debe obtener
la siguiente cadena: wwrrrrfffff.

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

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
las posiciones impares de la cadena.

5 27. Hacer un programa que al recibir como dato una cadena de caracteres que re-
presente una fecha en formato (dd/mm/aa), genere otra cadena con la misma
fecha pero con formato (dd de nombre del mes de aaaa). E.g. si se ingresa la
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


10 y que luego lo convierta de la siguiente manera:

Número Telefónico: 5256284000


Nueva Cadena: (52)-5-6284000

29. Escribir un programa que al recibir como datos dos cadenas de caracteres for-
me una tercera cadena intercalando los caracteres de las palabras de las cade-
15 nas recibidas.

30. Implementar una función cuya entrada sea una cadena S y un factor de multi-
plicación N, y genere la cadena N veces. Por ejemplo:
Hola, 3 se convertirá en Hola Hola Hola.

31. Contar cuántas veces se encuentra una subcadena dentro de una cadena.

20 32. Hacer un programa que elimine todas las ocurrencias de una subcadena dentro
de una cadena.

33. Ingrese un texto e indique qué caracteres alfanuméricos no han aparecido en el


texto.

34. Ingrese un texto e indique el porcentaje de palabras que tiene menos de 5 ca-
25 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.

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-
30 ma de histograma, e.g.:

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

a 15 ***************
e 8 ********
i 5 *****
o 1 *
5 u 6 ******
37. Dada una cadena de caracteres. Realizar lo siguiente:

a) Extraer los n primeros caracteres de la cadena.


b) Extraer los n últimos caracteres de la cadena.
c) Eliminar los espacios en blanco que haya al final de la cadena.
10 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.
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.
15 h) Contar el número de veces que aparece una cadena dentro de otra.
i) Borrar todas las apariciones de una cadena dentro de otra.
j) Sustituir todas las apariciones de una cadena dentro de otra, por una ter-
cera.

38. Un grupo de inteligencia militar desea codificar los mensajes secretos de tal
20 forma que no puedan ser interpretados con una lectura directa, para lo cual
han establecido las siguientes reglas:

a) Todo mensaje debe tener sus letras en mayúsculas.

b) Reemplazar cada letra por la que sigue según abecedario, excepto Z que se
deberá reemplazar con la letra A.

25 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
información en https://goo.gl/NkkZw.

40. Dada una frase (una o más palabras) indicar si es palíndromo. Ignore mayús-
30 culas y minúsculas, signos de puntuación y espacios en blanco.

41. El usuario ingresa una hora como cadena de caracteres; la hora no necesaria-
mente cumple con el formato hh:mm:ss (e.g., 01:09:04) sino que puede estar
expresada, por ejemplo, de la siguiente manera: 1:09:4, 1:9:4, 01:09:4, etc

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

(siempre primero la hora, segundo los minutos y luego los segundos). El pro-
grama debe mostrar la hora en formato de cadena de caracteres luego de un
número n de segundos/minutos/horas ingresados por el usuario. El usuario es-
coge de un menú si quiere que n sean segundos, minutos u horas. Ejemplo, si
5 se ingresa 1:8:04, y se escoge 60 segundos (se suma 60 segundos a la hora in-
gresada), el resultado es 01:09:04 (el resultado sí debe seguir el formato
hh:mm:ss).

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.
10 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-
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
15 un ejemplo:

Entrada
Ingrese la frase: HolA mundo cruel
Salida
HolA
20 mundo
cruel

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


25 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
cadena
d) Función que permita extraer el menor o el mayor de los números de la ca-
30 dena, en este caso es obligatorio el uso de parámetros para definir si se ex-
trae el menor o el mayor. A continuación se muestra un ejemplo de ejecu-
ción del programa:
Ingrese los números separados por comas: 4,5,6,12,13,5,8,7

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

Menú
1. Promedio
2. Máximo
3. Mínimo
5 4. Salir

Elija una opción [1-4]: 1


El promedio es: 7.5

Menú
1. Promedio
10 2. Máximo
3. Mínimo
4. Salir

Elija una opción [1-4]: 2


El máximo es: 13

15 Menú
1. Promedio
2. Máximo
3. Mínimo
4. Salir

20 Elija una opción [1-4]: 3


El mínimo es: 4

Menú
1. Promedio
2. Máximo
25 3. Mínimo
4. Salir

Elija una opción [1-4]: 4


Saliendo del programa...
44. Dados dos números en forma de arreglo de caracteres, implemente una función
30 que genere el arreglo suma.

Ejemplo:

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

Sea A = { ‘2’, ‘0’, ‘1’, ‘2’ } 2 0 1 2


Sea B = { ‘1’, ‘9’ } 1 9
suma(A, B) = { ‘2’, ‘0’, ‘3’, ‘1’ } 2 0 3 1

La función que se pide recibe como argumentos dos arreglos de caracteres, y


5 devuelve como resultado un arreglo de caracteres. El arreglo resultado tendrá
el mínimo tamaño necesario para contener el número; o sea, sin “ceros a la iz-
quierda”

45. Escribir un programa que elimine la k-ésima palabra de una cadena. Debe es-
cribir una función para realizar esto. La función recoge como parámetros la ca-
10 dena y k, y devuelve la cadena de resultado.

46. Construir una función para que busque una subcadena en una cadena a partir
de una determinada posición y que devuelva la posición donde se encuentra la
subcadena en caso contrario que devuelva cero.

47. Escriba un programa que cuente el número de palabras que tengan al menos
15 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-
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
20 vocales o consonantes; la función devuelve el número de palabras en el párrafo
que tiene mínimo el número de vocales o consonantes de acuerdo a lo que se
indique.

48. Implemente una función que voltee una palabra (cadena) dada. Por ejemplo, si
se ingresa arepa, se devuelve apera. Además, indicar si esas dos palabras son
25 iguales.

49. * Un anagrama es una palabra o frase formada intercambiando (en cualquier


orden) las letras de otra palabra o frase. Por ejemplo Esponja es un anagrama
de Japonés. Escriba una función que determine si una cadena es un anagrama
de otra (“las palabras poseen las mismas letras, con la misma cantidad de apa-
30 riciones, pero en un orden diferente”). Ignore mayúsculas y minúsculas, signos
de puntuación y espacios en blanco. Puede ver más información en https://
goo.gl/hXM1vS.

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

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.

Ejemplo:

permutaciones(“abc”)
5 imprime: {“abc”, “acb”, “bac”, “bca”, “cab”, “cba”}

51. Ejercicio

* Datos personales

Implemente un programa usando funciones que lea cadenas de caracteres en el si-


guiente formato:
10 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.

Por ejemplo:
Juan;Pérez Torres;Ingeniero;37;Cuenca
15 Karen Susana;López Alvear;Economista;32;Loja
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:
Nombres: Juan
20 Apellidos: Pérez Torres
Profesión: Ingeniero
Edad: 37
Vive en: Cuenca

Nombres: Karen Susana


25 Apellidos: López Alvear
Profesión: Economista
Edad: 32
Vive en: Loja

Estadísticas de texto

30 Ejercicio propuesto por René Estrella.

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

El usuario ingresa un texto. El programa muestra las siguientes estadísticas acerca


del texto ingresado:

1. conteo de vocales
2. conteo de consonantes
5 3. conteo de dígitos
4. conteo de caracteres especiales
5. conteo de mayúsculas
6. conteo de minúsculas
7. conteo de palabras categorizadas por longitud
10 8. conteo total de palabras

Ejemplo:

El usuario ingresa:
Náufrago (título original en inglés: Cast Away) es una película dirigida por
el cineasta estadounidense Robert Zemeckis, protagonizada por Tom Hanks y
15 estrenada en el año 2000.
El programa muestra:
Vocales: 59
Consonantes: 78
Dígitos: 4
20 Caracteres especiales: 10
Mayúsculas: 7
Minúsculas: 130
Palabras categorizadas por número de caracteres:
1: 1
25 2: 5
3: 5
4: 2
5 o más: 14
Total palabras: 27
30 El ejemplo ilustra los siguientes aspectos:

1. Las vocales tildadas se cuentan como caracteres especiales, y no como vocales.


2. El conteo de vocales y consonantes considera tanto mayúsculas y minúsculas.
Por ejemplo, el número de consonantes (78), corresponde a 6 mayúsculas y 72
minúsculas.

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

* Analizador de tweets

Ejercicio propuesto por René Estrella.

El objetivo de este ejercicio es escribir un analizador simple de tweets. El dato de en -


trada para el programa sería el texto de un tweet y el programa debería mostrar la
5 siguiente información:

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 #)
3. Conteo de palabras según el número de letras: número de palabras con una le-
10 tra, con dos letras, con tres letras, con cuatro letras, con cinco letras, y con
más de cinco letras. Este conteo incluye cuentas y hashtags.

Ejemplo
Tweet:
Sigue las últimas noticias de #Cuenca, #Ecuador y el Mundo en @eltiempocuenca
15 #marcandodiferencia @IGecuador

Resultados
2 cuentas:
eltiempocuenca
IGecuador

20 3 hashtags:
Cuenca,
Ecuador
marcandodiferencia

Conteo de palabras:
25 1 letra: 1
2 letras: 3
3 letras: 1
4 letras: 0
5 letras: 2
30 5+ letras: 7

Eliminación de n-ésima palabra

Ejercicio propuesto por René Estrella.

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

El usuario ingresa un texto, una palabra y un entero n. El programa elimina la n-ési-


ma ocurrencia de la palabra en el texto y muestra el texto resultante. No se conside-
ra distinción entre mayúsculas y minúsculas.

Ejemplo:

5 Supongamos que el usuario ingresa el siguiente texto:


El rally se correrá también en Bolivia, específicamente en el extremo sur del
Lago Titicaca, el más alto del mundo, y el ya clásico Salar de Uyuni.
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 -
10 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-
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
15 Lago Titicaca, más alto del mundo, y el ya clásico Salar de Uyuni.

Cifrado por sustitución

“En un sistema de cifrado por sustitución, cada letra o grupo de letras se reemplazan
por otra letra o grupo de letras para disfrazarla. Uno de los sistemas de cifrado más
viejos conocido es el sistema de cifrado de César, atribuido a Julio César. En este
20 método, a se vuelve D, b se vuelve E, c se vuelve F, ... , y z se vuelve C. Por ejemplo,
ataque se vuelve DWDTXH.” (Tanenbaum y Wetherall, 2012, p. 662)

1. Escribir un programa que permita codificar mensajes secretos de forma que no


puedan ser interpretados con una lectura directa. Se debe utilizar las siguien-
tes reglas:

25 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.
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.
30 c) El mensaje resultante debe contener la primera letra de cada palabra del
mensaje en mayúscula.

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

Se puede usar variables globales y funciones según se necesite, pero es obliga-


toria la función ENCRIPTAR que reciba como entrada el mensaje y devuelva
el mensaje encriptado.

2. “Una ligera generalización del sistema de cifrado de César permite que el


5 alfabeto de texto cifrado se desplace k letras, en lugar de siempre [un número
fijo]. En este caso, k se convierte en una clave del método general de alfabetos
desplazados circularmente.” (Tanenbaum y Wetherall, 2012, p. 662) Si k=2,
por ejemplo, sustituiremos la “a” por la “c”, la “b” por la “e”, y así
sucesivamente. El problema que aparece en las últimas “k” letras del alfabeto
10 tiene fácil solución: en el ejemplo, la letra “y” se sustituirá por la “a” y la
letra “z” por la “b”. La sustitución debe aplicarse a las letras minúsculas y
mayúsculas y a los dígitos de igual manera: el “0” se sustituye por el “2”, el
“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-
15 criptada.

Cifrado por transposición

La información acerca de los sistemas de cifrado por transposición se basa en el libro


de Tanenbaum y Wetherall (2012).

Los sistemas de cifrado por sustitución (vea el ejercicio llamado Cifrado por sustitu-
20 ción, página 173) conservan el orden de los símbolos de texto plano, pero los disfra-
zan. En contraste, los sistemas de cifrado por transposición reordenan las letras pero
no las disfrazan. En la figura 14 se presenta un sistema de cifrado por transposición
común, la transposición columnar. La clave del sistema de cifrado es una palabra o
frase que no contiene letras repetidas. En este ejemplo, la clave es MEGABUCK. El
25 propósito de la clave es ordenar las columnas; la columna 1 está bajo la letra clave
más cercana al inicio del alfabeto, y así sucesivamente. El texto plano se escribe de
manera horizontal, en filas, las cuales se rellenan para completar la matriz si es nece-
sario. El texto cifrado se lee por columnas, comenzando por la columna cuya letra
clave es la más baja.

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

Figura 14: Un sistema de cifrado por transposición.Tomado de Tanenbaum y


Wetherall (2012, p. 664).

Desarrolle un programa de cifrado y descifrado por transposición. Una de las funcio-


nes que se desarrollen (cifrar) en el programa debe tener como parámetros el texto
a cifrar y la clave, y debe devolver el texto cifrado. Otra de las funciones que se desa-
rrollen (descifrar) en el programa debe tener como parámetros el texto cifrado y
5 la clave, y debe devolver el texto descifrado.

* Manejo de una cadena con información personal

a) Escriba un programa con funciones que permita al usuario ingresar una línea de
texto en el siguiente formato:
NOMBRE APELLIDO, EDAD; NOMBRE APELLIDO, EDAD; NOMBRE APELLIDO, EDAD; NOMBRE
10 APELLIDO, EDAD.
Por ejemplo:
Pedro Pérez, 35; Lara Muñoz, 45; José Calle, 20; María Cárdenas, 22; Clara
Arévalo, 65.
El programa debe encontrar la persona que tiene mayor edad. Debe mostrar al usua-
15 rio los datos de la persona con mayor edad, de la siguiente forma:

Por ejemplo:
NOMBRE: nombre ingresado NOMBRE: Clara
APELLIDO: apellido ingresado APELLIDO: Arévalo
EDAD: edad ingresada EDAD: 65
b) Escriba un programa utilizando funciones, que permita al usuario ingresar una lí-
nea de texto en el siguiente formato:

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

NOMBRE APELLIDO, SUELDO; NOMBRE APELLIDO, SUELDO; NOMBRE APELLIDO, SUELDO;


NOMBRE APELLIDO, SUELDO.
Por ejemplo:
Pedro Pérez, 3500; Luis Muñoz, 2450; José Calle, 1200; María Cárdenas, 2200;
5 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

* Línea de comandos

Simule una terminal que ejecute comandos para operaciones aritméticas básicas (su-
10 mar, restar, multiplicar, dividir) y de información de uso. Los comandos sumar, res-
tar, multiplicar, dividir y estadísticas (sólo hay cinco comandos) tienen la siguiente
sintaxis y funcionalidad:

• Sumar num1,num2,num3,…,numN

Uno se ingresa mediante el teclado el comando sumar (cualquier carácter del coman-
15 do puede ser minúscula o mayúscula), un espacio y la lista de números (pueden ser
reales; el separador de decimales es el punto) a sumar; todo en una misma línea. Lue-
go de “dar enter” el resultado en la línea siguiente de la pantalla es Suma: valor de la
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-
20 mando ingresado.”

• Restar num1,num2

Uno se ingresa mediante el teclado el comando restar (cualquier carácter del coman-
do puede ser minúscula o mayúscula), un espacio y dos (2) números (pueden ser rea-
les; el separador de decimales es el punto) a restar; todo en una misma línea. Luego
25 de “dar enter” el resultado en la línea siguiente de la pantalla es Resta: valor de la
resta (la resta es num1-num2). Si hay un error en la sintaxis, el programa debe mos-
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.”

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

• 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
ser reales; el separador de decimales es el punto) a multiplicar; todo en una misma lí-
5 nea. Luego de “dar enter” el resultado en la línea siguiente de la pantalla es Multipli-
cación: valor de la multiplicación. Si hay un error en la sintaxis, el programa debe
mostrar un error; por ejemplo si se ingresa multiplicar 1;3.2,4.2, el programa debe de-
cir “Hubo un error de sintaxis en el comando ingresado.”

• Dividir num1,num2

10 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-
les; el separador de decimales es el punto) a dividir; todo en una misma línea. Luego
de “dar enter” el resultado en la línea siguiente de la pantalla es División: valor de la
división (la división es num1/num2). Si hay un error en la sintaxis, el programa debe
15 mostrar un error; por ejemplo si se ingresa dividir 1,3,4,5, el programa debe decir
“Hubo un error de sintaxis en el comando ingresado.”

• Estadísticas

Uno se ingresa mediante el teclado el comando estadísticas (cualquier carácter del co-
mando puede ser minúscula o mayúscula, o tener la letra i con tilde o sin tilde). Lue -
20 go de “dar enter” el resultado en la línea siguiente de la pantalla es
Número de veces que se utilizó correctamente cada comando
Sumar: num veces
Restar: num veces
Multiplicar: num veces
25 Dividir: num veces
Si el número de veces es 1, debe decir 1 vez (y no 1 veces).

• Salir

Uno se ingresa mediante el teclado el comando salir (cualquier carácter del comando
puede ser minúscula o mayúscula) y se termina la ejecución del programa.

30 Nota: antes del comando y después de los números que necesita el comando (en los
comandos sumar, restar, multiplicar y dividir) no importa si se ingresan espacios en
blanco; con que no haya un error en la sintaxis (entre el comando y los números que
necesita el comando sólo debe haber un espacio), no debería haber ningún mensaje

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

de error. Por ejemplo: espacio espacio espacio suMaR 1,2,3,4,5,6 espacio espacio no
debería dar ningún error de sintaxis. Utilice/cree funciones donde se necesite.

A continuación se muestra un ejemplo de ejecución del programa. Las líneas en negri-


ta son los comandos (y los respectivos números que necesita el mismo) que se ingre-
5 san por parte del usuario.
sumar 1, 2, 4
Suma: 7
RestaR 3,4
Resta: -1
10 MultiPlicar 4,5,3,2,4
Multiplicación: 480
Dividir 4,3
División: 1,333333333
ReSTar 5,4
15 Resta: 1
Suma 4,5,6,12,13,5,8,7
Hubo un error de sintaxis en el comando ingresado.
EstAdísticAS
Número de veces que se utilizó correctamente cada comando
20 Sumar: 1 vez
Restar: 2 veces
Multiplicar: 1 vez
Dividir: 1 vez
Salir

25 * 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-
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
30 unívocamente a cada registro). Por ejemplo, la siguiente tabla muestra la información
de tres personas (en este caso la cédula es el valor que identifica unívocamente a cada
persona).

Cédula Nombre Apellido Edad

01064634657 Juan Pérez 23

01064636638 Víctor Guzmán 21

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

01064688644 Pedro Flores 20

Los registros (un registro es el conjunto de valores de una misma persona) se deben
ingresar en forma de cadena. La coma es el separador de valores de los campos (cam-
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
5 siguiente cadena:
01064634657,Juan,Pérez,23;01064636638,Víctor,Guzmán,21;01064688644,Pedro,Flor
es,20;
El programa debe permitir, mediante un menú:

1. Ingresar un nuevo registro.


10 2. Actualizar los valores de los campos de una persona (la cédula no se puede
modificar).
3. Eliminar el registro de una persona.
4. Mostrar los valores de los campos de una persona.
5. Listar los registros de todas las personas.
15 6. Calcular el promedio de las edades de todas las personas.
7. Terminar el programa.

Este ejercicio pretende mejorar sus destrezas para usar funciones, por eso, usted debe
implementar las funciones que considere necesarias.

Una restricción con la que debe cumplir su programa es que utilice una variable glo-
20 bal para la cadena de datos de personas y para el número total de personas.

Ejemplo:

Ingreso

Se le pide al usuario que ingrese los datos de la persona


Cédula: 01064634657
25 Nombre: Juan
Apellido: Pérez
Edad: 23
Actualización

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

Se le pide al usuario que ingrese una cédula existente y los nuevos valores del resto de
campos
Cédula: 01064634657
Nombre: Diego
5 Apellido: Sarmiento
Edad: 25
Si la cédula que se busca no se encuentra en la cadena que contiene la información de
todas las personas, se muestra un mensaje de error: “La persona no ha sido registra-
da.”.

10 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
,Flores,20;
Eliminación

15 Se le pide al usuario que ingrese la cédula de la persona a eliminar

• Cédula: 01064634657

Se elimina el registro de esa persona de la cadena de personas:


01064636638,Víctor,Guzmán,21;01064688644,Pedro,Flores,20;
Visualización

20 Se le pide al usuario que ingrese la cédula

• Cédula: 01064634657

El programa muestra el resto de campos


Nombre: Juan
Apellido: Pérez
25 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-
da.”.

Listar

30 Se muestran uno a uno todos los registros de personas

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

Cédula: 01064636638
Nombre: Víctor
Apellido: Guzmán
Edad: 21

5 Cédula: 01064688644
Nombre: Pedro
Apellido: Flores
Edad: 20
Promedio de edades

10 Se calcula y muestra el promedio de las edades de todas las personas que estén en ese
momento en la lista.

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

Búsquedas

Algunos de los siguientes ejercicios son basados en el libro de Gómez Fuentes y Cer-
vantes Ojeda (2013).

1. Implemente un programa que pida al usuario el tamaño de un arreglo y que


5 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á.

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
10 la posición índice del elemento si se encuentra en el arreglo y -1 si no lo en-
cuentra en el arreglo.

3. Implemente un programa que lea números enteros y que los almacene en un


arreglo. Preguntar al usuario por un número y determinar si este número está
en el arreglo usando búsqueda binaria.

15 4. Implemente la función busquedaBinaria que tenga como parámetros un arreglo


y un elemento a buscar en el arreglo. La función debe regresar la posición ín-
dice del elemento si se encuentra en el arreglo y, si no se encuentra en el arre-
glo, regresar un -1.

5. El siguiente es un programa que le permitirá tener una idea de la eficiencia de


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

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:
25 arreglo de elementos y algoritmo de búsqueda). La función devuelve la po-
sición en la que se encuentra el elemento (si no se encuentra, devuelve -1),
el número de comparaciones realizadas para encontrarlo y el tiempo de eje-
cución en segundos.

b) Genere un arreglo de 21 elementos con números aleatorios enteros en el


30 rango [-15, 15]. Los números no deben repetirse en el arreglo.

c) Utilice la función desarrollada en el literal a para buscar un elemento dado


en el arreglo generado con cada uno de los algoritmos de búsqueda. Para

182
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
una tabla en donde se muestre el algoritmo, el número de comparaciones y
el tiempo:
5 ================================================
Tabla de comparación para algoritmos de búsqueda
================================================
--------------------------------------------------------
Algoritmo # comparaciones Tiempo [seg.]
10 --------- --------------- -------------
Algoritmo 1 ## ##
Algoritmo 2 ## ##
... ... ...
--------------------------------------------------------
15 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-
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
20 (estos datos son empíricos) de los algoritmos y un histograma para repre-
sentar las mismas (el histograma presenta los valores normalizados; los dos
signos de numeral en el histograma significa que debe poner los números
que representa cada barra):
================================================
25 Tabla de comparación para algoritmos de búsqueda
================================================

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

---------------------------------------------------------------
Algoritmo # comparaciones Tiempo [seg.]
35 promedio promedio
--------- --------------- -------------
Algoritmo 1 ## ##

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

Algoritmo 2 ## ##
... ... ...
---------------------------------------------------------------

=======================================
5 Histograma para comparación de métricas
=======================================
-----------------------------------------------------------------
Algoritmo 1 |
# comparaciones (prom) |▬▬▬▬▬▬▬▬▬▬ ##
10 Tiempo [seg.] (prom) |▬▬▬▬▬▬▬ ##
|
Algoritmo 2 |
# comparaciones (prom) |▬▬▬▬▬▬▬ ##
Tiempo [seg.] (prom) |▬▬▬▬▬▬▬▬ ##
15 |
. | . .
. | . .
. | . .
-----------------------------------------------------------------
20 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.

6. Ejercicio

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

Ordenamiento

Miscelánea

Algunos de los siguientes ejercicios son basados en el libro de Joyanes Aguilar et al.
(2003).

5 1. * Dada la siguiente lista {a, m, c, j, k} después de dos pasadas de un algorit-


mo de ordenación, la lista ha quedado {a, c, m, j, k}. ¿Qué algoritmo de orde-
namiento se está utilizando?

a) Inserción
b) Selección
10 c) Burbuja
d) Ninguna de las anteriores

2. Dada la lista de números {-5, 18, -12, 17, -6, -20, -4, -8}, escribir cómo evolu-
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-
15 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:
a) ordenamiento de burbuja, b) algoritmo de selección y c) algoritmo de inser-
ción.

20 4. Dado un arreglo de números reales, escriba un método que ordene los elemen-
tos del arreglo de tal forma que los números pares aparezcan antes que los nú-
meros impares. Además, los números pares deberán estar ordenados de forma
ascendente, mientras que los números impares deberán estar ordenados de for-
ma descendente. Esto es, el arreglo {1,2,3,4,5,6} quedará como {2,4,6,5,3,1}.

25 5. Genere un arreglo de 11 elementos guardando en cada elemento un número en-


tero aleatorio entre [1, 15]. Grafique en un histograma horizontal los valores de
cada elemento y vaya mostrando paso a paso la ordenación. Haga dos versio-
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:
30 Iteración 0 (elementos sin ordenar):
E01 *****

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

E02 *
E03 **

Iteración 1:
E01 *
5 E02 *****
E03 **

Iteración 2:
E01 *
E02 **
10 E02 *****

¡Fin! Los elementos se ordenaron luego de 2 iteraciones.


6. Genere un arreglo de 13 elementos guardando en cada elemento un número en-
tero aleatorio entre [0, 10]. Grafique en un histograma horizontal los valores de
cada elemento y vaya mostrando paso a paso la ordenación. Haga dos versio-
15 nes: una para ordenación ascendente y otra ordenación descendente. Además
se debe presentar un menú para elegir el método de ordenamiento a utilizar.

7. Se ha recolectado información del peso y la estatura de n personas. Implemen-


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

25 8. Se ha recolectado información del peso y la estatura de n personas. Implemen-


te una función que reciba una matriz de 2 x n en donde en la primera fila es -
tén los datos de peso y en la segunda fila los datos de la estatura (para reali-
zar pruebas usted puede generar números reales aleatorios para el peso y la es-
tatura de las n personas). La función devuelve la matriz ordenada de manera
30 ascendente o descendente con respecto al peso o a la estatura. La función reco-
ge como parámetros matriz, optOrdenamiento, optVariable, algOrdenamiento,
donde optOrdenamiento indica si es ordenamiento ascendente o descendente
(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-
35 mo de ordenamiento que se desea utilizar.

186
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-
denación estudiados (e.g., Selección, Burbuja, Inserción, Inserción binaria,
Shell). Terminará con la presentación por pantalla del arreglo ordenado.

5 10. Implemente una función que permita ordenar por fechas y de mayor a menor
una matriz de N elementos (filas N <= 40). Cada fila de la matriz es un regis-
tro, con los campos, de tipo entero, día (columna 1), mes (columna 2), año
(columna 3) y número de contrato (columna 4). Damos por supuesto que la
introducción de datos fue correcta, pudiendo existir diversos contratos con la
10 misma fecha, pero no números de contrato repetidos.

11. Realizar una función que permita ordenar por fechas y de mayor a menor una
matriz de N elementos (filas N <= 40). Cada fila de la matriz es un registro,
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-
15 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
realizados en una determinada fecha.

12. Ingrese nombres de equipos de fútbol con su respectivo puntaje; visualizarlos


20 ordenados por el puntaje mostrando el número de iteraciones que se utilizaron.
El usuario puede seleccionar el método que quiere utilizar para hacer la orde-
nación.

13. El siguiente es un programa que le permitirá tener una idea de la eficiencia de


los métodos de ordenamiento en cuanto al número de comparaciones e inter-
25 cambios que se llevan a cabo en cada algoritmo de ordenamiento y el tiempo
que se demora cada uno en la ejecución.

a) Implemente una función que reciba un arreglo de n elementos enteros y el


algoritmo a utilizar para ordenarlos (dos parámetros: elementos y algorit-
mo). La función devuelve los elementos ordenados, el número de compara-
30 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


rango [-9, 9].

187
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
donde se muestre el algoritmo, el número de comparaciones, el número de
intercambios y el tiempo de cálculo en segundos:
5 ====================================================
Tabla de comparación para algoritmos de ordenamiento
====================================================
---------------------------------------------------------------------
Algoritmo # comparaciones # intercambios Tiempo [seg.]
10 --------- --------------- -------------- -------------
Algoritmo 1 ## ## ##
Algoritmo 2 ## ## ##
Algoritmo 3 ## ## ##
... .. .. ..
15 ---------------------------------------------------------------------
d) Genere 9999 arreglos que cumplan con las condiciones del literal b. Cada
uno de los arreglos generados deben ser ordenados utilizando la función del
literal a. De cada arreglo ordenado debe ir guardando el número de compa-
raciones, el número de intercambios y el tiempo de cálculo en segundos. Fi-
20 nalmente, presente una tabla con estadísticas de eficiencia de los métodos y
un histograma para representar las mismas (el histograma presenta los va-
lores normalizados; los dos signos de numeral en el histograma significa que
debe poner los números que representa cada barra):
====================================================
25 Tabla de comparación para algoritmos de ordenamiento
====================================================

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;
30 así con cada uno de los 9999 arreglos.

---------------------------------------------------------------------
# comparaciones # intercambios Tiempo [seg.]
Algoritmo promedio promedio promedio
--------- --------------- -------------- -------------
35 Algoritmo 1 ## ## ##
Algoritmo 2 ## ## ##
Algoritmo 3 ## ## ##

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

... .. .. ..
---------------------------------------------------------------------

=======================================
Histograma para comparación de métricas
5 =======================================
-----------------------------------------------------------------
Algoritmo 1 |
# comparaciones (prom) |▬▬▬▬▬▬▬▬▬▬ ##
# intercambios (prom) |▬▬▬▬▬▬▬▬▬▬▬▬ ##
10 Tiempo [seg.] (prom) |▬▬▬▬▬▬▬ ##
|
Algoritmo 2 |
# comparaciones (prom) |▬▬▬▬▬▬▬ ##
# intercambios (prom) |▬▬▬▬▬▬▬▬▬▬▬ ##
15 Tiempo [seg.] (prom) |▬▬▬▬▬▬▬▬ ##
|
Algoritmo 3 |
# comparaciones (prom) |▬▬▬▬▬▬▬▬▬▬▬▬▬▬ ##
# intercambios (prom) |▬▬▬▬▬▬▬▬▬ ##
20 Tiempo [seg.] (prom) |▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬ ##
|
. | . .
. | . .
. | . .
25 -----------------------------------------------------------------
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.

14. El ejercicio está dividido en los siguientes pasos:

30 a) Implemente una función que devuelva un número entero aleatorio en el


rango [LímInferior, LímSuperior].
b) Genere un arreglo de n elementos, donde n es un número aleatorio entre 25
y 50.
c) Llene el arreglo con números aleatorios enteros entre -99 y 99.
35 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.

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

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
generado con n elementos y máximo un arreglo auxiliar (dos arreglos en total).

5 Nota 2: Cada método de ordenamiento debe estar implementado en una fun-


ción diferente.

15. * El ejercicio está dividido en los siguientes pasos:

a) Implemente una función que devuelva un número entero aleatorio en el


rango [LímInferior, LímSuperior].
10 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.
c) Genere un arreglo de n elementos, donde n es un número aleatorio entre 25
y 50.
15 d) Llene el arreglo con palabras aleatorias de m letras, donde m es un número
aleatorio entre 3 y 5.
e) La mitad (si n/2 no es entero, trúnquelo) del arreglo ordénelo con el méto-
do de la burbuja.
f) La otra mitad del arreglo ordénelo con el método de la selección.
20 g) Con las dos mitades ordenadas, aplique el método de la inserción para or-
denar el arreglo completo.

Nota 1: Dentro del método principal (main) solamente deben haber el arreglo
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-


25 ción diferente.

16. Pregunta

* Menú, ordenamiento y búsqueda de registros

Escriba un programa que muestre el siguiente menú:

1. Ingreso de datos de N de estudiantes


30 2. Ordenar por una columna especificada por el usuario
3. Buscar un registro por apellido

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

4. Listar todos los datos, ordenados alfabéticamente por apellido


5. Salir

Los datos de cada estudiante son: el nombre y apellido y la nota promedio (entre 1 y
20 puntos, inclusivo). Por ejemplo:

5 Nombre : Juan
Apellido : Pérez
Promedio : 18

Se debe almacenar los datos en una matriz. Si hay más de un estudiante con el ape -
llido buscado, se debe mostrar todos los estudiantes que coinciden con el apellido es-
10 pecificado.

* Calificaciones de estudiantes

El objetivo del programa es gestionar calificaciones de estudiantes. Se deben registrar


n estudiantes (n ≥ 3, validar). De cada uno de los estudiantes se deben ingresar, el
nombre y una calificación; los datos se registran en arreglos separados. A partir de
15 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
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
20 con las mínimas calificaciones.

Detallando los requerimientos utilizando un ejemplo, se tendría lo siguiente:

1. Escribir una función f1 que permita ingresar los datos de los estudiantes.

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

Nombres Calificaciones
Juan 16
Andrés 18
Pedro 15
María 11
Xavier 10
Ximena 17
Fernando 19
... ...
Jaime 5
2. Escribir una función f2 que reciba los dos arreglos ingresados en f1 y devuelva
una matriz con los nombres y calificaciones de forma ascendente, por nombre.

Andrés 18
Fernando 19
Jaime 5
Juan 16
A= María 11
Pedro 15
Xavier 10
... ...
Ximena 17

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

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

4. Escribir una función f4 que reciba como entrada la matriz generada en f2 y de-
vuelva una matriz con las tres mayores calificaciones y las tres menores califi-
caciones.

Fernando 19
Andrés 18
Ximena 17
C=
Jaime 5
Xavier 10
María 11

Ordenamientos en matriz

5 Desarrolle un programa que pida al usuario ingresar las dimensiones (nxm) de una
matriz y rellene los elementos de dicha matriz con números enteros aleatorios en un
rango dado por el mismo usuario. Muestre la matriz generada y luego, realice los si-
guientes ordenamientos:

• Las columnas pares ordénelas de manera descendente con el método de inser-


10 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
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-
15 go de aplicados estos cambios.
• Las “diagonales derecha-izquierda” ordénelas de manera ascendente con el mé-
todo de inserción; muestre la matriz original luego de aplicados estos cambios.
Las "diagonales izquierda–derecha" ordénelas de manera descendente con el
método de selección; muestre la matriz original luego de aplicados estos cam-
20 bios.

A continuación se muestra un ejemplo de ejecución del programa:


Ingreso de datos
================
Dimensión de la matriz
25 n: 3

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

m: 4

Rango para generación de números aleatorios


inf: -2
sup: 10

5 Matriz generada
8 4 9 5
2 1 7 4
3 5 -1 2

Resultados
10 ==========
Luego de ordenadas las columnas
2 5 -1 5
3 4 7 4
8 1 9 2

15 Luego de ordenadas las filas


9 8 5 4
1 2 4 7
5 3 2 -1

Luego de ordenadas las “diagonales derecha–izquierda”


20 8 2 1 5
4 3 5 -1
9 7 4 2

Luego de ordenadas las “diagonales izquierda–derecha”


8 7 9 5
25 5 1 4 4
3 2 -1 2

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

30 1. Nombre
2. Apellido
3. Edad
4. Profesión

194
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-
lizar las siguientes operaciones:

a) Ordenar los datos de acuerdo a lo que se especifique en el momento de la eje-


5 cución del programa. Por ejemplo, puede ordenarse por apellido, o por edad.
Se debe mostrar los datos ordenados con todos los campos separados por co-
mas. Si se ordena por apellido, se muestra: APELLIDO, NOMBRE, EDAD,
PROFESIÓN. Si se ordena por profesión, se muestra: PROFESIÓN, NOM-
BRE, APELLIDO, EDAD.

10 b) Buscar todas las ocurrencias de un valor ingresado por el usuario. Por ejem-
plo, buscar todos los que tengan 30 años de edad, o todos lo que tengan por
apellido “Pérez”.

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.

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

Archivos

Miscelánea

1. ¿Qué significa EOF?

a) Empty or full
5 b) End of file
c) End of floop
d) Las anteriores respuestas no son correctas

2. * Usted recibió dos archivos de texto plano (txt). El primero tiene un mensaje
cifrado que sólo se puede leer (leer por un humano) utilizando la clave del se-
10 gundo archivo. La clave consiste de series de tres caracteres (siempre tres y se-
guidos), de los que encontrará en el archivo cifrado, a los cuales corresponde
caracteres, de los que tendrá que escribir como descifrados. Por ejemplo, si el
primer archivo contiene
e545ty8452w3
15 y el segundo archivo tiene la clave
e54 h
5ty o
845 l
2w3 a
20 el archivo que tiene que escribir, llamado descifrado.txt contendrá
hola
3.

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

Miscelánea de Ejercicios

Un buen lugar para comenzar a practicar más está en http://www.lab.dit.upm.es/


~fprg/examenes/

* Combate de pokemones

5 Vea el vídeo https://youtu.be/SDv2vOIFIj8.

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
2.- Simular combate
10 3.- Terminar
Ingresar opción <1-3>:
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

15 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-
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.,
20 un jugador, el otro, un jugador, el otro, etc. Ambos jugadores inician sus vidas con
100 puntos y se tienen que ir simulando el combate restando de la vida de los poke-
mones el poder de ataque de su contrincante, esto se hace en base al turno de ataque.

Por cada turno se debe nuevamente utilizar la función azar(2) para determinar si un
jugador ataca o no. Solamente si el resultado es 1, el jugador al que le toca el turno
25 ataca. Recuerde que luego de definido al azar el jugador que comienza (el que tiene el
primer turno), los turnos son intercalados entre los dos.

Como ejemplo, suponga que la función azar(2) devuelve 0. Por lo tanto Pikachu ini-
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
30 é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-

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

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.

Ejemplo de ejecución:
5 Combate de pokemones
1.- Ingresar datos de los pokemones
2.- Simular combate
3.- Terminar
Ingresar opción <1-3>: 1

10 Nombre del primer Pokemon: Pikachu


Poder de ataque del primer Pokemon: 55
Nombre del segundo Pokemon: Jigglypuff
Poder de ataque del segundo Pokemon: 45

Combate de pokemones
15 1.- Ingresar datos de los pokemones
2.- Simular combate
3.- Terminar
Ingresar opción <1-3>: 2

Vidas:Pikachu(100) vs Jigglypuff(100)

20 1.- Turno: Pickachu (55 de poder). (Sí ataca, azar(2) devolvió 1)


Vidas: Pikachu (100) vs Jigglypuff (45)
2.- Turno: Jigglypuff (45 de poder). (No ataca, azar(2) devolvió 0)
Vidas: Pikachu (100) vs Jigglypuff (45)
3.- Turno: Pickachu (55 de poder). (Sí ataca, azar(2) devolvió 1)
25 Vidas: Pikachu (100) vs Jigglypuff (-10)

Pokemon ganador: Pikachu en 3 turnos.

Combate de pokemones
1.- Ingresar datos de los pokemones
2.- Simular combate
30 3.- Terminar
Ingresar opción <1-3>: 3
(termina el programa)

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

Solución de un sistema de ecuaciones por matrices

Conversión de un número en base diez a sistema binario

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


5 lados

Valor futuro de una inversión

Cálculo del capital inicial

Cálculo de la tasa de interés

Cálculo del número de años

10 Media, mediana y varianza de N datos

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
para este ejercicio, fue tomada de Wikipedia (https://goo.gl/auCPx7).

15 La siguiente tabla muestra los símbolos válidos en el sistema de los números romanos,
y sus equivalencias en el sistema decimal.

Signo Valor
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
Para la notación moderna de los números romanos se utilizan las siguientes normas:

199
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.
• 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
5 símbolos forman un conjunto en el cual debe restarse el valor del primero al
valor del siguiente (e.g., X·IX = 10+[10-1] = 19).
• La unidad (I) y los números con base 10 (X, C y M) pueden repetirse hasta 3
veces consecutivas como sumandos.
• Los números con base 5 (V, L y D), no pueden repetirse seguidos, ya que la
10 suma de esos dos símbolos tiene representación con alguno de los símbolos an-
teriores.
• La unidad y los símbolos de base 10 también pueden estar restando antes de
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
15 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.
• Los símbolos con base 5 no pueden utilizarse para restar (e.g., 45 se escribe
‘XLV’ y no ‘VL’).

20 • Para números con valores igual o superiores a 4000, se coloca una línea hori-
zontal por encima del número, para indicar que la base de la multiplicación es
por 1000:

Romano (miles) Decimal

V 5000

X 10 000

L 50 000

C 100 000

D 500 000

M 1 000 000

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

Dígitos de un número

Elaborar un algoritmo que dado un número entero positivo (>0) cualquiera (validar
para que siga ingresando números mientras no cumple la condición) nos diga el nú-
mero de dígitos que tiene.

5 * 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-
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-
10 goritmo con n igual a 5.
Ingrese la altura (n): 5

1 2 3 4 5 4 3 2 1
1 2 3 4 3 2 1
1 2 3 2 1
15 1 2 1
1

* Cubos e impares
Considere la siguiente propiedad:
• Sumando el primer número impar positivo se obtiene el primer cubo.
20 • Sumando los dos siguientes impares se obtiene el segundo cubo.
• Sumando los tres siguientes impares se obtiene el tercer cubo, y así
sucesivamente.
Expresado de forma matemática:
13 = 1 =1
25 2 =3+5
3
=8
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


cubos calculándolos mediante la propiedad descrita.

30 * Cantidad de dígitos fijo de números mostrados

Se ingresan dos límites: límite inferior con un valor mínimo de 1 y límite superior con
un valor máximo de 9999 (validar valores mínimos y máximos de los límites y que el

201
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-
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
5 de dígitos que tenga el límite superior; es decir, los número que se van a mostrar que
tienen un número de dígitos menor al número de dígitos del límite superior, deben
completar el número de dígitos con ceros a la izquierda.

Ejemplo 1:
Límite inferior: 1
10 Límite superior: 12
Paso: 3
Lo que se muestra en pantalla es:
01
04
15 07
10
Ejemplo 2:
Límite inferior: 1
Límite superior: 1500
20 Paso: 500
Lo que se muestra en pantalla es:
0001
0501
1001

25 Algoritmo de Gauss y Método de eliminación de Gauss

Para la resolución de sistemas de ecuaciones lineales existe el método de factorización


LU. Un algoritmo que se utiliza para implementar este método es el algoritmo de
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-
30 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).

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

Métodos de Jacobi y de Gauss-Seidel

Vea el libro de Quarteroni et al. (2014, pp. 168–173).

Dados

Escribir un programa que simule el lanzamiento de dos dados y muestre por pantalla
5 la frecuencia de los resultados de mil lanzamientos.

Búsquedas y ordenación

1. Diseñar una función recursiva que realice una búsqueda binaria.

2. Diseñar un procedimiento recursivo que ordene una lista de elementos por el


método Quick Sort.

10 Interpolación

Para resolver los siguientes ejercicios revise las páginas 80-83 del libro de Quarteroni
et al. (2014).

1. Implemente la interpolación polinómica mediante la matriz de Vandermonde.

2. Implemente la interpolación polinómica de Lagrange para encontrar el polino-


15 mio interpolador que pase por tres puntos.

3. Implemente la interpolación polinómica de Lagrange para encontrar el polino-


mio interpolador que pase por cuatro puntos.

Integración numérica

Para resolver los siguientes ejercicios revise la sección 4.3 Numerical integration del
20 libro de Quarteroni et al. (2014).

1. Implemente la fórmula de cuadratura de punto medio compuesto para integra-


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


25 con un polinomio integrador de Lagrange de segundo grado.

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

Ecuaciones diferenciales ordinarias (EDO)

• Implemente el método de Euler y úselo para integrar numéricamente la ecua-


5 ción

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.

El método de Euler consiste en dividir el intervalo que va desde x 0 a xn en su-


10 bintervalos de ancho

(1)

y aplicar la fórmula iterativa

(2)

Para comprobar sus resultados sepa que la integral analítica de la función dy/
15 dx es y = − 0.5x4 + 4x3 − 10x2 + 8.5x + 1. La figura 15 muestra las gráficas
de la solución analítica y la solución numérica cuyos valores de yi (aproxima-
dos) usted debe encontrar. La tabla 2 muestra los valores de los puntos de la
aproximación mediante el método de Euler.

Si desea más información acerca del método puede leer la definición en el libro
20 de Chapra et al. (2007), páginas 719-722.

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

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

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

i xi yi (aproximación)
14 2.8 4.1248
15 3 4.66
16 3.2 5.16
17 3.4 5.5288
18 3.6 5.6512
19 3.8 5.3928
20 4 4.6
• * Implemente el método de Euler y úselo para integrar numéricamente la
ecuación

dy/dx = f(x, y) = − 2x3 + 12x2 − 20x + 8.5

desde x0 = 0 (este es un valor fijo) hasta un xn dado por el usuario (>x0) con
5 tamaños de paso h = {0.5, 0.33, 0.21, 0.14, 0.09}. Por ejemplo, con h = 0.21,
x0 = 0, x1 = x0 + 0.21, x2 = x1 + 0.21, x3 = x2 + 0.21, etc. La condición inicial
en x0 = 0 es y0 = 1, i.e., la función y (la que se quiere aproximar) en x = 0, es
1 [y(0) = 1].

El método de Euler consiste en dividir el intervalo que va desde x0 a xn en su-


10 bintervalos de ancho h y aplicar la fórmula iterativa

(3)

Para comprobar sus resultados sepa que la integral analítica de la función dy/
dx (lo que se quiere aproximar) es y = − 0.5x4 + 4x3 − 10x2 + 8.5x + 1.

1. Escriba una función llamada my_range que genere una tupla de números
15 desde x0 a xn con un tamaño de paso dado (h). En la tupla de números siempre
se incluye x0 al comienzo pero no necesariamente se incluye al final xn porque
depende del tamaño de paso (vea los ejemplos). Cuando no se indica explícita-
mente un tamaño de paso, por defecto se debe utilizar un tamaño de paso
igual a uno. Recuerde cuál es la idea fundamental de usar funciones para po-
20 der saber qué parámetro(s) usar en la definición de la función. Comente la
función para poder saber exactamente qué hace (de la forma como se comen-
tan las funciones) y en ese comentario ponga si usar tuplas, listas, diccionarios
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
25 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

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

Desde 0 a 1 con paso 0.3: 0, 0.3, 0.6, 0.9


Desde 0 a 4 sin especificar el paso: 0, 1, 2, 3, 4

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
5 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
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
10 siempre se incluye la condición inicial al comienzo, que siempre es dado con el
ejercicio, en este caso el 1. Recuerde cuál es la idea fundamental de usar fun-
ciones para poder saber qué parámetro(s) usar en la definición de la función.
Comente la función para poder saber exactamente qué hace (de la forma como
se comentan las funciones) y en ese comentario ponga si usar tuplas, listas,
15 diccionarios o conjuntos es la mejor opción para devolver (return) los resulta-
dos y porqué (use la mejor opción para devolver sus resultados). Ejemplos de
resultados devueltos por esa función (aproximaciones de y en los diferentes
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
20 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,
5.5, 5.7, 5.5, 4.7

3. Utilizar la(s) función(es) implementadas para comparar las aproximaciones


25 de y con h = {0.5, 0.33, 0.21, 0.14, 0.09} y comparar cuáles son las diferencias
en los resultados. Esos resultados deben ser mostrados en una gráfica como se
muestran en los ejemplos siguientes (son dos imágenes independientes, no se
generan subplots; debe poner el título y las etiquetas de los ejes como se mues-
tra, en Estudiante ponga su primer nombre y primer apellido). Recuerde que
30 el único dato que pide al usuario es xn, el resto (hs, f(x, y), etc.) son fijos.

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

* Tiempo de Respuesta Facebook

Una de las métricas que usa Facebook para mostrar qué tan activa es una página es
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
5 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).

Genere un menú con tres opciones:

Menú
1. Datos manuales
2. Datos aleatorios
3. Salir

Opción [1-3]: _

1 En realidad el cálculo tiene más detalles pero se ha modificado para el ejercicio. Más en
https://is.gd/4cHiOQ

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

Del menú se sale solamente cuando el usuario escribe la opción 3.

Cuando el usuario elige la opción 1, el usuario indica un número N de registros a in -


gresar. El ingreso de cada registro implica escribir una cadena de texto en el formato
“00h01 23h59”, que significa la hora y minuto (00h01) en que una persona escribió a
5 la página en Facebook y la hora y minuto (23h59) en la que el administrador de la
página en Facebook respondió a ese mensaje 1 (la segunda hora siempre es mayor o
igual a la primera). Luego de que el usuario ingrese esos N registros, debe mostrar el
Tiempo de Respuesta según lo define Facebook y luego un histograma (vea la ima-
gen), con clases correspondientes a las diferentes horas que se demoran en responder
10 a los mensajes (24). El gráfico debe tener las etiquetas Frecuencia y Tiempo de Res-
puesta como se muestra.

Cuando el usuario elige la opción 2, el usuario indica un número N de registros que el


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

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

¿Qué Hace el Algoritmo/Programa?

1. * ¿Cuál es el valor final de las variables a, b y c?


Proceso sin_titulo
a<-5
5 b<-6
c<-7
aux<-a
b<-a
c<-b
10 Escribir a, b, c
FinProceso
2. * ¿Cuál es el valor de la variable x?
Proceso sin_titulo
Definir x Como Entero
15 Definir z Como Entero
x<-2
z<-5
Si z<0 Entonces
x<-x+2
20 Sino
Si x>1 Entonces
x<-x+1
Sino
x<-5
25 Fin Si
Fin Si
Escribir x
FinProceso
3. * ¿Cuál es el resultado de ejecutar el siguiente pseudocódigo?
30 Proceso valorC
c<-50
Mientras c>=0 Hacer
Escribir c
c<-c+1
35 Fin Mientras
FinProceso
4. * ¿Cuál es el resultado de ejecutar el siguiente pseudocódigo?
Proceso sin_titulo

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

Para i<-1 Hasta 5 Con Paso 1 Hacer


Segun i Hacer
1:
Escribir "a"
5 2:
Escribir "b"
3:
Escribir "c"
De Otro Modo:
10 Escribir "d"
Fin Segun
Fin Para
FinProceso
5. ¿Qué realiza o cuál es el fin del siguiente algoritmo o programa?
15 Proceso sin_titulo
Leer var1
Leer var2

Mientras var1<var2 Hacer


Leer var1
20 Leer var2
Fin Mientras

var3<-0

Mientras var1 >= var2 Hacer


var1<-var1-var2
25 var3<-var3+1
Fin Mientras

Escribir var3
Escribir var1
FinProceso
30 6. ¿Qué realiza o cuál es el fin del siguiente algoritmo o programa?
Proceso sin_titulo
var1<-10
Leer var2

Mientras var2<1 Hacer


35 Leer var2
Fin Mientras

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

Para var3<-1 Hasta var2 Con Paso 1 Hacer


var4<-1

Mientras var4<=var1 Hacer


var5<-var4*var3
5 Escribir var5
var4<-var4+1
Fin Mientras

Escribir '***** ****** ***** *****'


Fin Para
10 FinProceso
7. ¿Qué realiza o cuál es el fin del siguiente algoritmo o programa?
Proceso sin_titulo
Leer var1

Mientras var1<0 Hacer


15 Leer var1
Fin Mientras

var2<-1
var3<-11

Mientras var2<=var1 Hacer


20 Leer var4

Mientras var4<1 O var4>10 Hacer


Leer var4
Fin Mientras

Si var4<var3 Entonces
25 var3<-var4
Fin Si

var2<-var2+1
Fin Mientras

Escribir var3
30 FinProceso
1. * Con respecto al siguiente algoritmo

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

Proceso sin_titulo
Para i<-1 Hasta 7 Con Paso 3 Hacer
cont<-1
Mientras cont<=5 Hacer
5 Escribir Sin Saltar i,'^',cont,': ',i^cont, ' '
cont<-cont+2
Fin Mientras
Escribir ''
Fin Para
10 FinProceso
¿Cuál de las siguientes versiones hace exactamente lo mismo?

a)
Proceso sin_titulo
cont<-1
15 Mientras cont<=8 Hacer
Para i<-1 Hasta 5 Con Paso 2 Hacer
Escribir Sin Saltar cont,'^',i,': ',cont^i, ' '
Fin Para
Escribir ''
20 cont<-cont+4
Fin Mientras
FinProceso
b)
Proceso sin_titulo
25 cont<-1
Mientras cont<=7 Hacer
Para i<-1 Hasta 5 Con Paso 2 Hacer
Escribir Sin Saltar cont,'^',i,': ',cont^i, ' '
Fin Para
30 Escribir ''
Fin Mientras
FinProceso
c)
Proceso sin_titulo
35 cont<-1
Mientras cont<=7 Hacer
Para i<-1 Hasta 5 Con Paso 2 Hacer
Escribir Sin Saltar cont,'^',i,': ',cont^i, ' '
Fin Para

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

Escribir ''
cont<-cont+3
Fin Mientras
FinProceso
5 d) Ninguna de las anteriores

Lenguaje Java

1. * ¿Para el siguiente segmento de código cuál es la salida del programa?

a) -120
b) 0
10 c) 60
d) Ninguna de las anteriores
public class Test {

public static void main (String[] args) {


int j = operacion();
15 System.out.println("Resultado: " + j);
}

public static int operacion(){


j = -1;
for(int i=5; i>=0; i--)
20 j=j*i;
}
}
2. * ¿Para el siguiente segmento de código cuál es la salida del programa?

a) 8
25 b) 72
c) 0
d) 36
public class Test {

static int resultado = 0;

30 public static void main (String[] args) {


operacion(3);
System.out.println("Resultado: " + resultado);
}

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

public static int potencia(int base, int exp){


int j = 1;
for(int i=0; i<exp; i++)
j=j*base;
5 return j;
}

public static void operacion(int resultado){


int i=1;
for(int j=1; j<resultado; j++)
10 i=j*potencia(j, 2);

resultado = i;
}
}
8. * ¿Cuál es el tiempo de vida de una variable global?

15 a) Existe tanto tiempo como el programa


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

9. Indicar cuáles de las siguientes declaraciones de matrices no son válidas y el


20 porqué.
a) int primos={2,3,5,7,11};
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-
25 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++){
for(int j=0; -------------; j++){
System.out.print(a[i][j] + “ ”);
30 }
}
}
11. ¿Cuál es la salida del siguiente programa?
public class Ejercicio {
35 public static void main(String[] args){
int [] matriz = {1,2,3};

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

metodoA(matriz);
for(int i=0; i<matriz.length; i++)
System.out.print(matriz[i]++ + " ");
for(int i=0; i<matriz.length; i++)
5 System.out.print(matriz[i] + " ");
}
static void metodoA(int [] b){
for(int i=0; i<b.length;i++)
b[i]=b[i]+3;
10 }
}
12. * ¿Cuál es la salida del siguiente programa?
public class Ejercicio {

public static void main (String[] args) {


15 char[] matriz = {'e','u','o','i','a'};
metodo(matriz);
for(int i=0; i<matriz.length; i++){
System.out.println(matriz[i]);
}
20 }

public static void metodo(char[] vocales){


char aux;
for(int i=1; i<vocales.length; i++){
if(vocales[i-1]>vocales[i]){
25 aux=vocales[i-1];
vocales[i-1]=vocales[i];
vocales[i]=aux;
}
}
30 }
}
13. * ¿Cuál es la salida del siguiente fragmento de código?
int index = 1;
while(index < 10){
35 System.out.println(index);
index ++;
}
14. * ¿Cuál es la salida del siguiente programa?
public class Ejercicio {

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

public static void main (String args[]) {


int c = 1;
final int N=5;
while(c<=N){
5 System.out.println(c);
c--;
}
}
}
10 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
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í


15 se compila sin ningún error.
public static void funcion (int[][] parametro) {
for(int i = 0; i < parametro.length; i++)
for(int j = 0; j < parametro.length; j++)
System.out.println(parametro[i][j]);
20 }
a) La proposición es verdadera

b) La proposición es falsa

16. * ¿Qué retorna la siguiente función?


public static int misterioso(int a, int n)
25 {
int i, r, x;
i = n;
r = 1;
x = a;
30 while (i > 0) {
if (i % 2 != 0) {
r = r * x;
}
x = x * x;
35 i = i / 2;
}
return r;
}

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

a) El mínimo común múltiplo de los parámetros a y n.

b) El resultado de elevar el parámero n a la a-ésima potencia.

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.

5 17. * Dada las siguientes líneas de código del siguiente programa, identifique la
salida correcta del mismo.
public static void main(String[] args) {
int arreglo[] = {2,7,8,9,4,5,2,6,8,9,3};
String cadena ="";
10 cadena = cadena + "\nNumeros: ";
for(int i=0;i < arreglo.length;i++){
if(arreglo[i]%2!=0){
cadena = cadena +" "+ arreglo[i];
}
15 }
System.out.println(cadena);
}

public static void funcion(int[] arreglo) {


for (int i=1; i < arreglo.length; i++) {
20 int aux = arreglo[i];
int j;
for (j=i-1; j >=0 && arreglo[j] > aux; j--){
arreglo[j+1] = arreglo[j];
}
25 arreglo[j+1] = aux;
}
}
a) 2 8 5 7 9
b) 2 2 4 6 8
30 c) 7 9 5 9 3
d) 2 9 9 5 3

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} };
35 for(int i = 0; i < m.length; i++) {
System.out.print(m[i].length + “ “);

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

}
}
a) 4 4 7
b) 5 3 4
5 c) 0 8 2
d) 6 3 1

19. * ¿Cuál es el ámbito de la variable x?


1) public void counter(int StartingNumber){
2) for (int x = StartingNumber; x<100; x++)
10 3) {
4) JOptionPane.showMessageDialog(null, x);
5)
6) }
7) JOptionPane.showMessageDialog(null, “Fin del método”, x);
15 8) }
a) Líneas desde la 2 a 7
b) Líneas desde la 2 a 6
c) Línea 4
d) Líneas desde la 1 a 8

20 20. * ¿Cuál es la salida correcta del siguiente programa?


public class ProgramacionI {
public static int contador = 0;
public static void main(String[] args) {
String cadena1, cadena2;
25 cadena1 = "cadena";
cadena2 = "programación";
for (int i = 0; i < cadena2.length(); i++) {
for (int j = 0; j < cadena1.length(); j++) {
if (i == j) {
30 contar();
}
}
}
System.out.println(contador);
35 }
public static void contar() {
contador = contador + 2;
}
}

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

21. * ¿Cuál es la salida correcta del siguiente programa?


public class ProgramacionI {
public static void main(String[] args) {
String str = "manejo de cadenas con java";
5 int inicio = str.indexOf("c");
int fin = str.indexOf("e", inicio + 1);
System.out.println(str.substring(inicio, fin + 3));
}
}
10 a) cadenas

b) cade

c) cadena

d) de

22. * ¿Qué muestra el siguiente programa?


15 public class ProgramacionI {
public static void main(String[] args) {
int contador;
int limite;

20 contador = 2;
limite = 10;

do {
switch (contador % 2) {
25 case 0:
System.out.print(contador + " es par\n");
break;
case 1:
System.out.print(contador + " es impar\n");
30 break;
}
contador += 2;
} while (contador < limite);
}
35 }
23. Pregunta

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

Lenguaje C

1. * Realice la prueba de escritorio del siguiente programa e indique qué se mues-


tra en pantalla.
#include<stdio.h>

5 int main() {
int a = 4, b = 1, x;
do{
a += 2;
b++;
10 }while(a<=b);
a += 3;
b += 2;
a = a+b%2+a%3;
x = a/b;
15 if(x>b){
b = b+4;
a = b%3;
x = a%b;
}
20 b++;
x = x*(10/8)+a%b;
for(int i=0; i<a; i=i+1)
printf("%d", a);
printf("\n");
25 for(int i=0; i<b; i+=2)
printf("%d", b);
for(int i=0; i<=b; i++)
printf("%d", x);
printf("\nVariable a: %d\n", a);
30 printf("Variable b: %d\n", b);
printf("Variable x: %d\n", x);
}
2. Pregunta

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

Fórmulas y Relaciones

Interés

Interés simple

Beneficio de una inversión cuando los intereses producidos se deben solamente al ca-
5 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
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


10 interés; teniendo en total $220 (el capital inicial más los intereses).

La formula del interés simple es

(1)

donde CF es el capital final, CI es el capital inicial, i es el interés por cada periodo y


n es el número total de periodos. Utilizando el ejemplo anterior se tendría
15 .

Interés compuesto
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
20 100 dólares a una tasa de interés compuesto anual (periodo anual) de 12%, a 10 años

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

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.

5 La fórmula de interés compuesto es

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

10 Composición periódica o Capitalización continua

Para hacer sencillo el concepto se utilizará un ejemplo. En algunos casos el interés se


cobra componiendo varias veces dentro del mismo periodo (del que se menciona el in-
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),
15 los intereses y capital serían los que se muestran en la siguiente tabla

223
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
interés se suma al capital para calcular el capital de la siguiente composición como si
se tratase de interés compuesto.

5 La fórmula de la composición periódica es

(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.
Utilizando los datos del ejemplo, se tendría .

10 Se muestra a continuación otro ejemplo. Si se desea invertir $100 con un interés


anual nominal del 2%, ¿cuál es la cantidad de dinero que se tendrá al cabo de un año
si la ganancia trimestral es reinvertida?

Estadística

Media ponderada

15 Para una serie de datos no vacía:

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

a la que corresponden los pesos:

la media ponderada es:

(4)

Medidas de longitud

5 • 1 milla = 1609 metros

• 1 pulgada = 0.0254 metros

• 1 yarda = 3 pies

• 1 pie = 12 pulgadas

Unidades de capacidad

10 • 1 pie cúbico = 0.0283 metros cúbicos

• 1 metro cúbico = 1000 litros

• 1 yarda cúbica = 27 pies cúbicos.

Unidades de capacidad de información

• 8 bits = 1 byte

15 • 1024 bytes = 1 kilobyte (KB)

• 1024 KB = 1 megabyte (MB)

• 1024 MB = 1 gigabyte (GB)

• 1024 GB = 1 terabyte (TB)

Tiempo

20 • 1 hora = 60 minutos

• 1 minuto = 60 segundos

• 1 hora = 3600 segundos

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

Unidades de temperatura

Relación entre grados celsius (centígrados, C) y fahrenheit (F).

(5)

Círculo

5 r: radio

l: longitud o perímetro

a: área

(6)

(7)

10 Esfera

• r: radio

• s: superficie o área

• v: volumen

(8)

15 (9)

Cuadrado

Ángulos

(10)

Ecuación de segundo grado

20 Dada la ecuación de segundo grado

(11)

las raíces o ceros de la función son:

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

(12)

Logaritmos

El logaritmo de un número en cualquier base puede obtenerse por la relación

(13)

5 en donde, , ; , .

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

Referencias
Alcalde Lancharro, E., García López, M., 1992. Metodología de la programación:
aplicaciones en COBOL y PASCAL. McGraw-Hill, Madrid.
Chapra, S.C., Canale, R.P., Enríquez Brito, J., Roa Hano, Ma. del C., 2007. Métodos
Numéricos para Ingenieros, 5th ed. McGraw-Hill Interamericana, México.
Charles Lehmann, 1994. Geometría analítica. Editorial Limusa, S.A. de C.V. Grupo
noriega editores, México D.F.
Chaves Torres, A.N., 2012. Diseño de algoritmos. Universidad Nacional Abierta y a
Distancia, Colombia.
Deitel, P.J., Deitel, H.M., 2012. Java: How to Program, 9th ed. Prentice Hall, Upper
Saddle River, N.J.
Editorial Macro, 2001. Turbo Pascal 7.0 Paso a Paso. Editorial Macro, Lima, Perú.
Gómez Fuentes, M. del C., Cervantes Ojeda, J., 2013. Inicialízate en la Programación
con C++, 1st ed. Universidad Autónoma Metropolitana, México.
Guttag, J., 2016. Introduction to computation and programming using Python: with
application to understanding data, 2nd ed. The MIT Press, Cambridge,
Massachusetts.
Joyanes Aguilar, L., Rodríguez Baena, L., Fernández Azuela, M., 2003. Fundamentos
de Programación: Libro de Problemas, 2nd ed. : McGraw-Hill, Madrid.
Olaya, V., 2011. Sistemas de Información Geográfica.
Parra Terrazos, C., n.d. Algoritmos y estructuras de datos I. Universidad Tecnológica
del Perú, Lima, Perú.
Pérez Montes, F.M., 2010. Ejercicios de Programación en Java: Condicionales,
Bucles, Tablas y Funciones. Eduinnova, Sevilla, España.
Pinales Delgado, F.J., Velázquez Amador, C.E., 2014. Algoritmos Resueltos con
Diagramas de Flujo y Pseudocódigo. Departamento Editorial de la
Universidad Autónoma de Aguascalientes, Aguascalientes, México.
Quarteroni, A., Saleri, F., Gervasio, P., 2014. Scientific Computing with MATLAB
and Octave, 4th ed, Texts in Computational Science and Engineering.
Springer Berlin Heidelberg, Berlin, Heidelberg.
Tanenbaum, A.S., Wetherall, D.J., 2012. Redes de computadoras, 5th ed. Pearson
Educación, México D.F., México.
Vázquez Gómez, J.B., 2012. Análisis y diseño de algoritmos, 1st ed. Red tercer
milenio, Tlalnepantla, México.
Vázquez-Patiño, A., 2016. Carrera de caballos. Cuenca, Ecuador.

228