Você está na página 1de 193

Ejercicios Básicos de Programación

13 de junio de 2017

Angel Vázquez-Patiño
Departamento de Ciencias de la Computación
Universidad de Cuenca
Cuenca, Ecuador
angel.vazquezp @ 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.........................................................12
Del problema real a su solución por computadora..............................................12
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.............................................................................................16
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............................................................27
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.............................................................................................30
Miscelánea...........................................................................................................30
Estructura de decisión IF....................................................................................44
Miscelánea.......................................................................................................44
Aprobación de curso........................................................................................45
Número par o impar........................................................................................45
Número nulo, positivo o negativo....................................................................45
Aumento de sueldo en base a sueldo actual....................................................46

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

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

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

* Contador de mayores de edad......................................................................58


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

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

Números primos..............................................................................................68
Número de dígitos de un número entero.........................................................69
Valor relativo de un número............................................................................69
Cálculo de comisiones......................................................................................69
Ordenamientos................................................................................................69
Juego: adivina el número.................................................................................70
Cara o cruz......................................................................................................70
Análisis de frecuencias en lanzamientos de un dado.......................................70
Series y sumatorias..........................................................................................70
Número de cifras de un número......................................................................71
Reloj de 24 horas.............................................................................................71
* Progresión geométrica..................................................................................71
* Números de la serie Fibonacci.....................................................................72
* Aproximación de π.......................................................................................72
Aproximación del logaritmo natural...............................................................73
* Aproximación del arco seno.........................................................................73
* Dibujo de triángulos.....................................................................................73
Menú...............................................................................................................74
Función exponencial........................................................................................75
Número en cualquier base...............................................................................75
Menú: revisión de número...............................................................................75
Tabla de multiplicar de un número entre 0 y 10.............................................75
Estructura de repetición FOR.............................................................................76
Miscelánea.......................................................................................................76
Signo zodiacal y número de suerte..................................................................79
Series y sumatorias..........................................................................................79
Menú: media, mayor y menor..........................................................................80
Manejo contable..............................................................................................81
* Factorización de trinomio.............................................................................81
Cálculos con dígitos de un número..................................................................82
* Serie de Leibniz............................................................................................82
* Carrera de caballos.......................................................................................83
Número de Armstrong.....................................................................................84
* Prueba del nueve de la división....................................................................84
* Encontrando triángulos rectángulos.............................................................84
La diagonal de Cantor.....................................................................................85
Random walks.................................................................................................86

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

* Suma de dos números...................................................................................86


Raíz cuadrada de un número..........................................................................86
Estructuras de Datos...............................................................................................90
Arreglos...............................................................................................................90
Miscelánea.......................................................................................................90
Manejo de arreglos..........................................................................................94
* Eliminación de duplicados............................................................................94
Ordenamiento de n números...........................................................................95
Ángulo entre vectores......................................................................................95
Relleno de arreglo con números aleatorios......................................................95
Graficación de frecuencias...............................................................................95
Criba de Eratóstenes.......................................................................................96
Algoritmo de Havel-Hakimi.............................................................................97
Matrices...............................................................................................................97
Miscelánea.......................................................................................................97
Suma y resta de matrices..............................................................................103
Producto de un escalar por una matriz.........................................................103
Diagonal principal de una matriz..................................................................103
* Transpuesta de una matriz.........................................................................103
Determinante de una matriz.........................................................................103
Producto de matrices....................................................................................104
Punto de silla de una matriz.........................................................................104
Tablero de ajedrez.........................................................................................104
El cuadrado latino.........................................................................................104
El cuadrado mágico.......................................................................................104
Cadena de ADN............................................................................................105
Gimnasia cerebral..........................................................................................106
Cálculos espaciales básicos............................................................................108
Formación de grupos de trabajo....................................................................110
* Matriz de adyacencia..................................................................................113
Craps.............................................................................................................115
Hormiga de Langton......................................................................................115
* Las ocho reinas...........................................................................................117
* Datos de personas.......................................................................................118
* Datos de empresas y empleados.................................................................120
* Estadística descriptiva: frecuencias e histograma.......................................122
Un algoritmo voraz para el número cromático..............................................123

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

Algoritmo de Floyd-Warshall........................................................................123
Funciones...............................................................................................................124
Ámbito de las variables.....................................................................................124
Miscelánea.........................................................................................................124
* Histograma.....................................................................................................128
Aritmética básica...............................................................................................128
Potenciación.......................................................................................................129
Aproximación de sinh-1......................................................................................129
Función W de Lambert......................................................................................129
Factorial de un número......................................................................................130
Máximo común divisor y mínimo común múltiplo............................................130
El método de la bisección..................................................................................131
* El método de Newton.....................................................................................132
Ordenamiento de n números..............................................................................133
Búsqueda lineal..................................................................................................134
Búsqueda binaria o dicotómica..........................................................................134
Juego de dados entre dos...................................................................................134
Manejo de Caracteres y Cadenas...........................................................................136
Miscelánea.........................................................................................................136
* Datos personales.............................................................................................144
Estadísticas de texto..........................................................................................144
* Analizador de tweets......................................................................................145
Eliminación de n-ésima palabra.........................................................................146
Cifrado por sustitución......................................................................................147
Cifrado por transposición..................................................................................148
* Línea de comandos.........................................................................................149
* Mantenimiento de datos de personas..............................................................151
Búsquedas..............................................................................................................155
Ordenamiento........................................................................................................158
Miscelánea.........................................................................................................158
* Calificaciones de estudiantes...........................................................................164
Ordenamientos en matriz..................................................................................165
Archivos.................................................................................................................168
Miscelánea.........................................................................................................168
Miscelánea de Ejercicios........................................................................................169
* Combate de pokemones..................................................................................169
Solución de un sistema de ecuaciones por matrices...........................................171

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

Conversión de un número en base diez a sistema binario.................................171


Conversión de un número en base binaria a sistema en base diez.....................171
Cálculo de las tres alturas de un triángulo dadas las longitudes de sus lados. .171
Valor futuro de una inversión............................................................................171
Cálculo del capital inicial..................................................................................171
Cálculo de la tasa de interés..............................................................................171
Cálculo del número de años...............................................................................171
Media, mediana y varianza de N datos.............................................................171
Transformación de números decimales a romanos.............................................171
Dígitos de un número........................................................................................173
* Pirámide invertida..........................................................................................173
Cubos e impares................................................................................................173
Cantidad de dígitos fijo de números mostrados.................................................173
Algoritmo de Gauss y Método de eliminación de Gauss...................................174
Métodos de Jacobi y de Gauss-Seidel................................................................174
Dados.................................................................................................................175
Búsquedas y ordenación....................................................................................175
Interpolación......................................................................................................175
Integración numérica.........................................................................................175
Ecuaciones diferenciales ordinarias (EDO)........................................................175
¿Qué Hace el Algoritmo/Programa?.....................................................................178
Lenguaje Java....................................................................................................182
Lenguaje C........................................................................................................189
Fórmulas y Relaciones...........................................................................................190
Estadística.........................................................................................................190
Media ponderada...........................................................................................190
Medidas de longitud..........................................................................................190
Unidades de capacidad......................................................................................190
Unidades de capacidad de información..............................................................190
Tiempo..............................................................................................................191
Unidades de temperatura..................................................................................191
Círculo...............................................................................................................191
Esfera.................................................................................................................191
Cuadrado...........................................................................................................191
Ángulos..............................................................................................................191
Ecuación de segundo grado...............................................................................192
Logaritmos.........................................................................................................192

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

Referencias.............................................................................................................193

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

Introducción
Los algoritmos están ordenamos de acuerdo a su complejidad. Los ejercicios que
tienen un asterisco al comienzo son ejercicios tomados en alguna prueba o examen.

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
3. https://www.slideshare.net/angenio2/programacin-algoritmos
4. https://www.slideshare.net/angenio2/programacin-estructuras-de-control
5. https://www.slideshare.net/angenio2/programacin-introduccin-a-java
6. https://www.slideshare.net/angenio2/programacin-1-introduccin-a-c
7. https://www.slideshare.net/angenio2/programacin-tipos-de-datos-java
8. https://www.slideshare.net/angenio2/programacin-1-tipos-bsicos-de-datos-
en-c
9. https://www.slideshare.net/angenio2/programacin-estructuras-de-datos
10. https://www.slideshare.net/angenio2/programacin-1-estructuras-de-datos-
en-c
11. https://www.slideshare.net/angenio2/programacin-funciones
12. https://www.slideshare.net/angenio2/programacin-1-funciones-en-c
13. https://www.slideshare.net/angenio2/programacin-1-cadenas-en-c
14. https://www.slideshare.net/angenio2/programacin-bsquedas-y-
ordenamientos

Cualquier comentario, duda o sugerencia con respecto a los ejercicios o las


presentaciones 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

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


comandos

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

b) C#

c) Fortran

d) DOS

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

a) 10

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

b) 65

c) 97

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

d) 126

4. En un lenguaje débilmente tipado

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

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

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

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

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

a) Ada

b) C

c) Fortran

d) Java

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

8. Pregunta

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.

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

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

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

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

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.

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


representar los algoritmos que conozca. Dé un ejemplo sencillo de algoritmo
indicando qué es lo que hace.

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


Descríbalos.

6. ¿Qué es un algoritmo?

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


que permiten realizar una actividad mediante pasos sucesivos que no
generen dudas a quien deba realizar dicha actividad.

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

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

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

d) Las anteriores respuestas no son correctas.

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

a) Secuencia de pasos

b) Secuencia de instrucciones

c) Produce un resultado deseado

d) Es finito

e) No siempre se alcanza un resultado

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

5. Algoritmo para calcular el volumen de una esfera

6. Algoritmo para calcular el IVA de una compra

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

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)

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

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

12. Algoritmo para convertir un número de bits a bytes, KB, MB y GB. Vea la
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


cartesianas 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
catetos de un triángulo rectángulo dados los valores de la hipotenusa y uno
de los 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

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

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

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

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

29. Algoritmo para pasar coordenadas polares a cartesianas

30. Algoritmo para pasar coordenadas cartesianas a esféricas

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

Diagramas de flujo
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 problema

a) Verdadero

b) Falso

3.

Pseudocódigo
1. * Describa qué es un pseudocódigo. Dé un ejemplo sencillo (explique qué
hace el algoritmo del ejemplo).

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

a) Verdadero

b) Falso

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

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

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

Codificación
1. En el contexto de los diferentes tipos de errores que existen al momento de
codificar y ejecutar un programa. Si en un lenguaje compilado usted pudo
realizar 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

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

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


escritorio 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


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

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

promedio 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


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

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 utilizar para resolver el problema?

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 resolviera 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 menos la edad de la persona en años. Asociaciones médicas recomiendan
mantener 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
mencionado. Calcular el rango seguro de latidos por minuto usando la edad
de una persona como dato de entrada.

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


comprende 40 horas. Por cada hora trabajada dentro de esas 40 horas un
empleado 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 salario 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
capacidad se conoce (es dada por el usuario). Considerar que el disco duro está
lleno de informació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 algoritmo con un diagrama de flujo y pseudocódigo; además, realice

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

las pruebas de escritorio 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, 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
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 entre dos puntos (x1, y1) y (x2, y2) es

(1)

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

(2)

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


y1) y B(x2, y2) dados.

* Métricas Lp
Tanto la distancia euclidiana como la de Manhattan son casos particulares de las
denominadas 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
distancia 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 variables β 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
euclidiana, la distancia de un punto a una recta es la distancia más corta entre ese
punto y un punto de una línea o recta. Sean A un punto y D una recta (vea la
figura 1), se define la distancia entre A y D como la distancia mínima entre A y un
punto M de 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.


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.

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 perpendicular al segmento AB (vea la figura 2). El punto de intersección D
tiene las coordenadas

x = x1 + u(x2 – x1)

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

y = y1 + u(y2 – y1)

donde u se obtiene de

(6)

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


Desarrolle un algoritmo que calcule la distancia de un punto a un segmento de
recta. 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 algoritmo que permita hacer el cálculo.

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

