Beruflich Dokumente
Kultur Dokumente
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
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
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
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.
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
10
Angel Vázquez-Patiño Universidad de Cuenca
Fundamentos
Qué es programar
1. * Indique qué es programar
3. Pregunta
a) Eiffel
b) C#
c) Fortran
d) DOS
a) 10
b) 13
c) 32
a) 32
b) 65
c) 97
11
Angel Vázquez-Patiño Universidad de Cuenca
d) 126
c) Un valor de un tipo puede ser tratado como de otro tipo siempre que se
realice una conversión de forma explícita
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
a) Ada
b) C
c) Fortran
d) Java
c) Paradigmas de programación
8. Pregunta
12
Angel Vázquez-Patiño Universidad de Cuenca
c) Sentencias de control
d) Tipos de datos
Algoritmos
1. * Explique lo qué es un algoritmo. Dé un ejemplo sencillo.
6. ¿Qué es un algoritmo?
13
Angel Vázquez-Patiño Universidad de Cuenca
a) Secuencia de pasos
b) Secuencia de instrucciones
d) Es finito
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.
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
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.
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
Diagramas de flujo
1. * Describa qué es un diagrama de flujo. Dé un ejemplo sencillo (explique
qué hace el algoritmo del ejemplo).
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).
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):
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.
18
Angel Vázquez-Patiño Universidad de Cuenca
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
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)
* 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.
(4)
(5)
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)
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
(7)
Hexágono regular
• Desarrolle un algoritmo que dadas las longitudes de un hexágono regular,
calcule el área del polígono.
x y1 1
| |
1 1
x
2 2
x3
y2 1 ,
y3 1
23
Angel Vázquez-Patiño Universidad de Cuenca
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
Ponderación de calificaciones
Fuente: (Pinales Delgado and Velázquez Amador, 2014)
24
Angel Vázquez-Patiño Universidad de Cuenca
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:
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.
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)
26
Angel Vázquez-Patiño Universidad de Cuenca
27
Angel Vázquez-Patiño Universidad de Cuenca
◦ 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
◦ 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
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:
28
Angel Vázquez-Patiño Universidad de Cuenca
Multiplicación de polinomios
Dados dos polinomios de segundo grado de parte del usuario, calcular la
multiplicación de dichos polinomios.
(8)
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).
a) if
b) while
c) for
30
Angel Vázquez-Patiño Universidad de Cuenca
a) if
b) for
c) while
a) if
b) for
c) while
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):
b) un bucle (lazo) if
31
Angel Vázquez-Patiño Universidad de Cuenca
b) Sentencias de control
c) Tipos de datos
b) Una sentencia que ejecuta otra sentencia que a su vez ejecuta la primera
sentencia
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;
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;
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:
35
Angel Vázquez-Patiño Universidad de Cuenca
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
c1 <- 8 - i;
c2 <- 0;
Mientras c2 < c1 Hacer
Escribir Sin Saltar "O";
c2 <- c2 + 1;
Fin Mientras
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
a) Arreglo
b) Contador
c) Ciclo
d) Acumulador
e) Bucle
a) Arreglo
b) Array
c) Ciclo
d) Bandera
e) Contador
38
Angel Vázquez-Patiño Universidad de Cuenca
a) Array
b) Contador
c) Iteración
d) Bucle
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
39
Angel Vázquez-Patiño Universidad de Cuenca
40
Angel Vázquez-Patiño Universidad de Cuenca
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
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
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.
44
Angel Vázquez-Patiño Universidad de Cuenca
8. Escriba un programa que dado un mes del año (en letras), indique el
número de días de ese mes.
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.
45
Angel Vázquez-Patiño Universidad de Cuenca
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
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.
46
Angel Vázquez-Patiño Universidad de Cuenca
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:
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.
48
Angel Vázquez-Patiño Universidad de Cuenca
• 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.
Diseñe un algoritmo que determine cuántos lapiceros Lucas, Cross y Novo recibe
un cliente como obsequio.
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.
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.
1. Hectogramos
2. Gramos
3. Decigramos
4. Centigramos
5. Miligramos
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.
6.
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:
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:
52
Angel Vázquez-Patiño Universidad de Cuenca
53
Angel Vázquez-Patiño Universidad de Cuenca
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.
Ejemplo:
A= 2
B= 8
54
Angel Vázquez-Patiño Universidad de Cuenca
Números de n a m
1. Hacer un programa que imprima los números enteros del 1 al 5.
55
Angel Vázquez-Patiño Universidad de Cuenca
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
56
Angel Vázquez-Patiño Universidad de Cuenca
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.
* 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ú:
3. Salir
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.
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.
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.
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
Combinatoria
El número de combinaciones que podemos formar tomando m elementos de un
conjunto con n elementos es:
(9)
* 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
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).
60
Angel Vázquez-Patiño Universidad de Cuenca
(10)
61
Angel Vázquez-Patiño Universidad de Cuenca
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
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
62
Angel Vázquez-Patiño Universidad de Cuenca
Triángulo de números
Dado un número n, visualizar un triángulo de la siguiente manera:
Con
1
2 3
4 5 6
7 8 9 10
Con
1
2 3
4 5 6
7 8 9 10
11 12 13
63
Angel Vázquez-Patiño Universidad de Cuenca
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.
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.
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.
65
Angel Vázquez-Patiño Universidad de Cuenca
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
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.
67
Angel Vázquez-Patiño Universidad de Cuenca
* 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.
* 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
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.
69
Angel Vázquez-Patiño Universidad de Cuenca
Cara o cruz
Simular el lanzamiento de una moneda al aire e imprimir si ha salido cara o cruz.
El momento que adivina, termina el algoritmo.
Series y sumatorias
1. Hallar la sumatoria de la serie
1 http://pseint.sourceforge.net
70
Angel Vázquez-Patiño Universidad de Cuenca
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
* Aproximación de π
Dado que es la suma de la serie
, (11)
(12)
72
Aproximación del logaritmo natural
El logaritmo natural de se puede aproximar con la serie
(13)
Realizar lo siguiente:
* 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
1 1 2 2
111 1 222 8
11111 1 22222 32
1111111 1 2222222 128
222222222 512
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ú.
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:
3. Terminar el Algoritmo
75
Angel Vázquez-Patiño Universidad de Cuenca
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.
76
Angel Vázquez-Patiño Universidad de Cuenca
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.
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.
1 1 1
2 4 8
3 9 27
4 16 64
5 25 125
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
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
• Si n=7 genere 7, 6, 5, 4, 3, 2 y 1.
Ejemplos
N-ésimo término a mostrar: 5
Término: 8
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:
Ecuación: x2 + 6x + 10; b = 6, c = 10
Salida:
81
Angel Vázquez-Patiño Universidad de Cuenca
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)
82
Angel Vázquez-Patiño Universidad de Cuenca
(15)
* 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).
84
Angel Vázquez-Patiño Universidad de Cuenca
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
Random walks
Antes de desarrollar este algoritmo, revise el algoritmo pedido en el ejercicio
llamado Simple random walks.
86
Angel Vázquez-Patiño Universidad de Cuenca
87
Angel Vázquez-Patiño Universidad de Cuenca
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.).
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).
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}
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.
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.
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.
92
Angel Vázquez-Patiño Universidad de Cuenca
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.
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).
93
Angel Vázquez-Patiño Universidad de Cuenca
Manejo de arreglos
1. Generar un arreglo llamado angles que contenga los ángulos múltiplos de 30°
entre 30° y 360°.
* 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.
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:
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
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.).
97
Angel Vázquez-Patiño Universidad de Cuenca
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.
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).
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:
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
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.
-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).
100
Angel Vázquez-Patiño Universidad de Cuenca
24. Dadas dos matrices A y B intercambiar los mínimos de A con los máximos
de B.
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.
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
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
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.
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.
8 1 6
3 5 7
4 9 2
Para generar un cuadrado mágico siga estos pasos:
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
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
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.
108
Angel Vázquez-Patiño Universidad de Cuenca
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).
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.
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).
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
111
Angel Vázquez-Patiño Universidad de Cuenca
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));
} catch (Exception e) {
System.out.println(e.getMessage());
} finally {
try{
br.close();
}catch(IOException e){
System.out.println(e.getMessage());
}
}
return lista;
}
* 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
◦ 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:
Hormiga de Langton
La siguiente información es tomada de wikipedia (https://goo.gl/6dNIEW).
115
Angel Vázquez-Patiño Universidad de Cuenca
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.
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.
3. Haga que la homiga camine hasta que llegue a los límites de la matriz.
116
Angel Vázquez-Patiño Universidad de Cuenca
1. Generar solución
2. Ingresar configuración candidata
3. Salir
117
Angel Vázquez-Patiño Universidad de Cuenca
1. Generar solución
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
* Datos de personas
El programa va a almacenar registros en una matriz. Para ello se debe hacer lo
siguiente:
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.
0104132548 cevallos 22
0108562554 juan malo 25
119
Angel Vázquez-Patiño Universidad de Cuenca
0104132548 cevallos 22
0108562554 juan malo 25
0305677824 sara abril
3. Búsquedas
120
Angel Vázquez-Patiño Universidad de Cuenca
Ejemplo
• Código: emp3
• Código: emp3
• Nombre: Elecaustro
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.
• Código: emp1
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)
Ejemplo
Número de datos: 20
1 2 3 3 7 7 6 9 8 6 10 12 13 15 17 18 18 19 20 20
Número de rangos: 4
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.
#
# #
# #
# # #
# # # #
# # # #
# # # #
1-5 6-10 11-15 16-20
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
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?
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.
124
Angel Vázquez-Patiño Universidad de Cuenca
5. Implemente una función que calcule la distancia euclídea entre dos puntos.
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.
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.
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.
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.
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.
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.
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
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
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:
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
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).
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.
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.
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).
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
Finaliza el juego.
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
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).
4. Implemente una función que devuelva una cadena sin los espacios en blanco.
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
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
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
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.
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.
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.
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:
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:
b) Reemplazar cada letra por la que sigue según abecedario, excepto Z que
se deberá reemplazar con la letra A.
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.
140
Angel Vázquez-Patiño Universidad de Cuenca
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
Menú
141
Angel Vázquez-Patiño Universidad de Cuenca
1. Promedio
2. Máximo
3. Mínimo
4. Salir
Menú
1. Promedio
2. Máximo
3. Mínimo
4. Salir
Menú
1. Promedio
2. Máximo
3. Mínimo
4. Salir
Menú
1. Promedio
2. Máximo
3. Mínimo
4. Salir
Ejemplo:
142
Angel Vázquez-Patiño Universidad de Cuenca
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.
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
Estadísticas de texto
Ejercicio propuesto por René Estrella.
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:
* Analizador de tweets
Ejercicio propuesto por René Estrella.
145
Angel Vázquez-Patiño Universidad de Cuenca
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
146
Angel Vázquez-Patiño Universidad de Cuenca
Ejemplo:
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.
147
Angel Vázquez-Patiño Universidad de Cuenca
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
* 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
• Restar num1,num2
149
Angel Vázquez-Patiño Universidad de Cuenca
• Multiplicar num1,num2,num3,…,numN
• Dividir num1,num2
• Estadísticas
• Salir
150
Angel Vázquez-Patiño Universidad de Cuenca
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.
151
Angel Vázquez-Patiño Universidad de Cuenca
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
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.”.
• Cédula: 01064634657
• Cédula: 01064634657
153
Angel Vázquez-Patiño Universidad de Cuenca
Listar
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).
155
Angel Vázquez-Patiño Universidad de Cuenca
---------------------------------------------------------------
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).
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.
158
Angel Vázquez-Patiño Universidad de Cuenca
E01 *****
E02 *
E03 **
Iteración 1:
E01 *
E02 *****
E03 **
Iteración 2:
E01 *
E02 **
E02 *****
159
Angel Vázquez-Patiño Universidad de Cuenca
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.
160
Angel Vázquez-Patiño Universidad de Cuenca
---------------------------------------------------------------------
161
Angel Vázquez-Patiño Universidad de Cuenca
=======================================
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.
162
Angel Vázquez-Patiño Universidad de Cuenca
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.
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
Jaime 5
B=
Fernando 19
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 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.
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
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.
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
Ejemplo de ejecución:
Combate de pokemones
1.- Ingresar datos de los pokemones
2.- Simular combate
3.- Terminar
Ingresar opción <1-3>: 1
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)
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)
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:
• 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:
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.
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
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.
Interpolación
Para resolver los siguientes ejercicios revise las páginas 80-83 del libro de
Quarteroni et al. (2014).
Integración numérica
Para resolver los siguientes ejercicios revise la sección 4.3 Numerical integration del
libro de Quarteroni et al. (2014).
175
Angel Vázquez-Patiño Universidad de Cuenca
(16)
(17)
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.
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
178
Angel Vázquez-Patiño Universidad de Cuenca
var3<-0
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
179
Angel Vázquez-Patiño Universidad de Cuenca
var2<-1
var3<-11
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 {
a) 8
b) 72
c) 0
d) 36
public class Test {
182
Angel Vázquez-Patiño Universidad de Cuenca
resultado = i;
}
}
8. * ¿Cuál es el tiempo de vida de una variable global?
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 {
184
Angel Vázquez-Patiño Universidad de Cuenca
b) La proposición es falsa
185
Angel Vázquez-Patiño Universidad de Cuenca
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);
}
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
187
Angel Vázquez-Patiño Universidad de Cuenca
b) cade
c) cadena
d) de
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:
(18)
Medidas de longitud
• 1 milla = 1609 metros
• 1 yarda = 3 pies
• 1 pie = 12 pulgadas
Unidades de capacidad
• 1 pie cúbico = 0.0283 metros cúbicos
190
Angel Vázquez-Patiño Universidad de Cuenca
Tiempo
• 1 hora = 60 minutos
• 1 minuto = 60 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
(25)
(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