Cálculo de potencia
Se desea calcular la potencia eléctrica de circuito de la figura 3. Realice un
diagrama de flujo y el pseudocódigo que representen el algoritmo para resolver el
problema. Considere que: y .

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
conociendo las longitudes de sus tres lados a, b y c (vea https://goo.gl/OEybZb):

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

(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 verificar el correcto funcionamiento del algoritmo.

Hexágono regular
• Desarrolle un algoritmo que dadas las longitudes de un hexágono regular,
calcule 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.

Á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

debiendo tomarse el valor absoluto del determinante.

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

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


de sus vértices.

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


Proponga un algoritmo para calcular la distancia recorrida (m) por un móvil que
tiene 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


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

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


tres incógnitas.

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

* Vuelto/cambio de una compra


Partiendo de una cantidad de dinero menor a un dólar que se tiene que dar de
cambio (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


Partiendo de una cantidad de tiempo medida en segundos, calcular el número de
semanas, 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
(at1seg) y minutos (at2min) respectivamente.

1. Se desea saber el tiempo total utilizado por el primer atleta en horas


(at1horas), minutos (at1min) y segundos.

2. Se desea saber el tiempo total utilizado por el segundo atleta en horas


(at2horas), minutos y segundos (at2seg).

Transformación de pies a metros


Dada una cantidad expresada en pies y otra en metros, determinar la suma pero
convertida 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 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.

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


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

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

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


descuento aplicado y el total a pagar de la compra.

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
calificaciones fueron dadas sobre 20 y las tres tienen la misma ponderación)

• 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


calificación final está dada sobre 20.

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


calificación final está dada sobre 30.

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


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

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


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

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

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.

* Cálculo de la edad de una persona


Realice un algoritmo que determine aproximadamente (i.e., asuma que todos los
años tienen 365 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. Realice el diagrama de flujo y pseudocódigo del programa; además,
verifique la validez del 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
convierta a grados fahrenheit.

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

Área y volumen de una esfera


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

Longitud y área de un círculo


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

Solución de ecuaciones de segundo grado


Dada la ecuación de segundo grado calcular las raíces o ceros de
la función. Vea la ecuación 26.

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

Intercambio de valores de variables


1. Pida al usuario ingresar dos números. El primer número se ingresará en la
variable var1 y el segundo número se ingresará en la variable var2. Diseñe
un algoritmo 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 ; 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

◦ 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

◦ 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


variables.

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
variables queden de la siguiente manera:

• 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

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

• var4 debe contener el valor de la variable var1

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


variables.

Multiplicación de polinomios
Dados dos polinomios de segundo grado de parte del usuario, calcular la
multiplicació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


Elaborar un algoritmo que pueda calcular el logaritmo de un número en cualquier
base. Vea la ecuación 27.

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

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
calcule el tiempo que se demoran en terminar la misma obra si trabajan juntas.

29
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
encontrar en https://goo.gl/OMZYqA.

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

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


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

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


computadora?

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

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

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

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

a) if

b) while

c) for

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

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


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

a) if

b) for

c) while

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


bloque de acciones?

a) if

b) for

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

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


acumulador es un caso particular de contador o que un contador es un caso
particular de acumulador? Explique su respuesta.

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


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

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


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

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

a) un bucle (lazo) for

b) un bucle (lazo) if

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

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

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

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

c) Una sentencia que permite ejecutar un bloque aislado de código varias


veces 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
x <- 1
z <- 0
Mientras x <= 10 Hacer
y <- x * x
Escribir y
z <- z + y
x <- x + 1
FinMientras
Escribir z
FinAlgoritmo
15. * ¿Cuál de los siguientes algoritmos imprime en pantalla lo que está a
continuación?
*
*****

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

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

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

Para i<-10 Hasta 100 Con Paso 10 Hacer


Si b1 = 1 Entonces
Si b2 = 1 Entonces
Escribir "**";
b2 <- 0;

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

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

Mientras c1 <= 10 Hacer


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

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

FinPara
Para i <- l Hasta 1 Con Paso -1 Hacer
cont <- ""
l <- l-1
Para j <- l Hasta 1 Con Paso -1 Hacer
cont <- cont+"*"
FinPara
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:

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


comportamiento iterativo que utilizando un while.

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


comportamiento iterativo que utilizando un for.

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


para obtener el mismo comportamiento iterativo que utilizando un for.

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

18. * ¿Qué muestra el siguiente algoritmo?


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

35
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
Mostrar i - 1;
i = i + 1;
FinPara
FinProceso
21. ¿Qué muestra el siguiente algoritmo?
Algoritmo WhatsTheOutput
n = 5
Mientras n>0
Si (n mod 2) = 0
suma = suma - 1
FinSi

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

36
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

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;
b1 <- 1;
Para i <- 10 Hasta 100 Con Paso 10 Hacer
Si b1 = 1 Entonces
Escribir “*”;
b1 <- 0;
Sino
Escribir “*****”;
b1 <- 1;
FinSi
FinPara
FinProceso
23. * ¿Qué muestra el siguiente algoritmo?
Algoritmo misterioso
Definir c1, c2 Como Entero;
Para i <- 8 Hasta 0 Con Paso -2 Hacer
c1 <- -1;
Repetir
Escribir Sin Saltar "X";
c1 <- c1 + 1;
Hasta Que c1 >= i

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

Escribir " ";

37
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
denominar también estructuras de decisión, condicionales o alternativas.

a) Estructuras selectivas
b) Estructuras simples
c) Estructura secuencial
d) Estructuras complejas
25. Ejecuta una determinada acción cuando se cumple una determinada
condición.

a) For

b) Do-while

c) Repeat-until

d) If-then

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

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.

a) Arreglo

b) Array

c) Ciclo

d) Bandera

e) Contador

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

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

a) Array

b) Contador

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

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
tener todos sus elementos de tipo entero, etc.

a) Arreglo

b) Contador

c) Ciclo

d) Array

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


Algoritmo valorDeI
i <- 1;
Leer n;
Mientras i < n Hacer
i <- i + 1;
Fin Mientras
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

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


uno en cualquier otro caso

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

d) Las anteriores respuestas no son correctas

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


Algoritmo misterioso
a = 0
b = a+10
Según b Hacer
0:
Mientras b > a Hacer
Escribir a
b = b + a
Fin Mientras
10:
Si a = 0 Entonces
Escribir b + 11
b = b + a
FinSi
11:
Escribir '11'
De Otro Modo:
Escribir a
Fin Según
FinAlgoritmo
33. * ¿Cuál es el resultado de ejecutar el siguiente algoritmo? ¿Cuál sería el
resultado si se reemplaza la primera instrucción (fila = 5) por fila = 4?
Algoritmo misterioso
fila = 5
Mientras fila >= 1 Hacer
columna = 1
Mientras columna <= 10 Hacer
Si (fila Mod 2) = 0 Entonces
Escribir Sin Saltar "<"
Sino
Escribir Sin Saltar ">"
FinSi
columna = columna + 1
FinMientras
fila = fila - 1
Escribir ""
FinMientras
FinAlgoritmo

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

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


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

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

36. * ¿Cuál de los siguientes algoritmos NO hace lo mismo que los otros dos?

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


repetición. La instrucción do-while es similar a la instrucción while, la
diferencia es 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

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

42
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

b) Realizar la prueba de escritorio

c) Mostrar cual sería la salida en pantalla

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

40. Pregunta

Estructura de decisión IF

Miscelánea
1. Dados tres números indicar si cada uno es par o impar. Además, indicar si
todos los números son pares, si son impares o si están “mezclados” (no todos
son pares ni todos son impares).

2. Mostrar un menú con las opciones Archivo, Buscar y Salir. En caso de que
el usuario no indique ninguna de las opciones, se debe mostrar un mensaje
de error.

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


descendente o sin ningún orden.

4. Escriba un programa para ingresar los lados de un triángulo y verificar si es


un equilátero, isósceles o escaleno.

5. El usuario ingresa 3 números que representan las longitudes de los lados de


un triángulo. Indicar si se trata de un triángulo rectángulo.

6. Escriba un programa para verificar si los lados ingresados corresponden a un


triángulo.

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

7. Escriba un programa para verificar si los ángulos de los vértices de un


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

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

9. Escriba un programa para ingresar un número y verificar si es divisible para


5 y para 11.

10. Elabore un algoritmo que permita solucionar el siguiente enunciado: se


ingresan 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. Represente el algoritmo a través de un diagrama de flujo,
pseudocódigo; realice la prueba de escritorio.

11. 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
adscritas 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 jubilación por antigüedad adulta deben tener 60 años o más y una
antigüedad en su empleo de 25 años o más. Determinar en qué tipo de
jubilación quedará adscrita una persona.

12. Pregunta

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

Número par o impar


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

Número nulo, positivo o negativo


Escriba un algoritmo que indique si un número dado es positivo, negativo o nulo
(i.e., igual a cero).

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

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
transforma en nota alfabética según la siguiente tabla:

Nota Nota
numérica 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.

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


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

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

Aritmética básica con 3 números


• Escriba un algoritmo que dados tres números indique si el tercero es el
resultado de la suma del primero y el segundo.

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


resultado 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


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

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


de la división entre los dos primeros: 1) el primero para el segundo y 2) el
segundo para el primero. Valide su algoritmo para que se evite un error de
división para cero, mostrando, antes de que se dé dicho error, que el divisor
es cero.

* Incentivo por producción


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 nos muestre o nos diga si el
operario recibirá incentivos 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.

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

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

los números ingresados fueran: 14, 19, 14, 16, 19. El resultado debe ser: “El
menor valor ingresado fue 14 y corresponde al 3° nú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
Para un tiro realizado determine el puntaje alcanzado aplicando el factor que le
corresponde.

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 fracción de hora cuando haya pasado de 5 minutos. Diseñe un programa
que determine 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
cifras (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 deberá ser 0018. Si el número ingresado no fuera correcto debe imprimir
un mensaje de error.

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

Promoción en una papelería


En una Librería han puesto en oferta la venta de cuadernos al por mayor,
obsequiando lapiceros Lucas, Cross y/o Novo dependiendo de la cantidad de
cuadernos comprados, 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
cuadernos.

• Compra no menos que 36, obsequio: 3 Novo por cada 4 cuadernos.


Adicionalmente 1 Lucas y 1 Cross.

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

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
(pagoSinInteres). Los datos que se conocen son: saldo anterior (saldoAnt) del
cliente, monto de las compras que realizó y el pago que depositó en el corte
(abono) anterior (corteAnt). Para calcular el pago mínimo se debe considerar 15%
del saldo, y para no generar intereses corresponde 85% del saldo. Considere que
este saldo (actual) debe incluir 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 anterior) menos del pago mínimo. Realice el algoritmo
correspondiente y represéntelo mediante el diagrama de flujo y pseudocódigo.

Ordenamiento de números
• 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


usuario.

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

Restricción de ingreso
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,
consonante, número u otro.

Conversión de unidades de masa


Dada la masa expresada en Kg transformar a otra unidad de acuerdo a un menú.
El menú tiene las siguientes opciones:

1. Hectogramos

2. Gramos

3. Decigramos

4. Centigramos

5. Miligramos

Mayor y menor de 10 números


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

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

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

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


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

4. Una empresa tiene N trabajadores, a cada uno de ellos se le paga un sueldo


según las horas trabajadas a cierta tarifa por hora. Además a cada
trabajador cuyo sueldo superó los $600 se le descuenta 10% por concepto de
impuesto a la renta. Se desea saber cuántos trabajadores gana más de $600,
cuántos ganan 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


precio de la entrada depende de la tribuna: tribuna norte y sur cuesta $25,
tribuna este cuesta $45 y tribuna oeste cuesta $65. Diseñe un algoritmo que
controle 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.

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á
“Febrero”, etc.

51
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
información:

• Acuario: enero 21 - febrero 20


• Piscis: febrero 21 - marzo 20
• Aries: marzo 21 - abril 20
• Tauro: abril 21 - mayo 20
• 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
• 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).
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%.
• 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%.
• 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%.

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

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

Estructura de repetición WHILE

Miscelánea
1. 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 promedio de todos los factoriales de los números
pares comprendidos entre esos dos números ingresados. Mostrar la suma y el
promedio.

Se pide representar el algoritmo a través del diagrama de flujo,


pseudocódigo y realizar 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.

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.

2. Se sabe que la media geométrica y la media aritmética se calculan mediante


las siguientes fórmulas:

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

• MedA = (num1 + num2 + num3 + ... + numN) / N

Desarrolle un algoritmo que lea N valores, calcule ambas medias y que


imprima la que sea menor.

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


interé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?

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


ejecutar el siguiente algoritmo:
Algoritmo misterioso
Definir suma, i, j Como Entero;
Para i <- 1 Hasta 4 Con Paso 1 Hacer

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

Para j <- 3 Hasta 0 Con Paso -1 Hacer


suma <- i * (10^i) + j;
Escribir Sin Saltar suma, " ";
Fin Para
Escribir " ";
Fin Para
FinAlgoritmo
5. * Haga la prueba de escritorio e indique cuál es el resultado en pantalla de
ejecutar el siguiente algoritmo:
Algoritmo misterioso
n = 7;
Para i = 0 hasta n Con Paso 1
Para j = n-i hasta 1 Con Paso -1
Mostrar Sin Saltar "#";
FinPara
Mostrar "";
FinPara
FinAlgoritmo
6. Pregunta

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

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 entre 1 y 100,
inclusivo.

Acumulador del 1 al 100


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

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

Contador de números impares


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

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

Proceso SumaDeMultiplosDeN
acu<-0

Escribir 'Ingrese el límite inferior (m)'


Leer m
Escribir 'Ingrese el límite superior (w)'
Leer w
Escribir 'Ingrese n'
Leer n

Para i<-m Hasta w Con Paso 1 Hacer


r<-i MOD n
Si r=0 Entonces
acu<-acu+i
Fin Si
Fin Para

Escribir 'Suma: '


Escribir acu
FinProceso

Suma y promedio de n números


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

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.

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

Mayor y menor de una serie de números


1. Imprimir el mayor de una serie de cinco números ingresados por el usuario.

2. Imprimir el menor de una serie de cinco números ingresados por el usuario.

3. Preguntar al usuario cuántos números va a ingresar. Leer los n números.


Imprimir 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 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
escolar entre 6 y 18 años.

• 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


familiar.

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


cuando el usuario ingresa un valor incoherente; si se ingresa un valor incoherente,
el programa 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 que hay algunos productos que se les impone el 14% del IVA. El programa
deberá tener 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.

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.

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

Repetición de series
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 números desde m a w.

Encuesta a familias
Realice un programa que a través de la computadora se desea hacer la siguiente
encuesta:

• Tienen televisión o no tienen. Contar los que tienen y los que no tienen.

• Es en color o no es en color. Contarlos.

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

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

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

Combinatoria
El número de combinaciones que podemos formar tomando m elementos de un
conjunto con n elementos es:

(9)

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


combinatoria. Hay que tomar en cuenta que el valor de n ha de ser mayor o igual
que m (validar). Puede comprobar la validez de su programa introduciendo los
valores n=15, m=10; el resultado es 3003.

Simple random walks


Random walks (https://goo.gl/k4SwIu) es una formalización matemática de la
trayectoria 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
algoritmo 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.

* 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 longitudes entre 1 y 20 (validar). Por ejemplo, si su programa lee un tamaño de
5, debe imprimir
*****
* *
* *
* *
*****

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

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

Triángulo de Pascal
El triángulo de Pascal es una representación de los coeficientes binomiales
ordenados en forma triangular. Su construcción está relacionada con los
coeficientes binomiales según la regla de Pascal. Si

entonces

para todo entero positivo n y todo entero positivo k entre 0 y n (la fórmula para
calcular combinaciones está en la ecuación 9).

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 situadas horizontalmente (1 + 1), y el resultado (2) se escribe debajo
de dichas casillas; el proceso continúa escribiendo en las casillas inferiores la
suma de las dos cifras situadas sobre ellas (1 + 2 = 3), etc.

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

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


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

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

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


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

Serie del binomio


Siempre que -1<x<1, el miembro de la izquierda de la ecuación 10 se puede
aproximar tanto como se quiera tomando un número suficientemente grande de
términos (n) en el desarrollo de la derecha:

(10)

Desarrolle un algoritmo para hacer la aproximación de (1+x)n hasta que el error


sea despreciable (use su propio criterio). Valide el número x. Para más información
vea el Álgebra elemental moderna (González and Mancill, 2009, chap. 15).

Interés fijo anual


Un cliente de un banco deposita equis cantidad de dólares cada mes en una cuenta
de ahorros. La cuenta percibe un interés fijo durante un año de 10% anual. Realice
un algoritmo para determinar el total de la inversión final de cada año en los
próximos N años.

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

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

Promedio de edad en escuela


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

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

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
calcule el tiempo que se demoran en terminar la misma obra si trabajan juntas.

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

• Introducir una frase por teclado. Imprimirla en el centro de la pantalla.

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

Series y sumatorias

• Sume los primeros 100 números de .

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

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


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

Triángulo de números
Dado un número n, visualizar un triángulo de la siguiente manera:
Con
1
2 3
4 5 6
7 8 9 10

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

Número de días entre dos fechas


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

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

Estructura de repetición DO-WHILE

Miscelánea
1. 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.

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


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

3. El número ingresado puede tener cualquier número de dígitos y debe ser


positivo (validar).

4. El promedio ponderado se calcula en dos pasos:

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


asignaturas 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


pueden llevar un número variable de asignaturas.

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


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

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

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

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
5. Indique cuál es el resultado de la ejecución del siguiente algoritmo:
Algoritmo misterioso
fila = 5;

Mientras fila >= 1 Hacer


columna = 1;

Mientras columna <= 10 Hacer

Si (fila Mod 2) = 0 Entonces


Escribir Sin Saltar “<”;
Sino
Escribir Sin Saltar “>”;
FinSi

columna = columna + 1;
FinMientras

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

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

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

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
WHILE para realizar las iteraciones.

Acumulador del 1 al 100


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

Contador de números pares


Hacer un programa que imprima en pantalla los números pares del 1 hasta el 10 y
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
carácter X/x (mayúscula o minúscula). Cada vez que se ingrese un carácter,
transformar su código ASCII a binario y mostrar los 1s con - (guiones) y los 0s con
. (puntos). A continuación se muestra un ejemplo
h
104: --.-...
O
79: -..----
l
108: --.--..
A
65: -.....-
x

Ingreso de binarios
Hacer un algoritmo que sólo nos permita introducir 0 o 1. Si se ingresa un número
diferente, el programa termina.

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

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úmero igual o menor a cero, el programa termina.

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

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.
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
pares e impares. Haga una versión utilizando while y switch; y otra versión
utilizando while e if.

Contador de familias según número de miembros


Realice un programa que lea el número de miembros de familias. El programa deja
de leer números cuando se ingresa un número negativo o menor a cero. Antes de
terminar, el programa presenta la cantidad de familias que tiene un miembro, dos
miembros, tres miembros, cuatro miembros, cinco miembros y las familias que
tienen más de seis miembros.

67
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, UUUUU. No utilice más de una estructura de control FOR, ni más de
dos estructuras 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.

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
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
ingrese 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 positivos (excluido él mismo) que son divisores del número. El primer
número perfecto 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 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;
suponga que el número ingresado siempre es entero) y muestre en pantalla si

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

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

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


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:
Número: 5432
Número separado:
2 unidades
3 decenas
4 centenas
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):
Número: 5432

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

Cálculo de comisiones

Ordenamientos
• Proponga un algoritmo para ordenar ascendente y descendentemente dos
números.

• Proponga un algoritmo para ordenar ascendente y descendentemente tres


números.

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

Juego: adivina el número


Desarrolle un juego simple que pida al usuario que adivine un número en 10
intentos. El juego termina cuando se haya adivinado el número o cuando se hayan
agotado todos 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].

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


Utilice una función para generar números aleatorios enteros en el rango [1, 6] para
simular el resultado del lanzamiento de un dado (e.g., en PseInt, Azar()). Realice
“lanzamientos” hasta que tres veces seguidas salga el mismo número. Una vez que
se terminen 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 horizontales 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 debería ser:
Tabla de frecuencias
1 4
2 3
3 3
4 4
5 3
6 3
Gráfico de barras
1 ****
2 ***
3 ***
4 ****
5 ***
6 ***

Series y sumatorias
1. Hallar la sumatoria de la serie

1 http://pseint.sourceforge.net

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

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

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


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

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
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
segundo. Haga versiones con todas las estructuras de repetición que conozca.
Luego de desarrollar este algoritmo revise la Miscelánea de la subsección
Estructura de repetición FOR (página 76) 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
multiplicando 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 mayor que un cierto límite dado (por ejemplo 133 para la
progresión que se presenta aquí).

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

* 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
sucesión, presentando en pantalla cada uno de los términos. El programa
terminará después de presentar un término mayor que un cierto límite dado
(por ejemplo 33 para la serie que se presenta aquí).

• 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

, (11)

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


0.001. El error aproximado está dado por

(12)

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

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

(13)

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

Calcule una aproximación del logaritmo natural de con un error aproximado


(i.e., igual o menor) de 0.0001. Para saber qué es el error aproximado vea la
ecuación 12.

* Aproximación del arco seno


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

Realizar lo siguiente:

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


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

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


factorial. Esto significa que debe desarrollar los algoritmos para realizar esos
cálculos.

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

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


Mientras.

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


algoritmo que usted proponga debe mostrar el valor en radianes y en grados
sexagesimales. 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) 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
Angel Vázquez-Patiño Universidad de Cuenca

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
Segundo número: 1 Segundo número: 2

1 1 2 2
111 1 222 8
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 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 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
Segundo número: 1 Segundo número: 2

1 1 2 2
111 3 222 6
11111 5 22222 10
1111111 7 2222222 14
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ú.

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

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

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

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

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

3. Terminar el Algoritmo

Tabla de multiplicar de un número entre 0 y 10


Dos versiones: while y for.

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

Estructura de repetición FOR

Miscelánea
1. * Realice la prueba de escritorio del siguiente pseudocódigo e indique cuál es
la salida en pantalla del mismo.
Algoritmo misterioso
Definir c1, c2 Como Entero;
Para i <- 8 Hasta 0 Con Paso -2 Hacer
c1 <- -1;
Repetir
Escribir Sin Saltar '*';
c1 <- c1 + 1;
Hasta Que c1 >= i
c1 <- 8 - i;
c2 <- 0;
Mientras c2 < c1 Hacer
Escribir Sin Saltar '0';
c2 <- c2 + 1;
Fin Mientras
Escribir ' ';
Fin Para
FinAlgoritmo
2. 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.

3. 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.
Siempre el usuario ingresa al menos un valor diferente a cero.

4. Desarrolle un algoritmo que pregunte una contraseña, el usuario sólo tiene


derecho a 3 intentos. Cuando el usuario escriba la contraseña correcta se
imprimirá "¡Enhorabuena!" y terminará el algoritmo. En caso de no escribir
la contraseña correcta se imprimirá “Lo siento, contraseña equivocada”. Si se
cumplen los 3 intentos y el usuario no escribe la contraseña correcta se
imprimirá “Oportunidades Agotadas” y finaliza la ejecución del algoritmo.

5. 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, verde y azul). Conociendo el último dígito de la placa de cada

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

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
termina de registrar autos cuando se ingresa una placa xxx. Todos los días
se presenta al menos un automóvil a revisión.

6. 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 bajaron. Desarrolle un algoritmo que informe a cada persona si subió o
bajó de peso y qué cantidad de Kilos.

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

8. 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 hará descuento alguno, si es verde se le hará un 10% de descuento, si es
amarilla un 25%, si es azul un 50% y si es roja un 100%. Determinar la
cantidad final que el cliente deberá pagar por su compra. Se sabe que sólo
hay bolitas de los colores mencionados.

9. Se leen los nombres, edad y sueldo de 5000 personas y se desea saber el


monto total que la empresa pagará a las personas que son mayores de 35
años y que perciben un sueldo mensual mayor o igual a $500.

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

10. 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
obtuvieron utilidad neta superior a los $50000 mensuales.

11. 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 error (lectura 9 y 9).

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

2 4 8

3 9 27

4 16 64

5 25 125

13. * Desarrolle un algoritmo que muestre el tiempo (en formato 24h00)


segundo a segundo desde 00:00:00 hasta una hora (con sus minutos y
segundos) dada 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 71.

14. Desarrolle un algoritmo que reciba un número entero positivo (validar) y


que retorne un nuevo número con sus cifras invertidas.

15. Desarrollar un algoritmo que realice lo siguiente:

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

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

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
x
x
xxxxx
x
x
d) El algoritmo termina cuando se haya dado lo del literal b y c.

16. 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úmero 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 91. El signo zodiacal se calcula en base a la siguiente información:

• 21/marzo - 20/abril Aries


• 21/abril - 20/mayo Tauro
• 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
• 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

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

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

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

N-ésimo término a mostrar: 7


Término: 24
• Pregunta

Menú: media, mayor y menor


Implemente un algoritmo que muestre el siguiente menú:
Menú

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

Opción [1-5]:
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 mayor o el menor de los números ingresados (con al menos un número
ingresado ya se puede usar las opciones 2-4). Una vez que escoge una de las
opciones 1-4 y realiza la acción pertinente, debe siempre volver al menú. La
ejecución se termina si y sólo si se escoge la opción 5.

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

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ú:
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
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
mensaje al usuario notificando esa situación. Si hay saldo suficiente, se resta el
valor ingresado al saldo. Si el usuario elige hacer un depósito (opción 1 del menú)
se solicita un valor y ese valor se suma al saldo. Al final de cada transacción se
vuelve al menú. La opción 3 del menú muestra el saldo que se tiene en ese
momento. La opción 4 termina 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 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 positivos (validar). El algoritmo debe terminar inmediatamente
después que encuentra una de las posibles soluciones. Además, se debe mostrar un
mensaje si no es posible factorizar el trinomio.

Ejemplo

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

Salida:

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.

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

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. Finalmente, 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 continuación se muestra un ejemplo de ejecución (así exactamente debe
mostrar los resultados):
Número a analizar: 27
¡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
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
*******************************************************
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

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

(14)

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


0.0001. El error aproximado está dado por

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

(15)

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


sumando n-1 términos.

* Carrera de caballos
Simular una carrera de caballos. Pueden participar 2, 3, 4 o 5 caballos (validar).
En cada turno un caballo puede avanzar dos o tres metros pero también puede no
avanzar 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 retroceder un metro, se entiende que el caballo se queda en el punto
de partida (i.e., no sigue retrocediendo más atrás del punto de partida). El vídeo
Carrera de caballos1 (Vázquez-Patiño, 2016) muestra la simulación con cinco y dos
caballos2. El siguiente resultado muestra un instante de la carrera de cinco caballos
en donde el quinto caballo queda a cuatro metros del punto de partida luego de
haber retrocedido un metro.
**********************************************************
Turno: caballo 5
>
Metros avanzados por el caballo 5: -1
**********************************************************
------------------------
Caballo 1 X
------------------------
------------------------
Caballo 2 X
------------------------
------------------------
Caballo 3 X X X X X X
------------------------
------------------------
Caballo 4 X X X X X
------------------------
------------------------
Caballo 5 X X X X

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

83
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 = 13 + 53 + 33 = 1 + 125 + 27 = 153; 9474 = 9 4 + 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 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


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

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

3) Hipotenusa: 10 Cateto 1: 6 Cateto 2: 8


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


rectángulos.

La diagonal de Cantor
Ejercicio propuesto por René Estrella.

Georg Cantor fue un matemático ruso que es considerado como uno de los padres
de 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 la siguiente tarea.

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
ingresados es como una matriz de n filas (n = número de valores ingresados) por n
columnas (n = número de dígitos de los números). Evidentemente, cada celda de
esta matriz contendrá un dígito decimal (0 - 9). En el ejemplo que se muestra a
continuación n = 4, lo que significa que el usuario ingresó 4 números enteros de 4
dígitos cada uno.
1234
4815
1623
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

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

ilustración, para el ejemplo mostrado arriba, el resultado de una ejecución válida


del algoritmo sería el número entero 2932. La única información que se le deberá
solicitar al usuario será la lista de números enteros a considerar. En particular, NO
se deberá solicitar cuántos números se van a ingresar.

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

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


no camina; 1, camina un paso) y probabilidad P(0) = 1-p , y P(1) = p. Realice un
algoritmo que imprima la trayectoria del caminante aleatorio hasta que haya dado
n pasos (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


Realizar la suma de dos números positivos de hasta 4 cifras, cifra por cifra. No
necesariamente 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
+4794 +5689 + 999
---- ---- ----
6119 6478 1098

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
resultado parcial de la solución. Se debe realizar la solución para el número
indicado.

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

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


izquierda, se separan grupos de dos cifras. El
primer grupo que queda a la izquierda puede tener
1 o 2 cifras. En este caso tiene 1.

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

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

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

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

Estructuras de Datos

Arreglos

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

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
c) Almacenar variables
d) Almacenar constantes

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


orden inverso.

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


cada número.

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


empleados 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


empresa en un arreglo con capacidad máxima para 100 empleados. Imprima
luego un listado de los sueldos superiores al sueldo promedio.

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


determine: a) la nota promedio, b) la mayor nota, c) la menor nota, d) el
número de alumnos que comparten la menor nota y e) el número de
alumnos que 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.

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,

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

el segundo pase a ser el tercero y así sucesivamente (el último pasa a ser el
primer elemento).

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


determine 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. 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:

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

13. Se tiene un arreglo de 15 filas y 12 columnas. Realice un algoritmo que


permita 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 arreglo; y el total de elementos negativos en las columnas de la
quinta a la nueve.

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

14. Para facturar el servicio de energía la empresa eléctrica cuenta con una lista
de usuarios almacenada en un arreglo y las lecturas del mes anterior (en
KW) en un segundo arreglo. Se requiere un algoritmo que lea el costo de
cada KW, tome la lectura actual de cada usuario y la registre en un tercer
arreglo, calcule 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úmeros 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


estudiantes de una escuela. Realice un algoritmo que lea el arreglo y calcule
la calificación promedio del grupo, además, que cuente los estudiantes que
obtuvieron 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 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


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

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

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


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

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


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

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

25. Generar con números aleatorios dos arreglos A y B de 45 elementos cada


uno, sumar el elemento uno del arreglo A con el elemento uno del arreglo B
y así sucesivamente hasta 45, almacenar el resultado en un arreglo C, e
imprimir el 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.

27. Dado un número entero positivo de 10 cifras, desarrolle un programa que


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

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


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
imprimir (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
números se deben almacenar en un arreglo y se deben mostrar el mayor y
menor 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
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
aleatorios enteros en el rango [2, 7]. Genere un tercer arreglo donde se
guarden los resultados de elevar el elemento del primer arreglo al exponente
indicado en el segundo arreglo; los cálculos se hacen con elementos con el

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

mismo número de índice. Muestre los arreglos de manera vertical en tres


columnas, cada una para cada arreglo:
Base Exponente Potencia
arreglo11 arreglo21 arreglo11^arreglo21
arreglo12 arreglo22 arreglo12^arreglo22
arreglo13 arreglo23 arreglo13^arreglo23
arreglo14 arreglo24 arreglo14^arreglo24
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 los dos arreglos de manera vertical (en columnas):
Año Bisiesto
1563 No
4 Sí

Manejo de arreglos
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


arreglo 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
permita el ingreso de n números, cada uno en el rango [10, 100]. Cada vez que un
número 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 pequeño posible para resolver este problema. Muestre el conjunto completo de
valores únicos ingresados después de que el usuario ingrese cada nuevo valor.

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

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

Á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


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


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

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 índice 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 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
2 10
3 5
4 10
5 30

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

6 20

Gráfica
1 *************************
2 **********
3 *****
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 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í mismo y para 1. La criba de Eratóstenes es un método para encontrar números
primos. Esta opera de la siguiente manera:

1. Se crea un arreglo de tipo primitivo booleano con todos los elementos


inicializados con el valor TRUE. Los elementos del arreglo cuyos índices
corresponden a un número primo se mantendrán con el valor TRUE. Todos
los demás 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
elemento con valor TRUE. Entonces, se continúa el proceso con el siguiente
elemento con valor TRUE. Para el índice 2 del arreglo, todos los elementos
más allá del 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, todos los elementos más allá del elemento 3 en el
arreglo, que tengan índices que 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
indican que el índice de ese elemento corresponde a un número primo. Estos
índices deben ser visualizados. Una animación del proceso se puede encontrar en

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

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
primos entre 2 y 1000. Ignore los elementos con índices menores que 2.

Algoritmo de Havel-Hakimi
Implemente una función cuyo parámetro sea un arreglo con una serie de números
enteros 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 corresponda a una serie gráfica. Vea la explicación del algoritmo mediante
el siguiente enlace https://youtu.be/-prrZd_NJqQ.

Matrices

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

1. Cree una matriz de N×M (leer N y M por teclado). Imprima los cuatro
valores 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.

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

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


argumentos) contienen los mismos elementos. La función tiene un tercer
parámetro para indicar si se desea que la función actúe 1) comparando las
dos matrices 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


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

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 un arreglo de M filas y N columnas y que


calcule la suma de los elementos de la diagonal principal.

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


resta de dos matrices de orden M×N.

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.

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

11. Se tiene una matriz de seis filas y ocho columnas y se sabe que se tiene un
elemento 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 elemento).

12. Se tienen dos matrices cuadradas (de 12 filas y 12 columnas cada una).
Realice 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 principal 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


programa para encontrar todos sus elementos negativos y para que los
cambie por un cero. Desarrolle el programa que haga eso.

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

15. Una compañía de transporte cuenta con cinco chóferes, de los cuales se
conoce: 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.


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ómetros que conducen durante cada día de la semana; esa información se
guarda en un arreglo de Nx6. Se requiere un programa que capture esa
información y genere un arreglo con el total de kilómetros que recorrió cada
chófer durante la semana. Al final se debe presentar un reporte donde se
muestre el nombre del chófer, los kilómetros recorridos cada día y el total de
éstos, como 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.

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

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


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

18. Implemente un algoritmo que calcule el valor que se obtiene al multiplicar


entre sí los elementos de la diagonal principal de una matriz de 5 por 5
elementos.

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
valores impares.

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.
Imprima los valores.

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

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


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

-5 0 2
10 11 99
Para que no tenga que ingresar datos en cada prueba que haga de su
algoritmo, 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 mitad de los elementos, caso contrario hacer lo mismo pero dejando sin

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

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.

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


columnas, 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 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
algoritmo, 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


realizadas por sus tres representantes a lo largo de doce meses de sus cuatro
productos, 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.

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.
Sobre esta matriz se pide calcular la media y mediana de cada fila. Los
resultados de la media y mediana deben ser almacenados en arreglos
independientes. Los cálculos de la media y mediana deben ser realizados en
funciones distintas. El programa debe mostrar los resultados de la media y
mediana en funciones independientes.

29. * Desarrolle un programa que, ingresadas por parte del usuario dos
matrices, A y B, de diferentes dimensiones, intercambie los tres mínimos

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

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í sucesivamente. El programa debe mostrar en pantalla las matrices
ingresadas por el usuario y las matrices luego del intercambio.

Por ejemplo, si A y B son:

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

Como sugerencia, usted podría utilizar dos matrices que indiquen las
posiciones 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 B de m×n que sea formada leyendo la matriz en el sentido mostrado
a continuación:

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

← 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á.
Ingresar 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 dicha matriz. Ingresar un número escalar. Multiplicar el escalar por la
matriz y mostrar el resultado al usuario.

Diagonal principal de una matriz


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

* Transpuesta de una matriz


• Pedir al usuario el número de filas y columnas de una matriz que ingresará.
Ingresar dicha matriz. Calcular la transpuesta, guardarla en otra matriz y
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.

Determinante de una matriz


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

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

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

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

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.

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.

El cuadrado latino
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 de la fila anterior un lugar a la derecha. Por ejemplo, es siguiente es un
cuadrado latino 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 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á

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

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.

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:

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


anterior, sino que debe colocarlo en la casilla de la fila posterior e igual
columna.

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


posterior a la última es la primera.

Cadena de ADN
Una cadena de ADN se representa como una secuencia circular de bases (adenina,
timina, 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
sentido horario desde la parte superior izquierda:

A T G C G T A T
Se pide diseñar una función que devuelva true si dos cadenas de ADN, enviadas
como parámetros, coinciden.

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

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
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
=======================
Menú
a. Nivel básico
b. Nivel intermedio
c. Nivel avanzado
d. Salir
______________________
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 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
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

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

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
arriba 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 imprimir la letra I o D o J de manera aleatoria pero sólo se pueden repetir
dos veces seguidas las letras I y D pero no la J (viendo la matriz de izquierda a
derecha y de arriba hacia abajo). Un ejemplo se muestra a continuación:
Z Y X V U
I D J I D

T S R Q P
I I J D J

O N M L K
D D I J I

J I H G F
I J I I J

E D C B A
D I J D D
Para el nivel avanzado se debe imprimir el alfabeto de arriba hacia abajo y de
izquierda 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 continuación:
A F K P U
I D J I D

B G L Q V
I I J D J

C H M R X
D D I J I

D I N S Y

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

I J I I J

E J O T Z
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ásicos del libro de Olaya (2011).

Distancia de tablero de ajedrez


Cuando se utilizar imágenes raster pueden definirse distintos tipos de distancias
considerando 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 único paso para llegar a cualquiera de ellas. Por similitud a la forma en
que uno puede 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.

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 5.a muestra
un ejemplo 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.

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

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


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

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 5). De igual manera,
en ciencias de la información geográfica pueden definirse algunos tipos de distancia
ráster considerando el mismo principio (i.e., número de celdas por las que debe
pasarse para ir de una celda a otra).

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.

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

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 6: Matriz de 8x8 con números enteros aleatorios en el rango [1, 32].
Sólo dos celdas tienen el mismo número.

2. Muestre en pantalla la matriz generada.

3. Calcule la distancia Manhattan entre cada par de celdas que contengan el


mismo número. Como ejemplo vea parte del resultado (2 de los 32 números)
que debería mostrar su programa.
Distancia Manhattan
===================
-------------------------------
Valor: 1
Posiciones: (2, 2), (4, 5)
Distancia Manhattan: 5
-------------------------------
Valor: 2
Posiciones: (1, 1), (5, 1)
Distancia Manhattan: 4

Formación de grupos de trabajo


Con una matriz en donde se tiene como campos el número, apellido 1, apellido 2,
nombre 1 y nombre 2 de cada estudiante, implemente un programa que genere
grupos 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;

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

en ese caso solamente se debe indicar en pantalla cuál es el grupo que tiene menos
estudiantes que el pedido (ver el segundo ejemplo de ejecución).

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


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
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
Grupo 1
1. Julio César Andrade Carchi
2. Carlos Daniel Abad Sigcho

Grupo 2
1. Dayana Isabel Agudo Güiracocha
2. Moisés Santiago Arévalo Angamarca
El siguiente es un segundo ejemplo de ejecución del programa en donde hay un
grupo que tiene menos estudiantes de los pedidos por el usuario:
Número de estudiantes por grupo: 3
Grupo 1
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
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
programa realizado). Por ejemplo, el siguiente es una ejecución del segundo
programa en donde el usuario quiso generar tres grupos:
Número de grupos: 3
Grupo 1
1. Julio César Andrade Carchi
Grupo 2

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

1. Carlos Daniel Abad Sigcho


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


continuación una solución para leer el archivo en el lenguaje de programación Java.
En su programa, para cargar los datos a una matriz (la matriz lista en el código
presentado), 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;
import java.io.FileReader;
import java.io.IOException;
import java.util.Arrays;

public class listaEstudiantes {


public static void main (String args[]) {
String[][] lista = cargarLista("listaEstudiantes.csv", 24);
}

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


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

// separador de campos del archivo csv


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

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

BufferedReader br = null;

try {
br = new BufferedReader(new
FileReader(rutaArchivo));
String line = br.readLine();

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

int i = 0;
while (null!=line) {
String [] campos = line.split(SEPARADOR);
//System.out.println(Arrays.toString(campos));

campos = removeTrailingQuotes(campos, QUOTE);


lista[i++] = campos;
line = br.readLine();
}

} catch (Exception e) {
System.out.println(e.getMessage());
} finally {
try{
br.close();
}catch(IOException e){
System.out.println(e.getMessage());
}
}
return lista;
}

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


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

* Matriz de adyacencia
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
matriz 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 las aristas en las celdas de una matriz bidimensional de
nxn. Cada fila y cada columna representan un vértice del grafo y cada posición

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

representa una arista (o la ausencia de esta) cuyo vértice origen se encuentra en la


fila y vértice final se encuentra en la columna. Las siguientes figuras muestran la
representación gráfica de un grafo dirigido 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:

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últiples 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 el grafo simple es no dirigido. Si G es un grafo simple con n vértices y m
aristas, entonces:

◦ Si G es no dirigido, m≤n(n-1)/2

◦ Si G es dirigido, m≤n(n-1)

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

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 (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
paran, se calcula la suma de los puntos en las dos caras que están hacia
arriba. Si la suma es 7 u 11 en el primer lanzamiento, usted gana (termina
el juego). Si la suma es 2, 3 o 12 en el primer lanzamiento (llamado
“craps”), usted pierde (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 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
siguientes preguntas:

1. ¿Cuántos juegos fueron ganados en el primer lanzamiento, en el segundo


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


lanzamiento, en el tercer lanzamiento, …, en el vigésimo lanzamiento y
después del vigésimo lanzamiento?

3. ¿Cuáles son las probabilidades de ganar en el juego de craps? Nota: debe


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

5. ¿Las probabilidades de ganar mejoran con la duración del juego?

Hormiga de Langton
La siguiente información es tomada de wikipedia (https://goo.gl/6dNIEW).

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

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
hormiga 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
celda cada vez, de acuerdo con las siguientes reglas:

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:

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


matriz como se muestra en la figura 7.

Figura 7: imagen tomada de Wikipedia https://goo.gl/6dNIEW.

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

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

1. Generar solución
2. Ingresar configuración candidata
3. Salir

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

A continuación, se detalla cada una de estas tareas.

1. Generar solución

El programa genera una configuración candidata y verifica si esa configuración


corresponde a una solución. Si este es el caso, muestra la solución en pantalla
simulando un tablero de ajedrez e indicando la ubicación de las ocho reinas. Si la
configuración generada no corresponde a una solución, se descarta y se repite el
proceso, volviéndose a generar otra configuración candidata.

2. Ingresar configuración candidata

Cuando el usuario escoge esta opción se le solicita que ingrese ocho pares de
coordenadas numéricas que indiquen la ubicación de las reinas en el tablero. Cada
coordenada será un número entero en el rango [1, 8], considerando que el par de
coordenadas (1, 1) corresponde a la casilla superior izquierda del tablero y la
coordenada (8, 8) corresponde a la casilla inferior derecha. A continuación, el
programa mostrará la configuración ingresada en forma de un tablero con la
ubicación de las ocho reinas e indicando si se trata de una solución o no. Por
ejemplo, si el usuario ingresa las siguientes coordenadas:
Coordenadas Reina 1: 1, 3
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
Coordenadas Reina 7: 7, 7
Coordenadas Reina 8: 8, 1
La configuración resultante sería la que se muestra en la figura 8, la cual
evidentemente corresponde a una solución del problema.

3. Salir

El programa solamente termina cuando se escoja esta opción.

* Datos de personas
El programa va a almacenar registros en una matriz. Para ello se debe hacer lo
siguiente:

1. Ingreso de campos de los registros

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

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.

Ejemplo
cédula
nombre
apellido
edad
...
Í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
ingrese los registros como cadenas, de la siguiente manera (en base a los campos
puestos 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.

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

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

Si un registro contiene un campo que inicialmente no se consideró, el programa


deberá indicar con una mensaje que el campo no fue encontrado. Por ejemplo, si se
ingresa 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
¡Advertencia! El campo teléfono no existe pero se ingresa el registro.

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


pregunta al usuario por qué campo desea buscar, se busca ese registro utilizando la
búsqueda binaria y se muestran los datos de ese registro. Además, se muestra la
matriz antes y después de cada búsqueda. Por ejemplo:
¿Por qué campo desea buscar?
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.
cédula: 0108562554
nombre: juan
apellido: malo
edad: 25

* Datos de empresas y empleados


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;";
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.

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

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.

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.
3. Listar los empleados de una empresa en particular ordenados de forma
descendente según el salario.
4. Mostrar un listado de empresas con el salario promedio de los empleados de
la misma.

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

• 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
descendente según el salario.

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


forma descendente según el salario.

Empresa: Marcimex

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

Empleado Salario
Juan 1500
Edgar 1200
Pedro 1100
Jaime 900
4. Mostrar un listado de empresas con el salario promedio de los empleados de
la misma. (Tenga en cuenta que los datos pueden tener decimales)

Empresa Salario promedio


Marcimex 1175
Etapa 1300
Elecaustro 916.67

* 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
intervalo [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
condición de que R sea un divisor de la nota máxima posible (20).
4. Generar la matriz de resumen (explicada en el ejemplo).
5. Generar y mostrar el histograma utilizando una matriz.

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

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.

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

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
inferior, el límite superior y la frecuencia de cada rango.

5. Generar y mostrar el histograma utilizando una matriz

#
# #
# #
# # #
# # # #
# # # #
# # # #
1-5 6-10 11-15 16-20

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
encontrar el camino mínimo en grafos dirigidos ponderados. El algoritmo encuentra
el camino 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. Muestre también el diagrama de flujo del algoritmo.

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

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
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 donde fueron declaradas?

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

124
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


bisiesto si es múltiplo de 4 (por ejemplo 1984). Sin embargo, los años
múltiplos de 100 sólo son bisiestos si a la vez son múltiplos de 400 (por
ejemplo, 1800 no fue bisiesto, mientras que 2000 sí lo fue).

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

10. Implemente una función que imprima en pantalla un número dado de


asteriscos indicado en el parámetro recibido. El argumento indica el número
de asteriscos del cateto del triángulo rectángulo que se “dibuja”. Por
ejemplo, para un triángulo rectángulo de cateto 8, se imprimiría en pantalla
*
* *
* * *
* * * *
* * * * *
* * * * * *
* * * * * * *
* * * * * * * *
11. Implemente una función que reciba dos números y que devuelva el número
mayor.

12. Implemente una función que reciba tres números y que devuelva el máximo.

13. Implemente una función que tenga como parámetro un arreglo de números
reales y que devuelva el máximo de los números.

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.

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

15. Implemente una función que reciba dos enteros y muestre todos los números
comprendidos entre ellos (de manera ascendente, desde el número menor
hasta el número mayor), inclusive. Los números pueden ser ingresados en
orden ascendente 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)

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.

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 cará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


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
amigos. Dos números son amigos si la suma de sus divisores (distintos de
ellos mismos) son iguales.

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

27. Implemente una función que calcule el mínimo común múltiplo de tres
números.

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

28. Implemente una función que voltee un número entero positivo dado. Por
ejemplo, si se ingresa 98786, se devuelve 68789.

29. Implemente una función que reciba un arreglo de números enteros y


devuelva el máximo común divisor de esos números.

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 con los 6 números de una apuesta de la primitiva y la segunda con
los 6 números 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 la cantidad de impares ignorados.

33. Implemente una función que reciba una matriz de enteros y un número, e
indique 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 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


arreglo, 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
carácter: 's', 'r', 'm', 'd'). La función devuelve una matriz con los
resultados.

38. Implemente una función que calcule el n-ésimo término de la serie de


Fibonacci. En esta serie el n-ésimo valor se calcula sumando los dos valores
anteriores. Es decir fibonacci(n) = fibonacci(n-1) + fibonacci(n-2), siendo
fibonacci(0) = 1 y fibonacci(1) = 1.

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

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

(torre negra), etc. (P, T, C, A, R, D). La función debe devolver un valor


booleano, que indique si el rey negro está amenazado.

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
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
---------------------------------------------------------------------------
0-50 51-100 101-150 151-200 201-250
---------------------------------------------------------------------------
17 8 10 5 32
---------------------------------------------------------------------------

Histograma
|-----------------------------------------------------------------
0-50 | *******************
51-100 | *********
101-150 | ***********
151-200 | *****
201-250 | ****************************************************
|-----------------------------------------------------------------

Aritmética básica
Visualizar el siguiente menú
1. Suma
2. Resta
3. Multiplicación
4. División
5. Salir

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

Si no se ingresa un número del 1 al 5, se debe mostrar un error que lo indique y


debe pedir el ingreso de una opción válida. Opción 1: suma dos números, el
primero en el rango [-1000, -1] y el segundo en el rango [1, 1000]. Opción 2: resta
dos números, el primero en el rango [-1000, 1] y el segundo en el rango [-1, 1000].
Opción 3: multiplica 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] 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 resultado, luego de visualizarlo, debe elevarlo al cubo, ese resultado, luego de
visualizarlo, 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. 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 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 alto) la función W de Lambert de x se puede calcular con la
siguiente serie de Taylor:

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

Desarrolle un programa que pida los valores de x (cualquier número real) y n


(cualquier 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
desarrollada por usted mismo llamada funcionW. No se pueden usar funciones
predeterminadas 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 indica en la serie de Taylor; para este fin, desarrolle
una función llamada xValido (devuelve 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
Desarrolle un algoritmo para calcular el factorial de un número dado. Este
algoritmo debe tener una función recursiva. Una explicación de funciones
recursivas se encuentra 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
común múltiplo (MCM) de dos números ingresados por el usuario. El programa
deberá manejar un menú con las siguientes opciones.
1. Ingreso de datos (Se pide al usuario que ingrese los dos números)
2. Máximo Común Divisor (Calcula el MCD)
3. Mínimo Común Múltiplo (Calcula el MCM)
4. Salir
Ejemplo:
1. Ingreso de datos
número1: 12
número2: 30

El MCD de 12 y 30 es: 6
El MCM de 12 y 30 es: 60

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

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.

131
* 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 valores de f(x) y f'(x) (i.e., la derivada de la función). Las aproximaciones del
cero de la 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. 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.

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 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 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 en-
tre las aproximaciones x(k+1) y x(k) (i.e., la primera fila no debe tener más de
4 columnas).

En la segunda fila de la matriz se debe devolver la secuencia de


aproximaciones x(0), x(1), x(2), …, x(n).

Por ejemplo, la función podría devolver una matriz (los valores no


necesariamente reflejan la salida de una ejecución del programa; sólo se
pretende aclarar el número de columnas que tendría cada fila)
1.023 0.002 31.000 0.001
-0.010 2.100 1.200 1.010 0.900 ... 1.019 1.022 1.023
Si en algún momento el valor de f'(x) llega a ser cero, escribir en pantalla
“La derivada de la función fue cero en m” (m es el valor de x donde se
evaluó la 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


devuelve la función newton(x0, tol, nmax) enviando como parámetro x0
el valor generado por la función valorInicial(). Esta función debe
primero mostrar los valores de la primera fila en forma horizontal (debe
indicar a qué corresponde cada valor) y luego las aproximaciones del cero de
la función (segunda fila) en forma vertical.

Ordenamiento de n números
• 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.

133
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
devuelve el índice (del arreglo original) en donde se encuentra el número
buscado; si no se encuentra el número, la función devuelve -1. Una
explicación de la búsqueda lineal se puede encontrar en la sección 6.2 del
libro de Alcalde Lancharro 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
buscado; si no se encuentra el número, la función devuelve (-1, -1). Una
explicació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
buscado; si no se encuentra el número, la función devuelve -1. Una explicación de
la búsqueda 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 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 (suman 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 jugador 2.

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

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 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
tabulaciones pertinentes que presenten los resultados como se mostró en el
ejemplo de ejecución del programa (i.e., perfectamente alineados).

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

2. Hacer un programa que ingrese una cadena de caracteres y determine el


número de mayúsculas y el número de minúsculas.

3. Sustituir todos los espacios en blanco de una frase por un asterisco.

4. Implemente una función que devuelva una cadena sin los espacios en blanco.

5. Ingresar una frase y reportar cada palabra en una línea diferente.

6. Solicitar el ingreso de los apellidos de dos personas. Mostrar un mensaje


indicando si son iguales o distintos.

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

8. Solicitar el ingreso del apellido, nombre y edad de dos personas como


cadenas (validar que sea una edad correcta entre 0 y 130 años). Mostrar el
nombre de la persona con mayor edad.

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

10. Contar cuántas palabras tiene una cadena. Escribir dos versiones del
programa:

a) Asumir que cada palabra está separada por un sólo espacio en blanco.
b) No se sabe cómo están separadas las palabras: pueden estar separadas
por más de un espacio en blanco.

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

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

12. Ingresar una frase y modificarla convirtiendo el primer carácter de cada


palabra si esta fuera una letra, de minúsculas a mayúsculas.

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

14. 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 aparecer el mensaje “Exceso de a”, si el número de veces que se repite
la o es superior a 5 debe mostrarse “Exceso de o” y si se repite más de 3
veces la letra e debe mostrarse “Exceso de e”.

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


debe contener frases innecesarias

Resultados

1 letra : 0 palabras
2 letras: 3 palabras
3 letras: 2 palabras
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
b) El carácter asociado al índice 7
c) La subcadena “creeré”
d) El índice que ocupa el carácter ‘x’, desde la izquierda

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

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


correcto 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:
Suponer 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
último 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
ingresado: 1) que no hayan espacios o caracteres diferentes a las vocales
(vocales con tildes o diéresis también), consonantes, o la ñ (u otros
caracteres usados en nombres en español) y 2) que sólo la primera letra del
nombre esté en mayú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 correcta: 1) que no hayan caracteres que no sean
números y 2) verificar que la edad esté entre 0 y 150 años. Mostrar el
nombre de la persona con mayor edad.

22. Invertir las palabras de una cadena. Por ejemplo, si la cadena es “Esta es
una 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 S).

24. Ingresar una cadena de caracteres formadas por números y letras (en ese
orden) y obtenga otra cadena donde aparezca cada letra tantas veces como
lo indique el número que lo precede. E.g. si la cadena es 2w4r5f se debe
obtener la siguiente cadena: wwrrrrfffff.

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

27. Hacer un programa que al recibir como dato una cadena de caracteres que
represente 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 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
forme una tercera cadena intercalando los caracteres de las palabras de las
cadenas recibidas.

30. Implementar una función cuya entrada sea una cadena S y un factor de
multiplicació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.

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


caracteres 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
forma de histograma, e.g.:

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

a 15 ***************
e 8 ********
i 5 *****
o 1 *
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.
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
posició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.
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
tercera.

38. Un grupo de inteligencia militar desea codificar los mensajes secretos de tal
forma que no puedan ser interpretados con una lectura directa, para lo cual
han establecido las siguientes reglas:

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.

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úsculas y minúsculas, signos de puntuación y espacios en blanco.

41. El usuario ingresa una hora como cadena de caracteres; la hora no


necesariamente 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 (siempre primero la hora, segundo los minutos y luego los

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

segundos). El programa 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 escoge de un menú si quiere que n sean segundos,
minutos u horas. Ejemplo, si se ingresa 1:8:04, y se escoge 60 segundos (se
suma 60 segundos a la hora ingresada), 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.
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 palabras de la misma y el número total de palabras que terminan en
vocal. La función de verificación de si termina en vocal o no, debe ser
utilizada para contar el número total de palabras que terminan en vocal. A
continuación se muestra un ejemplo:

Entrada
Ingrese la frase: HolA mundo cruel
Salida
HolA
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


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
cadena, en este caso es obligatorio el uso de parámetros para definir si se
extrae el menor o el mayor. A continuación se muestra un ejemplo de
ejecución del programa:
Ingrese los números separados por comas: 4,5,6,12,13,5,8,7

Menú

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

1. Promedio
2. Máximo
3. Mínimo
4. Salir

Elija una opción [1-4]: 1


El promedio es: 7.5

Menú
1. Promedio
2. Máximo
3. Mínimo
4. Salir

Elija una opción [1-4]: 2


El máximo es: 13

Menú
1. Promedio
2. Máximo
3. Mínimo
4. Salir

Elija una opción [1-4]: 3


El mínimo es: 4

Menú
1. Promedio
2. Máximo
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 que genere el arreglo suma.

Ejemplo:

Sea A = { ‘2’, ‘0’, ‘1’, ‘2’ } 2 0 1 2

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

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


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

45. Escribir un programa que elimine la k-ésima palabra de una cadena. Debe
escribir una función para realizar esto. La función recoge como parámetros
la cadena 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
cuatro vocales diferentes dado un párrafo. Luego, escribir una función que
recoja 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 palabras en el párrafo con el mínimo de vocales indicado.
Finalmente, edite la función para que recoja un parámetro más que indique
si el número mínimo es de vocales o consonantes; la función devuelve el
número de palabras en el párrafo que tiene mínimo el número de vocales o
consonantes de acuerdo a lo que se 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 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 apariciones, 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.

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.

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

Ejemplo:

permutaciones(“abc”)
imprime: {“abc”, “acb”, “bac”, “bca”, “cab”, “cba”}

51. Ejercicio

* Datos personales
Implemente un programa usando funciones que lea cadenas de caracteres en el
siguiente formato:
Nombres;Apellidos;Profesión;Edad;Lugar de Residencia
Los valores entre punto y comas pueden estar formados por letras, números o
espacios en blanco.

Por ejemplo:
Juan;Pérez Torres;Ingeniero;37;Cuenca
Karen Susana;López Alvear;Economista;32;Loja
El programa debe separar de cada cadena de caracteres, cada valor entre punto y
coma y mostrarlos como resultado en líneas separadas:

Por ejemplo:
Nombres: Juan
Apellidos: Pérez Torres
Profesión: Ingeniero
Edad: 37
Vive en: Cuenca

Nombres: Karen Susana


Apellidos: López Alvear
Profesión: Economista
Edad: 32
Vive en: Loja

Estadísticas de texto
Ejercicio propuesto por René Estrella.

El usuario ingresa un texto. El programa muestra las siguientes estadísticas acerca


del texto ingresado:

1. conteo de vocales

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

2. conteo de consonantes
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
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
estrenada en el año 2000.
El programa muestra:
Vocales: 59
Consonantes: 78
Dígitos: 4
Caracteres especiales: 10
Mayúsculas: 7
Minúsculas: 130
Palabras categorizadas por número de caracteres:
1: 1
2: 5
3: 5
4: 2
5 o más: 14
Total palabras: 27
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.

* Analizador de tweets
Ejercicio propuesto por René Estrella.

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

El objetivo de este ejercicio es escribir un analizador simple de tweets. El dato de


entrada para el programa sería el texto de un tweet y el programa debería mostrar
la siguiente información:

1. Número y lista de cuentas de twitter mencionadas (las cuentas de twitter


empiezan 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
letra, 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
#marcandodiferencia @IGecuador

Resultados
2 cuentas:
eltiempocuenca
IGecuador

3 hashtags:
Cuenca,
Ecuador
marcandodiferencia

Conteo de palabras:
1 letra: 1
2 letras: 3
3 letras: 1
4 letras: 0
5 letras: 2
5+ letras: 7

Eliminación de n-ésima palabra


Ejercicio propuesto por René Estrella.

El usuario ingresa un texto, una palabra y un entero n. El programa elimina la n-


ésima ocurrencia de la palabra en el texto y muestra el texto resultante. No se
considera distinción entre mayúsculas y minúsculas.

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

Ejemplo:

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 consideran 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 3 ra ocurrencia de la palabra en el texto, se
eliminaría la que corresponde a “...el más alto...”, y por lo tanto lo que debería
mostrar el programa es:
El rally se correrá también en Bolivia, específicamente en el extremo sur del
Lago Titicaca, más alto del mundo, y el ya clásico Salar de Uyuni.

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 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
siguientes reglas:

a) Se debe reemplazar cada letra por la siguiente más uno, es decir en lugar
de la “a” iría la “c”, excepto las letras “y” y “z”, que se deberá
reemplazar con la letra “a” y “b” respectivamente.
b) De la cadena resultante en el numeral 1 se deberá remplazar las letras
vocales por los números 0,1,2,3,4, respectivamente.
c) El mensaje resultante debe contener la primera letra de cada palabra del
mensaje en mayúscula.

Se puede usar variables globales y funciones según se necesite, pero es


obligatoria la función ENCRIPTAR que reciba como entrada el mensaje y
devuelva el mensaje encriptado.

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

2. “Una ligera generalización del sistema de cifrado de César permite que el


alfabeto de texto cifrado se desplace k letras, en lugar de siempre [un
número fijo]. En este caso, k se convierte en una clave del método general de
alfabetos 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 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
encriptada.

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
sustitución, página 147) conservan el orden de los símbolos de texto plano, pero los
disfrazan. En contraste, los sistemas de cifrado por transposición reordenan las
letras pero no las disfrazan. En la figura 9 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 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 necesario. El texto cifrado se lee por columnas,
comenzando por la columna cuya letra clave es la más baja.

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

Figura 9: 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


funciones 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 desarrollen (descifrar) en el programa debe tener como parámetros el
texto cifrado y la clave, y debe devolver el texto descifrado.

* Línea de comandos
Simule una terminal que ejecute comandos para operaciones aritméticas básicas
(sumar, restar, multiplicar, dividir) y de información de uso. Los comandos sumar,
restar, 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


comando 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. Luego 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 comando ingresado.”

• Restar num1,num2

Uno se ingresa mediante el teclado el comando restar (cualquier carácter del


comando puede ser minúscula o mayúscula), un espacio y dos (2) números (pueden
ser reales; el separador de decimales es el punto) a restar; todo en una misma
línea. Luego de “dar enter” el resultado en la línea siguiente de la pantalla es

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

Resta: valor de la resta (la resta es num1-num2). Si hay un error en la sintaxis, el


programa debe mostrar un error; por ejemplo si se ingresa restar 1,3,4, el
programa debe decir “Hubo un error de sintaxis en el comando ingresado.”

• Multiplicar num1,num2,num3,…,numN

Uno se ingresa mediante el teclado el comando multiplicar (cualquier carácter del


comando puede ser minúscula o mayúscula), un espacio y la lista de números
(pueden ser reales; el separador de decimales es el punto) a multiplicar; todo en
una misma línea. Luego de “dar enter” el resultado en la línea siguiente de la
pantalla es Multiplicació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 decir “Hubo un error de sintaxis en el comando ingresado.”

• Dividir num1,num2

Uno se ingresa mediante el teclado el comando dividir (cualquier carácter del


comando puede ser minúscula o mayúscula), un espacio y dos (2) números (pueden
ser reales; 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 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


comando puede ser minúscula o mayúscula, o tener la letra i con tilde o sin tilde).
Luego 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
Dividir: num veces
Si el número de veces es 1, debe decir 1 vez (y no 1 veces).

• Salir

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

Uno se ingresa mediante el teclado el comando salir (cualquier carácter del


comando puede ser minúscula o mayúscula) y se termina la ejecución del
programa.

Nota: antes del comando y después de los números que necesita el comando (en
los 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 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


negrita son los comandos (y los respectivos números que necesita el mismo) que se
ingresan por parte del usuario.
sumar 1, 2, 4
Suma: 7
RestaR 3,4
Resta: -1
MultiPlicar 4,5,3,2,4
Multiplicación: 480
Dividir 4,3
División: 1,333333333
ReSTar 5,4
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
Sumar: 1 vez
Restar: 2 veces
Multiplicar: 1 vez
Dividir: 1 vez
Salir

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

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

(que identifica unívocamente a cada registro). Por ejemplo, la siguiente tabla


muestra la información de tres personas (en este caso la cédula es el valor que
identifica unívocamente a cada persona).

Cédula Nombre Apellido Edad

01064634657 Juan Pérez 23

01064636638 Víctor Guzmán 21

01064688644 Pedro Flores 20

Los registros (un registro es el conjunto de valores de una misma persona) se


deben ingresar en forma de cadena. La coma es el separador de valores de los
campos (campo es cada dato del registro: cédula, nombre, apellido y edad) y el
punto y coma es el separador de registros. La información de la tabla del ejemplo
se representaría con la siguiente cadena:
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.


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

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

Cédula: 01064634657
Nombre: Juan
Apellido: Pérez
Edad: 23
Actualización

Se le pide al usuario que ingrese una cédula existente y los nuevos valores del resto
de campos
Cédula: 01064634657
Nombre: Diego
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
registrada.”.

Para este ejemplo, el resultado de la actualización de la cadena que contiene la


información de las personas es:
01064634657,Diego,Sarmiento,25;01064636638,Víctor,Guzmán,21;01064688644,Pedro
,Flores,20;
Eliminación

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

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
Edad: 23

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

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

Listar

Se muestran uno a uno todos los registros de personas


Cédula: 01064636638
Nombre: Víctor
Apellido: Guzmán
Edad: 21

Cédula: 01064688644
Nombre: Pedro
Apellido: Flores
Edad: 20
Promedio de edades

Se calcula y muestra el promedio de las edades de todas las personas que estén en
ese momento en la lista.

154
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
Cervantes Ojeda (2013).

1. Implemente un programa que pida al usuario el tamaño de un arreglo y que


pida sus datos (números reales). Solicitar al usuario un número a buscar
dentro del arreglo dado y que el programa determine si el número está en el
arreglo y, de ser así, en qué posición está.

2. Implemente una función llamada busquedaSecuencial que tenga como


parámetros un arreglo y un elemento a buscar en el arreglo. La función debe
regresar la posición índice del elemento si se encuentra en el arreglo y -1 si
no lo encuentra 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.

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 índice del elemento si se encuentra en el arreglo y, si no se
encuentra en el arreglo, regresar un -1.

5. El siguiente es un programa que le permitirá tener una idea de la eficiencia


de los métodos de búsqueda en cuanto al número de comparaciones
necesarias 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: arreglo de elementos y algoritmo de búsqueda). La función
devuelve la posició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 ejecución en segundos.

b) Genere un arreglo de 21 elementos con números aleatorios enteros en el


rango [-15, 15]. Los números no deben repetirse en el arreglo.

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.

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

Para 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:
================================================
Tabla de comparación para algoritmos de búsqueda
================================================
--------------------------------------------------------
Algoritmo # comparaciones Tiempo [seg.]
--------- --------------- -------------
Algoritmo 1 ## ##
Algoritmo 2 ## ##
... ... ...
--------------------------------------------------------
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úsqueda se debe ir guardando el número de comparaciones y el tiempo
de cálculo utilizado. Finalmente, presente una tabla con estadísticas de
eficiencia (estos datos son empíricos) de los algoritmos y un histograma
para representar 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):
================================================
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
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.]
promedio promedio
--------- --------------- -------------
Algoritmo 1 ## ##

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

Algoritmo 2 ## ##
... ... ...
---------------------------------------------------------------

=======================================
Histograma para comparación de métricas
=======================================
-----------------------------------------------------------------
Algoritmo 1 |
# comparaciones (prom) |▬▬▬▬▬▬▬▬▬▬ ##
Tiempo [seg.] (prom) |▬▬▬▬▬▬▬ ##
|
Algoritmo 2 |
# comparaciones (prom) |▬▬▬▬▬▬▬ ##
Tiempo [seg.] (prom) |▬▬▬▬▬▬▬▬ ##
|
. | . .
. | . .
. | . .
-----------------------------------------------------------------
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

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

1. * Dada la siguiente lista {a, m, c, j, k} después de dos pasadas de un


algoritmo de ordenación, la lista ha quedado {a, c, m, j, k}. ¿Qué algoritmo
de ordenamiento se está utilizando?

a) Inserción
b) Selección
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
evolucionaría dicha lista hasta quedar completamente ordenada de manera
descendente mediante: a) ordenamiento de burbuja, b) algoritmo de
selección y c) algoritmo 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 inserción.

4. Dado un arreglo de números reales, escriba un método que ordene los


elementos 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 forma descendente. Esto es, el arreglo {1,2,3,4,5,6}
quedará como {2,4,6,5,3,1}.

5. Genere un arreglo de 11 elementos guardando en cada elemento un número


entero 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 versiones: una para ordenación ascendente y otra ordenación
descendente. Por ejemplo, si se tuvieran sólo 3 elementos las gráficas serían
las siguientes:
Iteración 0 (elementos sin ordenar):

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

E01 *****
E02 *
E03 **

Iteración 1:
E01 *
E02 *****
E03 **

Iteración 2:
E01 *
E02 **
E02 *****

¡Fin! Los elementos se ordenaron luego de 2 iteraciones.


6. Genere un arreglo de 13 elementos guardando en cada elemento un número
entero 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 versiones: 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.


Implemente 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 devuelve la matriz ordenada de manera ascendente o
descendente con respecto al peso o a la estatura. La función recoge como
parámetros matriz, optOrdenamiento, optVariable, donde optOrdenamiento
indica si es ordenamiento ascendente o descendente (una cadena asc o desc)
y optVariable indica la variable con respecto a la cual se ordena (una cadena
peso o estatura).

8. Se ha recolectado información del peso y la estatura de n personas.


Implemente una función que reciba una matriz de 2 x n en donde en la
primera fila estén los datos de peso y en la segunda fila los datos de la
estatura (para realizar pruebas usted puede generar números reales
aleatorios para el peso y la estatura de las n personas). La función devuelve
la matriz ordenada de manera ascendente o descendente con respecto al
peso o a la estatura. La función recoge como parámetros matriz,
optOrdenamiento, optVariable, algOrdenamiento, donde optOrdenamiento

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

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é algoritmo de ordenamiento
que se desea utilizar.

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
ordenación estudiados (e.g., Selección, Burbuja, Inserción, Inserción binaria,
Shell). Terminará con la presentación por pantalla del arreglo ordenado.

10. Implemente una función que permita ordenar por fechas y de mayor a
menor 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 (columna 3) y número de contrato (columna 4). Damos por supuesto
que la introducción de datos fue correcta, pudiendo existir diversos
contratos con la misma fecha, pero no números de contrato repetidos.

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 (columna 3) y número de contrato (columna 4). Damos por supuesto
que la introducción de datos fue correcta, pudiendo existir diversos
contratos con la misma fecha, pero no números de contrato repetidos.
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 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 ordenació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
intercambios 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
algoritmo). La función devuelve los elementos ordenados, el número de

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

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

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:
====================================================
Tabla de comparación para algoritmos de ordenamiento
====================================================
---------------------------------------------------------------------
Algoritmo # comparaciones # intercambios Tiempo [seg.]
--------- --------------- -------------- -------------
Algoritmo 1 ## ## ##
Algoritmo 2 ## ## ##
Algoritmo 3 ## ## ##
... .. .. ..
---------------------------------------------------------------------
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
comparaciones, el número de intercambios y el tiempo de cálculo en
segundos. Finalmente, presente una tabla con estadísticas de eficiencia de
los métodos y un histograma para representar 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):
====================================================
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;
así con cada uno de los 9999 arreglos.

---------------------------------------------------------------------

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

# comparaciones # intercambios Tiempo [seg.]


Algoritmo promedio promedio promedio
--------- --------------- -------------- -------------
Algoritmo 1 ## ## ##
Algoritmo 2 ## ## ##
Algoritmo 3 ## ## ##
... .. .. ..
---------------------------------------------------------------------

=======================================
Histograma para comparación de métricas
=======================================
-----------------------------------------------------------------
Algoritmo 1 |
# comparaciones (prom) |▬▬▬▬▬▬▬▬▬▬ ##
# intercambios (prom) |▬▬▬▬▬▬▬▬▬▬▬▬ ##
Tiempo [seg.] (prom) |▬▬▬▬▬▬▬ ##
|
Algoritmo 2 |
# comparaciones (prom) |▬▬▬▬▬▬▬ ##
# intercambios (prom) |▬▬▬▬▬▬▬▬▬▬▬ ##
Tiempo [seg.] (prom) |▬▬▬▬▬▬▬▬ ##
|
Algoritmo 3 |
# comparaciones (prom) |▬▬▬▬▬▬▬▬▬▬▬▬▬▬ ##
# intercambios (prom) |▬▬▬▬▬▬▬▬▬ ##
Tiempo [seg.] (prom) |▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬ ##
|
. | . .
. | . .
. | . .
-----------------------------------------------------------------
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:

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.

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

c) Llene el arreglo con números aleatorios enteros entre -99 y 99.


d) La mitad (si n/2 no es entero, trúnquelo) del arreglo ordénelo con el
método de la burbuja.
e) La otra mitad del arreglo ordénelo con el método de la selección.
f) Con las dos mitades ordenadas, aplique el método de la inserción para
ordenar 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


funció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].
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
individualmente 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.
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étodo de la burbuja.
f) La otra mitad del arreglo ordénelo con el método de la selección.
g) Con las dos mitades ordenadas, aplique el método de la inserción para
ordenar 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


función diferente.

16. Pregunta

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

* 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 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 con las mínimas calificaciones.

Detallando los requerimientos utilizando un ejemplo, se tendría lo siguiente:

1. Escribir una función f1 que permita ingresar los datos de los estudiantes.

Nombres Calificaciones
Juan 16
Andrés 18
Pedro 15
María 11
Xavier 10
Ximena 17
Fernando 19
... ...
Jaime 5
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.

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

Andrés 18
Fernando 19
Jaime 5
Juan 16
A= María 11
Pedro 15
Xavier 10
... ...
Ximena 17

3. Escribir una función f3 que reciba como entrada la matriz generada en f2 y


devuelva una matriz con la calificación mínima y calificación máxima.

Jaime 5
B=
Fernando 19

4. Escribir una función f4 que reciba como entrada la matriz generada en f2 y


devuelva una matriz con las tres mayores calificaciones y las tres menores
calificaciones.

Fernando 19
Andrés 18
Ximena 17
C=
Jaime 5
Xavier 10
María 11

Ordenamientos en matriz
Desarrolle un programa que pida al usuario ingresar las dimensiones (nxm) de una
matriz y rellene los elementos de dicha matriz con números enteros aleatorios en

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

un rango dado por el mismo usuario. Muestre la matriz generada y luego, realice
los siguientes ordenamientos:

• Las columnas pares ordénelas de manera descendente con el método de


inserció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
realizarse con el método de ordenamiento de burbuja. Muestre la matriz
original luego 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 cambios.

A continuación se muestra un ejemplo de ejecución del programa:


Ingreso de datos
================
Dimensión de la matriz
n: 3
m: 4

Rango para generación de números aleatorios


inf: -2
sup: 10

Matriz generada
8 4 9 5
2 1 7 4
3 5 -1 2

Resultados
==========
Luego de ordenadas las columnas
2 5 -1 5
3 4 7 4
8 1 9 2

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

Luego de ordenadas las filas


9 8 5 4
1 2 4 7
5 3 2 -1

Luego de ordenadas las “diagonales derecha–izquierda”


8 2 1 5
4 3 5 -1
9 7 4 2

Luego de ordenadas las “diagonales izquierda–derecha”


8 7 9 5
5 1 4 4
3 2 -1 2

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

Archivos

Miscelánea
1. ¿Qué significa EOF?

a) Empty or full
b) End of file
c) End of floop
d) Las anteriores respuestas no son correctas

2. Pregunta

168
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
Ejercicio propuesto por María Fernanda Granda.

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
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
poder de ataque 45

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
Jugador1 inicia la pelea, caso contrario inicia el Jugador2. Recuerde que una vez
que se define el jugador que tiene el primer turno, los siguientes turnos son
intercalados, i.e., un jugador, el otro, un jugador, el otro, etc. Ambos jugadores
inician sus vidas con 100 puntos y se tienen que ir simulando el combate restando
de la vida de los pokemones 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 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
inicia con el primer turno. Entonces se usa la función azar(2) para determinar si
Pikachu ataca o no. Suponga que la función azar(2) devuelve 1. Cómo el resultado
es 1 éste ataca y en el primer turno Jigglypuff queda con 45 de vida. Luego es el
turno de Jigglypuff y suponga que la función azar(2) devuelve 0. Cómo es 0,

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

Jigglypuffno ataca. Para el siguiente turno de Pikachu la función azar(2) devuelve


1. Cómo es 1 Pikachu 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:
Combate de pokemones
1.- Ingresar datos de los pokemones
2.- Simular combate
3.- Terminar
Ingresar opción <1-3>: 1

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
1.- Ingresar datos de los pokemones
2.- Simular combate
3.- Terminar
Ingresar opción <1-3>: 2

Vidas:Pikachu(100) vs Jigglypuff(100)

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)
Vidas: Pikachu (100) vs Jigglypuff (-10)

Pokemon ganador: Pikachu en 3 turnos.

Combate de pokemones
1.- Ingresar datos de los pokemones
2.- Simular combate
3.- Terminar
Ingresar opción <1-3>: 3

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

(termina el programa)

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


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

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

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:

171
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
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
suma de esos dos símbolos tiene representación con alguno de los símbolos
anteriores.
• 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 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’).

• Para números con valores igual o superiores a 4000, se coloca una línea
horizontal 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

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

* Pirámide invertida
Represente mediante un diagrama de flujo el algoritmo que solicite un número n y
escriba en pantalla una pirámide invertida. La altura de la pirámide es igual a n.
Valide 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 algoritmo 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
1 2 1
1

Cubos e impares
Considere la siguiente propiedad:
• Sumando el primer número impar positivo se obtiene el primer cubo.
• Sumando los dos siguientes impares se obtiene el segundo cubo.
• Sumando los tres siguientes impares se obtiene el tercer cubo, y así
sucesivamente.
Expresado de forma matemática:
13 = 1 =1
3
2 =3+5 =8
3
3 = 7 + 9 + 11 = 27
3
4 = 13 + 15 + 17 + 19 = 64
El usuario ingresa un entero positivo n. El programa debe mostrar los n primeros
cubos calculándolos mediante la propiedad descrita.

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 límite superior no sea menor al límite inferior). Se ingresa un paso

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

(incremento) entre 1 y 1000 (validar para que siga ingresando números mientras no
cumple la condición). Imprimir los valores desde el límite inferior al límite superior
con el paso (incremento) dado por el usuario. Los números que se muestran deben
tener el número de dígitos que tenga el límite superior; es decir, los número que se
van a mostrar que tienen un número de dígitos menor al número de dígitos del
límite superior, deben completar el número de dígitos con ceros a la izquierda.

Ejemplo 1:
Límite inferior: 1
Límite superior: 12
Paso: 3
Lo que se muestra en pantalla es:
01
04
07
10
Ejemplo 2:
Límite inferior: 1
Límite superior: 1500
Paso: 500
Lo que se muestra en pantalla es:
0001
0501
1001

Algoritmo de Gauss y Método de eliminación de Gauss


Para la resolución de sistemas de ecuaciones lineales existe el método de
factorización 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 implementación de ambos algoritmos basándose en la explicación dada
en el libro de Quarteroni 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).

Métodos de Jacobi y de Gauss-Seidel


Vea el libro de Quarteroni et al. (2014, pp. 168–173).

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

Dados
Escribir un programa que simule el lanzamiento de dos dados y muestre por
pantalla la frecuencia de los resultados de mil lanzamientos.

Búsquedas y ordenación
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.

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


polinomio interpolador que pase por tres puntos.

3. Implemente la interpolación polinómica de Lagrange para encontrar el


polinomio interpolador que pase por cuatro puntos.

Integración numérica
Para resolver los siguientes ejercicios revise la sección 4.3 Numerical integration del
libro de Quarteroni et al. (2014).

1. Implemente la fórmula de cuadratura de punto medio compuesto para


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


con un polinomio integrador de Lagrange de segundo grado.

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
ecuación

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

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


subintervalos de ancho

(16)

y aplicar la fórmula iterativa

(17)

Para comprobar sus resultados sepa que la integral analítica de la función


dy/dx es y = - 0.5x4 + 4x3 - 10x2 + 8.5x + 1. La figura 10 muestra las
gráficas de la solución analítica y la solución numérica cuyos valores de yi
(aproximados) usted debe encontrar. La tabla 1 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 de Chapra et al. (2007), páginas 719-722.

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

Figura 10: 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 1: 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
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

177
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
b<-6
c<-7
aux<-a
b<-a
c<-b
Escribir a, b, c
FinProceso
2. * ¿Cuál es el valor de la variable x?
Proceso sin_titulo
Definir x Como Entero
Definir z Como Entero
x<-2
z<-5
Si z<0 Entonces
x<-x+2
Sino
Si x>1 Entonces
x<-x+1
Sino
x<-5
Fin Si
Fin Si
Escribir x
FinProceso
3. * ¿Cuál es el resultado de ejecutar el siguiente pseudocódigo?
Proceso valorC
c<-50
Mientras c>=0 Hacer
Escribir c
c<-c+1
Fin Mientras
FinProceso
4. * ¿Cuál es el resultado de ejecutar el siguiente pseudocódigo?
Proceso sin_titulo

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

Para i<-1 Hasta 5 Con Paso 1 Hacer


Segun i Hacer
1:
Escribir "a"
2:
Escribir "b"
3:
Escribir "c"
De Otro Modo:
Escribir "d"
Fin Segun
Fin Para
FinProceso
5. ¿Qué realiza o cuál es el fin del siguiente algoritmo o programa?
Proceso sin_titulo
Leer var1
Leer var2

Mientras var1<var2 Hacer


Leer var1
Leer var2
Fin Mientras

var3<-0

Mientras var1 >= var2 Hacer


var1<-var1-var2
var3<-var3+1
Fin Mientras

Escribir var3
Escribir var1
FinProceso
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


Leer var2
Fin Mientras

179
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
Escribir var5
var4<-var4+1
Fin Mientras

Escribir '***** ****** ***** *****'


Fin Para
FinProceso
7. ¿Qué realiza o cuál es el fin del siguiente algoritmo o programa?
Proceso sin_titulo
Leer var1

Mientras var1<0 Hacer


Leer var1
Fin Mientras

var2<-1
var3<-11

Mientras var2<=var1 Hacer


Leer var4

Mientras var4<1 O var4>10 Hacer


Leer var4
Fin Mientras

Si var4<var3 Entonces
var3<-var4
Fin Si

var2<-var2+1
Fin Mientras

Escribir var3
FinProceso
1. * Con respecto al siguiente algoritmo

180
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
Escribir Sin Saltar i,'^',cont,': ',i^cont, ' '
cont<-cont+2
Fin Mientras
Escribir ''
Fin Para
FinProceso
¿Cuál de las siguientes versiones hace exactamente lo mismo?

a)
Proceso sin_titulo
cont<-1
Mientras cont<=8 Hacer
Para i<-1 Hasta 5 Con Paso 2 Hacer
Escribir Sin Saltar cont,'^',i,': ',cont^i, ' '
Fin Para
Escribir ''
cont<-cont+4
Fin Mientras
FinProceso
b)
Proceso sin_titulo
cont<-1
Mientras cont<=7 Hacer
Para i<-1 Hasta 5 Con Paso 2 Hacer
Escribir Sin Saltar cont,'^',i,': ',cont^i, ' '
Fin Para
Escribir ''
Fin Mientras
FinProceso
c)
Proceso sin_titulo
cont<-1
Mientras cont<=7 Hacer
Para i<-1 Hasta 5 Con Paso 2 Hacer
Escribir Sin Saltar cont,'^',i,': ',cont^i, ' '
Fin Para

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

Escribir ''
cont<-cont+3
Fin Mientras
FinProceso
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
c) 60
d) Ninguna de las anteriores
public class Test {

public static void main (String[] args) {


int j = operacion();
System.out.println("Resultado: " + j);
}

public static int operacion(){


j = -1;
for(int i=5; i>=0; i--)
j=j*i;
}
}
2. * ¿Para el siguiente segmento de código cuál es la salida del programa?

a) 8
b) 72
c) 0
d) 36
public class Test {

static int resultado = 0;

public static void main (String[] args) {


operacion(3);
System.out.println("Resultado: " + resultado);
}

182
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;
return j;
}

public static void operacion(int resultado){


int i=1;
for(int j=1; j<resultado; j++)
i=j*potencia(j, 2);

resultado = i;
}
}
8. * ¿Cuál es el tiempo de vida de una variable global?

a) Existe tanto tiempo como el programa


b) Existe mientras una función se encuentra ejecutando
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


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
bidimensional (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] + “ ”);
}
}
}
11. ¿Cuál es la salida del siguiente programa?
public class Ejercicio {
public static void main(String[] args){
int [] matriz = {1,2,3};

183
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++)
System.out.print(matriz[i] + " ");
}
static void metodoA(int [] b){
for(int i=0; i<b.length;i++)
b[i]=b[i]+3;
}
}
12. * ¿Cuál es la salida del siguiente programa?
public class Ejercicio {

public static void main (String[] args) {


char[] matriz = {'e','u','o','i','a'};
metodo(matriz);
for(int i=0; i<matriz.length; i++){
System.out.println(matriz[i]);
}
}

public static void metodo(char[] vocales){


char aux;
for(int i=1; i<vocales.length; i++){
if(vocales[i-1]>vocales[i]){
aux=vocales[i-1];
vocales[i-1]=vocales[i];
vocales[i]=aux;
}
}
}
}
13. * ¿Cuál es la salida del siguiente fragmento de código?
int index = 1;
while(index < 10){
System.out.println(index);
index ++;
}
14. * ¿Cuál es la salida del siguiente programa?
public class Ejercicio {

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

public static void main (String args[]) {


int c = 1;
final int N=5;
while(c<=N){
System.out.println(c);
c--;
}
}
}
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
pantalla) 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í


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]);
}
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)
{
int i, r, x;
i = n;
r = 1;
x = a;
while (i > 0) {
if (i % 2 != 0) {
r = r * x;
}
x = x * x;
i = i / 2;
}
return r;
}

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

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 ="";
cadena = cadena + "\nNumeros: ";
for(int i=0;i < arreglo.length;i++){
if(arreglo[i]%2!=0){
cadena = cadena +" "+ arreglo[i];
}
}
System.out.println(cadena);
}

public static void funcion(int[] arreglo) {


for (int i=1; i < arreglo.length; i++) {
int aux = arreglo[i];
int j;
for (j=i-1; j >=0 && arreglo[j] > aux; j--){
arreglo[j+1] = arreglo[j];
}
arreglo[j+1] = aux;
}
}
a) 2 8 5 7 9
b) 2 2 4 6 8
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} };
for(int i = 0; i < m.length; i++) {
System.out.print(m[i].length + “ “);

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

}
}
a) 4 4 7
b) 5 3 4
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++)
3) {
4) JOptionPane.showMessageDialog(null, x);
5)
6) }
7) JOptionPane.showMessageDialog(null, “Fin del método”, x);
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. * ¿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;
cadena1 = "cadena";
cadena2 = "programación";
for (int i = 0; i < cadena2.length(); i++) {
for (int j = 0; j < cadena1.length(); j++) {
if (i == j) {
contar();
}
}
}
System.out.println(contador);
}
public static void contar() {
contador = contador + 2;
}
}

187
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";
int inicio = str.indexOf("c");
int fin = str.indexOf("e", inicio + 1);
System.out.println(str.substring(inicio, fin + 3));
}
}
a) cadenas

b) cade

c) cadena

d) de

22. * ¿Qué muestra el siguiente programa?


public class ProgramacionI {
public static void main(String[] args) {
int contador;
int limite;

contador = 2;
limite = 10;

do {
switch (contador % 2) {
case 0:
System.out.print(contador + " es par\n");
break;
case 1:
System.out.print(contador + " es impar\n");
break;
}
contador += 2;
} while (contador < limite);
}
}
23. Pregunta

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

Lenguaje C
1. * Realice la prueba de escritorio del siguiente programa e indique qué se
muestra en pantalla.
#include<stdio.h>

int main() {
int a = 4, b = 1, x;
do{
a += 2;
b++;
}while(a<=b);
a += 3;
b += 2;
a = a+b%2+a%3;
x = a/b;
if(x>b){
b = b+4;
a = b%3;
x = a%b;
}
b++;
x = x*(10/8)+a%b;
for(int i=0; i<a; i=i+1)
printf("%d", a);
printf("\n");
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);
printf("Variable b: %d\n", b);
printf("Variable x: %d\n", x);
}
2. Pregunta

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

Fórmulas y Relaciones

Estadística

Media ponderada
Para una serie de datos no vacía:

a la que corresponden los pesos:

la media ponderada es:

(18)

Medidas de longitud
• 1 milla = 1609 metros

• 1 pulgada = 0.0254 metros

• 1 yarda = 3 pies

• 1 pie = 12 pulgadas

Unidades de capacidad
• 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

• 1024 bytes = 1 kilobyte (KB)

• 1024 KB = 1 megabyte (MB)

• 1024 MB = 1 gigabyte (GB)

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

• 1024 GB = 1 terabyte (TB)

Tiempo
• 1 hora = 60 minutos

• 1 minuto = 60 segundos

• 1 hora = 3600 segundos

Unidades de temperatura
Relación entre grados celsius (centígrados, C) y fahrenheit (F).

(19)

Círculo
r: radio

l: longitud o perímetro

a: área

(20)

(21)

Esfera
• r: radio

• s: superficie o área

• v: volumen

(22)

(23)

Cuadrado

Ángulos
(24)

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

Ecuación de segundo grado


Dada la ecuación de segundo grado

(25)

las raíces o ceros de la función son:

(26)

Logaritmos
El logaritmo de un número en cualquier base puede obtenerse por la relación

(27)

en donde, , ; , .

192
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, M. 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.
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.

193

Você também pode gostar