Ejercicios Básicos de Programación7 de febrero de 2018 Angel Vázquez-Patiño Departamento de Ciencias de la Computación 5 Universidad de Cuenca Cuenca, Ecuador angel.vazquezp arroba ucuenca.edu.ec Contenido Introducción.............................................................................................................10 Fundamentos...........................................................................................................11 Qué es programar................................................................................................11 Qué es un lenguaje de programación...................................................................11 Modelización de problemas del mundo real.........................................................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 fujo...............................................................................................16 Pseudocódigo.......................................................................................................16 Prueba de escritorio.............................................................................................16 Codifcació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.........................................................................................20 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.................................................................................................23 Movimiento rectilíneo uniforme...........................................................................24 Ponderación de califcaciones...............................................................................24 Sistema de ecuaciones lineales.............................................................................24 * Vuelto/cambio de una compra.........................................................................24 * 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.............................................................................................25 Cálculo de descuento...........................................................................................26 Califcación de programación..............................................................................26 Porcentaje de mujeres y hombres........................................................................26 * 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.....................................................................27 Multiplicación de polinomios...............................................................................28 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........................................................................................46 Aumento de sueldo en base a sueldo actual....................................................46 Nota alfabética................................................................................................46 Día de la semana.............................................................................................46 2 Angel Vázquez-Patiño Universidad de Cuenca Estación del año..............................................................................................47 Divisibilidad de dos números...........................................................................47 Aritmética básica con 3 números....................................................................47 * Incentivo por producción..............................................................................47 Posición del menor de n números....................................................................48 Puntaje en olimpiada......................................................................................48 Pago en estacionamiento.................................................................................48 Número de cifras de un número......................................................................49 Número con ceros a la izquierda.....................................................................49 Promoción en una papelería............................................................................49 Saldos y pagos mínimos..................................................................................49 Ordenamiento de números...............................................................................50 Restricción de ingreso......................................................................................50 Vocales o consonantes.....................................................................................50 Conversión de unidades de masa.....................................................................50 Mayor y menor de 10 números........................................................................50 * Pares o nones................................................................................................51 Estructura de selección........................................................................................52 Miscelánea.......................................................................................................52 Meses, de números a letras..............................................................................52 Signo zodiacal..................................................................................................53 Total de ventas................................................................................................53 Estructura de repetición WHILE........................................................................55 Miscelánea.......................................................................................................55 Números de n a m...........................................................................................55 Números pares del 1 al 100.............................................................................56 Acumulador del 1 al 100.................................................................................56 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.........................................................56 Subsidio familiar..............................................................................................56 * Factura.........................................................................................................57 Repetición de series.........................................................................................57 Encuesta a familias.........................................................................................57 Conteo de votos...............................................................................................58 * Contador de mayores de edad......................................................................58 3 Angel Vázquez-Patiño Universidad de Cuenca Factorial de un número...................................................................................58 Suma y promedio de factoriales......................................................................58 Combinatoria...................................................................................................59 Simple random walks......................................................................................59 * Dibujo de cuadrado......................................................................................59 * Dibujo de cuadrado y rombo........................................................................60 Fórmula del binomio.......................................................................................60 Triángulo de Pascal.........................................................................................60 Interés fjo anual..............................................................................................61 Promedio de edad en escuela..........................................................................62 Trabajo conjunto.............................................................................................62 Frases...............................................................................................................62 Tirada de dados..............................................................................................62 Series y sumatorias..........................................................................................62 Triángulo de números......................................................................................63 Número de días entre dos fechas.....................................................................63 Estructura de repetición DO-WHILE.................................................................64 Miscelánea.......................................................................................................64 Números de n a m...........................................................................................67 Números impares del 1 al 100.........................................................................67 Acumulador del 1 al 100.................................................................................67 Contador de números pares.............................................................................67 Codifcación de caracteres...............................................................................67 Ingreso de binarios..........................................................................................68 Ingreso de números mientras sean positivos....................................................68 Conteo de frases..............................................................................................68 Ingreso de 5 números.......................................................................................68 Longitud y área de un círculo: validación.......................................................68 Cantidad de números ingresados.....................................................................68 Cuadrado de números menores a n.................................................................68 Contador de pares e impares...........................................................................68 Contador de familias según número de miembros...........................................69 * Números con vocales....................................................................................69 * Operador potencia........................................................................................69 Factores de un número entero.........................................................................69 * Factorial.......................................................................................................69 * Números perfectos........................................................................................69 4 Angel Vázquez-Patiño Universidad de Cuenca Números primos..............................................................................................70 Número de dígitos de un número entero.........................................................70 Valor relativo de un número............................................................................70 Cálculo de comisiones......................................................................................71 Ordenamientos................................................................................................71 Juego: adivina el número.................................................................................71 Cara o cruz......................................................................................................71 Análisis de frecuencias en lanzamientos de un dado.......................................71 Series y sumatorias..........................................................................................72 Número de cifras de un número......................................................................72 Reloj de 24 horas.............................................................................................72 * Progresión geométrica..................................................................................73 * Números de la serie Fibonacci.....................................................................73 * Aproximación de π.......................................................................................73 Aproximación del logaritmo natural...............................................................74 * Aproximación del arco seno.........................................................................74 * Dibujo de triángulos.....................................................................................74 Menú...............................................................................................................75 Función exponencial........................................................................................76 Número en cualquier base...............................................................................76 Menú: revisión de número...............................................................................76 Menú: permutaciones, variaciones y combinaciones........................................76 Estructura de repetición FOR.............................................................................79 Miscelánea.......................................................................................................79 Signo zodiacal y número de suerte..................................................................83 Series y sumatorias..........................................................................................84 * Impresión de patrones..................................................................................85 Menú: media, mayor y menor..........................................................................85 Manejo contable..............................................................................................86 * Factorización de trinomio.............................................................................86 Cálculos con dígitos de un número..................................................................87 * Serie de Leibniz............................................................................................87 * Examen de manejo.......................................................................................88 * Carrera de caballos.......................................................................................88 Número de Armstrong.....................................................................................89 * Prueba del nueve de la división....................................................................90 * Encontrando triángulos rectángulos.............................................................90 5 Angel Vázquez-Patiño Universidad de Cuenca * Número triangular........................................................................................91 La diagonal de Cantor.....................................................................................91 Random walks.................................................................................................92 * Suma de dos números decimales..................................................................92 * Suma de dos números binarios.....................................................................92 * Suma de números consecutivos....................................................................93 Raíz cuadrada de un número..........................................................................93 Estructuras Básicas de Datos..................................................................................97 Arreglos unidimensionales...................................................................................97 Miscelánea.......................................................................................................97 Manejo de arreglos........................................................................................101 * Eliminación de duplicados..........................................................................101 Ordenamiento de n números.........................................................................102 Ángulo entre vectores....................................................................................102 Relleno de arreglo con números aleatorios....................................................102 Grafcación de frecuencias.............................................................................102 Criba de Eratóstenes.....................................................................................103 Algoritmo de Havel-Hakimi...........................................................................104 Arreglos bidimensionales...................................................................................104 Miscelánea.....................................................................................................104 Suma y resta de matrices..............................................................................110 Producto de un escalar por una matriz.........................................................110 Diagonal principal de una matriz..................................................................110 * Transpuesta de una matriz.........................................................................110 Simetría de una matriz..................................................................................110 Determinante de una matriz.........................................................................111 Producto de matrices....................................................................................111 Punto de silla de una matriz.........................................................................111 Tablero de ajedrez.........................................................................................111 * Distancia de Chebyshov.............................................................................112 El cuadrado latino.........................................................................................112 El cuadrado mágico.......................................................................................113 * Lotería en Cuenca......................................................................................114 Cadena de ADN............................................................................................114 Gimnasia cerebral..........................................................................................115 Cálculos espaciales básicos............................................................................117 Formación de grupos de trabajo....................................................................119 6 Angel Vázquez-Patiño Universidad de Cuenca * Matriz de adyacencia..................................................................................122 Craps.............................................................................................................124 Hormiga de Langton......................................................................................124 * Las ocho reinas...........................................................................................126 * Recorridos de matriz..................................................................................127 * Datos de estudiantes..................................................................................129 * Datos de personas.......................................................................................130 * Datos de empresas y empleados.................................................................132 * Estadística descriptiva: frecuencias e histograma.......................................134 * Cifrado básico 1..........................................................................................135 Cifrado básico 2.............................................................................................136 Un algoritmo voraz para el número cromático..............................................137 Algoritmo de Floyd-Warshall........................................................................137 Funciones...............................................................................................................139 Ámbito de las variables.....................................................................................139 Miscelánea.........................................................................................................139 * Histograma.....................................................................................................143 Aritmética básica...............................................................................................143 Potenciación.......................................................................................................144 Aproximación de sinh-1......................................................................................144 Función W de Lambert......................................................................................144 Factorial de un número con función recursiva...................................................145 Máximo común divisor y mínimo común múltiplo............................................145 * Peso adecuado................................................................................................146 * Raíces de una función.....................................................................................147 El método de la bisección..................................................................................147 * El método de Newton.....................................................................................148 Ordenamiento de n números..............................................................................149 Búsqueda lineal..................................................................................................150 Búsqueda binaria o dicotómica..........................................................................150 Juego de dados entre dos...................................................................................150 Manejo de Caracteres y Cadenas...........................................................................152 Miscelánea.........................................................................................................152 * Datos personales.............................................................................................160 Estadísticas de texto..........................................................................................161 * Analizador de tweets......................................................................................162 Eliminación de n-ésima palabra.........................................................................163 7 Angel Vázquez-Patiño Universidad de Cuenca Cifrado por sustitución......................................................................................163 Cifrado por transposición..................................................................................164 * Manejo de una cadena con información personal...........................................165 * Línea de comandos.........................................................................................166 * Mantenimiento de datos de personas..............................................................168 Búsquedas..............................................................................................................172 Ordenamiento........................................................................................................175 Miscelánea.........................................................................................................175 * Menú, ordenamiento y búsqueda de registros................................................180 * Califcaciones de estudiantes...........................................................................181 Ordenamientos en matriz..................................................................................183 * Manejo de datos de personas..........................................................................184 Archivos.................................................................................................................186 Miscelánea.........................................................................................................186 Miscelánea de Ejercicios........................................................................................187 * Combate de pokemones..................................................................................187 Solución de un sistema de ecuaciones por matrices...........................................189 Conversión de un número en base diez a sistema binario.................................189 Conversión de un número en base binaria a sistema en base diez.....................189 Cálculo de las tres alturas de un triángulo dadas las longitudes de sus lados. .189 Valor futuro de una inversión............................................................................189 Cálculo del capital inicial..................................................................................189 Cálculo de la tasa de interés..............................................................................189 Cálculo del número de años...............................................................................189 Media, mediana y varianza de N datos.............................................................189 Transformación de números decimales a romanos.............................................189 Dígitos de un número........................................................................................191 * Pirámide invertida..........................................................................................191 Cubos e impares................................................................................................191 Cantidad de dígitos fjo de números mostrados.................................................191 Algoritmo de Gauss y Método de eliminación de Gauss...................................192 Métodos de Jacobi y de Gauss-Seidel................................................................192 Dados.................................................................................................................193 Búsquedas y ordenación....................................................................................193 Interpolación......................................................................................................193 Integración numérica.........................................................................................193 Ecuaciones diferenciales ordinarias (EDO)........................................................193 8 Angel Vázquez-Patiño Universidad de Cuenca ¿Qué Hace el Algoritmo/Programa?.....................................................................196 Lenguaje Java....................................................................................................200 Lenguaje C........................................................................................................207 Fórmulas y Relaciones...........................................................................................208 Estadística.........................................................................................................208 Media ponderada...........................................................................................208 Medidas de longitud..........................................................................................208 Unidades de capacidad......................................................................................208 Unidades de capacidad de información..............................................................208 Tiempo..............................................................................................................209 Unidades de temperatura..................................................................................209 Círculo...............................................................................................................209 Esfera.................................................................................................................209 Cuadrado...........................................................................................................209 Ángulos..............................................................................................................209 Ecuación de segundo grado...............................................................................210 Logaritmos.........................................................................................................210 Referencias.............................................................................................................211 9 Angel Vázquez-Patiño Universidad de Cuenca Introducción Los algoritmos están ordenamos de acuerdo a su complejidad (sugerencias con res- pecto al orden son bienvenidas). Los ejercicios que tienen un asterisco al comienzo son ejercicios tomados en alguna prueba o examen de los cursos impartidos por 5 Angel Vázquez. Las presentaciones utilizadas por Angel Vázquez para el curso de Programación 1 en la Facultad de Ingeniería de la Universidad de Cuenca son: 1. https://www.slideshare.net/angenio2/programacin-presentacin-del-curso 2. https://www.slideshare.net/angenio2/programacin-fundamentos-64227508 10 3. https://www.slideshare.net/angenio2/programacin-algoritmos 4. https://www.slideshare.net/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 15 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 20 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-ordenamien - tos 25 Cualquier comentario, duda o sugerencia con respecto a los ejercicios o las presen- taciones siempre es bienvenida. 10 Angel Vázquez-Patiño Universidad de Cuenca Fundamentos Qué es programar 1. * Indique qué es programar 2. La programación se puede defnir como 5 a) el proceso de diseñar, codifcar, depurar y mantener el código fuente de programas de computador b) la ejecución de programas de ordenador desde la línea de comandos c) la instalación de programas en sistemas operativos desde la línea de co- mandos 10 d) las anteriores respuestas no son correctas 3. Pregunta Qué es un lenguaje de programación 1. Cuál(es) de los siguientes son lenguajes de programación a) Eiffel 15 b) C# c) Fortran d) DOS 2. ¿Cuál es el código ASCII decimal de “nueva línea” (line feed)? a) 10 20 b) 13 c) 32 d) Las anteriores respuestas no son correctas 3. ¿Cuál es el código ASCII decimal de la letra A mayúscula? a) 32 25 b) 65 c) 97 11 Angel Vázquez-Patiño Universidad de Cuenca d) 126 4. En un lenguaje débilmente tipado a) Un valor de un tipo puede ser tratado como de otro tipo b) Un valor de un tipo nunca puede ser tratado como de otro tipo 5 c) Un valor de un tipo puede ser tratado como de otro tipo siempre que se realice una conversión de forma explícita d) Las anteriores respuestas no son correctas 5. El lenguaje ensamblador se sitúa a) Más cerca del lenguaje máquina que de los lenguajes de alto nivel 10 b) Más cerca de los lenguajes de alto nivel que del lenguaje máquina c) No hay un lenguaje ensamblador d) Las anteriores respuestas no son correctas 6. Se considera que el primer lenguaje de alto nivel fue a) Ada 15 b) C c) Fortran d) Java 7. Imperativo, declarativo y orientado a objetos son a) Modos de compilar el código fuente de un programa de ordenador 20 b) Modos de defnir el pseudocódigo de un programa de ordenador c) Paradigmas de programación d) Las anteriores respuestas no son correctas 8. Pregunta Modelización de problemas del mundo real 25 Del problema real a su solución por computadora 1. * Enumere las etapas de la resolución de un problema con computador. 12 Angel Vázquez-Patiño Universidad de Cuenca 2. * Describa las etapas de la resolución de un problema con computadora Conceptos acerca de software Variables y tipos de datos 1. int, char, foat, string y boolean son 5 a) Funciones de acceso a datos b) Instrucciones de acceso a datos c) Sentencias de control d) Tipos de datos 2. Una variable es (seleccione una o más opciones según corresponda) 10 a) La que almacena un valor entero b) Una constante que varía su valor c) A la que se le asigna un nombre d) La que permite la entrada de datos e) La que permite almacenar un valor capturado 15 Algoritmos 1. * Explique lo qué es un algoritmo. Dé un ejemplo sencillo. 2. * ¿Cuáles son las características que debe cumplir un algoritmo? 3. * Describa las características de un algoritmo. 4. * Describa qué es un algoritmo y liste (sólo mencionarlas) las formas de re- 20 presentar los algoritmos que conozca. Dé un ejemplo sencillo de algoritmo indicando qué es lo que hace. 5. * Respecto a los algoritmos, ¿qué tipo o tipos de representación existen? Descríbalos. 6. ¿Qué es un algoritmo? 25 a) Un conjunto de instrucciones o reglas bien defnidas, ordenadas y fnitas que permiten realizar una actividad mediante pasos sucesivos que no ge- neren dudas a quien deba realizar dicha actividad. 13 Angel Vázquez-Patiño Universidad de Cuenca b) Es una igualdad entre dos expresiones algebraicas, denominadas miem- bros, en las que aparecen valores conocidos o datos, y desconocidos o in - cógnitas, relacionados mediante operaciones c) Es una relación de variables que pueden ser cuantifcadas para calcular el 5 valor de otras de muy difícil o imposible cálculo y que suministra una so- lución para un problema. d) Las anteriores respuestas no son correctas. 7. * Un algoritmo es (seleccione una o más opciones según corresponda) a) Secuencia de pasos 10 b) Secuencia de instrucciones c) Produce un resultado deseado d) Es fnito e) No siempre se alcanza un resultado Ejercicios desde cero 15 1. Algoritmo para preparar un margarita 2. Algoritmo para comprar los víveres de la semana 3. Algoritmo para construir una mesa 4. Algoritmo para calcular el área y el perímetro de un cuadrado 5. Algoritmo para calcular el volumen de una esfera 20 6. Algoritmo para calcular el IVA de una compra 7. Algoritmo para calcular la edad de una persona (tomar en cuenta sólo el año de nacimiento y el año actual) 8. Algoritmo para calcular el cubo de un número 9. Algoritmo para pasar de grados sexagesimales a radianes 25 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, an- tes 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. 5 13. Algoritmo para convertir minutos a días y horas 14. Sacar el promedio de las notas de 4 estudiantes 15. Algoritmo que calcule el área de un triángulo dadas las coordenadas carte- sianas de sus vértices 16. Algoritmo que calcule el valor de un cateto dados los valores de la hipotenu- 10 sa y del otro cateto de un triángulo rectángulo 17. Algoritmo que calcule el valor de la tangente de los lados opuestos a los ca- tetos 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 15 (revise el concepto de semiperímetro, ecuación 7). 19. Algoritmo que calcule las raíces de una ecuación cuadrática cuya forma ca- nónica es ax2+bx+c=0 20. Algoritmo que muestre el valor absoluto de un número 21. Algoritmo que indica si un triángulo es equilátero, isósceles o escaleno dadas 20 las longitudes de sus lados. 22. Algoritmo para saber si una persona es mayor de edad o no. 23. Algoritmo para saber si un número es par o impar. 24. Algoritmo para saber cuál es el mayor de dos números. 25. Algoritmo para calcular el total a pagar por una compra. Si la compra es de 25 más de $100, el descuento es de 10%, caso contrario no hay descuento. 26. * Algoritmo para saber cuántos dígitos tiene un número entero positivo. 27. Algoritmo para encontrar el ángulo entre dos arreglos. 28. Algoritmo para encontrar la ecuación de una recta dados dos puntos de la misma. 15 Angel Vázquez-Patiño Universidad de Cuenca 29. Algoritmo para pasar coordenadas polares a cartesianas 30. Algoritmo para pasar coordenadas cartesianas a esféricas 31. Algoritmo que calcule la suma de los números del 1 al 10 Diagramas de fujo 5 1. * Describa qué es un diagrama de fujo. Dé un ejemplo sencillo (explique qué hace el algoritmo del ejemplo). 2. * El Diagrama de Flujo se utiliza para mostrar gráfcamente la solución de un problema a) Verdadero 10 b) Falso 3. Pseudocódigo 1. * Describa qué es un pseudocódigo. Dé un ejemplo sencillo (explique qué hace el algoritmo del ejemplo). 2. * El pseudocódigo permite escribir programas utilizando el lenguaje natural. 15 a) Verdadero b) Falso Prueba de escritorio 1. Con respecto a la prueba de escritorio se puede afrmar que (seleccione una o más opciones según corresponda): 20 a) Es una herramienta útil que permite entender qué hace un algoritmo b) Es una herramienta útil que permite entender qué hace un fujograma c) Es una herramienta útil que permite entender qué hace un Lenguaje de Programación 2. Pregunta 16 Angel Vázquez-Patiño Universidad de Cuenca Codificación 1. En el contexto de los diferentes tipos de errores que existen al momento de codifcar 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 5 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 ins- 10 trucció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 5 N I V E R 10 S I N G E N I E R Í A D A D 15 2. * Mostrar la salida en pantalla del siguiente algoritmo Proceso cambioVariable Definir a, b, c, aux Como Entero; a <- 5; b <- 6; 20 c <- 7; aux <- a; b <- a; c <- b; Escribir a, “ ”, b, “ ”, c; 25 FinProceso 3. Se piden dos números y se presentan los resultados de la suma, resta, pro- ducto y división. Primero elabore un algoritmo que resuelva el problema y luego trate de editarlo para que use la menor cantidad de variables posible. 4. * Realice el diagrama de fujo, el pseudocódigo y la prueba de escri- 30 torio del siguiente ejercicio: Pedir al usuario el ingreso de tres números (x, y y z). Mostrar la suma de los tres números. Mostrar el resultado de x+y- z+100. Mostrar el resultado de (x-y)(x+y). 5. Elabore un algoritmo que permita solucionar el siguiente enunciado: se in- gresan 5 números por el teclado del computador, encontrar la suma y el pro- 35 medio de los números ingresados. Represente el algoritmo a través de un diagrama de fujo, pseudocódigo; realice la prueba de escritorio. 18 Angel Vázquez-Patiño Universidad de Cuenca 6. El usuario ingresa la población de un país y su tasa de crecimiento anual (expresada como un porcentaje; por ejemplo 10, 20, 60). Calcular la pobla- ción de ese país luego de uno, dos y tres años, asumiendo que la tasa de cre- cimiento poblacional se mantiene constante. 5 Una vez que haya elaborado su primer algoritmo para solucionar el proble- ma, pregúntese lo siguiente: ¿cuál es el número mínimo de variables que puede utilizar para resolver el problema? Una vez que resuelva el problema con el mínimo número de variables posi- ble, conteste si el orden de las instrucciones cambiaría el resultado (i.e., ya 10 no resolviera el problema). 7. Se ha establecido que el número máximo de latidos de corazón por minuto que cualquier persona puede alcanzar sin correr riesgos de salud es igual a 220 menos la edad de la persona en años. Asociaciones médicas recomiendan mantener el número de latidos por minuto durante una sesión de ejercicio fí- 15 sico en un rango seguro que está entre el 50 y el 85% del número máximo mencionado. Calcular el rango seguro de latidos por minuto usando la edad de una persona como dato de entrada. 8. La jornada de trabajo normal de un empleado durante una semana com- prende 40 horas. Por cada hora trabajada dentro de esas 40 horas un em- 20 pleado recibe el salario normal. Todas las horas trabajadas por encima de esas 40 horas se consideran horas extras. Por cada hora extra el empleado recibe 1.5 veces el salario que recibe por una hora normal. El usuario ingre- sa el salario normal por hora que gana un empleado y el número de horas trabajadas durante la semana. Mostrar el salario total semanal que gana el 25 empleado. Respaldo de información Elaborar un algoritmo que permita calcular el número de CDs necesarios para ha- cer 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á 30 lleno de información y su capacidad está expresada en GB. Cada CD que se utili- zará para el respaldo tiene una capacidad de 700 MB; un GB tiene 1024 MB. Re- presente el algoritmo con un diagrama de fujo y pseudocódigo; además, realice las pruebas de escritorio necesarias para verifcar el correcto funcionamiento del algo- ritmo. 19 Angel Vázquez-Patiño Universidad de Cuenca Cálculos espaciales básicos La mayor parte de los análisis espaciales hacen uso de cálculos geométricos senci- llos, a partir de los cuales se construyen algoritmos más complejos. A continuación se plantean ejercicios relacionados con cálculos básicos que constituyen los funda- 5 mentos del análisis geométrico tanto en el plano como en el espacio. Para más de- talles lea la sección 10.3 Algunos cálculos espaciales básicos del libro de Olaya (2011). Distancia euclidiana Se tienen los puntos A(x1, y1) y B(x2, y2) en el plano cartesiano, elabore el algorit- 10 mo que permite obtener la distancia euclidiana entre A y B. La distancia euclidia- na entre dos puntos (x1, y1) y (x2, y2) es (1) Distancia de Manhattan En el análisis geográfco es habitual utilizar la denominada distancia de Manhattan 15 (vea la fgura 6), (2) Desarrolle un algoritmo que calcule la distancia de Manhattan de dos puntos A(x 1, y1) y B(x2, y2) dados. * Métricas Lp 20 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 25 métricas Lp dadas las coordenadas de dos puntos A(x1, y1) y B(x2, y2) y los valores de las variables β y p. Distancia ortogonal Información tomada de Wikipedia (https://goo.gl/B5NTCj). En Geometría eucli- diana, la distancia de un punto a una recta es la distancia más corta entre ese pun- 30 to y un punto de una línea o recta. Sean A un punto y D una recta (vea la fgura 20 Angel Vázquez-Patiño Universidad de Cuenca 1), se defne la distancia entre A y D como la distancia mínima entre A y un punto M de D. Para una recta D defnida por su ecuación reducida y = ax + b y siendo A un pun- to de la forma A = (xA, yA). 5 (4) Figura 1: Distancia ortogonal del punto A a la recta D. Para calcular la distancia de un punto M, (x0, y0, z0), a un plano D, ax + by + cz + d = 0, se tiene (5) Desarrolle un algoritmo que calcule la distancia ortogonal de un punto a una recta 10 y del mismo punto a un plano. Distancia de un segmento de recta a un punto Dado un segmento de recta defnido por los extremos A(x1, y1) y B(x2, y2), y un punto C(x3, y3), la distancia del punto C al segmento AB se calcula como la distan- cia del punto C hasta la intersección (D) de una recta que pasa por el punto C y es 15 perpendicular al segmento AB (vea la fgura 2). El punto de intersección D tiene las coordenadas x = x1 + u(x2 – x1) y = y1 + u(y2 – y1) donde u se obtiene de 20 (6) 21 Angel Vázquez-Patiño Universidad de Cuenca Figura 2: Distancia de un segmento de recta AB a un punto C. Desarrolle un algoritmo que calcule la distancia de un punto a un segmento de rec- ta. Los datos que se dan son las coordenadas de los puntos A, B y C (vea la fgura 2). Cálculo de interés 5 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 10 telefónica con base en el tiempo que dura la llamada y en el costo por minuto. Re- presente la solución mediante un diagrama de fujo y pseudocódigo; además, verif- que la validez del algoritmo mediante una prueba de escritorio. Cálculo de potencia Se desea calcular la potencia eléctrica de circuito de la fgura 3. Realice un diagra- 15 ma de fujo y el pseudocódigo que representen el algoritmo para resolver el proble- ma. Considere que: y . Figura 3: Circuito eléctrico. 22 Angel Vázquez-Patiño Universidad de Cuenca Área de un triángulo dadas las longitudes de los lados En geometría plana elemental, la fórmula de Herón da el área de un triángulo co- nociendo las longitudes de sus tres lados a, b y c (vea https://goo.gl/OEybZb): donde s es el semiperímetro del triángulo: 5 (7) Desarrolle un algoritmo que permita calcular el área, en cm², de un triángulo, da- das las longitudes, en metros, de sus lados. Represente el algoritmo con un diagra- ma de fujo y pseudocódigo; además, realice las pruebas de escritorio necesarias para verifcar el correcto funcionamiento del algoritmo. 10 Hexágono regular • Desarrolle un algoritmo que dadas las longitudes de un hexágono regular, calcule el área del polígono. • Desarrolle un algoritmo para calcular la apotema y el perímetro de un hexá- gono regular inscrito en una circunferencia de un radio dado. 15 Área de un triángulo dadas las coordenadas de sus vértices El teorema 12 de la línea recta (Charles Lehmann, 1994, chap. 3) menciona: el área del triángulo que tiene por vértices los puntos (x1, y1), (x2, y2) y (x3, y3) es x y1 1 | | 1 1 x 2 2 x3 y2 1 , y3 1 debiendo tomarse el valor absoluto del determinante. Proponga un algoritmo para calcular el área de un triángulo dadas las coordenadas 20 de sus vértices. Puntos colineales Un corolario del teorema 12 de la línea recta (Charles Lehmann, 1994, chap. 3) menciona: una condición necesaria y sufciente para que tres puntos diferentes de coordenadas (x1, y1), (x2, y2) y (x3, y3) sean colineales es que 23 Angel Vázquez-Patiño Universidad de Cuenca x1 y1 1 | | x2 x3 y 2 1 =0 y3 1 Proponga un algoritmo para saber si tres puntos dados son colineales. Movimiento rectilíneo uniforme Proponga un algoritmo para calcular la distancia recorrida (m) por un móvil que tiene velocidad constante (km/h) durante un tiempo t (s). 5 Ponderación de calificaciones Fuente: (Pinales Delgado and Velázquez Amador, 2014) 1. Un estudiante realiza cuatro exámenes (/25) durante el semestre, los cuales tienen la misma ponderación. Realice el pseudocódigo y el diagrama de fujo que representen el algoritmo correspondiente para obtener el promedio de 10 las califcaciones obtenidas. 2. Realice el diagrama de fujo, y pseudocódigo que representen el algoritmo para determinar el promedio que obtendrá un alumno considerando que rea- liza tres exámenes (/100), de los cuales el primero y el segundo tienen una ponderación de 25%, mientras que el tercero de 50%. 15 Sistema de ecuaciones lineales 1. Elaborar un algoritmo que resuelva un sistema de ecuaciones lineales con dos incógnitas. 2. Elaborar un algoritmo que resuelva un sistema de ecuaciones lineales con tres incógnitas. 20 * Vuelto/cambio de una compra Partiendo de una cantidad de dinero menor a un dólar que se tiene que dar de cambio (vuelto), calcular el número de monedas que hay que dar (suponiendo que se cuenta con todas las monedas necesarias) de 1, 5, 10, 25, 50 centavos. Debe dar la menor cantidad de monedas posible. Realice el diagrama de fujo y pseudocódigo 25 del programa; además, verifque la validez del mismo realizando la prueba de escri- torio. 24 Angel Vázquez-Patiño Universidad de Cuenca * Transformación entre unidades de tiempo Partiendo de una cantidad de tiempo medida en segundos, calcular el número de semanas, días, horas, minutos y segundos a los que corresponde. Cálculo de tiempo en horas, minutos y segundos 5 Dos Atletas recorren la misma distancia y se registran sus tiempos en segundos (at1seg) y minutos (at2min) respectivamente. 1. Se desea saber el tiempo total utilizado por el primer atleta en horas (at1horas), minutos (at1min) y segundos. 2. Se desea saber el tiempo total utilizado por el segundo atleta en horas 10 (at2horas), minutos y segundos (at2seg). Transformación de pies a metros Dada una cantidad expresada en pies y otra en metros, determinar la suma pero convertida a pulgadas, a yardas, a metros y a millas por separado. Unidades de capacidad 15 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 consu- mo doméstico y el 25% se dedica al riego. Diseñe un programa que haga lo siguien- te: 1. Determine la cantidad total de agua expresada en yardas cúbicas y en me- 20 tros cúbicos. 2. Determine las cantidades de agua dedicadas al riego y al consumo doméstico expresadas en metros cúbicos y en pies cúbicos. Cálculo de comisión Un vendedor recibe un sueldo base más un 10% extra por comisión de sus ventas, 25 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 cuen- ta su sueldo base y comisiones. 25 Angel Vázquez-Patiño Universidad de Cuenca Cálculo de descuento Una tienda ofrece un descuento sobre el total de la compra y un cliente desea sa - ber cuánto deberá pagar fnalmente por su compra. 1. Realice un algoritmo que calcule un descuento del 15%. 5 2. Realice un algoritmo que calcule un descuento d (%) ingresado por el usua- rio. 3. Realice un algoritmo que calcule un descuento d ingresado y muestre el des- cuento aplicado y el total a pagar de la compra. Calificación de programación 10 Un alumno desea saber cuál será su califcación fnal en la materia de programa- ción. Dicha califcación se compone de los siguientes porcentajes: • 55% del promedio de sus tres califcaciones parciales (cada una de las tres califcaciones fueron dadas sobre 20 y las tres tienen la misma ponderación) • 30% de la califcación del examen fnal (/20) 15 • 15% de la califcación de un trabajo fnal (/20) 1. Realice un programa que calcule la califcación fnal de la materia si la calif- cación fnal está dada sobre 20. 2. Realice un programa que calcule la califcación fnal de la materia si la calif- cación fnal está dada sobre 30. 20 3. Realice un programa que calcule la califcación fnal de la materia si la calif- cación fnal está dada sobre n ( ). 4. Realice un programa que calcule la califcación fnal de la materia si la calif- cación fnal está dada sobre n ( ) y los porcentajes de los que se compone la califcación fnal ya no son 55%, 30% ni 15%, sino que son ingre- 25 sados por el usuario ( , , ; ). Porcentaje de mujeres y hombres Un maestro desea saber qué porcentaje de hombres y qué porcentaje de mujeres hay en un grupo de estudiantes. Realice un programa que pida el número de estu- diantes mujeres, el número de estudiantes hombres y muestre el porcentaje de mu- 30 jeres y el porcentaje de hombres. 26 Angel Vázquez-Patiño Universidad de Cuenca * Cálculo de la edad de una persona Realice un algoritmo que determine aproximadamente (i.e., asuma que todos los años tienen 360 días y que todos los meses tienen 30 días) cuántos meses, semanas, días y horas ha vivido una persona dada la fecha y hora (no minutos) de nacimien- 5 to. Realice el diagrama de fujo y pseudocódigo del programa; además, verifque la validez del mismo realizando la prueba de escritorio. Conversión de radianes a grados centesimales y viceversa * Conversión de temperaturas de Grados Celsius a Fahrenheit y viceversa 10 • Realice un programa que reciba una temperatura en grados celsius y los convierta a grados fahrenheit. • Realice un programa que reciba una temperatura en grados fahrenheit y los convierta a grados celsius. La relación entre grados Celsius y grados Fahrenheit se muestra en la ecuación 20. 15 Área y volumen de una esfera Dado el radio (r) de una esfera, realizar un programa que calcule la superfcie (s) y el volumen (v) de la misma. Longitud y área de un círculo Dado el radio (r) de un círculo, calcular la longitud (l) y el área (a). 20 Solución de ecuaciones de segundo grado Dada la ecuación de segundo grado calcular las raíces o ceros de la función. Vea la ecuación 27. Intercambio de valores de variables 1. Pida al usuario ingresar dos números. El primer número se ingresará en la 25 variable var1 y el segundo número se ingresará en la variable var2. Diseñe un algoritmo que, al fnalizar el proceso, haga que el valor de la variable var1 tenga el valor de la variable var2 y viceversa. Por ejemplo, si se ingresa primero el valor 4 y luego el valor 7, la asignación de las variables sería y ; al fnalizar el algoritmo, la asignación de las variables 30 sería y . 27 Angel Vázquez-Patiño Universidad de Cuenca 2. * Escribir un programa (algoritmo) que permita leer cuatro variables: a, b, c y d. Como resultado fnal se debe tener lo siguiente: a) diagrama de fujo y prueba de escritorio ◦ en a queda el valor de b 5 ◦ en b queda el valor de c ◦ en c queda el valor de d ◦ en d queda el valor de a b) pseudocódigo y prueba de escritorio ◦ en a queda el valor de d 10 ◦ en b queda el valor de c ◦ en c queda el valor de b ◦ en d queda el valor de a El número de variables que maneje su algoritmo no debe sobrepasar las 5 variables. 15 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 va- riables queden de la siguiente manera: • var5 debe contener el valor de la variable var3 • var2 debe contener el valor de la variable var4 20 • var1 debe contener el valor de la variable var5 • var3 debe contener el valor de la variable var2 • var4 debe contener el valor de la variable var1 El número de variables que maneje su algoritmo no debe sobrepasar las 6 variables. 25 Multiplicación de polinomios Dados dos polinomios de segundo grado de parte del usuario, calcular la multipli- cación de dichos polinomios. 28 Angel Vázquez-Patiño Universidad de Cuenca Caída de cuerpos en el vacío Ley de gravitación universal (8) Logaritmo de un número en cualquier base 5 Elaborar un algoritmo que pueda calcular el logaritmo de un número en cualquier base. Vea la ecuación 28. Trabajo conjunto Considere primero los siguientes problemas de razonamiento: 1. Si una persona termina una obra en 3 horas y una segunda persona termina 10 la obra en 6 horas ¿cuánto se demoran en terminar la misma obra si traba- jan 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án- to se demoran en terminar la misma obra si trabajan juntas? 15 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 en- contrar en https://goo.gl/OMZYqA. Miscelánea 5 Algunas de las preguntas fueron basadas en el libro de Vázquez Gómez (2012). 1. * ¿Qué opción utilizaría para identifcar que la variable x1 sea la mayor de 5 variables? a) If (x1>x2) AND (x1>x3) AND (x1>x4) AND (x1>x5): b) If (x1>x2) OR (x1>x3) AND (x1>x4) OR (x1>x5): 10 c) If (x1>x2) AND (x1>x3) OR (x1>x4) AND (x1>x5): 2. * ¿Cuál es el orden correcto para la resolución de un problema con compu- tadora? a) Análisis, Diseño, Especifcación, Escritura, Verifcación b) Análisis, Especifcación, Diseño, Escritura, Verifcación 15 c) Análisis, Diseño, Escritura, Especifcación, Verifcación 3. * ¿A qué estructura de control se refere la siguiente imagen?: a) if b) while c) for 30 Angel Vázquez-Patiño Universidad de Cuenca 4. * ¿Cuál de las siguientes estructuras utilizaría, si se desconoce el número exacto de veces que se debe ejecutar un bloque de instrucciones? a) if b) for 5 c) while 5. * ¿Cuál de las siguientes estructuras utilizaría, si deseo repetir “n” veces un bloque de acciones? a) if b) for 10 c) while 6. * Explique qué estructura de repetición utilizaría si de antemano no supiera el número de iteraciones del bucle sino que se debe repetir cuando una con- dición es verdadera. Dé un ejemplo sencillo (diagrama de fujo, explique qué hace el algoritmo del ejemplo). 15 7. * Explique qué es un contador, para qué lo utilizaría. Dé un ejemplo sencillo (diagrama de fujo, explique qué hace el algoritmo del ejemplo). 8. * ¿Cuál es la diferencia entre un acumulador y un contador? ¿Diría que el acumulador es un caso particular de contador o que un contador es un caso particular de acumulador? Explique su respuesta. 20 9. * Explique qué estructura de repetición utilizaría si de antemano supiera el número de iteraciones del bucle. Dé un ejemplo sencillo (diagrama de fujo, explique qué hace el algoritmo). 10. * Explique qué es un acumulador, para qué lo utilizaría. Dé un ejemplo sen- cillo (diagrama de fujo, explique qué hace el algoritmo del ejemplo). 25 11. * Suponga que usted elabora un algoritmo donde se pide ingresar 100 núme- ros para luego realizar alguna operación con cada uno de ellos. Para el pro- ceso de ingreso de esos 100 números (tenga en cuenta que podrían ser n nú- meros) usted podría utilizar (escoja 1 opción): a) un bucle (lazo) for 30 b) un bucle (lazo) if 31 Angel Vázquez-Patiño Universidad de Cuenca c) un bucle (lazo) while d) tanto la opción a y la opción b funcionarían e) tanto la opción a y la opción c funcionarían 12. if, else, for y while son 5 a) Funciones de acceso a datos b) Sentencias de control c) Tipos de datos d) Las anteriores respuestas no son correctas 13. * Un bucle, ciclo o lazo es 10 a) Una sentencia que permite decidir si se ejecuta o no se ejecuta una sola vez un bloque aislado de código b) Una sentencia que ejecuta otra sentencia que a su vez ejecuta la primera sentencia c) Una sentencia que permite ejecutar un bloque aislado de código varias 15 veces hasta que se cumpla (o deje de cumplirse) una condición d) Todas las anteriores respuestas son correctas 14. ¿Qué muestra el siguiente algoritmo? Algoritmo misterioso x <- 1 20 z <- 0 Mientras x <= 10 Hacer y <- x * x Escribir y z <- z + y 25 x <- x + 1 FinMientras Escribir z FinAlgoritmo 15. * ¿Cuál de los siguientes algoritmos imprime en pantalla lo que está a conti- 30 nuación? * ***** 32 Angel Vázquez-Patiño Universidad de Cuenca ** ***** * ***** 5 ** ***** * ***** a) 10 Proceso estrellas2 b1 <- 1; b2 <- 0; c1 <- 20; Repetir 15 Si b1 = 1 Entonces Si b2 = 1 Entonces Escribir "**"; b2 <- 0; Sino 20 Escribir "*"; b2 <- 1; FinSi b1 <- 3; Sino 25 Escribir "*****"; b1 <- 1; FinSi c1 <- c1 + 2; Hasta Que c1 < 1 30 FinProceso b) Proceso estrellas1 b1 <- 1; b2 <- 0; 35 Para i<-10 Hasta 100 Con Paso 10 Hacer Si b1 = 1 Entonces Si b2 = 1 Entonces Escribir "**"; b2 <- 0; 33 Angel Vázquez-Patiño Universidad de Cuenca Sino Escribir "*"; b2 <- 1; FinSi 5 b1 <- 3; Sino Escribir "*****"; b1 <- 1; FinSi 10 FinPara FinProceso c) Proceso estrellas3 b1 <- 1; 15 b2 <- 0; c1 <- 10; Mientras c1 <= 10 Hacer Si b1 = 1 Entonces Si b2 = 1 Entonces 20 Escribir "**"; b2 <- 0; Sino Escribir "*"; b2 <- 1; 25 FinSi b1 <- 3; Sino Escribir "*****"; b1 <- 1; 30 FinSi c1 <- c1 + 1; FinMientras FinProceso 16. ¿Cuál es el resultado de ejecutar el siguiente algoritmo? 35 Algoritmo algortimo_misterioso cont <- "*" l = 5*5-20 Para x <- 1 Hasta l Con Paso 1 Hacer Escribir cont 40 cont <- cont+"*" 34 Angel Vázquez-Patiño Universidad de Cuenca FinPara Para i <- l Hasta 1 Con Paso -1 Hacer cont <- "" l <- l-1 5 Para j <- l Hasta 1 Con Paso -1 Hacer cont <- cont+"*" FinPara Escribir cont FinPara 10 FinAlgoritmo 17. * Con respecto a las estructuras de repetición estudiadas en el curso, cuál de las siguientes proposiciones es verdadera: a) SIEMPRE es posible utilizar un for para obtener el mismo comporta- miento iterativo que utilizando un while. 15 b) SIEMPRE es posible utilizar un while para obtener el mismo comporta- miento iterativo que utilizando un for. c) Existen SOLAMENTE algunos casos donde es posible utilizar un while para obtener el mismo comportamiento iterativo que utilizando un for. d) las opciones a, b y c son proposiciones verdaderas. 20 18. * ¿Qué muestra el siguiente algoritmo? Algoritmo misterioso Definir j Como Entero; Para i = 3 Hasta 1 Con Paso -1 Hacer j = i + 1; 25 Mientras j < 4 Hacer Escribir j – 1; j = j + 1; FinMientras FinPara 30 FinAlgoritmo 19. * Realice la prueba de escritorio y muestre el resultado impreso del siguiente programa. 35 Angel Vázquez-Patiño Universidad de Cuenca 20. ¿Qué muestra el siguiente algoritmo? Proceso desconocido i = 0; Para i = (i + 1) hasta 10 Con Paso 1 Hacer 5 Mostrar i - 1; i = i + 1; FinPara FinProceso 21. ¿Qué muestra el siguiente algoritmo? 10 Algoritmo WhatsTheOutput n = 5 Mientras n>0 Si (n mod 2) = 0 suma = suma - 1 15 FinSi suma = suma + 1 n = n - 1 mostrar suma FinMientras 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 5 d) 1 2 2 4 5 22. * Implementar el mismo algoritmo utilizando las estructuras de control While y Repeat (una versión usando While y otra versión usando Repeat). Proceso estrellas Definir b1 Como Entero; 10 b1 <- 1; Para i <- 10 Hasta 100 Con Paso 10 Hacer Si b1 = 1 Entonces Escribir “*”; b1 <- 0; 15 Sino Escribir “*****”; b1 <- 1; FinSi FinPara 20 FinProceso 23. * ¿Qué muestra el siguiente algoritmo? Algoritmo misterioso Definir c1, c2 Como Entero; Para i <- 8 Hasta 0 Con Paso -2 Hacer 25 c1 <- -1; Repetir Escribir Sin Saltar "X"; c1 <- c1 + 1; Hasta Que c1 >= i 30 c1 <- 8 - i; c2 <- 0; Mientras c2 < c1 Hacer Escribir Sin Saltar "O"; c2 <- c2 + 1; 35 Fin Mientras Escribir " "; 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 de- nominar también estructuras de decisión, condicionales o alternativas. 5 a) Estructuras selectivas b) Estructuras simples c) Estructura secuencial d) Estructuras complejas 25. Ejecuta una determinada acción cuando se cumple una determinada condi- 10 ción. a) For b) Do-while c) Repeat-until d) If-then 15 26. Es aquella variable que es utilizada en un ciclo repetitivo y tiene por objeti- vo almacenar valores cuyos incrementos o decrementos son en forma cons- tante por cada iteración de ciclo o bucle en cuestión. a) Arreglo b) Contador 20 c) Ciclo d) Acumulador e) Bucle 27. Por lo general, se emplean en los ciclos para controlar el número de iteracio- nes en los mismos, o para almacenar totales de elementos. 25 a) Arreglo b) Array c) Ciclo d) Bandera e) Contador 38 Angel Vázquez-Patiño Universidad de Cuenca 28. Es el hecho de repetir la ejecución de una secuencia de acciones. a) Array b) Contador c) Iteración 5 d) Bucle 29. Ejemplos de los ciclos repetitivos más comunes. a) For, if-else, if-then-else b) While, for, if-else c) While, do-while y for 10 d) Do-while, for, if-then-else 30. Puede estar compuesto de todos sus elementos de tipo cadena, otro puede tener todos sus elementos de tipo entero, etc. a) Arreglo b) Contador 15 c) Ciclo d) Array 31. Dado el siguiente pseudocódigo, ¿cuál será el valor fnal de la variable i? Algoritmo valorDeI i <- 1; 20 Leer n; Mientras i < n Hacer i <- i + 1; Fin Mientras FinAlgoritmo 25 a) 1 si el valor introducido es igual o menor que 0; el valor introducido me- nos uno en cualquier otro caso b) 1 si el valor introducido es igual o menor que 1; el valor introducido en cualquier otro caso c) 1 si el valor introducido es igual o menor que 1; el valor introducido más 30 uno en cualquier otro caso 39 Angel Vázquez-Patiño Universidad de Cuenca d) Las anteriores respuestas no son correctas 32. * ¿Cuál es el resultado de ejecutar el siguiente algoritmo? Algoritmo misterioso a = 0 5 b = a+10 Según b Hacer 0: Mientras b > a Hacer Escribir a 10 b = b + a Fin Mientras 10: Si a = 0 Entonces Escribir b + 11 15 b = b + a FinSi 11: Escribir '11' De Otro Modo: 20 Escribir a Fin Según FinAlgoritmo 33. * ¿Cuál es el resultado de ejecutar el siguiente algoritmo? ¿Cuál sería el re- sultado si se reemplaza la primera instrucción (fla = 5) por fla = 4? 25 Algoritmo misterioso fila = 5 Mientras fila >= 1 Hacer columna = 1 Mientras columna <= 10 Hacer 30 Si (fila Mod 2) = 0 Entonces Escribir Sin Saltar "<" Sino Escribir Sin Saltar ">" FinSi 35 columna = columna + 1 FinMientras fila = fila - 1 Escribir "" FinMientras 40 FinAlgoritmo 40 Angel Vázquez-Patiño Universidad de Cuenca 34. * ¿Cuál es el resultado de ejecutar el siguiente algoritmo? Algoritmo misterioso n = -1 Mientras n <= 3 Hacer 5 Si (n >= 0) Si (n = 2) Escribir "uno" FinSi Sino 10 Escribir "dos" FinSi n = n + 1 FinMientras Escribir "tres" 15 FinAlgoritmo 35. ¿Cuál es el resultado de ejecutar el siguiente algoritmo? Proceso algoritmo_misterioso definir a Como Entero; definir b Como Entero; 20 definir x Como Entero; a<-4; b<-0; Repetir a<-a+2; 25 b<-b+1; Hasta Que a>b; a<-a+3; b<-b+2; a<-a+b%2+a MOD 3; 30 x<-trunc(a/b); Si (x>b) entonces b<-b+4; a<-b mod 3; x<-a MOD b; 35 Finsi b<-b+1; x<-x*trunc(10/8) + a mod b; Escribir "el valor de la variable a es : ", a; Escribir "el valor de la variable b es : ", b; 40 Escribir "el valor de la variable x es : ", x; FinProceso 41 Angel Vázquez-Patiño Universidad de Cuenca 36. * ¿Cuál de los siguientes algoritmos NO hace lo mismo que los otros dos? a) El algoritmo opcion_A b) El algoritmo opcion_B c) El algoritmo opcion_C 5 37. * Seleccione la(s) respuesta(s) correcta(s) respecto a las instrucciones de re- petición. La instrucción do-while es similar a la instrucción while, la diferen- cia es que: a) El do-while evalúa su expresión al inicio y while lo hace al fnal al fnal b) El do-while evalúa su expresión al fnal y el while lo hace al inicio 10 c) El while se ejecuta por lo menos una vez d) El do-while se ejecuta por lo menos una vez 38. * ¿Cuál de los siguientes algoritmos NO presenta los mismos resultados que los otros dos? a, b ∈ [0, ∞) y a > b. 42 Angel Vázquez-Patiño Universidad de Cuenca a) El algoritmo opcion_1 15 b) El algoritmo opcion_2 c) El algoritmo opcion_3 39. Para el diagrama de fujo mostrado a continuación a) Escribir el pseudocódigo correspondiente b) Realizar la prueba de escritorio 20 c) Mostrar cual sería la salida en pantalla 43 Angel Vázquez-Patiño Universidad de Cuenca 40. Pregunta Estructura de decisión IF Miscelánea 1. Escriba un algoritmo que indique si un número dado es par o impar. Vea 5 https://goo.gl/SRuAY2 2. Escriba un algoritmo que indique si un número dado es positivo, negativo o nulo (i.e., igual a cero). 3. Dados tres números indicar si cada uno es par o impar. Además, indicar si todos los números son pares, si son impares o si están “mezclados” (no todos 10 son pares ni todos son impares). 4. Mostrar un menú con las opciones Archivo, Buscar y Salir: Menú [1] Archivo [2] Buscar 15 [3] Salir Opción [1-3]: _ El usuario ingresa una de las opciones y de acuerdo a la ingresada (1-3) es- cribe en pantalla “Opción 1: Archivo.”, “Opción 2: Buscar.” o “Opción 3: 44 Angel Vázquez-Patiño Universidad de Cuenca Salir.”. En caso de que el usuario no indique ninguna de las opciones, se debe mostrar el mensaje de error “Debe ingresar una opción correcta.”. 5. Dados tres números, indicar si se ingresaron en orden ascendente, descen- dente o sin ningún orden. 5 6. Escriba un algoritmo para verifcar si los valores de tres lados dados corres- ponden a un triángulo. 7. Escriba un algoritmo para verifcar si los ángulos de los vértices de un trián- gulo cumplen con la condición para formar un triángulo. 8. Escriba un algoritmo para ingresar los lados de un triángulo y verifcar si es 10 un equilátero, isósceles o escaleno. Puede darse el caso que el usuario ingrese valores de lados que no corresponden a un triángulo; validar eso. 9. El usuario ingresa tres números que representan las longitudes de los lados de un triángulo. Indicar si se trata de un triángulo rectángulo. 10. Escriba un algoritmo que dado un mes del año (en letras), indique el núme- 15 ro de días de ese mes. 11. Escriba un algoritmo para ingresar un número y verifcar si es divisible para 5 y para 11. 12. Elabore un algoritmo que permita solucionar el siguiente enunciado: se in- gresan 5 números por el teclado del computador, encontrar el número ma- 20 yor, el número menor, la suma y el promedio entre número mayor y el me- nor. Represente el algoritmo a través de un diagrama de fujo, pseudocódigo; realice la prueba de escritorio. 13. El IESS necesita clasifcar 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 25 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 anti- 30 güedad en su empleo de 25 años o más. Determinar en qué tipo de jubila- ción quedará adscrita una persona. 45 Angel Vázquez-Patiño Universidad de Cuenca 14. Exprese las siguientes dos líneas de código mediante estructuras condiciona- les anidada usando solamente expresiones simples (i.e., sin usar operadores lógicos). i f ( a < b && c != d ) && ( b > d | | b == d ) b1 ; 5 i f ( a < b && c != d ) && ( b > d | | b == e ) b2 ; 15. Aprobación de curso Dadas las notas de dos pruebas y dos exámenes (/20), calcular el promedio de las cuatro notas y si la persona tiene 12 o más, aprueba el curso, caso contrario, pierde el año. 10 Aumento de sueldo en base a sueldo actual Nota alfabética El programa solicita una califcación al usuario que está en el rango [0, 20] y la transforma en nota alfabética según la siguiente tabla: Nota Nota numérica alfabética [0; 10,5) Insufciente [10,5; 11) Sufciente [11; 15) Bien [15; 18) Notable [18; 20] Sobresaliente Día de la semana 15 Se pide un número de la semana entre 1 y 7 (1 es domingo) al usuario y se presen- ta el nombre del día. 46 Angel Vázquez-Patiño Universidad de Cuenca Estación del año Se pide un número de mes entre 1 y 12 al usuario y se presenta a qué estación del año pertenece. Divisibilidad de dos números 5 Dados dos números n1 y n2: • Realizar un programa que indique si el número n2 es divisor del número n1. • Realizar un programa que verifque que el número n1 sea mayor o igual al número n2, si es así el programa debe indicar si el número n2 es divisor del número n1, caso contrario el programa debe decir “¡ERROR! El primer nú- 10 mero ingresado debe ser mayor o igual al segundo.” Aritmética básica con 3 números • Escriba un algoritmo que dados tres números indique si el tercero es el re- sultado de la suma del primero y el segundo. • Escriba un algoritmo que dados tres números indique si el tercero es el re- 15 sultado de la resta entre los dos primeros: 1) el primero menos el segundo y 2) el segundo menos el primero. • Escriba un algoritmo que dados tres números indique si el tercero es el re- sultado de la multiplicación del primero por el segundo. • Escriba un algoritmo que dados tres números indique si el tercero es el resto 20 de la división entre los dos primeros: 1) el primero para el segundo y 2) el segundo para el primero. Valide su algoritmo para que se evite un error de división para cero, mostrando, antes de que se dé dicho error, que el divisor es cero. * Incentivo por producción 25 Se tiene registrada la producción (unidades) logradas por un operario a lo largo de la semana (lunes a sábado). Elabore un algoritmo que nos muestre o nos diga si el operario recibirá incentivos sabiendo que el promedio de producción mínimo es de 100 unidades. Realice el diagrama de fujo, el pseudocódigo y la prueba de escrito- rio. 47 Angel Vázquez-Patiño Universidad de Cuenca Posición del menor de n números 1. Determine el menor valor de 2 números, indicando además en qué orden fue ingresado (i.e., si fue el primer número o el segundo). Considere que el me- nor valor no puede repetirse. Por ejemplo, si los números ingresados fueran: 5 14, 19. El resultado debe ser: “El menor valor ingresado fue 14 y correspon- de al 1° número ingresado”. 2. Determine el menor valor de 3 números, indicando además en qué orden fue ingresado (i.e., si fue el primero en ser ingresado, si fue el segundo o si fue el tercero). Considere que el menor valor no puede repetirse. Por ejemplo, si 10 los números ingresados fueran: 14, 19, 14. El resultado debe ser: “El menor valor ingresado fue 14 y corresponde al 3° número ingresado”. 3. Determine el menor valor de 5 números, indicando además en qué orden fue ingresado. Considere que el menor valor no puede repetirse. Por ejemplo, si los números ingresados fueran: 14, 19, 14, 16, 19. El resultado debe ser: “El 15 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) al- canzado en el tiro efectuado, multiplicado por un factor según la siguiente tabla: Puntaje original Factor 0 0 [1, 5] 6 [6, 8] 9 [9, 10] 10 20 Para un tiro realizado determine el puntaje alcanzado aplicando el factor que le co- rresponde. Pago en estacionamiento En un estacionamiento cobran $2 por hora o fracción los días Lunes, Martes y Miércoles, $2.5 los días Jueves y Viernes, $3 los días Sábado y Domingo. Se consi- 25 dera 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 Número de cifras de un número Diseñe un programa que lea un número entero (positivo o negativo) de máximo 4 cifras (validar) y determine si tiene 1, 2, 3 o 4 cifras imprimiendo lo que correspon - da. 5 Número con ceros a la izquierda Diseñe un programa que ingrese un número entero positivo que no tenga más de 4 cifras y lo imprima completando con ceros por la izquierda de tal manera que siempre se ve con 4 cifras. Por ejemplo, si el número ingresado fuera 18, el resultado deberá ser 0018. Si el número ingresado no fuera correcto debe imprimir 10 un mensaje de error. Promoción en una papelería En una Librería han puesto en oferta la venta de cuadernos al por mayor, obs- equiando lapiceros Lucas, Cross y/o Novo dependiendo de la cantidad de cuader- nos comprados, de la siguiente manera: 15 • Compra menos que 12, ningún obsequio. • Compra no menos que 12 pero menos que 24, obsequio: 1 Lucas por cada 4 cuadernos. • Compra no menos que 24 pero menos que 36, obsequio: 2 Cross por cada 4 cuadernos. 20 • Compra no menos que 36, obsequio: 3 Novo por cada 4 cuadernos. Adicio- nalmente 1 Lucas y 1 Cross. Diseñe un algoritmo que determine cuántos lapiceros Lucas, Cross y Novo recibe un cliente como obsequio. Saldos y pagos mínimos 25 Fuente: (Pinales Delgado and Velázquez Amador, 2014, p. 92) El banco “Bandido de peluche” desea calcular para uno de sus clientes el saldo ac- tual (saldoAct), el pago mínimo (pagoMin) y el pago para no generar intereses (pa- goSinInteres). 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) ante - 30 rior (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 (ac- 49 Angel Vázquez-Patiño Universidad de Cuenca tual) 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 fujo y pseudocódigo. 5 Ordenamiento de números • Se pide a un usuario 2 números y se muestran en orden ascendente. • Se pide a un usuario 3 números y se muestran en orden descendente. • Se pide a un usuario 4 números y se muestran en el orden que quiera el usuario. 10 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, con- sonante, número u otro. 15 Conversión de unidades de masa Dada la masa expresada en Kg transformar a otra unidad de acuerdo a un menú. El menú tiene las siguientes opciones: 1. Hectogramos 2. Gramos 20 3. Decigramos 4. Centigramos 5. Miligramos Mayor y menor de 10 números El usuario ingresa 10 números y el programa muestra el menor y el mayor de los 25 números ingresados. 50 Angel Vázquez-Patiño Universidad de Cuenca * Pares o nones Implemente el juego de manos pares o nones con la diferencia de que se podría mostrar uno hasta todos los dedos de la mano (1-5). Uno de los jugadores es el computador y el otro es el usuario del programa. El fujo de ejecución del progra- 5 ma es: 1. El computador elige pares o nones con la misma probabilidad y lo muestra en pantalla. 2. El computador hace su elección del 1 al 5 (“mostrar” uno a cinco dedos) y no lo muestra en pantalla. 10 3. El usuario hace su elección del 1 al 5 y lo ingresa mediante el teclado. 4. El computador muestra en pantalla la suma de las dos elecciones e indica quién ganó. Si la suma es par, gana el que haya quedado con la opción pa- res; si la suma es impar, gana el que haya quedado con la opción nones. Nota: en el lenguaje de programación C rand()%N genera un número aleatorio en- 15 tero en el intervalo [0, N). srand(time(NULL)) inicializa la semilla del generador de números pseudoaleatorios. Para usar rand(), srand() y time(), se necesita importar las librerías stdlib.h y time.h. 51 Angel Vázquez-Patiño Universidad de Cuenca Estructura de selección Miscelánea 1. Elabore un algoritmo que calcule independientemente la suma de los pares y los impares de los números entre 1 y 1000, utilizando un switch. 5 2. En la feria del hogar se ha encontrado una tienda que vende al contado y al crédito en 6, 12, 18, 24 mensualidades sus artefactos: televisores, refrigerado- ras, hornos micro hondas. Se desea saber en cualquier momento cuántas ventas se han realizado al contado, cuántas al crédito en 6, cuantas al crédi- to en 12, cuántas al en 18, cuántas en 24 mensualidades. 10 3. Una persona va de compras N veces a un supermercado donde le obsequian un chocolate por cada vez que compra más de $5. Se desea saber cuántos chocolates ha ganado en las N veces que compró. 4. Una empresa tiene N trabajadores, a cada uno de ellos se le paga un sueldo según las horas trabajadas a cierta tarifa por hora. Además a cada trabaja- 15 dor cuyo sueldo superó los $600 se le descuenta 10% por concepto de im- puesto a la renta. Se desea saber cuántos trabajadores gana más de $600, cuántos ganan hasta $600 y cuánto dinero se tiene que pagar al estado por concepto de impuestos 5. Se ponen a la venta las entradas para un partido de fútbol internacional. El 20 precio de la entrada depende de la tribuna: tribuna norte y sur cuesta $25, tribuna este cuesta $45 y tribuna oeste cuesta $65. Diseñe un algoritmo que controle la venta de entradas a fn de poder saber la cantidad de personas que asisten a cada tribuna, la cantidad total de personas (asistencia) y el monto total recaudado por la venta de todas las entradas (recaudación). 6. 25 Meses, de números a letras El programa solicita el ingreso de un número que representa un mes y lo escribe en letras. Si el número ingresado es mayor que 12 o menor que 1, el programa envía el mensaje “¡ERROR! No existe tal mes.”. En caso contrario, si el número ingresado fue 1, se imprimirá en pantalla “Enero”, si el número ingresado fue 2, se imprimirá 30 “Febrero”, etc. 52 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 pre- sentar un mensaje que diga “Fecha no reconocida.”. Tome en cuenta la siguiente in- 5 formación: • Acuario: enero 21 - febrero 20 • Piscis: febrero 21 - marzo 20 • Aries: marzo 21 - abril 20 • Tauro: abril 21 - mayo 20 10 • Géminis: mayo 21 - junio 20 • Cáncer: junio 21 - julio 20 • Leo: julio 21 - agosto 20 • Virgo: agosto 21 - septiembre 20 • Libra: septiembre 21 - octubre 20 15 • Escorpión: octubre 21 - noviembre 20 • Sagitario: noviembre 21 - diciembre 20 • Capricornio: diciembre 21 - enero 20 Total de ventas Ingresar la información de personas hasta que el usuario ingrese n (no más datos). 20 Ingrese la nacionalidad (ecuatoriano, ecu; extranjero, ext), la talla (sma, med, lar), sexo (masculino, mas; femenino, fem) y el importe por la venta (imp). Se calcula un descuento de acuerdo a las siguientes condiciones: • ecu, sma, mas: descuento 5%. • ecu, sma, fem: descuento 4%. 25 • ecu, med, mas: descuento 7%. • ecu, med, fem: descuento 9%. • ecu, lar, mas: descuento 10%. • ecu, lar, fem: descuento 12%. • ext, sma, mas: descuento 4%. 30 • ext, sma, fem: descuento 5%. • ext, med, mas: descuento 9%. • ext, med, fem: descuento 7%. • ext, lar, mas: descuento 12%. • ext, lar, fem: descuento 10%. 53 Angel Vázquez-Patiño Universidad de Cuenca Mostrar el número de clientes nacionales, el número de clientes extranjeros, núme- ro de tallas sma, med y lar, número de hombres, número de mujeres, e importe to - tal por todas las compras. 54 Angel Vázquez-Patiño Universidad de Cuenca Estructura de repetición WHILE Miscelánea 1. * Realice la prueba de escritorio para el siguiente algoritmo e indique cuál es el resultado que se obtiene. 5 Algoritmo misterioso Definir A, B Como Entero; Leer A; Leer B; Mientras (A<>B) Hacer 10 Si (A>B) Entonces A <- A-B; SiNo B = B–A; FinSi 15 FinMientras Mostrar A; FinAlgoritmo 2. Una pareja desea invertir su dinero en un banco, el cual otorga el 2% de in- terés anual. ¿Cuál será la cantidad de dinero que esta persona tendrá al 20 cabo de un año si la ganancia de cada mes es reinvertida? 3. Se sabe que la media geométrica y la media aritmética se calculan mediante las siguientes fórmulas: • MedG = RaízN-ésima(num1 num2 num3 ... numN) • MedA = (num1 + num2 + num3 + ... + numN) / N 25 Desarrolle un algoritmo que lea N valores, calcule ambas medias y que im- prima la que sea menor. 4. Pregunta Números de n a m 1. Hacer un programa que imprima los números enteros del 1 al 5. 30 2. Hacer un programa que imprima los números enteros desde 1 a n. 3. Hacer un programa que imprima los números enteros desde n a 1. 4. Hacer un programa que imprima los números enteros de n a m (n<m). 5. Hacer un programa que imprima los números enteros de m a n (n<m). 55 Angel Vázquez-Patiño Universidad de Cuenca Números pares del 1 al 100 Desarrolle un algoritmo que imprima en pantalla los números pares del intervalo [1 , 100]. Acumulador del 1 al 100 5 Hacer un programa que imprima la suma de los 100 primeros números naturales. Contador de números impares Hacer un programa que imprima en pantalla los números impares del 1 hasta el 10 y que imprima en pantalla la cantidad de números impares. Múltiplos de n 10 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 15 números enteros m y w (m<w). Suma y promedio de n números 1. Pedir 5 números al usuario y mostrar la suma y promedio de los números in- gresados. 2. Preguntar al usuario cuántos números va a ingresar. Ingresar los n números 20 y mostrar la suma y promedio de los n números ingresados. Mayor y menor de una serie de números 1. Imprimir el mayor de una serie de cinco números ingresados por el usuario. 2. Imprimir el menor de una serie de cinco números ingresados por el usuario. 3. Preguntar al usuario cuántos números va a ingresar. Leer los n números. Im- 25 primir el mayor y el menor de los n números ingresados. Subsidio familiar El gobierno ha implementado como parte de su programa social, un subsidio fami- liar bajo la siguiente reglamentación: 56 Angel Vázquez-Patiño Universidad de Cuenca • 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. 5 • Si la madre de familia fuera viuda, la familia recibe $20 adicionales. Determinar el monto mensual que recibirá una familia de acuerdo a su realidad fa- miliar. Validación: haga una siguiente versión de su programa en donde se indique cuan- do el usuario ingresa un valor incoherente; si se ingresa un valor incoherente, el 10 programa termina en ese momento. * Factura Desarrolle un algoritmo que realice la facturación de productos. Considerando que se realiza la compra de N productos, que cada producto tiene un precio de venta X, y que hay algunos productos que se les impone el 14% del IVA. El programa de- 15 berá tener las siguientes opciones de menú: 1. Registro de items: ingreso de los precios de los N productos indicando si se les aplica o no el IVA. 2. Facturación: muestra el valor total a pagar y el descuento realizado. 3. Salir 20 Para calcular el descuento: si el valor total es mayor a 100 dólares se realizará un descuento del 10% sobre el monto total. Si el valor total es mayor a 200 dolares se realizará un descuento del 5% sobre el monto total. Repetición de series 1. Imprimir 5 veces la serie de números del 1 al 6. 25 2. Pedir el número de veces que el usuario quiere repetir la serie de números del 1 al 6. Repetir las n veces la serie. 3. Pedir el número de veces que el usuario quiere repetir una serie. Pedir el lí- mite inferior (m) y superior (w) de la serie. Repetir las n veces indicadas la serie de números desde m a w. 30 Encuesta a familias Realice un programa que a través de la computadora se desea hacer la siguiente encuesta: 57 Angel Vázquez-Patiño Universidad de Cuenca • Tienen televisión o no tienen. Contar los que tienen y los que no tienen. • Es en color o no es en color. Contarlos. • Piensan compararlos o no. Contarlos. • Hallar el porcentaje de cada uno. 5 Conteo de votos Leer 550.000 votos otorgados a 3 candidatos ( ) a alcalde de Cuenca e imprimir el número del candidato y su cantidad de votos. * Contador de mayores de edad Elabore un algoritmo que solicite la edad de n personas, y que muestre cuántos son 10 mayores de edad y cuántos son menores de edad. Mayores de edad son las personas de 18 años o más. Factorial de un número El factorial de un número se calcula de la siguiente manera: … 15 Por ejemplo, el factorial de 5 es Elabore un algoritmo que calcule el factorial de un número entero positivo. Suma y promedio de factoriales 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 20 promedio de todos los factoriales de los números pares comprendidos entre esos dos números ingresados. Mostrar la suma y el promedio. Se pide representar el algoritmo a través del diagrama de fujo, pseudocódigo y realizar la prueba de escritorio. Ejemplo: 58 Angel Vázquez-Patiño Universidad de Cuenca A= 2 B= 8 Números contenidos entre A y B son: 3,4,5,6,7 de donde 4 y 6 son números pares. Se calcula el factorial de 4! = 24 y de 6!=720. La suma de los 2 factoriales es 24 + 5 720 = 744, el promedio es 744/2= 372. Combinatoria El número de combinaciones que podemos formar tomando m elementos de un conjunto con n elementos es: (9) 10 Implemente un algoritmo que pida el valor de n y m y calcule el valor de la combi- natoria. Hay que tomar en cuenta que el valor de n a de ser mayor o igual que m (validar). Puede comprobar la validez de su programa introduciendo los valores n=15, m=10; el resultado es 3003. Simple random walks 15 Random walks (https://goo.gl/k4SwIu) es una formalización matemática de la tra- yectoria que resulta de hacer sucesivos pasos aleatorios. Por ejemplo, la ruta traza- da por una molécula mientras viaja por un líquido o un gas y el camino que sigue un animal en su búsqueda de comida. Imagine un caminante aleatorio con eventos {0, 1} (en un tiempo t cualquiera: 0, 20 no camina; 1, camina un paso) y probabilidad P(0) = 0,5 y P(1) = 0,5. Realice un algoritmo que imprima la trayectoria del caminante aleatorio en los tiempos [1, 20] como se muestra en el vídeo https://youtu.be/S_YUVIUIW60. Luego de realizado el algoritmo, revise el ejercicio llamado Random walks. * Dibujo de cuadrado 25 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 30 ***** 59 Angel Vázquez-Patiño Universidad de Cuenca * * * * * * ***** 5 * Dibujo de cuadrado y rombo Dado un valor N, muestre un cuadrado de lado 2N con un rombo en el centro. Por ejemplo Ingrese N: 5 Ingrese N: 6 Ingrese N: 3 ********** ************ ****** **** **** ***** ***** ** ** *** *** **** **** * * ** ** *** *** * * * * ** ** ** ** * * * * ****** ** ** * * *** *** ** ** **** **** *** *** ********** **** **** ***** ***** ************ Fórmula del binomio El miembro izquierdo de la ecuación 10 se puede calcular realizando la sumatoria 10 del miembro derecho (la fórmula para x+y está en la ecuación 11): (10) Desarrolle un algoritmo para calcular (1+x)n utilizando la sumatoria. Para más in- formación vea el Álgebra elemental moderna (González y Mancill, 2009, cap. 15). Triángulo de Pascal 15 El triángulo de Pascal es una representación de los coefcientes binomiales ordena- dos en forma triangular. Su construcción está relacionada con los coefcientes bino- miales según la regla de Pascal. Si (11) 60 Angel Vázquez-Patiño Universidad de Cuenca 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), entonces los valores de la combinato- ria son los coefcientes del desarrollo del binomio. Su construcción es de la siguiente manera: 5 1. se comienza en el número 1 centrado en la parte superior 2. se escriben una serie de números en las casillas situadas en sentido diagonal descendente, a ambos lados, del siguiente modo: se suman las parejas de ci- fras situadas horizontalmente (1 + 1), y el resultado (2) se escribe debajo de dichas casillas; el proceso continúa escribiendo en las casillas inferiores la 10 suma de las dos cifras situadas sobre ellas (1 + 2 = 3), etc. Una animación del proceso se puede ver en https://goo.gl/J0hSES. La fgura 4 muestra un ejemplo de la construcción del triángulo de Pascal para n=7. Figura 4: Triángulo de pascal para n=7. Desarrolle un algoritmo que permita visualizar un triángulo de Pascal dado el valor de n. Represente el algoritmo con un diagrama de fujo y pseudocódigo; además, 15 realice las pruebas de escritorio necesarias para verifcar el correcto funcionamiento del algoritmo. Finalmente, implemente el algoritmo. Interés fijo anual Un cliente de un banco deposita equis cantidad de dólares cada mes en una cuenta de ahorros. La cuenta percibe un interés fjo durante un año de 10% anual. Realice 20 un algoritmo para determinar el total de la inversión fnal de cada año en los pr- óximos N años. Vea periodos de interés compuesto: http://goo.gl/VByZsr 61 Angel Vázquez-Patiño Universidad de Cuenca Promedio de edad en escuela Los directivos de equis escuela requieren determinar cuál es la edad promedio de cada uno de los M salones y cuál es la edad promedio de toda la escuela. Realice un algoritmo para determinar estos promedios y represente la solución mediante el 5 diagrama de fujo, el pseudocódigo y el diagrama N/S. Trabajo conjunto Considere primero los siguientes problemas de razonamiento: 1. Si una persona termina una obra en 3 horas y una segunda persona termina la obra en 6 horas ¿cuánto se demoran en terminar la misma obra si traba- 10 jan 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án- to se demoran en terminar la misma obra si trabajan juntas? Luego de resolver los ejercicios anteriores, realice un algoritmo que pida el tiempo 15 (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 flas consecuti- vas, pero cada impresión ir desplazada cuatro columnas hacia la derecha 20 • Introducir una frase por teclado. Imprimirla en el centro de la pantalla. Tirada de dados • Simular cien tiradas de dos dados y contar las veces que entre los dos suman 10. • Simular cien tiradas de tres dados y ver cuál es la suma que mayor frecuen- 25 cia tiene. Series y sumatorias • Sume los primeros 100 números de . 62 Angel Vázquez-Patiño Universidad de Cuenca • * Ingresados un valor de n y m, donde n es mayor que m (validar), calcular la sumatoria de los n primeros términos. Debe elaborar el algoritmo para realizar la potencia y el factorial. • * Escriba un programa que calcule el valor del coseno de un ángulo � 5 usando la suma de la serie infnita Los datos a ingresar son: 1) el número de elementos de la serie a usar y 2) el valor del ángulo � en radianes. Verifque el valor obtenido calculando el coseno del ángulo �. Debe mostrarse un mensaje que indique al usuario el resultado obtenido con la serie del coseno y con la función del coseno. Por 10 ejemplo, en el lenguaje C puede usar la función cos(�) que viene incluida en math.h. Triángulo de números Dado un número n, visualizar un triángulo de la siguiente manera: Con 15 1 2 3 4 5 6 7 8 9 10 Con 20 1 2 3 4 5 6 7 8 9 10 11 12 13 25 Número de días entre dos fechas Elabore un algoritmo que pida dos fechas (día, mes y año) y muestre el número de días que hay de diferencia entre estas dos fechas. Considerar los meses que tienen 30 días, los meses que tienen 31 días y suponga que febrero tiene 28 días siempre. 63 Angel Vázquez-Patiño Universidad de Cuenca Estructura de repetición DO-WHILE Miscelánea 1. Realice la tabla de multiplicar de un número entero n entre m1 y m2 (e.g. n=3, m1=4 y m2=6: 3x4, 3x5, 3x6). Haga dos versiones: while y do...while. 5 2. El usuario ingresa una lista de valores numéricos. El ingreso de los números termina cuando el usuario ingrese el valor -9999. Determinar el rango (míni- mo y máximo) y el promedio de los valores ingresados. No se debe conside- rar para los cálculos el número -9999. 3. Elabore un algoritmo que pida números hasta que se introduzca un número 10 negativo. De todos los números introducidos calcular la suma de todos los números pares, la suma de todos los números impares y el promedio de to- dos los números introducidos. 4. El número ingresado puede tener cualquier número de dígitos y debe ser po- sitivo (validar). 15 5. El promedio ponderado se calcula en dos pasos: a) Obteniendo la suma de multiplicar las califcaciones alcanzadas en las asignaturas cursadas por su número de créditos correspondientes (ver ejemplo). b) Dividir la suma anterior entre la suma de los créditos. 20 El anterior es un ejemplo con 3 asignaturas, recuerde que los estudiantes pueden llevar un número variable de asignaturas. 64 Angel Vázquez-Patiño Universidad de Cuenca Se leerán el código de la asignatura, la califcación y los créditos. Se termi- nará de leer cuando el código sea “9999”. La suma de los créditos debe ser mayor o igual que 25 y menor o igual que 50. Si al fnalizar la lectura la suma de los créditos no se cumple la condi- 5 ción se deberá emitir un mensaje de error y deberá comenzar nuevamente. Desarrolle un algoritmo que calcule e imprima: • El número de asignaturas cursó el estudiante • La suma de los créditos y el promedio ponderado 6. * Realice la prueba de escritorio del siguiente pseudocódigo e indique cuál es 10 la salida en pantalla del mismo. Algoritmo misterioso Definir c1, c2 Como Entero; Para i <- 8 Hasta 0 Con Paso -2 Hacer c1 <- -1; 15 Hacer Escribir Sin Saltar '*'; c1 <- c1 + 1; Mientras Que c1 < i c1 <- 8 - i; 20 c2 <- 0; Mientras c2 < c1 Hacer Escribir Sin Saltar '0'; c2 <- c2 + 1; Fin Mientras 25 Escribir ' '; Fin Para FinAlgoritmo 7. Indique cuál es el resultado de la ejecución del siguiente algoritmo: Algoritmo misterioso 30 fila = 5; Mientras fila >= 1 Hacer columna = 1; Mientras columna <= 10 Hacer Si (fila Mod 2) = 0 Entonces 35 Escribir Sin Saltar “<”; 65 Angel Vázquez-Patiño Universidad de Cuenca Sino Escribir Sin Saltar “>”; FinSi columna = columna + 1; 5 FinMientras fila = fila – 1; Escribir “”; FinMientras FinAlgoritmo 10 ¿Cuál sería el resultado de la ejecución si la primera instrucción (fla = 5) es cambiada por fla = 4? 8. * En el siguiente algoritmo reemplace la estructura de control WHILE por la de DO-WHILE y realice la prueba de escritorio para verifcar que ambos algoritmos (ambas versiones) hagan lo mismo. 15 Algoritmo misterioso Escribir "Ingrese un número:"; Leer num; mr <- 0; Mr1 <- num; 20 rt <- (mr+Mr1)/2; Escribir "Ingrese precisión:"; Leer precision; Mientras (rt*rt < num-precision) O (rt*rt > num+precision) Hacer Si rt*rt < num Entonces 25 mr <- rt; rt <- (rt + Mr1)/2; FinSi Si rt*rt > num Entonces Mr1 <- rt; 30 rt <- (rt + mr)/2; FinSi FinMientras Escribir "El resultado de ", num, " es: ", rt; FinAlgoritmo 35 9. Pregunta 66 Angel Vázquez-Patiño Universidad de Cuenca Números de n a m Para los siguientes ejercicios NO utilice FOR, utilice WHILE. 1. Hacer un programa que imprima los números enteros del 1 al 5. 2. Hacer un programa que imprima los números enteros desde 1 a n. 5 3. Hacer un programa que imprima los números enteros desde n a 1. 4. Hacer un programa que imprima los números enteros de n a m (n<m). 5. Hacer un programa que imprima los números enteros de m a n (n<m). Números impares del 1 al 100 Hacer un pseudocódigo que imprima los números impares entre 0 y 100. Utilice 10 WHILE para realizar las iteraciones. Acumulador del 1 al 100 Hacer un programa que imprima la suma de los 100 primeros números. Utilice WHILE para hacer las iteraciones. Contador de números pares 15 Hacer un programa que imprima en pantalla los números pares del 1 hasta el 10 y que imprima en pantalla la cantidad de números pares. Utilice WHILE para hacer las iteraciones. Codificación de caracteres Desarrolle un algoritmo que permita leer caracteres hasta que el usuario ingrese el 20 carácter X/x (mayúscula o minúscula). Cada vez que se ingrese un carácter, trans- formar 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: --.-... 25 O 79: -..---- l 108: --.--.. A 30 65: -.....- x 67 Angel Vázquez-Patiño Universidad de Cuenca 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. Ingreso de números mientras sean positivos 5 Realizar un programa que lea números. Mientras el número ingresado sea positivo, el programa sigue leyendo números desde el teclado. El momento que ingresa un número igual o menor a cero, el programa termina. Conteo de frases Introducir tantas frases como queramos y contarlas. Siempre se pregunta al usuario 10 si desea ingresar más frases; sí=1, no=0. Ingreso de 5 números Escriba un programa que lea exactamente cinco números. Utilice WHILE. Longitud y área de un círculo: validación Dado el radio (r) de un círculo, calcular la longitud (l) y el área (a). Dado que el 15 valor del radio no debe ser negativo (sí puede ser igual a cero), valide el ingreso de dicho valor. Cantidad de números ingresados Permitir al usuario ingresar números mayores a cero hasta que el usuario ingrese un número negativo o el cero. Luego, indicar al usuario cuántos números ingresó. 20 Cuadrado de números menores a n Pedir al usuario un número n y presentar los números al cuadrado desde 1 hasta n. Utilizar la estructura de repetición while. Contador de pares e impares Realice un programa que luego de leer 10 números, cuente el número de números 25 pares e impares. Haga una versión utilizando while y switch; y otra versión utili- zando while e if. 68 Angel Vázquez-Patiño Universidad de Cuenca Contador de familias según número de miembros Realice un programa que lea el número de miembros de familias. El programa deja de leer números cuando se ingresa un número negativo o menor a cero. Antes de terminar, el programa presenta la cantidad de familias que tiene un miembro, dos 5 miembros, tres miembros, cuatro miembros, cinco miembros y las familias que tie- nen más de seis miembros. * Números con vocales Imprima los números del 00000 al 99999 con la particularidad de que cada vez que debiera imprimirse el 1 (en cualquiera de los dígitos) se sustituya con A, el 3 con 10 E, el 5 con I, el 7 con O y el 9 con U, i.e., 00000, 0000A, 00002, … , UUUUO, UU - UU8, UUUUU. No utilice más de una estructura de control FOR, ni más de dos estructuras de control WHILE, ni más de dos estructuras de control REPEAT. * Operador potencia Suponga que no existe el operador potencia. Escriba un programa que lea dos valo- 15 res enteros, llamados base y exponente y devuelva base elevado a la potencia expo- nente. Factores de un número entero * Factorial Escriba un programa que lea un número n y calcule su factorial ( 20 ). No se debe usar ninguna función predeterminada de ningún lenguaje de programación (e.g., factorial de MATLAB). El programa debe validar que sólo se ingresen números enteros positivos y el cero; en caso que no in- grese un número entero positivo o el cero, avisa del error y vuelve a pedir el núme - ro. 25 * Números perfectos Un número perfecto es un entero positivo, que es igual a la suma de todos los ente- ros 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 al- goritmo que lea un número entero positivo n (validar que se positivo; suponga que 30 el número ingresado siempre es entero) y muestre en pantalla si ese número es o no 69 Angel Vázquez-Patiño Universidad de Cuenca 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 5 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 ese número es o no primo. Sólo si es primo, deberá sacar la suma del facto- rial de cada uno de los números entre 1 y n (sin incluir 1 ni n). Por ejemplo: 10 si se ingresa el número cuatro, el algoritmo debe indicar que no es primo y además presentar la suma de (8). • Comprobar si un numero mayor o igual (validar) que la unidad es primo. El programa sigue pidiendo números mientras no sean primos. Número de dígitos de un número entero 15 El usuario ingresa un valor entero no mayor a 10 millones. Separar el número en sus dígitos y mostrarlos según el siguiente ejemplo para el número 5432: Número: 5432 Número separado: 2 unidades 20 3 decenas 4 centenas 5 miles Valor relativo de un número El usuario ingresa un entero positivo. Descomponer dicho entero en potencias de 25 10 y mostrarlo según el siguiente ejemplo (tenga en cuenta que el entero ingresado puede tener un número arbitrario de dígitos): Número: 5432 5 × 10^3 = 5000 4 × 10^2 = 400 30 3 × 10^1 = 30 2 × 10^0 = 2 ---- 5432 70 Angel Vázquez-Patiño Universidad de Cuenca Cálculo de comisiones Ordenamientos • Proponga un algoritmo para ordenar ascendente y descendentemente dos números. 5 • Proponga un algoritmo para ordenar ascendente y descendentemente tres números. Juego: adivina el número Desarrolle un juego simple que pida al usuario que adivine un número en 10 inten- tos. El juego termina cuando se haya adivinado el número o cuando se hayan ago- 10 tado todos los intentos. Tenga en cuenta la función azar(n) de PseInt1 que genera un número entero al azar en el rango [0, n−1]. Cara o cruz Simular el lanzamiento de una moneda al aire e imprimir si ha salido cara o cruz. El momento que adivina, termina el algoritmo. 15 Análisis de frecuencias en lanzamientos de un dado Utilice una función para generar números aleatorios enteros en el rango [1, 6] para simular el resultado del lanzamiento de un dado (e.g., en PseInt, Azar()). Realice “lanzamientos” hasta que tres veces seguidas salga el mismo número. Una vez que se terminen los lanzamientos, muestre una tabla de frecuencias que indique la 20 cantidad de veces que salieron los números 1, 2, … y 6. Finalmente, haga un gráfco de barras horizontales con esos datos. Por ejemplo, suponga que al azar salieron los siguientes números: 2, 4, 1, 6, 6, 2, 1, 5, 4, 1, 6, 5, 4, 4, 2, 5, 1, 3, 3, 3. El resultado en pantalla debería ser: Tabla de frecuencias 25 1 4 2 3 3 3 4 4 5 3 30 6 3 Gráfico de barras 1 http://pseint.sourceforge.net 71 Angel Vázquez-Patiño Universidad de Cuenca 1 **** 2 *** 3 *** 4 **** 5 5 *** 6 *** Series y sumatorias 1. Hallar la sumatoria de la serie hasta que la sumatoria sea mayor a un número dado. 10 1. Indicar cuántos términos hay que sumar (cuál es el valor de n) de la siguien- te serie para que la suma sea mayor o igual a 1000. 1. Indicar cuál es el valor de la siguiente sumatoria, sumando los términos has- ta que el último término sumado sea menor a 0.0001. Número de cifras de un número 15 Diseñe un programa que lea un número entero (positivo o negativo) y determine si tiene 1, 2, 3, 4 o más de 4 cifras imprimiendo lo que corresponda. Reloj de 24 horas Una empresa necesita visualizar un reloj de 24 horas (00:00:00 - 23:59:59). Realice un programa que visualice el conteo del tiempo con el formato hh:mm:ss segundo a 20 segundo. Haga versiones con todas las estructuras de repetición que conozca. Lue- go de desarrollar este algoritmo revise la Miscelánea de la subsección Estructura de repetición FOR (página 79) y desarrolle un ejercicio parecido con la condición de que hay un límite en el tiempo que se muestra. 72 Angel Vázquez-Patiño Universidad de Cuenca * Progresión geométrica Una progresión geométrica es una secuencia en la que el elemento se obtiene multi- plicando el elemento anterior por una constante denominada razón. Así, es una progresión geométrica con razón igual a 3. Escriba un pro- 5 grama 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 pre- sentar un término mayor que un cierto límite dado (por ejemplo 133 para la pro- gresión que se presenta aquí). * Números de la serie Fibonacci 10 • La sucesión de Fibonacci es la siguiente: Es decir , , y cada uno de los siguientes términos se calculan sumando los dos anteriores: . Escriba un programa que genere dicha sucesión, presentando en pantalla cada uno de los términos. El programa terminará después de presentar un término mayor que un cierto límite dado 15 (por ejemplo 33 para la serie que se presenta aquí). • Elabore un algoritmo que muestre los términos de la serie de Fibonacci que sean menores a 100000: * Aproximación de π Dado que es la suma de la serie 20 , (12) se puede calcular una aproximación de sumando un número dado de términos, para un número sufcientemente grande de . Nota: para realizar la potencia puede utilizar el acento circunfejo ^. Calcule una aproximación de con un error aproximado (i.e., igual o menor) de 25 0.001. El error aproximado está dado por (13) donde es la aproximación actual y es la aproximación anterior. 73 Aproximación del logaritmo natural El logaritmo natural de se puede aproximar con la serie (14) sumando un número sufcientemente grande de términos. 5 Calcule una aproximación del logaritmo natural de con un error aproximado (i.e., igual o menor) de 0.0001. Para saber qué es el error aproximado vea la ecua- ción 13. * Aproximación del arco seno Para n→∞ (en la práctica un número sufcientemente alto) el arco seno de x se 10 puede calcular con la siguiente serie de Taylor: Realizar lo siguiente: 1. Escriba el pseudocódigo de un algoritmo para encontrar el valor de la fun- ción arco seno de x dado el valor de n y x. Debe utilizar la estructura de re- petición Mientras o Repetir Hasta. 15 2. Validar que el usuario ingrese valores de x hasta que cumpla la condición. 3. No debe utilizar ninguna función ni ^ o ! para calcular la potencia o el fac- torial. Esto signifca que debe desarrollar los algoritmos para realizar esos cálculos. 4. Para el cálculo de la potencia utilice la estructura de repetición Para. 20 5. Para el cálculo del factorial debe utilizar la estructura de repetición Mien- tras. 6. La serie de Taylor nos da el valor del arco seno de x en radianes, el algorit- mo que usted proponga debe mostrar el valor en radianes y en grados sexa- gesimales. Tenga en cuenta que 1 radián es igual a 57.2958 grados sexagesi- 25 males. * Dibujo de triángulos • Escriba un programa que lea dos enteros: el primero debe ser impar (vali- dar) y el segundo puede ser par o impar. La salida debe ser un triángulo di- bujado con el segundo número dado y de anchura máxima dada por primer 30 entero leído. Se debe presentar la multiplicación de los números de cada fla Angel Vázquez-Patiño Universidad de Cuenca del triángulo. Dos ejemplos: si el primer entero es 7 y 9 y el segundo entero es 1 y 2, los triángulos deben ser: Primer número : 7 Primer número: 9 Segundo número: 1 Segundo número: 2 5 1 1 2 2 111 1 222 8 11111 1 22222 32 1111111 1 2222222 128 222222222 512 10 • Escriba un programa que lea dos enteros (mayores a cero, validar): el pri- mero de ellos necesariamente debe ser impar (validar) mientras que el se- gundo puede ser par o impar. La salida debe ser un triángulo dibujado con el segundo número dado y de anchura máxima dada por primer entero leído. Se debe presentar la suma de los números de cada fla del triángulo. Dos 15 ejemplos: si el primer entero es 7 y 9 y el segundo entero es 1 y 2, los trián - gulos deben ser: Primer número : 7 Primer número: 9 Segundo número: 1 Segundo número: 2 1 1 2 2 20 111 3 222 6 11111 5 22222 10 1111111 7 2222222 14 222222222 18 Menú 25 • 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 selec- cionar la opción salir del menú. • Hacer un programa que permita introducir un número por teclado y sobre él se realicen las siguientes operaciones: comprobar si es primo, hallar su facto- 30 rial o imprimir su tabla de multiplicar de acuerdo a lo seleccionado en un menú; se sale del programa luego de seleccionar la opción salir del menú. 75 Angel Vázquez-Patiño Universidad de Cuenca Función exponencial Realice un algoritmo para obtener una función exponencial, la cual está dada por: No se debe usar la función potencia ni ninguna función que calcule el factorial (debe hacer el algoritmo para calcular la potencia y para calcular el factorial). 5 Número en cualquier base Reciba dos números enteros, el primero representa un número y el segundo repre- senta la base de numeración. Proponga un algoritmo para retornar el número ex- presado en dicha base de numeración. Menú: revisión de número 10 Desarrolle un algoritmo (pseudocódigo y diagrama de fujo) que presente un menú con las siguientes opciones: 1. Ingresar un Número: pide un número positivo mayor a cero; si no cumple esta condición, debe mostrar el mensaje “¡El número debe ser positivo ma- yor a cero!” y vuelve a pedir un número 15 2. Analizar el Número: muestra el número transformado en binario, indica si es par o impar, si es primo o no es primo 3. Terminar el Algoritmo Menú: permutaciones, variaciones y combinaciones Presente el siguiente menú en pantalla 20 ----------------------------- Combinatoria y probabilidades ----------------------------- 1. Permutaciones 2. Variaciones 25 3. Combinaciones 4. Salir Opción [1-4]: _ Cuando el usuario ingrese una opción fuera del intervalo [1, 4] imprima el mensaje “¡Error! Debe ingresar una opción válida (número del 1 al 4)”. Cuando el usuario 76 Angel Vázquez-Patiño Universidad de Cuenca indica la opción cuatro, el programa termina y antes imprime el mensaje “Salien- do...”. Si el usuario indica la opción 1 (Permutaciones) se debe presentar el subme- nú -------------------------------- 5 Permutaciones -------------------------------- 1. Sin repetición (n!) 2. Con repetición (n!/(a!b!c!…)) 3. Circulares ((n-1)!) 10 4. Volver Opción [1-4]: _ Cuando el usuario ingrese una opción incorrecta, presente algún mensaje que indi- que el error. Si el usuario escoge la opción cuatro, se vuelve al menú principal. Cuando el usuario escoge una de las opciones del uno al tres, se piden los datos ne- 15 cesarios, se realizan las operaciones necesarias y se presentan los resultados; luego de presentar los resultados se vuelve al submenú Permutaciones. Cuando se escoja una opción del uno al tres indique con texto cuándo se utiliza esa operación (sin repetición, con repetición, etc) y si es necesario ponga un ejemplo de uso. En el menú principal, si el usuario indica la opción 2 (Variaciones) se debe presen - 20 tar el submenú -------------------------------------- Variaciones -------------------------------------- 1. Sin repetición (n!/(n-p)!) 25 2. Con repetición (n^p o n1!n2!n3!...) 3. Volver Opción [1-3]: _ Cuando el usuario ingrese una opción incorrecta, presente algún mensaje que indi- que el error. Si el usuario escoge la opción tres, se vuelve al menú principal. Cuan- 30 do el usuario escoge una de las opciones del uno al dos, se piden los datos neces - arios, se realizan las operaciones necesarias y se presentan los resultados; luego de presentar los resultados se vuelve al submenú Variaciones. Cuando se escoja la op- ción uno o dos indique con texto cuándo se utiliza esa operación (sin repetición, con repetición, etc) y si es necesario ponga un ejemplo de uso. 77 Angel Vázquez-Patiño Universidad de Cuenca En el menú principal, si el usuario indica la opción 3 (Combinaciones, n!/(p! (n−p)!)) se piden los datos necesarios, se realizan los cálculos y se presentan los re- sultados; después de presentar los resultados, se vuelve al menú principal. Cuando se escoja esta opción indique con texto cuándo se utiliza esa operación y si es nece- 5 sario ponga un ejemplo de uso. 78 Angel Vázquez-Patiño Universidad de Cuenca Estructura de repetición FOR Miscelánea 1. Haga la prueba de escritorio e indique cuál es el resultado en pantalla de ejecutar el siguiente algoritmo: 5 Algoritmo misterioso Definir suma, i, j Como Entero; Para i <- 1 Hasta 4 Con Paso 1 Hacer Para j <- 3 Hasta 0 Con Paso -1 Hacer suma <- i * (10^i) + j; 10 Escribir Sin Saltar suma, " "; Fin Para Escribir " "; Fin Para FinAlgoritmo 15 2. * Haga la prueba de escritorio e indique cuál es el resultado en pantalla de ejecutar el siguiente algoritmo: Algoritmo misterioso n = 7; Para i = 0 hasta n Con Paso 1 20 Para j = n-i hasta 1 Con Paso -1 Mostrar Sin Saltar "#"; FinPara Mostrar ""; FinPara 25 FinAlgoritmo 3. Desarrolle un algoritmo que lea N valores de números positivos y que impri- ma la suma de aquellos que sean impares y menores a 200. 4. Desarrolle un algoritmo que lea una serie de valores que terminará cuando se lea el valor cero y que imprima la suma de aquellos que son negativos. 30 Siempre el usuario ingresa al menos un valor diferente a cero. 5. Desarrolle un algoritmo que pregunte una contraseña, el usuario sólo tiene derecho a 3 intentos. Cuando el usuario escriba la contraseña correcta se im- primirá "¡Enhorabuena!" y terminará el algoritmo. En caso de no escribir la contraseña correcta se imprimirá “Lo siento, contraseña equivocada”. Si se 79 Angel Vázquez-Patiño Universidad de Cuenca cumplen los 3 intentos y el usuario no escribe la contraseña correcta se im- primirá “Oportunidades Agotadas” y fnaliza la ejecución del algoritmo. 6. El departamento de control de tránsito desea saber, de los autos que entran a control, cuántos tienen sello municipal de cada color (amarillo, rosado, 5 rojo, verde y azul). Conociendo el último dígito de la placa de cada automó- vil se puede determinar el color de la calcomanía utilizando la siguiente ta- bla: Dígitos Color de la calcomanía 1o2 Amarilla 3o4 Rosa 5o6 Roja 7o8 Verde 9o0 Azul Desarrolle un algoritmo que permita ingresar las placas de automóviles. Se termina de registrar autos cuando se ingresa una placa xxx. Todos los días 10 se presenta al menos un automóvil a revisión. 7. N miembros de un club contra la obesidad desean saber cuánto han bajado o subido de peso desde la última vez que se reunieron. Para esto es necesario que cada uno se pese en 10 básculas distintas y después obtener el promedio de su peso. Si existe diferencia positiva entre el peso promedio y el peso de 15 la última reunión signifca que subieron. Si la diferencia es negativa, signifca que bajaron. Desarrolle un algoritmo que informe a cada persona si subió o bajó de peso y qué cantidad de Kilos. 8. Una persona recopila ciertos datos aplicando encuestas para el último Censo Nacional de Población y Vivienda. Desea obtener de todas las personas que 20 alcance a encuestar en un día, qué porcentaje tiene estudios de primaria, se- cundaria, carrera técnica, profesional y posgrado. Desarrolle el algoritmo que le permita calcular esa información. 9. En una tienda de descuento se efectúa una promoción en la cual se hace un descuento sobre el valor de cada producto comprado según el color de la bo- 25 lita que el cliente saque al pagar en caja. Si la bolita es de color blanco no se le hará descuento alguno, si es verde se le hará un 10% de descuento, si es amarilla un 25%, si es azul un 50% y si es roja un 100%. Determinar la 80 Angel Vázquez-Patiño Universidad de Cuenca cantidad fnal que el cliente deberá pagar por su compra. Se sabe que sólo hay bolitas de los colores mencionados. 10. Se leen los nombres, edad y sueldo de 5000 personas y se desea saber el monto total que la empresa pagará a las personas que son mayores de 35 5 años y que perciben un sueldo mensual mayor o igual a $500. 11. Una cadena de 754 tiendas reporta sus ventas brutas y sus costos de venta mensuales. Desarrolle un algoritmo que lea los costos y ventas, que calcule e imprima la utilidad neta de cada tienda, y que informe cuántas tiendas ob- tuvieron utilidad neta superior a los $50000 mensuales. 10 12. Una estación climática proporciona un par de temperaturas diarias (Max y Min). El par para terminar la lectura será cuando ambas temperaturas sean igual a 0. Una lectura de (9 y 9) es un error y no forma parte de los días de lectura. Calcular e imprimir el promedio de las temperaturas que son váli- das. Imprimir cuántos días se proporcionaron datos y el número de veces 15 que hubo error (lectura 9 y 9). 13. Mostrar la tabla de cuadrados y cubos de los números desde el 1 hasta el valor ingresado por el usuario. El siguiente es un ejemplo donde el usuario ingresó el número 5: 1 1 1 20 2 4 8 3 9 27 4 16 64 5 25 125 14. * Desarrolle un algoritmo que muestre el tiempo (en formato 24h00) segun- 25 do a segundo desde 00:00:00 hasta una hora (con sus minutos y segundos) dada por el usuario. Por ejemplo 00:00:00, 00:00:01, 00:00:02,…, 20:20:17. Antes de realizar este ejercicio desarrolle el ejercicio Reloj de 24 horas de la página 72. 15. Desarrolle un algoritmo que reciba un número entero positivo (validar) y 30 que retorne un nuevo número con sus cifras invertidas. 16. Desarrollar un algoritmo que realice lo siguiente: 81 Angel Vázquez-Patiño Universidad de Cuenca a) Pida números comprendidos entre 1 y 16, inclusivo. Validar. b) Si la suma de los N primeros números ingresados es múltiplo del cuatro, se mostrará un rectángulo de lados 4 y N de la siguiente manera (en el ejemplo la suma fue múltiplo de cuatro con N=3) 5 xxxx x x xxxx c) Con el primer número impar que se ingrese se muestra una “cruz” de lado igual al número impar. Por ejemplo con el impar 5 10 x x xxxxx x x 15 d) El algoritmo termina cuando se haya dado lo del literal b y c. 17. Crear un programa que muestre en pantalla un diamante formado por aste- riscos, dado un valor de número de asteriscos máximo en el punto central del diamante. Por ejemplo, si el valor en el punto central es 5 el rombo sería ** 20 **** ****** ******** ********** ******** 25 ****** **** ** 18. * Dado el siguiente código fuente en lenguaje C, cuya salida se muestra como “Solución actual” en la parte derecha superior de la tabla siguiente: SOLUCIÓN ACTUAL 82 Angel Vázquez-Patiño Universidad de Cuenca SOLUCIÓN REQUERIDA modifque el código de manera que la salida del programa sea similar que la mostrada como “Solución requerida” en la parte derecha inferior de la tabla, es decir, que en lugar de mostrar asteriscos en forma de una letra X se muestren numeradas ascendentemente desde arriba hasta el centro de la X y 5 desde el centro de la X hacia abajo, en forma descendente. 19. Pregunta Signo zodiacal y número de suerte Desarrollar un algoritmo que pida el nombre del usuario, el día, mes y año actual y el día, mes y año de nacimiento del usuario. En base a esos datos el algoritmo indi- 10 ca el signo zodiacal, la edad en horas y segundos y número de suerte del usuario. El número de suerte se calcula sumando los dígitos de su año de nacimiento, si el 83 Angel Vázquez-Patiño Universidad de Cuenca número es mayor a nueve se resta nueve de manera que el valor esté entre 1 y 9 1. El signo zodiacal se calcula en base a la siguiente información: • 21/marzo - 20/abril Aries • 21/abril - 20/mayo Tauro 5 • 21/mayo - 20 junio Géminis • 21/junio - 20/julio Cáncer • 21/julio - 20/agosto Leo • 21/agosto - 20/septiembre Virgo • 21/septiembre - 20/octubre Libra 10 • 21/octubre - 20/noviembre Escorpión • 21/noviembre - 20/diciembre Sagitario • 21/diciembre - 20/enero Capricornio • 21/enero - 20/febrero Acuario • 21/febrero - 20/marzo Piscis 15 Series y sumatorias • Genere la serie 1, 5, 3, 7, 5, 9, 7, …, 23. • Genere la serie 5,10,15,20,25,30,35 … n. • Si n=7 genere 7, 6, 5, 4, 3, 2 y 1. • * Desarrolle un algoritmo para resolver el siguiente problema; representar el 20 algoritmo con un diagrama de fujo y un pseudocódigo, y realizar la prueba de escritorio. Encontrar el n-ésimo término de la serie 2, 3, 4, 7, 8, 15, 24, 60, … Dado el primer término n0 = 2, el término ni es la suma de los divisores del 25 término anterior (ni-1) Ejemplos N-ésimo término a mostrar: 5 Término: 8 1 Si necesita mayor explicación resuelva primero el ejercicio * Prueba del nueve de la división (página 90). 84 Angel Vázquez-Patiño Universidad de Cuenca N-ésimo término a mostrar: 7 Término: 24 • Pregunta * Impresión de patrones 5 Dado un número entero positivo en el intervalo [2, 9], mostrar en pantalla una X formada de números. Por ejemplo, con N=5: Menú: media, mayor y menor Implemente un algoritmo que muestre el siguiente menú: Menú 10 1. Ingresar número 2. Mostrar media 3. Mostrar menor 4. Mostrar mayor 5. Salir 15 Opción [1-5]: El usuario ingresa un número a la vez utilizando la opción 1. En cualquier momen- to, 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 20 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. 85 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 5 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 10 debe verifcarse que haya saldo sufciente para retirar. De no ser así se envía un mensaje al usuario notifcando esa situación. Si hay saldo sufciente, se resta el va- lor 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 fnal de cada transacción se vuelve al menú. La opción 3 del menú muestra el saldo que se tiene en ese momento. La 15 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 sabien- do 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 coefcientes del trino- 20 mio 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 de que encuentra una de las posibles soluciones. Además, se debe mostrar un mensaje si no es posible factorizar el trinomio. Ejemplo 25 Ecuación: x2 + 7x + 12; b = 7, c = 12 Salida: Los factores del trinomio x2 + 7x + 12 son: (x + 3)(x + 4) Ecuación: x2 + 6x + 10; b = 6, c = 10 Salida: 30 El trinomio x2 + 6x + 10 no se puede descomponer en factores. 86 Angel Vázquez-Patiño Universidad de Cuenca Cálculos con dígitos de un número Desarrolle un algoritmo que pida un número positivo de tres dígitos o más (se pide un solo valor); si no cumple esta condición, debe mostrar el mensaje “¡El número debe ser positivo de más de dos dígitos!” y volver a pedir un número. Luego, mues - 5 tre la suma, producto, media, máximo y mínimo de los dígitos del número ingresa- do. Finalmente, muestre la suma, producto, media, máximo y mínimo de los dígi- tos del número ingresado elevados a un exponente igual a la cantidad de dígitos. A continuación se muestra un ejemplo de ejecución (así exactamente debe mostrar los resultados): 10 Número a analizar: 27 ¡El número debe ser positivo de más de dos dígitos! Número a analizar: -188 ¡El número debe ser positivo de más de dos dígitos! Número a analizar: 15423 15 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 20 ******************************************************* 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 25 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 infnita cuya suma de términos converge a π/4: (15) 30 Calcule una aproximación de con un error aproximado (i.e., igual o menor) de 0.0001. El error aproximado está dado por 87 Angel Vázquez-Patiño Universidad de Cuenca (16) donde es la aproximación sumando n términos y es la aproximación su- mando n−1 términos. * Examen de manejo 5 Se estima la resolución del ejercicio en 27 minutos. En uno de los paralelos de una escuela de conducción existen n estudiantes. No im- portan los nombres porque cada estudiante se identifca con un número ordinal de acuerdo a su apellido. La persona que toma el examen fnal de manejo quiere que estén dos estudiantes a la vez en el vehículo el día del examen; lo que desea es que 10 el estudiante acompañante flme todo el examen del estudiante conductor para te- ner un vídeo de evidencia. La persona que toma el examen desea tener una lista de todas las posibles parejas que pueden haber del curso. Desarrolle un algoritmo que lea el número de estudiantes del curso (n), imprima el número total de parejas que pueden haber para el examen fnal e imprima todas 15 esas posibles parejas. Quizá le sea útil saber que el número de permutaciones que se pueden realizar con m elementos tomados de k en k es m!/(m−k)!. A continuación se muestra un ejemplo de ejecución del algoritmo (con n=4) Total de estudiantes: > 4 Número total de parejas: 12 20 Pareja 1: {Conductor: 1, Acompañante: 2} Pareja 2: {Conductor: 2, Acompañante: 1} Pareja 3: {Conductor: 1, Acompañante: 3} Pareja 4: {Conductor: 3, Acompañante: 1} Pareja 5: {Conductor: 1, Acompañante: 4} 25 Pareja 6: {Conductor: 4, Acompañante: 1} Pareja 7: {Conductor: 2, Acompañante: 3} Pareja 8: {Conductor: 3, Acompañante: 2} Pareja 9: {Conductor: 2, Acompañante: 4} Pareja 10: {Conductor: 4, Acompañante: 2} 30 Pareja 11: {Conductor: 3, Acompañante: 4} Pareja 12: {Conductor: 4, Acompañante: 3} * Carrera de caballos Simular una carrera de caballos. Pueden participar 2, 3, 4 o 5 caballos (validar). En cada turno un caballo puede avanzar dos o tres metros pero también puede no 88 Angel Vázquez-Patiño Universidad de Cuenca avanzar o incluso, por algún motivo, puede retroceder un metro. El caballo gana- dor 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 par- 5 tida (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 caba- llos2. 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. 10 ********************************************************** Turno: caballo 5 > Metros avanzados por el caballo 5: -1 ********************************************************** 15 ------------------------ Caballo 1 X ------------------------ ------------------------ Caballo 2 X 20 ------------------------ ------------------------ Caballo 3 X X X X X X ------------------------ ------------------------ 25 Caballo 4 X X X X X ------------------------ ------------------------ Caballo 5 X X X X ------------------------ 30 ********************************************************* 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, 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. 89 Angel Vázquez-Patiño Universidad de Cuenca 153 = 13 + 53 + 33 = 1 + 125 + 27 = 153; 9474 = 9 4 + 44 + 74 + 44. El número ingresado debe ser positivo (validar). * Prueba del nueve de la división Realizar un algoritmo para realizar la prueba del 9 de la división entre dos núme- 5 ros. Solicitar al usuario que ingrese dos números enteros, el dividendo y el divisor, tal que dividendo > divisor. Realizar la división entre los dos números y la prueba del 9 para comprobar si el resultado de la división es correcto. A continuación se da un ejemplo de cómo se realiza la prueba del nueve. Si se cumple que D = d c + r, la división está realizada correctamente. 10 * Encontrando triángulos rectángulos Mostrar todos los triángulos rectángulos cuyas longitudes de sus lados no sobrepa- san un valor dado y son valores enteros; además, indicar la cantidad de dichos triángulos. Por ejemplo, si el usuario ingresa 10, el algoritmo deberá mostrar todas las tripletas para las cuales las longitudes del cateto 1, cateto 2 e hipotenusa son 15 números enteros y ninguno de ellos es mayor que 10. A continuación se muestra un ejemplo del resultado de la ejecución del algoritmo. Valor máximo:> 20 1) Hipotenusa: 5 Cateto 1: 3 Cateto 2: 4 2) Hipotenusa: 5 Cateto 1: 4 Cateto 2: 3 20 3) Hipotenusa: 10 Cateto 1: 6 Cateto 2: 8 4) Hipotenusa: 10 Cateto 1: 8 Cateto 2: 6 5) Hipotenusa: 13 Cateto 1: 5 Cateto 2: 12 6) Hipotenusa: 13 Cateto 1: 12 Cateto 2: 5 7) Hipotenusa: 15 Cateto 1: 9 Cateto 2: 12 25 8) Hipotenusa: 15 Cateto 1: 12 Cateto 2: 9 9) Hipotenusa: 17 Cateto 1: 8 Cateto 2: 15 10) Hipotenusa: 17 Cateto 1: 15 Cateto 2: 8 90 Angel Vázquez-Patiño Universidad de Cuenca 11) Hipotenusa: 20 Cateto 1: 12 Cateto 2: 16 12) Hipotenusa: 20 Cateto 1: 16 Cateto 2: 12 Para el valor máximo de 20 existen 12 tripletas que representan triángulos rectángulos. 5 * Número triangular Un número es triangular si al colocar N objetos en forma de triángulo, estos gene- ran un triángulo equilátero de lado M. El valor de M (longitud del lado) se calcula con la fórmula ( √ 8 N +1 ) − 1 M= 2 Crear un programa que solicite un número entero N al usuario, y solamente si el 10 número ingresado es triangular mostrar en pantalla el triángulo de lado M genera- do. Por ejemplo: el número 10 es un número triangular porque si colocamos 10 ob- jetos en forma triangular, éstos generan un triángulo equilátero de lado 4 * * * 15 * * * * * * * La diagonal de Cantor Ejercicio propuesto por René Estrella. Georg Cantor fue un matemático ruso que es considerado como uno de los padres 20 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 demos- trar que el conjunto de números reales es no-numerable. En este ejercicio vamos a considerar una simplifcación del argumento de Cantor para proponer un algoritmo que ejecute la siguiente tarea. 25 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 ingre- sados es como una matriz de n flas (n = número de valores ingresados) por n co- lumnas (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 conti- 30 nuación n = 4, lo que signifca que el usuario ingresó 4 números enteros de 4 dígi- tos cada uno. 91 Angel Vázquez-Patiño Universidad de Cuenca 1234 4815 1623 4211 5 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 diferen- te al tercer dígito del tercer número y así sucesivamente. Como una ilustración, para el ejemplo mostrado arriba, el resultado de una ejecución válida del algoritmo 10 sería el número entero 2932. La única información que se le deberá solicitar al usuario será la lista de números enteros a considerar. En particular, NO se deberá solicitar cuántos números se van a ingresar. Random walks Antes de desarrollar este algoritmo, revise el algoritmo pedido en el ejercicio llama- 15 do Simple random walks. Imagine un caminante aleatorio con eventos {0, 1} (en un tiempo t cualquiera: 0, no camina; 1, camina un paso) y probabilidad P(0) = 1-p , y P(1) = p. Realice un algoritmo que imprima la trayectoria del caminante aleatorio hasta que haya dado n pasos (no en los tiempos 1 al n sino hasta que haya logrado dar n pasos sin im- 20 portar en cuántos tiempos). * Suma de dos números decimales Realizar la suma de dos números positivos de hasta 4 cifras, cifra por cifra. No ne- cesariamente los dos números tienen el mismo número de cifras. Por ejemplo: Número 1: 1325 Número 1: 789 Número 1: 99 Número 2: 4794 Número 2: 5689 Número 2: 999 11 111 11 1325 789 99 +4794 +5689 + 999 ---- ---- ---- 6119 6478 1098 * Suma de dos números binarios 25 Escriba un programa que lea dos números enteros positivos, los convierta en núme- ros binarios y los sume dígito por dígito (vea el ejercicio * Suma de dos números 92 Angel Vázquez-Patiño Universidad de Cuenca decimales). Muestre los dos números binarios y el resultado obtenido de la suma. Por ejemplo, para los números 34 y 45, el programa debe imprimir 100010 101101 5 ------- 1001111, que equivale a 79 en decimal. * Suma de números consecutivos Implemente un programa que lea un número entero positivo N y que encuentre su valor en base a la suma de números consecutivos (no menores a 0 ni mayores a N). 10 Por ejemplo: Para N=10 la salida debe ser: 10 = 1+2+3+4 Para N=7 la salida debe ser: 7 = 3+4 Raíz cuadrada de un número Se desea conocer la raíz cuadrada de un número “n”, entero positivo (validar). No 15 es posible utilizar la función SQRT (u otra cualquiera) para encontrar cualquier re- sultado parcial de la solución. Se debe realizar la solución para el número indicado. Los pasos para resolver la raíz cuadrada son los siguientes: 1. A partir de la cifra de las unidades, de derecha a izquierda, se separan grupos de dos cifras. El primer grupo que queda a la izquierda puede tener 1 o 2 cifras. En este caso tiene 1. 2. Se calcula la raíz cuadrada del número formado por la cifra (o cifras) del primer grupo de la izquierda (en este caso es 5). Su raíz cuadrada es 2 (no es 3 porque 3² = 9 y sería mayor a 5). Se escribe en la casilla de la raíz y se resta su cuadrado del número del primer grupo. 93 Angel Vázquez-Patiño Universidad de Cuenca 3. A la derecha del resto obtenido (número 1), se baja el siguiente grupo de dos cifras (47) y, debajo de la raíz (2), se escribe su doble (4). 4. Se busca la cifra más alta posible (en este caso es 3) que, añadida como cifra de las unidades al doble de la raíz que hemos obtenido (4), cumpla que el producto del número resultante (43) por esta misma cifra (3), sea igual o menor que el resto anterior (147). Truco* 5. Se resta el producto obtenido (“129”) del resto (“147”) y se coloca la cifra hallada (“3”) en la raíz, a continuación de la cifra que ya se tenía (“2”). 6. A la derecha del resto obtenido (18), se baja el siguiente grupo de dos cifras (56) y, en la siguiente casilla de la derecha, escribimos el doble de la raíz (46) que se ha obtenido hasta ahora (23). 94 Angel Vázquez-Patiño Universidad de Cuenca 7. De nuevo se repite el paso 4: se busca la cifra más alta posible (en este caso es 4) que, añadida como cifra de las unidades al doble de la raíz que hemos obtenido (46), cumpla que el producto del número resultante (464) por esta misma cifra (4), sea igual o menor que el resto anterior (1856). Truco* 8. Se repite el paso 5: se resta el producto obtenido (1856) del resto que se tenía (1856) y, como en este caso da 0 y no se tienen más grupos de dos cifras qué bajar, se ha terminado de hallar la raíz. 95 Angel Vázquez-Patiño Universidad de Cuenca 96 Angel Vázquez-Patiño Universidad de Cuenca Estructuras Básicas de Datos Arreglos unidimensionales Miscelánea Algunos de los ejercicios están basados en los libros de Pinales Delgado y Veláz- 5 quez Amador (2014), Alcalde Lancharro y García López (1992), Chaves Torres (2012) y Parra Terrazos (n.d.). 1. ¿Cuál es una de las ventajas más importantes de usar un arreglo? a) Almacenar tipos de datos b) Almacenar un conjunto de datos 10 c) Almacenar variables d) Almacenar constantes 2. Lea un arreglo de 10 números enteros y luego imprima los elementos en un orden inverso. 3. Dado un arreglo de n números, presentar el valor de la función sinh -1 de 15 cada número. 4. Implemente un programa que genere aleatoriamente los sueldos de 200 em- pleados de una empresa en un arreglo y determine el menor sueldo, el mayor sueldo, el sueldo promedio y el total a pagar por parte de la empresa. 5. Implemente un programa que ingrese los sueldos de N empleados de una 20 empresa en un arreglo con capacidad máxima para 100 empleados. Imprima luego un listado de los sueldos superiores al sueldo promedio. 6. Implemente un programa que lea 50 notas de un examen en un arreglo y de- termine: a) la nota promedio, b) la mayor nota, c) la menor nota, d) el nú- mero de alumnos que comparten la menor nota y e) el número de alumnos 25 que comparten la mayor nota. 7. Implemente un algoritmo que lea los nombres y las edades de diez estudian- tes, y que almacene los datos en dos arreglos. Con base en esto se debe im- primir el nombre del estudiante con la mayor edad. 8. Implemente un algoritmo que lea un arreglo y a partir de él forme un segun- 30 do arreglo, de tal forma que el primer elemento pase a ser el segundo, el se - 97 Angel Vázquez-Patiño Universidad de Cuenca gundo pase a ser el tercero y así sucesivamente (el último pasa a ser el pri- mer elemento). 9. Implemente un programa que lea dos arreglos de N valores enteros y deter- mine un arreglo C tal que sus elementos vengan dados por: C(0) = A(0) + 5 B(N-1), C(1) = A(1) + B(N-2), C(2) = A(2) + B(N-3), ..., C(N-1) = A(N- 1) + B(0). Imprima luego los tres arreglos en tres columnas paralelas, cada uno en una columna. 10. Implemente una función que reciba como parámetros un arreglo de enteros A y un número entero n, y devuelva un nuevo arreglo B que sea igual al 10 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 iz- quierda pasan a ser los últimos elementos del arreglo B. Por ejemplo, con n = 3: A={1, 2, 3, 4, 5, 6, 7} 15 B={4, 5, 6, 7, 1, 2, 3} 11. Implemente un algoritmo para insertar un dato en un arreglo en una posi- ción escogida por el usuario. Si la posición está ocupada, los datos se despla- zan a la derecha para dar espacio al nuevo dato. Si el arreglo está lleno no se inserta el dato y se muestra un mensaje. 20 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 arre- glo C, con base en los anteriores, que represente lo que se requiere comprar para mantener la existencia de inventario. Para este fn se considera lo si- 25 guiente: 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 almace - na 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. 30 13. Se tiene un arreglo de 15 flas y 12 columnas. Realice un algoritmo que per- mita leer el arreglo y que calcule y presente los resultados siguientes: el me- nor elemento del arreglo; la suma de los elementos de las cinco primeras flas del arreglo; y el total de elementos negativos en las columnas de la quinta a la nueve. 98 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 5 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) guardan- do su resultado en otro arreglo, el cual se debe presentar en pantalla junto 10 con los dos arreglos generados. 16. Se tiene un arreglo de cien elementos representando califcaciones de los es- tudiantes de una escuela. Realice un algoritmo que lea el arreglo y calcule la califcación promedio del grupo, además, que cuente los estudiantes que ob- tuvieron califcaciones arriba del promedio del grupo. 15 17. Realice un algoritmo que lea un vector de cien elementos y que calcule su magnitud y represéntelo mediante diagrama de fujo y pseudocódigo. 18. Implemente un algoritmo que calcule el producto de dos vectores. Uno de ellos es de una fla con diez elementos y el otro con una columna de diez ele- mentos. 20 19. Cree un arreglo de 20 elementos con nombres de personas. Visualice los ele- mentos de la lista debiendo ir cada uno en una fla distinta. 20. Hacer un programa que lea las califcaciones de un alumno en 10 asignatu- ras, las almacene en un arreglo y calcule e imprima su media y mediana. 21. Hacer un programa que genere de manera aleatoria 10 califcaciones entre 0 25 y 100, muestre las califcaciones y permita buscar una nota en el arreglo (de- vuelve la posición en el arreglo). 22. Elabore un diccionario simple de inglés a español utilizando dos arreglos de tipo cadena con 20 palabras como mínimo. 23. Lea un arreglo de N elementos y luego imprima cuántos y cuáles elementos 30 (i.e., número de índice) son múltiplos de 6. 24. Generar con números aleatorios un arreglo de 20 elementos, imprima la po- sición y el valor del elemento mayor almacenado en el arreglo. 99 Angel Vázquez-Patiño Universidad de Cuenca 25. Generar con números aleatorios dos arreglos A y B de 45 elementos cada uno, sumar el elemento uno del arreglo A con el elemento uno del arreglo B y así sucesivamente hasta 45, almacenar el resultado en un arreglo C, e im- primir el arreglo resultante. 5 26. Desarrolle un programa que lea un arreglo de N elementos y rote todas sus componentes un lugar hacia su derecha. Teniendo en cuenta que la última componente se ha de desplazar al primera lugar. 27. Dado un número entero positivo de 10 cifras, desarrolle un programa que compruebe si el número es capicúa utilizando un arreglo de 10 componentes. 10 La palabra capicúa (en matemáticas, número palíndromo) se refere a cual- quier número que se lee igual de izquierda a derecha que de derecha a iz- quierda. Ejemplos: 161, 2992, 3003, 2882. 28. Desarrolle un programa que genere aleatoriamente 50 números enteros en el rango [-50, 50], sin que se pueda generar un mismo número más de una vez. 15 Estos números se deben almacenar en un arreglo y se debe calcular e impri- mir la suma de los elementos de índice par y las de índice impar. 29. Desarrolle un programa que genere aleatoriamente 50 números enteros en el rango [-50, 50], pudiéndose repetir hasta dos veces un mismo número. Estos números se deben almacenar en un arreglo, se lo debe invertir y se lo debe 20 imprimir (se debe imprimir el arreglo original y el invertido). 30. Desarrolle un programa que genere aleatoriamente 50 números enteros en el rango [-50, 50], pudiéndose repetir hasta tres veces un mismo número. Estos números se deben almacenar en un arreglo y se deben mostrar el mayor y menor número, y la frecuencia de estos. 25 31. * Desarrolle un programa que genere los números de la serie Fibonacci y los guarde en un arreglo de 55 elementos (debe generar 55 términos de la serie). Luego, dar la opción al usuario de poder visualizar un elemento de la serie dado su número ordinal (los números ordinales comienzan desde uno). 32. Genere un primer arreglo de 50 elementos con números aleatorios reales en 30 el rango [1, 6]. Genere un segundo arreglo con 50 elementos con números aleatorios enteros en el rango [2, 7]. Genere un tercer arreglo donde se guar- den los resultados de elevar el elemento del primer arreglo al exponente indi- cado en el segundo arreglo; los cálculos se hacen con elementos con el mismo 100 Angel Vázquez-Patiño Universidad de Cuenca número de índice. Muestre los arreglos de manera vertical en tres columnas, cada una para cada arreglo: Base Exponente Potencia arreglo11 arreglo21 arreglo11^arreglo21 5 arreglo12 arreglo22 arreglo12^arreglo22 arreglo13 arreglo23 arreglo13^arreglo23 arreglo14 arreglo24 arreglo14^arreglo24 arreglo15 arreglo25 arreglo15^arreglo25 33. Generar un arreglo con 100 números aleatorios enteros en el rango [1, 2020], 10 sin que se repitan dichos números. En un segundo arreglo guardar la palabra sí, en la posición correspondiente del arreglo uno donde el número represen- te un año bisiesto, caso contrario guardar la palabra no. Mostrar los valores de los dos arreglos de manera vertical (en columnas): Año Bisiesto 15 1563 No 4 Sí Manejo de arreglos 1. Generar un arreglo llamado angles que contenga los ángulos múltiplos de 30° entre 30° y 360°. 20 2. Extraer del arreglo los elementos cuyo índice es par y guardarlos en un arre- glo llamado evenAngles. 3. Extraer del arreglo los elementos cuyo índice es impar y guardarlos en un arreglo llamado oddAngles. 4. Concatenar en un cuarto arreglo los arreglos evenAngles y oddAngles. 25 * 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. 30 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. 101 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 for- ma ascendente como descendente. Ángulo entre vectores 5 Dados dos vectores, encontrar el ángulo entre ellos. Dar los resultados en radianes y en grados sexagesimales. Relleno de arreglo con números aleatorios Generar un arreglo de 50 elementos enteros con las siguientes restricciones: 1. Los números aleatorios deben estar en el rango . 10 es el décimo dígito de su cédula. Por ejemplo, si su cédula termina en 4, el rango sería . 2. Siendo el componente i del arreglo (hay 50 componentes), , . Esto quiere decir que ningún componente del arreglo se repeti- rá. 15 3. Puede darse el caso en el que el primer elemento generado de manera aleato- ria sea mayor a . En ese caso no se podrían llenar con va- lores todos los componentes del arreglo. Indicar si esto pasa y mostrar los valores de los componentes generados. Graficación de frecuencias 20 • Simular el lanzamiento de un dado 100 veces. En un arreglo de seis elemen - tos 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áf- co 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 frecuen- 25 cias y el gráfco serían: TABLA Valor Frecuencia 1 25 2 10 30 3 5 4 10 5 30 102 Angel Vázquez-Patiño Universidad de Cuenca 6 20 Gráfica 1 ************************* 2 ********** 5 3 ***** 4 ********** 5 ****************************** 6 ******************** • Simular el lanzamiento de dos dados al mismo tiempo en 100 ocasiones. En 10 un arreglo guardar el número de veces que la suma de los valores de los da - dos salió con el número respectivo de índice del arreglo (el índice desde dos). Por último, mostrar la tabla de frecuencias y un gráfco de las mismas. Criba de Eratóstenes Fuente: (Deitel and Deitel, 2012, chap. 7). 15 Un número primo es cualquier entero mayor que 1 que es divisible solamente para sí mismo y para 1. La criba de Eratóstenes es un método para encontrar números primos. Esta opera de la siguiente manera: 1. Se crea un arreglo de tipo primitivo booleano con todos los elementos inicia- lizados con el valor TRUE. Los elementos del arreglo cuyos índices corres- 20 ponden a un número primo se mantendrán con el valor TRUE. Todos los de- más elementos eventualmente contendrán el valor FALSE. 2. Comenzando con el índice 2 del arreglo, se determina si un elemento dado es TRUE. Si es así, se itera a través de lo que queda del arreglo y se establece como FALSE todo elemento cuyo índice es múltiplo del índice para el ele- 25 mento con valor TRUE. Entonces, se continúa el proceso con el siguiente elemento con valor TRUE. Para el índice 2 del arreglo, todos los elementos más allá del elemento 2 en el arreglo, que tengan índices que sean múltiplos de 2 (índices 4, 6, 8, 10, etc.), serán establecidos como FALSE; para el índi- ce 3 del arreglo, todos los elementos más allá del elemento 3 en el arreglo, 30 que tengan índices que sean múltiplos de 3 (índices 6, 9, 12, 15, etc.), serán establecidos como FALSE; y así en adelante. Cuando este proceso termina, los elementos del arreglo que tienen el valor TRUE indican que el índice de ese elemento corresponde a un número primo. Estos índi- ces deben ser visualizados. Una animación del proceso se puede encontrar en Wiki- 103 Angel Vázquez-Patiño Universidad de Cuenca pedia https://goo.gl/6w5Atn. A continuación se muestra el proceso para encontrar los números primos entre 2 y 20. Escriba una aplicación que use un arreglo para encontrar y mostrar los números primos entre 2 y 1000. Ignore los elementos con índices menores que 2. 5 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 de- vuelva true si la serie corresponde a una serie gráfca o false en caso de que la serie no corresponda a una serie gráfca. Vea la explicación del algoritmo mediante el si - 10 guiente enlace https://youtu.be/-prrZd_NJqQ. Arreglos bidimensionales 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 15 Torres (2012). 1. Cree una matriz de N×M (leer N y M por teclado). Imprima los cuatro valo- res que se encuentran en los vértices de la matriz (mat[0][0], etc.). 2. Genere e imprima una matriz de 4 flas y 5 columnas con números aleatorios entre 1 y 100. 104 Angel Vázquez-Patiño Universidad de Cuenca 3. Desarrolle un programa que genere una matriz de cinco flas y diez colum- nas con números enteros aleatorios, los imprima e indique los valores máxi- mo y mínimo y sus posiciones dentro de la matriz. 4. Desarrolle un programa que genere e imprima una matriz unitaria de orden 5 N. Una matriz unitaria de orden N es la que tiene N flas y N columnas con todas sus componentes iguales a 0, excepto las de su diagonal principal, que son iguales a 1. 5. Implemente una función para determinar si dos matrices (enviadas como ar- gumentos) contienen los mismos elementos. La función tiene un tercer pará- 10 metro para indicar si se desea que la función actúe 1) comparando las dos matrices elemento a elemento o 2) comparando las dos matrices aunque los elementos no se presenten en el mismo orden. 6. Implemente una función que construya y devuelva matrices cuadradas de cualquier dimensión mayor o igual a 1, cuyos elementos sigan el patrón mos- 15 trado en la tabla 1 (cada elemento es la suma de sus índices). La dimensión se pasará como parámetro a la función. El resultado se imprimirá desde el programa/función principal. Tabla 1: Matriz de 4 x 4. Se está tomando en cuenta que los índices de la matriz comienzan en cero (como en el lenguaje de programación Java o C). 0 1 2 3 1 2 3 4 2 3 4 5 3 4 5 6 7. Dada la matriz Letras[20][20], llenar de caracteres del alfabeto, calcular la frecuencia absoluta y la frecuencia relativa para cada una de las vocales. 20 8. Implemente un algoritmo que lea una matriz de n flas y m columnas y que calcule la suma de los elementos de la diagonal principal. 9. Implemente un algoritmo para obtener una matriz como el resultado de la resta de dos matrices de orden N×M. 10. Implemente un algoritmo para determinar si una matriz es de tipo diagonal. 25 Una matriz es de tipo diagonal si es una matriz cuadrada en la cual todos sus elementos son cero, excepto los de la diagonal principal. 105 Angel Vázquez-Patiño Universidad de Cuenca 11. Se tiene una matriz de seis flas y ocho columnas y se sabe que se tiene un elemento negativo. Realice un algoritmo que indique la posición que ese ele- mento ocupa en el arreglo (en la fla y la columna en la que se encuentra ese elemento). 5 12. Se tienen dos matrices cuadradas (de 12 flas y 12 columnas cada una). Rea- lice un algoritmo que lea las matrices y que determine si la diagonal princi- pal de la primera es igual a la diagonal principal de la segunda. (Diagonal principal es donde los subíndices i y j son iguales). 13. * Se tiene una matriz de 12 flas por 19 columnas y se desea tener un pro- 10 grama para encontrar todos sus elementos negativos y para que los cambie por un cero. Desarrolle el programa que haga eso. 14. Realice un algoritmo que lea una matriz de seis flas y seis columnas y que cuente los elementos negativos que contiene y los elementos de la diagonal principal que son igual a cero. 15 15. Una compañía de transporte cuenta con cinco chóferes, de los cuales se co- noce: nombre, horas trabajadas cada día de la semana (seis días) y sueldo por hora. Realice un algoritmo que: a) Calcule el total de horas trabajadas a la semana para cada trabajador. b) Calcule el sueldo semanal para cada uno de ellos. 20 c) Calcule el total que pagará la empresa. d) Indique el nombre del trabajador que labora más horas el día lunes. e) Imprima un reporte con todos los datos anteriores. 16. Indurama cuenta con N chóferes, de los cuales se conoce el nombre y los ki- lómetros que conducen durante cada día de la semana; esa información se 25 guarda en un arreglo de Nx6. Se requiere un programa que capture esa in- formación y genere un arreglo con el total de kilómetros que recorrió cada chófer durante la semana. Al fnal 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 re- 30 porte 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. 106 Angel Vázquez-Patiño Universidad de Cuenca Nombre Lun Mar Mié Jue Vie Sáb Tot K N Chófer 1 # km # km # km # km # km # km # km N Chófer 2 # km # km # km # km # km # km # km ... ... ... ... ... ... ... ... N Chófer n # km # km # km # km # km # km # km 17. Implemente un algoritmo que lea una matriz de C columnas y R flas. A partir de ellas genere dos arreglos que contengan la suma de sus flas y la suma de sus columnas. 18. Implemente un algoritmo que calcule el valor que se obtiene al multiplicar 5 entre sí los elementos de la diagonal principal de una matriz de 5 por 5 ele- mentos. 19. Realice un algoritmo que a partir de la diagonal principal de una matriz de 5 por 5 elementos encuentre cuántos elementos tienen valor par y cuántos valores impares. 10 20. Cree un arreglo multidimensional de 3 páginas, 4 flas y 5 columnas donde el primer elemento valga 1, el segundo 2, el tercero 3 y así sucesivamente. Im- prima los valores. 21. Cargar en una matriz las notas de los alumnos de un colegio en función del número de cursos (flas) y del número de alumnos por curso (columnas). 15 Presentar la mediana de cada curso. 22. Ordenar una matriz de M flas y N columnas de izquierda a derecha y de arriba hacia abajo. Debe presentar la matriz en orden ascendente y en orden descendente (muestra dos matrices). Por ejemplo, la siguiente es una matriz de 2×3 ordenada ascendentemente. -5 0 2 10 11 99 20 Para que no tenga que ingresar datos en cada prueba que haga de su algo- ritmo, desarrolle una función que devuelva una matriz de f flas y c colum- nas con número aleatorios (no ordenados). 23. Dado el arreglo T de tamaño n, si el tamaño es par invertir los elementos de la mitad de los elementos, caso contrario hacer lo mismo pero dejando sin 107 Angel Vázquez-Patiño Universidad de Cuenca mover el número de la posición intermedia. Ejemplo: T=[1, 2, 3, 4, 5, 6], T(invertido)=[3, 2, 1, 6, 5, 4]; T=[1, 2, 3, 5, 6], T(invertido)=[2, 1, 3, 6, 5]. 24. Dadas dos matrices A y B intercambiar los mínimos de A con los máximos de B. 5 25. Se dispone de un arreglo multidimensional de 5 páginas, 10 flas y 20 colum- nas, que se referen al colegio, al curso y al número de estudiantes (se asume que cada curso tiene exactamente 20 estudiantes), respectivamente. Impri- mir la nota media por curso (son 50 resultados) y la nota media máxima con su centro de pertenencia. La nota media máxima hace referencia al va- 10 lor máximo entre las 50 medias que corresponden a los 10 cursos de los 5 co- legios. Para que no tenga que ingresar datos en cada prueba que haga de su algo- ritmo, desarrolle una función igenerarMatriz3D(int p, int f, int c) que devuelva una matriz de p páginas, f flas y c columnas con número alea- 15 torios. 26. Una empresa guarda en arreglo multidimensional de 3×12×4 las ventas reali- zadas por sus tres representantes a lo largo de doce meses de sus cuatro pro- ductos, VENTAS [ representante, mes, producto ]. Se desea proyectar el arreglo tridimensional sobre uno de dos dimensiones que represente el total 20 de ventas, TOTAL [ mes, producto ], para lo cual se suma las ventas de cada producto de cada mes de todos los representantes. Imprima ambos arreglos. 27. Desarrolle un programa que lea una matriz cuadrada de orden 3 y calcule e imprima su potencia N-ésima, siendo N un dato de entrada. Vea https:// 25 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 fla. Los re- sultados de la media y mediana deben ser almacenados en arreglos indepen- 30 dientes. Los cálculos de la media y mediana deben ser realizados en funcio- nes distintas. El programa debe mostrar los resultados de la media y media- na en funciones independientes. 29. * Desarrolle un programa que, ingresadas por parte del usuario dos matri- ces, A y B, de diferentes dimensiones, intercambie los tres mínimos números 108 Angel Vázquez-Patiño Universidad de Cuenca de A con los tres máximos números de B. El intercambio tiene que darse en orden inverso, es decir, el mínimo número de A con el máximo de B y así sucesivamente. El programa debe mostrar en pantalla las matrices ingresa- das por el usuario y las matrices luego del intercambio. 5 Por ejemplo, si A y B son: entonces, luego del intercambio, las matrices serían: Como sugerencia, usted podría utilizar dos matrices que indiquen las posi- ciones de los mínimos y máximos, así (los índices de flas y columnas co- mienzan en cero en este ejemplo específco): 10 30. * Desarrolle una función que dada una matriz A de n×m devuelva una ma- triz B de m×n que sea formada leyendo la matriz en el sentido mostrado a continuación: 109 Angel Vázquez-Patiño Universidad de Cuenca ← 8 ← 4← 9 ← 5 5 9 4 A= → 2 → 1 → 7 → 4 8 2 1 B= ← 3 ← 5← 6 ← 2 7 4 2 6 5 3 31. Pregunta Suma y resta de matrices 15 Pedir al usuario el número de flas y columnas de dos matrices que ingresará. In- gresar las dos matrices. Calcular la suma de las dos matrices y guardar el resultado en una matriz resultado. Calcular la resta de las dos matrices y guardar el resulta- do en una segunda matriz resultado. Mostrar al usuario las dos matrices resultado. Producto de un escalar por una matriz 20 Pedir al usuario el número de flas y columnas de una matriz que ingresará. Ingre- sar dicha matriz. Ingresar un número escalar. Multiplicar el escalar por la matriz y mostrar el resultado al usuario. Diagonal principal de una matriz Ingresar una matriz cuadrada y guardar en un arreglo la diagonal principal de la 25 matriz. * Transpuesta de una matriz • Pedir al usuario el número de flas y columnas de una matriz que ingresará. Ingresar dicha matriz. Calcular la transpuesta, guardarla en otra matriz y mostrarla al usuario. 30 • Generar una matriz de 4 flas y 5 columnas con números aleatorios entre 1 y 100, y hacer su matriz transpuesta. Simetría de una matriz Una matriz de la forma 110 Angel Vázquez-Patiño Universidad de Cuenca es simétrica si se cumple que A(f, c)=A(c, f), F = {f: fєℕ ^ 1≤f≤n} y C = {c: cєℕ ^ 1≤c≤n}. Implemente un programa que emplee funciones para determinar si una matriz es simétrica. Trate de implementar una solución que reduzca el número de operaciones, una vez que hay cualquier información que indique que la matriz no 5 es simétrica. Determinante de una matriz Ingresar una matriz cuadrada y calcular la determinante de la matriz y presentarla al usuario. Producto de matrices 10 Pedir al usuario el número de flas y columnas de dos matrices que ingresará. In- gresar las dos matrices. Calcular el producto de las matrices y presentarla al usua- rio. Punto de silla de una matriz 1. Se dice que una matriz tiene un punto de silla si algún elemento de la ma- 15 triz es el menor valor de su fla y a la vez el mayor de su columna. Escribir un programa que genere una matriz de números enteros aleatorios (el usua- rio debe ingresar las dimensiones) y calcule la posición de un punto de silla (si es que existe). 2. Elabore un algoritmo que genere matrices de números enteros aleatorios (el 20 usuario debe ingresar las dimensiones) hasta que genere una matriz con un (o más) punto de silla. Tablero de ajedrez Visualice en pantalla un tablero de ajedrez: los peones con el número 1, las torres con el 7, los caballos con 0, los alfles con 4, el rey con 8 y la reina con 2. 111 Angel Vázquez-Patiño Universidad de Cuenca * Distancia de Chebyshov Información tomada de Wikipedia: https://is.gd/uJUUqj. La distancia de Chebys- hov (o métrica máxima, o métrica L∞) es una métrica defnida en un espacio vecto- rial donde la distancia entre dos puntos (representados por sus vectores) es la ma- 5 yor de sus diferencias a lo largo de cualquiera de sus dimensiones coordenadas. También es conocida como distancia del tablero de ajedrez (vea el ejercicio Cálcu- los espaciales básicos, página 20), porque coincide con el número mínimo de movi- mientos que necesita el rey para ir de una casilla a otra (este caso se corresponde a un sistema de dos coordenadas espaciales, entre los centros de las casillas, y con los 10 ejes alineados con los bordes del tablero). Esto es debido a que el rey se puede mo - ver tanto en diagonal como en horizontal o vertical. En el tablero de la fgura 5 se muestra las distancias de Chebyshov desde la casilla f6. Figura 5: Ejemplo de distancias de Chebyshov en un tablero de ajedrez. Escriba un programa que muestre las distancias de Chebyshov, como en la fgura 15 5, desde una casilla del tablero de ajedrez dada por el usuario. 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 fla contiene los N primeros números naturales y cada una de las siguientes N-1 flas contiene la rota- 112 Angel Vázquez-Patiño Universidad de Cuenca ción de la fla anterior un lugar a la derecha. Por ejemplo, es siguiente es un cua- drado 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 5 al 9 donde la suma de sus flas, 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á 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 10 ingreso. 2. Genere un cuadrado mágico dado el orden N (validar). Un cuadrado mágico es una matriz cuadrada de orden impar N que contiene números enteros des- de 1 hasta N2. La suma de los números que fguran en cada fla, cada colum- na y cada diagonal son iguales. Un ejemplo es: 8 1 6 3 5 7 4 9 2 15 Para generar un cuadrado mágico siga estos pasos: 1. Sitúe el número 1 en la casilla central de la primera fla. 2. Cada número que sigue debe colocarse en la casilla correspondiente a la fla anterior y columna posterior. 3. Si un número generado cae en una casilla ocupada, no aplique la regla 20 anterior, sino que debe colocarlo en la casilla de la fla posterior e igual columna. 4. Se considera que la fla anterior a la primera es la última y la columna posterior a la última es la primera. 113 Angel Vázquez-Patiño Universidad de Cuenca * Lotería en Cuenca Por las festas de Cuenca, la Junta de Benefcencia de Guayaquil hará un sorteo es- pecial de lotería. Imprimirá 243 boletos para cada una de las 27 parroquias más pobladas de Cuenca. Los boletos serán de cuatro dígitos (9 ⁴ = 6561 boletos en to - 5 tal); cada dígito está en el intervalo [0, 9]. La Junta de Benefcencia desea tener una idea bastante clara de dónde y qué persona compró el boleto ganador. Implemente un programa que utilice una matriz de 27 flas (parroquias) y 243 co- lumnas (boletos por parroquia) para guardar los números de los boletos que impri- mirá la Junta de Benefcencia para el sorteo. Los números serán generados al azar 10 y no habrá ninguna posibilidad de que hayan dos o más ganadores. Para simular en qué parroquia y qué número de comprador ganó, genere un número aleatorio que represente un número ganador e indique la parroquia en la se vendería el bole- to y el número de comprador del boleto (asuma que cada persona compra un sólo boleto en el orden determinado por el número de columna de la matriz). A conti- 15 nuación se muestra los resultados de dos ejecuciones del programa: Boleto ganador : 1991 Boleto ganador : 514 Parroquia ganadora: 26 20 Parroquia ganadora: 8 Comprador ganador : 61 Comprador ganador : 114 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 25 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. Muy importante: la secuencia de ADN es cíclica, por lo que puede comenzar en 30 cualquier posición. Por ejemplo, las dos secuencias siguientes coinciden: 114 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ú: ======================= 5 El juego del alfabeto ======================= Menú a. Nivel básico b. Nivel intermedio 10 c. Nivel avanzado d. Salir ______________________ Opción[a-d]: ====================== 15 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 20 continuación: A B C D E I D J I D F G H I J I I J D J 25 K L M N O D D I J I P Q R S T I J I I J U V X Y Z 30 D I J D D 115 Angel Vázquez-Patiño Universidad de Cuenca 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 has - ta 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 5 dos veces seguidas las letras I y D pero no la J (viendo la matriz de izquierda a de- recha 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 10 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 15 E D C B A D I J D D Para el nivel avanzado se debe imprimir el alfabeto de arriba hacia abajo y de iz- quierda a derecha en una matriz de 5x5. No tome en cuenta la letra ñ ni w. Debajo de cada letra del abecedario se debe imprimir la letra I o D o J de manera aleato- 20 ria 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 25 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 30 I J I I J E J O T Z 116 Angel Vázquez-Patiño Universidad de Cuenca D I J D D Cálculos espaciales básicos Los siguientes ejercicios se basan en el capítulo 10.3 Algunos cálculos espaciales bá- sicos del libro de Olaya (2011). 5 Distancia de tablero de ajedrez Cuando se utilizan imágenes raster pueden defnirse distintos tipos de distancias considerando principalmente el número de celdas por las que debe pasarse para ir de una celda a otra. Por ejemplo, si se permite el movimiento en todas direcciones, las ocho celdas aledañas a un píxel tienen una distancia de uno, puesto que se ne - 10 cesita un único paso para llegar a cualquiera de ellas. Por similitud a la forma en que uno puede moverse en un tablero de ajedrez, este tipo de distancia se conoce como distancia de tablero de ajedrez. 1. Utilizando una matriz de 8 flas por 8 columnas, pida al usuario la celda de la que quiere calcular la distancia de tablero de ajedrez. 15 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 aje- drez desde la celda a la mencionada por el usuario. La fgura 6.a muestra un ejemplo para una matriz de 5×5 con la celda central como la elegida por el usuario. 20 3. Presente en pantalla los valores de la matriz. 117 Angel Vázquez-Patiño Universidad de Cuenca Figura 6: Distintos tipos de distancia ráster: a) tablero de ajedrez, b) Manhattan, c) ortogonal y d) Chamfer 3-4. Fuente: Olaya (2011). Distancia Manhattan 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 fgura 6.b). De igual mane- ra, en ciencias de la información geográfca pueden defnirse algunos tipos de dis- 5 tancia ráster considerando el mismo principio (i.e. número de celdas por las que debe pasarse para ir de una celda a otra). 1. Genere una matriz de 8 flas y 8 columnas con números enteros aleatorios en el rango [1, 32]. Se deben generar dos celdas (de las 64) con el mismo núme- ro y sólo dos celdas pueden tener el mismo número (por eso el rango [1, 10 32]). Como ejemplo vea la siguiente matriz generada. 118 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 7: Matriz de 8×8 (se muestran sólo 25 celdas) con números enteros aleatorios en el rango [1, 32]. Sólo dos celdas tienen el mismo número. 2. Muestre en pantalla la matriz generada. 3. Calcule la distancia Manhattan entre cada par de celdas que contengan el mismo número. Como ejemplo vea parte del resultado (2 de los 32 números) que debería mostrar su programa. 5 Distancia Manhattan =================== ------------------------------- Valor: 1 Posiciones: (2, 2), (4, 5) 10 Distancia Manhattan: 5 ------------------------------- Valor: 2 Posiciones: (1, 1), (5, 1) Distancia Manhattan: 4 15 Formación de grupos de trabajo Con una matriz en donde se tiene como campos el número, apellido 1, apellido 2, nombre 1 y nombre 2 de cada estudiante, implemente un programa que genere gru- pos de trabajo con estudiantes escogidos al azar. Para generar los grupos de traba- jo el usuario indica el número de estudiantes de cada grupo a generar. Es posible 20 que algún grupo quede con un número inferior al indicado por el usuario; en ese 119 Angel Vázquez-Patiño Universidad de Cuenca caso solamente se debe indicar en pantalla cuál es el grupo que tiene menos estu- diantes que el pedido (ver el segundo ejemplo de ejecución). El programa debe leer un archivo .csv (vea https://es.wikipedia.org/wiki/CSV) en donde se indican los campos de los estudiantes del curso. Un ejemplo de archivo es 5 el siguiente (podría llamarse listaEstudiantes.csv): 1,Abad,Sigcho,Carlos,Daniel 2,Agudo,Güiracocha,Dayana,Isabel 3,Andrade,Carchi,Julio,César 4,Arévalo,Angamarca,Moisés,Santiago 10 El siguiente es un primer ejemplo de ejecución del programa: Número de estudiantes por grupo: 2 Grupo 1 1. Julio César Andrade Carchi 2. Carlos Daniel Abad Sigcho 15 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: 20 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 25 Grupo 2 ¡Este grupo es de 1 estudiante y no de 3 como lo pedido! 1. Carlos Daniel Abad Sigcho Una vez que pueda generar los grupos dado el número de estudiantes que se desean en cada grupo, haga otro programa que genere los grupos dado el número total de grupos que se desean hacer (analice muy bien cuál es la diferencia con el primer 30 programa realizado). Por ejemplo, el siguiente es una ejecución del segundo progra- ma en donde el usuario quiso generar tres grupos: Número de grupos: 3 Grupo 1 1. Julio César Andrade Carchi 35 Grupo 2 120 Angel Vázquez-Patiño Universidad de Cuenca 1. Carlos Daniel Abad Sigcho Grupo 3 1. Dayana Isabel Agudo Güiracocha 2. Moisés Santiago Arévalo Angamarca 5 Puesto que el objetivo de este ejercicio es el manejo de matrices, se presenta a con- tinuación una solución para leer el archivo en el lenguaje de programación Java. En su programa, para cargar los datos a una matriz (la matriz lista en el código presentado), debe usar la función String[][] cargarLista(String rutaAr- chivo, int numEstudiantes); rutaArchivos es la ruta absoluta del archivo 10 que contiene la lista de estudiantes y numEstudiantes es el número total de estu- diantes. import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; 15 import java.util.Arrays; public class listaEstudiantes { public static void main (String args[]) { String[][] lista = cargarLista("listaEstudiantes.csv", 24); } 20 public static String[][] cargarLista(String rutaArchivo, int numEstudiantes){ // numEstudiantes: Número de estudiantes // que están en el archivo csv // int numEstudiantes = 24; 25 // separador de campos del archivo csv String SEPARADOR = ","; String QUOTE = "\""; String[][] lista = new String[numEstudiantes][]; BufferedReader br = null; 30 try { br = new BufferedReader(new FileReader(rutaArchivo)); String line = br.readLine(); 121 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)); 5 campos = removeTrailingQuotes(campos, QUOTE); lista[i++] = campos; line = br.readLine(); } 10 } catch (Exception e) { System.out.println(e.getMessage()); } finally { try{ 15 br.close(); }catch(IOException e){ System.out.println(e.getMessage()); } } 20 return lista; } private static String[] removeTrailingQuotes(String[] fields, String QUOTE) { String result[] = new String[fields.length]; 25 for (int i=0;i<result.length;i++){ result[i] = fields[i].replaceAll("^"+QUOTE, "").replaceAll(QUOTE+"$", ""); } return result; 30 } } * 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 35 matriz bidimensional) determina las adyacencias entre pares de vértices de un gra- fo. En una matriz de adyacencia, los vértices se conciben como enteros en el con - junto {1, 2, …, n} y las aristas como pares de tales enteros. Esto permite almace- nar referencias a las aristas en las celdas de una matriz bidimensional de nxn. Cada fla y cada columna representan un vértice del grafo y cada posición repre- 122 Angel Vázquez-Patiño Universidad de Cuenca senta una arista (o la ausencia de esta) cuyo vértice origen se encuentra en la fla y vértice fnal se encuentra en la columna. Las siguientes fguras muestran la repre- sentación gráfca de un grafo dirigido simple, un grafo no dirigido simple, un grafo euleriano y un multigrafo con sus respectivas matrices de adyacencia. 5 Escribir un programa que implemente las funciones que se detallan a continuación. Todas las funciones reciben como entrada el grafo representado mediante su matriz de adyacencia: 1. Una función que devuelva 1 si el grafo es euleriano. Se debe devolver 0 si el grafo no es euleriano. Un grafo es euleriano si cada vértice tiene un grado 10 par. El grado o valencia de un vértice es el número de aristas incidentes al vértice. 2. Una función que devuelva 1 si el grafo es simple. Se debe devolver 0 si el grafo no es Simple. Un grafo simple es aquel que no tiene aristas paralelas o múltiples que unan el mismo par de vértices. 15 3. Una función que devuelva 1 si el grafo es multigrafo. Se debe devolver 0 si el grafo no es multigrafo. Un grafo que cuente con múltiples aristas entre dos vértices se denomina multigrafo 4. Una función que devuelva 1 si el grafo simple es dirigido. Se debe devolver 0 si el grafo simple es no dirigido. Si G es un grafo simple con n vértices y m 20 aristas, entonces: ◦ Si G es no dirigido, m≤n(n-1)/2 ◦ Si G es dirigido, m≤n(n-1) 123 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áci- les (Deitel and Deitel, 2012): 5 Usted lanza dos dados. Cada dado tiene seis caras, que contienen uno, dos, tres, cuatro, cinco y seis puntos, respectivamente. Después que los dados pa- ran, se calcula la suma de los puntos en las dos caras que están hacia arriba. Si la suma es 7 u 11 en el primer lanzamiento, usted gana (termina el jue - go). Si la suma es 2, 3 o 12 en el primer lanzamiento (llamado “craps”), us- 10 ted 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 es- tán hacia arriba es igual que la suma en el primer lanzamiento). Se pierde 15 por sacar un 7 antes de que “hace su punto”. Escriba una aplicación que ejecute 1'000.000 de juegos de craps y conteste las si- guientes preguntas: 1. ¿Cuántos juegos fueron ganados en el primer lanzamiento, en el segundo lanzamiento, en el tercer lanzamiento, …, en el vigésimo lanzamiento y des- 20 pués del vigésimo lanzamiento? 2. ¿Cuántos juegos fueron perdidos en el primer lanzamiento, en el segundo lanzamiento, en el tercer lanzamiento, …, en el vigésimo lanzamiento y des- pués del vigésimo lanzamiento? 3. ¿Cuáles son las probabilidades de ganar en el juego de craps? Nota: debe 25 descubrir que el juego de craps es uno de los juegos de casino más justos; ¿Qué cree que esto signifca? 4. ¿Cuál es la duración promedio de un juego de craps? Nota: la duración hace referencia al número de lanzamientos antes de terminar el juego. 5. ¿Las probabilidades de ganar mejoran con la duración del juego? 30 Hormiga de Langton La siguiente información es tomada de wikipedia (https://goo.gl/6dNIEW). 124 Angel Vázquez-Patiño Universidad de Cuenca La hormiga de Langton es una máquina de Turing bidimensional con un conjunto de reglas muy sencillo y que da lugar a comportamientos emergentes complejos. La hormiga de Langton clásica opera sobre una matriz cuadrada, en que cada celda puede estar en uno de dos estados: blanco o negro (1 o 0). 5 En la matriz se identifca arbitrariamente una celda como la hormiga. La hormiga siempre está mirando en una de las cuatro direcciones cardinales y se mueve una celda cada vez, de acuerdo con las siguientes reglas: 1. Si está sobre una celda blanca, cambia el color de la celda, gira noventa gra- dos a la derecha y avanza una celda. 10 2. Si está sobre una celda negra, cambia el color de la celda, gira noventa gra- dos a la izquierda y avanza una celda. Implemente un programa que realice lo siguiente: 1. Genere una matriz de 100×100 con 5000 celdas blancas (valor 1) y 5000 cel- das negras (valor 0). Las celdas deben ser “pintadas” al azar. 15 2. Identifque arbitrariamente una celda como la hormiga. 3. Haga que la homiga camine hasta que llegue a los límites de la matriz. 4. Cada vez que la hormiga se mueva una celda, muestre la información de la matriz como se muestra en la fgura 8. Figura 8: imagen tomada de Wikipedia https://goo.gl/6dNIEW. 125 Angel Vázquez-Patiño Universidad de Cuenca * Las ocho reinas Este problema clásico en ciencias de la computación fue propuesto por René Estre - lla. Este problema consiste en ubicar ocho reinas en un tablero de ajedrez de tal 5 manera que no se ataquen entre sí. Por lo tanto, la solución requiere que no existan dos reinas que se encuentren en la misma fla, columna o diagonal. En este sentido, una confguración candidata consiste en una forma específca de ubicar las ocho reinas en el tablero (que pueden o no atacarse entre sí), mientras que una solución es una confguración candidata que cumple el requerimiento de que las 10 reinas no se ataquen entre sí. Se sabe que este problema tiene 92 soluciones distintas, es decir, existen 92 formas de ubicar las ocho reinas en el tablero de forma que el requerimiento del problema se cumpla (vea https://goo.gl/fFo9WL). En la siguiente fgura se muestra una de las posibles soluciones: Figura 9: Una de las posibles soluciones al problema de las ocho reinas. El objetivo de este ejercicio es escribir un programa que encuentre, al menos, una 15 de las soluciones a este problema. El programa además debe permitir al usuario in- gresar una confguración candidata indicando las coordenadas de la ubicación de cada una de las ocho reinas. En particular, el programa debe mostrar un menú con tres opciones: 1. Generar solución 20 2. Ingresar confguración candidata 3. Salir 126 Angel Vázquez-Patiño Universidad de Cuenca A continuación, se detalla cada una de estas tareas. 1. Generar solución El programa genera una confguración candidata y verifca si esa confguración co- rresponde a una solución. Si este es el caso, muestra la solución en pantalla simu- 5 lando un tablero de ajedrez e indicando la ubicación de las ocho reinas. Si la conf- guración generada no corresponde a una solución, se descarta y se repite el proce- so, volviéndose a generar otra confguración candidata. 2. Ingresar confguración candidata Cuando el usuario escoge esta opción se le solicita que ingrese ocho pares de coor - 10 denadas numéricas que indiquen la ubicación de las reinas en el tablero. Cada co- ordenada será un número entero en el rango [1, 8], considerando que el par de co- ordenadas (1, 1) corresponde a la casilla superior izquierda del tablero y la coorde- nada (8, 8) corresponde a la casilla inferior derecha. A continuación, el programa mostrará la confguración ingresada en forma de un tablero con la ubicación de las 15 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 20 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 25 La confguración resultante sería la que se muestra en la fgura 9, la cual evidente- mente corresponde a una solución del problema. 3. Salir El programa solamente termina cuando se escoja esta opción. * Recorridos de matriz 30 Espiral hacia el interior Genere una matriz de n flas y m columnas (pueden ser números pares o impares), con números aleatorios enteros en el intervalo [0, n+m); y muestre la matriz en pantalla. Lea la matriz en forma de espiral comenzando por el último elemento, 127 Angel Vázquez-Patiño Universidad de Cuenca hacia arriba, como se muestra en la fgura 10. A medida que vaya leyendo la ma- triz, llene un arreglo unidimensional que contenta los números que se van leyendo, y muestre el arreglo en pantalla. Usando el arreglo, extraiga el número que se en- cuentra en la última posición y almacénelo en la variable nro_a. Además, extraiga 5 el número que se encuentra en la posición correspondiente a nro_a y almacénelo en la variable nro_b. Con estos números forme una matriz en donde la primera columna tenga la cantidad de números menores, mayores e iguales a nro_a; y la segunda columna tenga la cantidad de números menores, mayores e iguales a nro_b (en la fgura se asume que el primer elemento es el de subíndice cero). Fi- 10 nalmente muestre la última matriz. Figura 10: Recorrido en espiral hacia el interior de una matriz de n×m. Espiral hacia el exterior Genere una matriz de n flas y n columnas, siendo n impar (validar), con números aleatorios enteros en el intervalo [0, n+n); y muestre la matriz en pantalla. Lea la matriz en forma de espiral comenzando por el elemento central, como se muestra 15 en la fgura 11. A medida que vaya leyendo la matriz, llene un arreglo unidimensio- nal que contenta los números que se van leyendo, y muestre el arreglo en pantalla. Ordene los números del arreglo ascendentemente y muestre el arreglo en pantalla. Usando el arreglo ordenado, extraiga el número que se encuentra en la última posi- ción y almacénelo en la variable nro_a. Además, extraiga el número que se en- 20 cuentra en la posición correspondiente a nro_a y almacénelo en la variable nro_b. Con estos números forme una matriz en donde la primera columna tenga la canti- dad de números menores, mayores e iguales a nro_a; y la segunda columna tenga la cantidad de números menores, mayores e iguales a nro_b (en la fgura se asume 128 Angel Vázquez-Patiño Universidad de Cuenca que el primer elemento es el de subíndice cero). Finalmente muestre la última ma - triz. Figura 11: Recorrido en espiral hacia el exterior de una matriz cuadrada . * Datos de estudiantes Escriba un programa que forme una matriz de n×5 elementos (n debe ser un ente- 5 ro positivo, ingresado por el usuario), bajo el siguiente esquema: • La primera columna debe ser ingresada por el usuario y debe ser numérica de dos cifras. Esta columna representa el código del alumno y debe ser vali- dado para que sea único dentro de los datos ingresados en la columna. • Las siguientes tres columnas corresponden a califcaciones de los estudiantes 10 que están cursando una asignatura, que van del rango de 1 a 20, inclusivo. Simule la obtención de las califcaciones generándolas aleatoriamente. • La quinta columna debe ser calculada como el promedio de las tres colum- nas de califcaciones, redondeada como el entero más cercano al valor pro- medio calculado. 15 Forme una segunda matriz, de n×3 elementos. La primera columna lleva los códi- gos de estudiantes ingresados para la primera matriz. La segunda columna lleva la equivalencia de las califcaciones en base al siguiente cuadro: 129 Angel Vázquez-Patiño Universidad de Cuenca Rango Equivalencia Observación 01-09 R Regular 10-12 B Buena 13-17 A Aceptable 18-20 S Sobresaliente La tercera columna lleva un 1 si el alumno aprueba el curso, considerando que de- ben obtener 10 puntos o más para aprobarlo. Lleva un 0, si ha obtenido menos de 10 puntos. Determine cuántos alumnos aprobarán el curso con Buena, cuántos con Aceptable 5 y cuántos con Sobresaliente. Se deben mostrar las dos matrices para verifcar los resultados obtenidos. * Datos de personas El programa va a almacenar registros en una matriz. Para ello se debe hacer lo si - guiente: 10 1. Ingreso de campos de los registros Solicite al usuario que ingrese uno a uno los campos de una matriz que almacenará los registros y cree un índice que asocie el campo a una columna de la matriz. Lue- go, cree la matriz que almacenará los registros. Ejemplo 15 cédula nombre apellido edad ... 130 Angel Vázquez-Patiño Universidad de Cuenca Índice cédula 0 nombre 1 apellido 2 edad 3 ... ... 2. Ingreso de datos Una vez ingresados los campos con los que se va a trabajar, pida al usuario que in- grese los registros como cadenas, de la siguiente manera (en base a los campos puestos en el ejemplo anterior): 5 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 ingre- san 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 10 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. Des- pués de cada ingreso, muestre la matriz de datos. Para los dos registros de ejemplo la matriz de datos sería la siguiente: 0104132548 cevallos 22 0108562554 juan malo 25 Si un registro contiene un campo que inicialmente no se consideró, el programa de- 15 berá indicar con una mensaje que el campo no fue encontrado. Por ejemplo, si se ingresa el siguiente registro, el programa deberá mostrar un mensaje de error y la matriz de datos resultante. cedula:0305677824;teléfono:4023568;nombre:sara;apellido:abril ¡Advertencia! El campo teléfono no existe pero se ingresa el registro. 131 Angel Vázquez-Patiño Universidad de Cuenca 0104132548 cevallos 22 0108562554 juan malo 25 0305677824 sara abril 20 3. Búsquedas El programa debe permitir buscar un registro por cualquier campo. Es decir, se pregunta al usuario por qué campo desea buscar, se busca ese registro utilizando la búsqueda binaria y se muestran los datos de ese registro. Además, se muestra la matriz antes y después de cada búsqueda. Por ejemplo: 25 ¿Por qué campo desea buscar? apellido Ingrese el valor a buscar: malo El programa deberá mostrar la matriz antes y después de la búsqueda y los datos del registro si existe. 30 cédula: 0108562554 nombre: juan apellido: malo edad: 25 * Datos de empresas y empleados 35 Dados los siguientes datos de entrada en formato de cadena: String datosEmpresas = "emp1,Marcimex;emp2,Etapa;emp3,Elecaustro;"; String datosEmpleados = "emp1,Juan,1500;emp2,Arturo,1200;emp1,Pedro,1100;" + "emp2,Ramiro,1400;emp1,Jaime,900;emp3,Xavier,800;" + "emp3,Jorge,1000;emp1,Edgar,1200;emp3,Daniel,950;"; 40 La variable datosEmpresas almacena el código y nombre de una lista de empresas, en donde cada dato está separado por coma y cada registro por punto y coma. La variable datosEmpleados almacena el código de la empresa a la que pertenece un empleado, el nombre del empleado y el salario de una lista de empleados, en donde cada dato está separado por coma y cada registro por punto y coma. 45 Realizar un programa que haga lo siguiente: 1. Mostrar los datos de una empresa en particular dado el código de la misma. 2. Listar todas las empresas. 132 Angel Vázquez-Patiño Universidad de Cuenca 3. Listar los empleados de una empresa en particular ordenados de forma des- cendente según el salario. 4. Mostrar un listado de empresas con el salario promedio de los empleados de la misma. 5 Ejemplo 1. Mostrar los datos de una empresa Se pide al usuario el código de la empresa que desea mostrar • Código: emp3 El sistema muestra los datos de la empresa 10 • Código: emp3 • Nombre: Elecaustro 2. Listar todas las empresas. Código Nombre emp1 Marcimex emp2 Etapa emp3 Elecaustro 3. Listar los empleados de una empresa en particular ordenados de forma des- cendente según el salario. 15 Se pide al usuario el código de la empresa que desea mostrar • Código: emp1 El sistema muestra los empleados de la empresa emp1 (Marcimex) ordenados de forma descendente según el salario. Empresa: Marcimex Empleado Salario Juan 1500 Edgar 1200 Pedro 1100 Jaime 900 133 Angel Vázquez-Patiño Universidad de Cuenca 4. Mostrar un listado de empresas con el salario promedio de los empleados de la misma. (Tenga en cuenta que los datos pueden tener decimales) Empresa Salario promedio Marcimex 1175 Etapa 1300 Elecaustro 916.67 * Estadística descriptiva: frecuencias e histograma 1. Pedir al usuario el número de datos N. Validar que N sea un número en el 5 intervalo [10, 25]. 2. Generar un arreglo con N datos aleatorios en el intervalo [1, 20]. 3. Pedir al usuario el número de rangos R para crear el histograma, con la con- dición de que R sea un divisor de la nota máxima posible (20). 4. Generar la matriz de resumen (explicada en el ejemplo). 10 5. Generar y mostrar el histograma utilizando una matriz. Ejemplo 1. El programa solicita al usuario el número de datos a generar Número de datos: 20 2. Generar un arreglo de N datos aleatorios entre 1 y 20, inclusivo. 1 2 3 3 7 7 6 9 8 6 10 12 13 15 17 18 18 19 20 20 15 3. Pedir al usuario el número de rangos R para crear el histograma. Número de rangos: 4 4. Generar la matriz de resumen. 1 5 4 6 10 7 11 15 3 16 20 6 Nota: las columnas de esta matriz representan, de izquierda a derecha, el límite inferior, el límite superior y la frecuencia de cada rango. 134 Angel Vázquez-Patiño Universidad de Cuenca 5. Generar y mostrar el histograma utilizando una matriz # # # # # # # # # # # # # # # # # # # # 1-5 6-10 11-15 16-20 * Cifrado básico 1 Escriba un programa que lea una frase y que la almacene en una matriz siguiendo el esquema mostrado en la fgura 12. Luego debe mostrarse la matriz leyéndola en 5 las flas impares de izquierda a derecha y en las flas pares de derecha a izquierda. Las columnas que no contienen información, no deben ser consideradas en la visua- lización de la matriz. Por ejemplo, la frase: “hola mundo, que tal? Hoy es viernes 26 de enero.” se alma- cena en la matriz como se muestra en la fgura 12. 135 Angel Vázquez-Patiño Universidad de Cuenca Figura 12: Matriz para caracteres en un cifrado básico de texto. La matriz se debe leer siguiendo el sentido especifcado, según la fla sea par o im- par dará como resultado: h, ee rH olqoneneyua e ser e muts2o.6 andlv di?o Cifrado básico 2 5 Implemente una función que reciba una frase y la devuelva cifrada. El cifrado a utilizar es básico y sigue el siguiente algoritmo: 1. Se utiliza una matriz cuadrada cuyo orden permita tener un número de ele- mentos igual o mayor al total de caracteres de la frase. Pero, la matriz no debe tener más elementos de los necesarios de manera que no se utilice me- 10 moria innecesaria. Por ejemplo, si la longitud de la frase es 9, el orden de la matriz cuadrada es 3; o si la longitud de la frase es 17, el orden de la matriz es 5. 2. Los caracteres de la frase deben ser asignados a los elementos de la matriz comenzando desde el elemento de la primera fla y primera columna. Luego, 15 el siguiente carácter de la frase debe ser asignado al elemento de la matriz cuya fla sea una menos a la anterior y cuya columna sea una más a la ante- rior (“diagonal ascendente”). Si la fla es la primera, la siguiente debe ser la última fla; si la columna es la fnal, la siguiente debe ser la primera colum- na. Si al momento de asignar un carácter el elemento ya tiene asignado un 20 carácter, se debe asignar el carácter al elemento que está a la derecha (mis- ma fla, siguiente columna). Por ejemplo, para la frase “UNIVERSIDAD DE CUENCA”, la asignación en la matriz cuadrada de orden 5 (hay 21 caracte- res en la frase) es la que se muestra en la fgura 13. 136 Angel Vázquez-Patiño Universidad de Cuenca Figura 13: Asignación de caracteres de una frase en una matriz cuadrada que es usada para cifrar el texto. Los subíndices indican número de carácter de la frase. El subguión indica un espacio. 3. El texto cifrado corresponde a la lectura de la matriz de fla en fla y en 5 cada fla columna por columna. Los elementos de la matriz que no tienen asignado ningún carácter (el espacio se considera un carácter) no son toma- dos en cuenta. Por ejemplo, el texto cifrado de la matriz de la fgura 13 es “URDCAA CEENVDEIIDNS U”. Para efectos de verifcación se debe mostrar la matriz cuadrada; parecida a la fgu- 10 ra 13 pero sin los subíndices. Usted puede verifcar el correcto funcionamiento de su programa utilizando las siguientes frases: Frase original Frase cifrada - reciba una frase y la devuelva cifrada - rus vaaalr lefaruibf ci yvaca e enedad - Se utiliza una matriz cuadrada - Slnrautuaiacdt auamr z zeiaid - Los caracteres de la frase deben ser - La feras denra sgaee icrlnss e asignados saosteaedocdrb - El texto cifrado corresponde a la - Eir atl mraraiaauc umfdlc ot iao lectura de la matriz de fla en fla y en oceaefccrt dcd oxonelnnapedol el cada fla columna por columna tap ezeia rsadi nlfel rayf - debe mostrar la matriz cuadrada - do tuaracdmm a azrer dbtaieslra Un algoritmo voraz para el número cromático Vea https://youtu.be/DyRh5UhtVvw Algoritmo de Floyd-Warshall 15 El algoritmo de Floyd-Warshall es un algoritmo de análisis sobre grafos para en- contrar 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 algo- ritmo. Muestre también el diagrama de fujo del algoritmo. 137 Angel Vázquez-Patiño Universidad de Cuenca 138 Angel Vázquez-Patiño Universidad de Cuenca Funciones Ámbito de las variables 1. * ¿Cómo se conocen a las variables que son creadas dentro del programa y fuera de cualquier función? 5 a) Estáticas b) Globales c) Instancia d) Locales 2. ¿Cuál es la diferencia entre una llamada de función por valor y una llamada 10 de función por referencia? 3. ¿Cómo se conocen a las variables que son declaradas dentro de una función o bloque de código que pueden ser usadas sólo por sentencias que están den- tro de esa función o bloque y no pueden ser conocidas por funciones fuera de donde fueron declaradas? 15 4. ¿Cuando se declara una variable global, es inicializada automáticamente por el sistema? 5. ¿Cuando se declara una variable local, es inicializada automáticamente por el sistema? 6. ¿Cuando una variable global y una variable local tienen el mismo nombre 20 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 25 pasa como parámetro. 2. Implemente una función que reciba como parámetro un número N, y mues- tre por pantalla N veces el mensaje “Función ejecutándose”. Validar N para que sea mayor o igual a cero. 139 Angel Vázquez-Patiño Universidad de Cuenca 3. Implemente una función que devuelva el valor absoluto de cualquier número real dado. 4. Implemente una función que indique si un año es bisiesto o no. Un año es bisiesto si es múltiplo de 4 (por ejemplo 1984). Sin embargo, los años múlti- 5 plos de 100 sólo son bisiestos si a la vez son múltiplos de 400 (por ejemplo, 1800 no fue bisiesto, mientras que 2000 sí lo fue). 5. Implemente una función que calcule la distancia euclídea entre dos puntos. 6. Implemente una función que imprima en pantalla el seno, coseno y tangente de un ángulo dado. El ángulo puede estar en grados sexagesimales o radia- 10 nes; para distinguir el uno del otro use otro parámetro. 7. Implemente una función que sume los 137 primeros números pares (>0). 8. Implemente una función que sume los n primeros números impares (>0). 9. Implemente una función que genere un número aleatorio real entre un rango enviado como parámetro. 15 10. Implemente una función que imprima en pantalla un número dado de aste- riscos indicado en el parámetro recibido. El argumento indica el número de asteriscos del cateto del triángulo rectángulo que se “dibuja”. Por ejemplo, para un triángulo rectángulo de cateto 8, se imprimiría en pantalla * 20 * * * * * * * * * * * * * * * * * * * * 25 * * * * * * * * * * * * * * * 11. Implemente una función que reciba dos números y que devuelva el número mayor. 12. Implemente una función que reciba tres números y que devuelva el máximo. 30 13. Implemente una función que tenga como parámetro un arreglo de números reales y que devuelva el máximo de los números. 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. 140 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 or- den ascendente o descendente. 5 16. Implemente una función que calcule la suma 17. Implemente una función que calcule la suma (debe escribir también la fun- ción para realizar la potencia) 18. Implemente una función que transforme a binario un número entre 0 y 255. 19. Implemente una función que imprima en pantalla el área o el volumen de un 10 cilindro, según se especifque. Para distinguir un caso de otro se le enviará a la función el carácter 'a' (para área) o 'v' (para el volumen). Además hemos de enviar a la función el radio y la altura. 20. Implemente una función que reciba como parámetros una cadena de caracte- res y un carácter; la función devuelve el número de veces que se encuentra el 15 carácter en la cadena. 21. Implemente una función que indique si un número entero es primo. 22. Implemente una función a la que se le pasa un número entero y devuelve el número (i.e., la cantidad) de divisores primos que tiene. 23. Implemente una función que indique si dos números enteros positivos son 20 amigos. Dos números amigos son dos números enteros positivos a y b tales que la suma de los divisores propios de uno es igual al otro número y vice- versa, es decir SD(a)=b y SD(b)=a, donde SD(n) es igual a la suma de los divisores de n, sin incluir a n. Vea https://is.gd/KHBfs1. 24. Implemente una función que calcule el máximo común divisor de dos núme- 25 ros. 25. Implemente una función que calcule el máximo común divisor de tres núme- ros. 26. Implemente una función que calcule el mínimo común múltiplo de dos nú- meros. 141 Angel Vázquez-Patiño Universidad de Cuenca 27. Implemente una función que calcule el mínimo común múltiplo de tres nú- meros. 28. Implemente una función que voltee un número entero positivo dado. Por ejemplo, si se ingresa 98786, se devuelve 68789. 5 29. Implemente una función que reciba un arreglo de números enteros y devuel- va el máximo común divisor de esos números. 30. Implemente una función que reciba un arreglo de números enteros y devuel- va el mínimo común múltiplo de esos números. 31. Implemente una función que reciba como parámetros dos arreglos. La prime- 10 ra 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 15 devuelve la cantidad de impares ignorados. 33. Implemente una función que reciba una matriz de enteros y un número, e indique si el número se encuentra en la matriz. 34. Implemente una función que devuelva el valor máximo de una matriz. 35. Implemente una función que devuelva, en un arreglo, el área y el volumen 20 de un cilindro. Hemos de pasarle a la función el radio y la altura. 36. Implemente una función que recibe un número entero y devuelve, en un arreglo, los divisores primos que tiene. 37. Implemente la función opera_tabla, a la que se le pasa dos matrices y qué operación se desea realizar: sumar, restar, multiplicar o dividir (mediante un 25 carácter: 's', 'r', 'm', 'd'). La función devuelve una matriz con los resul- tados. 38. Implemente una función que calcule el n-ésimo término de la serie de Fibo- nacci. En esta serie el n-ésimo valor se calcula sumando los dos valores ante- riores. Es decir fbonacci(n) = fbonacci(n-1) + fbonacci(n-2), siendo fbo- 30 nacci(0) = 1 y fbonacci(1) = 1. 39. Igual que el ejercicio anterior, pero pudiendo confgurar los valores de los dos primeros términos de la serie. 142 Angel Vázquez-Patiño Universidad de Cuenca 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 (to- rre negra), etc. (P, T, C, A, R, D). La función debe devolver un valor booleano, que indique si el rey negro está amenazado. 5 41. Igual que el ejercicio anterior, pero indicando si existe jaque mate a las ne- gras. 42. * Histograma Implemente un programa usando funciones que lea N números de enteros positivos entre 1 y 250. 10 Se han defnido 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 especifca- dos, separados por un TAB. Además, se debe mostrar un histograma. Por ejemplo: Tabla de valores por rango --------------------------------------------------------------------------- 15 0-50 51-100 101-150 151-200 201-250 --------------------------------------------------------------------------- 17 8 10 5 32 --------------------------------------------------------------------------- Histograma 20 |----------------------------------------------------------------- 0-50 | ******************* 51-100 | ********* 101-150 | *********** 151-200 | ***** 25 201-250 | **************************************************** |----------------------------------------------------------------- Aritmética básica Visualizar el siguiente menú 1. Suma 30 2. Resta 3. Multiplicación 4. División 143 Angel Vázquez-Patiño Universidad de Cuenca 5. Salir Si no se ingresa un número del 1 al 5, se debe mostrar un error que lo indique y debe pedir el ingreso de una opción válida. Opción 1: suma dos números, el prime - ro en el rango [-1000, -1] y el segundo en el rango [1, 1000]. Opción 2: resta dos nú- 5 meros, el primero en el rango [-1000, 1] y el segundo en el rango [-1, 1000]. Opción 3: multiplica dos números, el primero en el rango [100, 200] y el segundo en el ran- go [-10, 2]. Opción 4: división del primer número entre el segundo; el primero en el rango [-10, 10] y el segundo en el rango [-5, -1] U [1, 5]. Potenciación 10 Desarrolle un programa que pida dos números. Se debe calcular la potencia toman- do como base el primer número y como exponente el segundo número dado. El re - sultado, luego de visualizarlo, debe elevarlo al cubo, ese resultado, luego de visuali- zarlo, debe elevarlo al cuadrado (se debe presentar este último resultado también). Aproximación de sinh-1 15 Para n→∞ (en la práctica un número sufcientemente alto) la función sinh -1 de x se puede calcular con la siguiente serie de Taylor: Desarrollar un programa que calcule el valor de la función sinh -1 de un valor x dado. Las funciones para calcular el factorial y la potencia deben ser realizadas por usted (i.e., no utilizar ninguna función predefnida de ningún lenguaje de progra- 20 mación). La serie de Taylor nos da el valor de la función sinh -1 de x en radianes, el algoritmo que usted proponga debe mostrar el valor en radianes y en grados sexa- gesimales (i.e., escribir una función que pase radianes a grados sexagesimales). Tenga en cuenta que 1 radián es igual a 57.2958 grados sexagesimales. Función W de Lambert 25 La función W de Lambert o también conocida como función Omega o log produc- to, 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 sufciente- mente alto) la función W de Lambert de x se puede calcular con la siguiente serie de Taylor: 30 144 Angel Vázquez-Patiño Universidad de Cuenca Desarrolle un programa que pida los valores de x (cualquier número real) y n (cualquier número entero) para calcular el valor de la función W de Lambert de x con n términos de la serie de Taylor. El programa debe hacer uso de una función desarrollada por usted mismo llamada funcionW. No se pueden usar funciones pre- 5 determinadas de ningún lenguaje de programación para calcular el factorial o la potencia de un número (tampoco se puede usar el acento circunfejo, ^); esto quie- re decir que debe desarrollar las funciones para calcular la potencia (llámela miPo- tencia) y el factorial (llámela miFactorial) de un número. Además, debe validar el valor de x como se indica en la serie de Taylor; para este fn, desarrolle una función 10 llamada xValido (devuelve verdadero o falso de acuerdo a la validación) y una fun- ción miABS (devuelve el valor absoluto de cualquier número real). Factorial de un número con función recursiva Desarrolle un algoritmo para calcular el factorial de un número dado. Este algorit- mo debe tener una función recursiva. Una explicación de funciones recursivas se 15 encuentra en la sección 7.8 del libro de Alcalde Lancharro y García López (1992). Máximo común divisor y mínimo común múltiplo Desarrolle un programa que calcule el máximo común divisor (MCD) y el mínimo común múltiplo (MCM) de dos números ingresados por el usuario. El programa de- berá manejar un menú con las siguientes opciones. 20 1. Ingreso de datos (Se pide al usuario que ingrese los dos números) 2. Máximo Común Divisor (Calcula el MCD) 3. Mínimo Común Múltiplo (Calcula el MCM) 4. Salir Ejemplo: 25 1. Ingreso de datos número1: 12 número2: 30 El MCD de 12 y 30 es: 6 El MCM de 12 y 30 es: 60 145 Angel Vázquez-Patiño Universidad de Cuenca * Peso adecuado Escriba un programa, usando funciones, que determine cuántas personas (el núme- ro de personas es indicado por el usuario) están con un peso adecuado o no según su estatura. Para ello, considere la tabla 1. Tabla 1: Peso ideal de una persona según su estatura. 5 El programa debe tener registrado en una matriz, los pesos y las estaturas corres- pondientes según lo mostrado en la tabla 1. El usuario debe indicar los datos de cuántas personas va a ingresar y a continuación ingresar los valores de peso, esta- tura y sexo de cada persona. Estos valores ingresados se deben almacenar en arre- glos separados de pesos, de estaturas y de sexo. El programa debe verifcar si esos 10 valores están de acuerdo a la tabla anterior. En base a la verifcación las personas deben clasifcarse como: • A: si el peso de la persona está por debajo del rango considerado ideal. • B: si el peso de la persona está en el rango de peso considerado ideal. • C: si el peso de la persona está por debajo del rango considerado ideal. 146 Angel Vázquez-Patiño Universidad de Cuenca El resultado de esta clasifcación se debe almacenar en otro arreglo unidimensional o bidimensional (justifque su elección). Entonces, es necesario determinar cuántas mujeres y hombres han recibido una clasifcación de cada tipo (A, B, C) y mostrar el resultado así: 5 ============================================================ CLASIFICACIÓN MUJERES HOMBRES ============================================================ A ValorA_m ValorA_h B ValorB_m ValorB_h 10 C ValorC_m ValorC_h ============================================================ * Raíces de una función Escriba un programa empleando funciones que calcule las raíces aproximadas de una ecuación de segundo grado en la forma y = ax2 + bx + c. Los datos a ingresar 15 son: (1) coefcientes enteros de la ecuación de segundo grado, (2) el valor inicial y el valor fnal del intervalo de búsqueda de las raíces y (3) el número de partes en las que se dividirá el intervalo para hacer la búsqueda de las raíces. Si existe alguna posible raíz en el intervalo especifcado, debe mostrarse en pantalla. En caso de no existir raíces en el intervalo dado debe mostrarse un mensaje que 20 indique al usuario ese resultado. El método de la bisección Implemente una función que utilice el método de la bisección (vea Quarteroni et al., 2014, pp. 43–47) para encontrar uno de los dos ceros de la función en el rango indicado por el usuario. 147 * 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 5 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 me- nor a un valor llamado tolerancia o cuando se cumple un número máximo de itera- 10 ciones. En la siguiente fgura se pueden apreciar las primeras iteraciones generadas por el método de Newton con un valor inicial x(0) para la función f(x) = x + ex + 10/(1 + x2) - 5. Para este ejercicio se va a aproximar el cero de la función f(x) = π/3 - x + x2 - x3; f'(x) = - 1 + 2x - 3x2. 15 1. Escriba una función valorInicial() que genere la aproximación inicial x(0) (valor real) en el rango [-½π, ⅔π]. Utilice una función predeterminada para usar el valor de π, no una aproximación. 2. Escriba una función funcionEvaluada(x) que devuelva el valor de la fun- ción f(x) evaluada en el punto x que se envía como parámetro. Utilice una 20 función predeterminada para usar el valor de π, no una aproximación. 3. Escriba una función funcionDerivada(x) que devuelva el valor de la fun- ción f'(x) evaluada en el punto x que se envía como parámetro. Angel Vázquez-Patiño Universidad de Cuenca 4. Escriba una función newton(x0, tol, nmax) que devuelva en una matriz los resultados del método. x0, tol y nmax son respectivamente x(0), tolerancia y número máximo de iteraciones. En la primera fla de la matriz se debe devolver 1) la aproximación del cero 5 de la función, 2) el valor de f(x) en ese punto, 3) el número de iteraciones que se hicieron para encontrar la aproximación del cero y 4) la diferencia en- tre las aproximaciones x(k+1) y x(k) (i.e., la primera fla no debe tener más de 4 columnas). En la segunda fla de la matriz se debe devolver la secuencia de aproxima- 10 ciones x(0), x(1), x(2), …, x(n). Por ejemplo, la función podría devolver una matriz (los valores no necesaria- mente refejan la salida de una ejecución del programa; sólo se pretende aclarar el número de columnas que tendría cada fla) 1.023 0.002 31.000 0.001 -0.010 2.100 1.200 1.010 0.900 ... 1.019 1.022 1.023 Si en algún momento el valor de f'(x) llega a ser cero, escribir en pantalla 15 “La derivada de la función fue cero en m” (m es el valor de x donde se eva- luó la derivada de la función) y use un valor de 0.0000001 para la derivada en esa iteración. 5. Escribir una función mostrarMatriz(matriz) para mostrar la matriz que devuelve la función newton(x0, tol, nmax) enviando como parámetro x0 20 el valor generado por la función valorInicial(). Esta función debe prime- ro mostrar los valores de la primera fla en forma horizontal (debe indicar a qué corresponde cada valor) y luego las aproximaciones del cero de la fun- ción (segunda fla) en forma vertical. Ordenamiento de n números 25 • Diseñe una función que ordene los números de un arreglo que se le pasa. Se devuelve un arreglo con los números ordenados. • Diseñe una función que ordene los números de una matriz que se le pasa. Se devuelve una matriz con los números ordenados. 149 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 explica- 5 ció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 ex- 10 plicación de la búsqueda lineal en matrices se puede encontrar en la sección 6.2.3 del libro de Alcalde Lancharro y García López (1992). Búsqueda binaria o dicotómica Diseñe una función que realice la búsqueda dicotómica o binaria de un arreglo. La función devuelve el índice (del arreglo original) en donde se encuentra el número 15 buscado; si no se encuentra el número, la función devuelve -1. Una explicación de la búsqueda binaria o dicotómica se puede encontrar en la sección 6.3 del libro de Alcalde Lancharro y García López (1992). Juego de dados entre dos En el juego cada jugador tiene dos dados (hay cuatro dados en total). En cada 20 turno los dos jugadores lanzan los dos dados al mismo tiempo. El juego termina cuando la suma de los valores de ambos jugadores es igual, e.g., el un jugador saca 3 y 5 (suman 8), y el segundo jugador saca 6 y 2 (suman 8). El ganador es la per - sona cuya suma de valores de lanzamientos sea mayor. Por ejemplo, en la siguiente tabla se muestra un juego que concluye en el turno 4 (pues la suma es igual); el ga- 25 nador es el jugador 2. 150 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 signifca que siempre uno y sólo uno de los jugadores es ganador. Se debe ir mostrando los valores sacados por los dos jugadores en cada turno. Por 5 ejemplo, lo siguiente es una ejecución del programa: Inicia el juego. Jugador 1 Jugador 2 Turno Dados 1 y 2 Suma Dados 1 y 2 Suma 1 1 y 3 4 2 y 2 4 10 2 4 y 1 5 3 y 5 8 3 6 y 6 12 2 y 4 6 4 5 y 4 9 6 y 3 9 Suma total 30 Suma total 27 Finaliza el juego. 15 El ganador es: Jugador 1. 1. Implemente una función que devuelva un número entero al azar en el rango [1, 6]. 2. Implemente una función que devuelva la suma (como número entero) de dos números al azar en el rango [1, 6]. En esta función tiene que utilizar la fun- 20 ció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 ta- bulaciones pertinentes que presenten los resultados como se mostró en el ejemplo de ejecución del programa (i.e., perfectamente alineados). 151 Angel Vázquez-Patiño Universidad de Cuenca Manejo de Caracteres y Cadenas Miscelánea 1. Dada una cadena, presentar de manera vertical cada letra de la cadena con su respectivo valor ASCII (primera columna la letra, segunda columna el va- 5 lor). 2. Mostrar el número de veces que aparece la letra a en la cadena “Mañana es sábado y voy a irme a pasear por los hermosos parques de Cuenca”. 3. Hacer un programa que ingrese una cadena de caracteres y determine el nú- mero de mayúsculas y el número de minúsculas. 10 4. Sustituir todos los espacios en blanco de una frase por un asterisco. 5. Muestre el número de veces que aparecen las letras a, o y e en la cadena “Mañana es sábado y voy a irme a pasear por los hermosos parques de Cuenca”. Además, si el número de veces que se repite la a es superior a 10 debe aparecer el mensaje “Exceso de a”, si el número de veces que se repite 15 la o es superior a 5 debe mostrarse “Exceso de o” y si se repite más de 3 ve- ces la letra e debe mostrarse “Exceso de e”. 6. Implemente una función que devuelva una cadena sin los espacios en blanco. 7. Ingresar una frase y reportar cada palabra en una línea diferente. 8. Solicitar el ingreso de los apellidos de dos personas. Mostrar un mensaje in- 20 dicando si son iguales o distintos. 9. Desarrolle un algoritmo que pida el ingreso de un nombre y un apellido de dos personas e indique si las dos personas tienen el mismo apellido. Se pide como una sola cadena el nombre y apellido de una persona y como otra ca- dena el nombre y apellido de la otra persona. 25 10. Solicitar el ingreso del apellido, nombre y edad de dos personas como cade- nas (validar que sea una edad correcta entre 0 y 130 años). Mostrar el nom- bre de la persona con mayor edad. 11. Leer una cadena y decir si es un número entero o real válido. Asuma que el usuario ingresa solamente números (0-9) y puntos (.). 152 Angel Vázquez-Patiño Universidad de Cuenca 12. Contar cuántas palabras tiene una cadena. Escribir dos versiones del progra- ma: a) Asumir que cada palabra está separada por un sólo espacio en blanco. b) No se sabe cómo están separadas las palabras: pueden estar separadas 5 por más de un espacio en blanco. 13. Escriba un programa que lea una frase y a continuación visualice cada pala- bra de la frase en columnas, seguida del número de letras que tiene cada pa- labra. 14. Ingresar una frase y modifcarla convirtiendo el primer carácter de cada pa- 10 labra, si esta fuera una letra, de minúsculas a mayúsculas. Cada palabra está separada por uno o más espacios o comas. 15. Contar el número de letras del alfabeto español de un texto ingresado. 16. Contar el número de vocales que se encuentran en una cadena. 17. Contar el número de consonantes que se encuentran en una cadena. 15 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 20 Una frase no debe contener palabras innecesarias así como un párrafo no debe contener frases innecesarias Resultados 1 letra : 0 palabras 2 letras: 3 palabras 25 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: 30 a) Su longitud b) El carácter asociado al índice 7 153 Angel Vázquez-Patiño Universidad de Cuenca c) La subcadena “creeré” d) El índice que ocupa el carácter ‘x’, desde la izquierda e) El índice que ocupa el carácter ‘x’, desde la derecha f) La cadena transformada a mayúsculas 5 g) La cadena transformada a minúsculas h) La cadena transformadas las minúsculas a mayúsculas y las mayúsculas a minúsculas i) Por último, comprobar si el primer carácter de la cadena es ‘E’ y mos- trar un mensaje que lo indique 10 20. Verifcar si una cadena de texto almacenada en la cadena nif, es un NIF co - rrecto o no. Si lo es, se imprimirá en pantalla su parte numérica; si no lo es, se mostrará el mensaje “NIF no válido”. Se tendrá en cuenta lo siguiente: Suponer que los NIFs tienen 8 dígitos y, a continuación, una letra (no im- porta que sea mayúscula o minúscula). 15 Pista: dos condiciones que debe cumplir el NIF: tener 9 caracteres y que el último sea una letra. Comprobado esto, verifcar que el resto de caracteres son dígitos. 21. Solicitar el ingreso del nombre y edad de dos personas. Validar el nombre in- gresado: 1) que no hayan espacios o caracteres diferentes a las vocales (voca- 20 les 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) verifcar 25 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”. 30 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 modifcar la va- riable S). 24. Ingresar una cadena de caracteres formadas por números y letras (en ese or- den) y obtenga otra cadena donde aparezca cada letra tantas veces como lo 154 Angel Vázquez-Patiño Universidad de Cuenca indique el número que lo precede. E.g. si la cadena es 2w4r5f se debe obte- ner la siguiente cadena: wwrrrrfffff. 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. 5 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 10 ingresa la cadena 20/11/2006 la otra cadena será 20 de Noviembre de 2006. 28. Escriba un programa para ingresar un número telefónico en formato de ca- dena y que luego lo convierta de la siguiente manera: Número Telefónico: 5256284000 15 Nueva Cadena: (52)-5-6284000 29. Escribir un programa que al recibir como datos dos cadenas de caracteres forme una tercera cadena intercalando los caracteres de las palabras de las cadenas recibidas. 30. Implementar una función cuya entrada sea una cadena S y un factor de mul- 20 tiplicació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 den- tro de una cadena. 25 33. Ingrese un texto e indique qué caracteres alfanuméricos no han aparecido en el texto. 34. Ingrese un texto e indique el porcentaje de palabras que tiene menos de 5 caracteres y el porcentaje de palabras con 5 o más caracteres. 35. Escriba un programa que lea una frase y sustituya todas las secuencias de 30 dos o varios blancos por un solo blanco y visualizar la frase obtenida. 155 Angel Vázquez-Patiño Universidad de Cuenca 36. Escriba un programa que calcule la frecuencia de aparición de las vocales de un texto proporcionado por el usuario. Esta solución se debe presentar en forma de histograma, e.g.: a 15 *************** 5 e 8 ******** i 5 ***** o 1 * u 6 ****** 37. Dada una cadena de caracteres. Realizar lo siguiente: 10 a) Extraer los n primeros caracteres de la cadena. b) Extraer los n últimos caracteres de la cadena. c) Eliminar los espacios en blanco que haya al fnal de la cadena. d) Eliminar los espacios en blanco que haya al comienzo de la cadena. e) Eliminar de una cadena los n caracteres que aparecen a partir de la posi- 15 ción p. f) Eliminar la primera aparición de una cadena dentro de otra. g) Insertar una cadena dentro de otra a partir de la posición p. h) Contar el número de veces que aparece una cadena dentro de otra. i) Borrar todas las apariciones de una cadena dentro de otra. 20 j) Sustituir todas las apariciones de una cadena dentro de otra, por una tercera. 38. Un grupo de inteligencia militar desea codifcar los mensajes secretos de tal forma que no puedan ser interpretados con una lectura directa, para lo cual han establecido las siguientes reglas: 25 a) Todo mensaje debe tener sus letras en mayúsculas. b) Reemplazar cada letra por la que sigue según abecedario, excepto Z que se deberá reemplazar con la letra A. c) Reemplazar cada dígito encontrado por el siguiente número excepto el 9 que deberá ser reemplazado por el 0. 30 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 ma- yúsculas y minúsculas, signos de puntuación y espacios en blanco. 156 Angel Vázquez-Patiño Universidad de Cuenca 41. El usuario ingresa una hora como cadena de caracteres; la hora no neces- ariamente cumple con el formato hh:mm:ss (e.g., 01:09:04) sino que puede estar expresada, por ejemplo, de la siguiente manera: 1:09:4, 1:9:4, 01:09:4, etc (siempre primero la hora, segundo los minutos y luego los segundos). El 5 programa debe mostrar la hora en formato de cadena de caracteres luego de un número n de segundos/minutos/horas ingresados por el usuario. El usua- rio escoge de un menú si quiere que n sean segundos, minutos u horas. Ejemplo, si se ingresa 1:8:04, y se escoge 60 segundos (se suma 60 segundos a la hora ingresada), el resultado es 01:09:04 (el resultado sí debe seguir el 10 formato hh:mm:ss). 42. * Escribir una función llamada terminaEnVocal que verifque 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 reci- ba como parámetro una frase y visualice en pantalla (una en cada línea) las 15 palabras de la misma y el número total de palabras que terminan en vocal. La función de verifcación de si termina en vocal o no, debe ser utilizada para contar el número total de palabras que terminan en vocal. A continua- ción se muestra un ejemplo: Entrada 20 Ingrese la frase: HolA mundo cruel Salida HolA mundo cruel 25 El número de palabras que terminan en vocal es: 2 43. * Implementar un algoritmo que permita gestionar las siguientes opciones: a) Función que permita mostrar un menú de las diferentes opciones b) Función que permita ingresar un listado de números enteros separados por comas (,) en una variable global de tipo cadena. 30 c) Función que permita calcular el promedio de los números ingresados en la cadena d) Función que permita extraer el menor o el mayor de los números de la cadena, en este caso es obligatorio el uso de parámetros para defnir si se 157 Angel Vázquez-Patiño Universidad de Cuenca extrae el menor o el mayor. A continuación se muestra un ejemplo de ejecución del programa: Ingrese los números separados por comas: 4,5,6,12,13,5,8,7 Menú 5 1. Promedio 2. Máximo 3. Mínimo 4. Salir Elija una opción [1-4]: 1 10 El promedio es: 7.5 Menú 1. Promedio 2. Máximo 3. Mínimo 15 4. Salir Elija una opción [1-4]: 2 El máximo es: 13 Menú 1. Promedio 20 2. Máximo 3. Mínimo 4. Salir Elija una opción [1-4]: 3 El mínimo es: 4 25 Menú 1. Promedio 2. Máximo 3. Mínimo 4. Salir 30 Elija una opción [1-4]: 4 Saliendo del programa... 158 Angel Vázquez-Patiño Universidad de Cuenca 44. Dados dos números en forma de arreglo de caracteres, implemente una fun- ción que genere el arreglo suma. Ejemplo: Sea A = { ‘2’, ‘0’, ‘1’, ‘2’ } 2 0 1 2 5 Sea B = { ‘1’, ‘9’ } 1 9 suma(A, B) = { ‘2’, ‘0’, ‘3’, ‘1’ } 2 0 3 1 La función que se pide recibe como argumentos dos arreglos de caracteres, y devuelve como resultado un arreglo de caracteres. El arreglo resultado ten- drá el mínimo tamaño necesario para contener el número; o sea, sin “ceros a 10 la izquierda” 45. Escribir un programa que elimine la k-ésima palabra de una cadena. Debe escribir una función para realizar esto. La función recoge como parámetros la cadena y k, y devuelve la cadena de resultado. 46. Construir una función para que busque una subcadena en una cadena a par- 15 tir de una determinada posición y que devuelva la posición donde se encuen- tra 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 diferen- 20 tes 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íni- mo 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 acuer- 25 do a lo que se indique. 48. Implemente una función que voltee una palabra (cadena) dada. Por ejemplo, si se ingresa arepa, se devuelve apera. Además, indicar si esas dos palabras son iguales. 49. * Un anagrama es una palabra o frase formada intercambiando (en cual- 30 quier orden) las letras de otra palabra o frase. Por ejemplo Esponja es un anagrama de Japonés. Escriba una función que determine si una cadena es un anagrama de otra (“las palabras poseen las mismas letras, con la misma cantidad de apariciones, pero en un orden diferente”). Ignore mayúsculas y 159 Angel Vázquez-Patiño Universidad de Cuenca minúsculas, signos de puntuación y espacios en blanco. Puede ver más infor- mación en https://goo.gl/hXM1vS. 50. Dada una cadena de caracteres, escriba una función que imprima en panta- lla todas las permutaciones de los caracteres de la cadena de entrada. 5 Ejemplo: permutaciones(“abc”) imprime: {“abc”, “acb”, “bac”, “bca”, “cab”, “cba”} 51. Ejercicio * Datos personales 10 Implemente un programa usando funciones que lea cadenas de caracteres en el si- guiente formato: Nombres;Apellidos;Profesión;Edad;Lugar de Residencia Los valores entre punto y comas pueden estar formados por letras, números o espa- cios en blanco. 15 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: 20 Por ejemplo: Nombres: Juan Apellidos: Pérez Torres Profesión: Ingeniero Edad: 37 25 Vive en: Cuenca Nombres: Karen Susana Apellidos: López Alvear Profesión: Economista Edad: 32 30 Vive en: Loja 160 Angel Vázquez-Patiño Universidad de Cuenca Estadísticas de texto Ejercicio propuesto por René Estrella. El usuario ingresa un texto. El programa muestra las siguientes estadísticas acerca del texto ingresado: 5 1. conteo de vocales 2. conteo de consonantes 3. conteo de dígitos 4. conteo de caracteres especiales 5. conteo de mayúsculas 10 6. conteo de minúsculas 7. conteo de palabras categorizadas por longitud 8. conteo total de palabras Ejemplo: El usuario ingresa: 15 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 20 Consonantes: 78 Dígitos: 4 Caracteres especiales: 10 Mayúsculas: 7 Minúsculas: 130 25 Palabras categorizadas por número de caracteres: 1: 1 2: 5 3: 5 4: 2 30 5 o más: 14 Total palabras: 27 El ejemplo ilustra los siguientes aspectos: 1. Las vocales tildadas se cuentan como caracteres especiales, y no como voca- les. 161 Angel Vázquez-Patiño Universidad de Cuenca 2. El conteo de vocales y consonantes considera tanto mayúsculas y minúscu- las. Por ejemplo, el número de consonantes (78), corresponde a 6 mayúscu- las y 72 minúsculas. * Analizador de tweets 5 Ejercicio propuesto por René Estrella. El objetivo de este ejercicio es escribir un analizador simple de tweets. El dato de entrada para el programa sería el texto de un tweet y el programa debería mostrar la siguiente información: 1. Número y lista de cuentas de twitter mencionadas (las cuentas de twitter 10 empiezan con @) 2. Número y lista de hashtags mencionados (los hashtags empiezan por #) 3. Conteo de palabras según el número de letras: número de palabras con una letra, con dos letras, con tres letras, con cuatro letras, con cinco letras, y con más de cinco letras. Este conteo incluye cuentas y hashtags. 15 Ejemplo Tweet: Sigue las últimas noticias de #Cuenca, #Ecuador y el Mundo en @eltiempocuenca #marcandodiferencia @IGecuador Resultados 20 2 cuentas: eltiempocuenca IGecuador 3 hashtags: Cuenca, 25 Ecuador marcandodiferencia Conteo de palabras: 1 letra: 1 2 letras: 3 30 3 letras: 1 4 letras: 0 5 letras: 2 5+ letras: 7 162 Angel Vázquez-Patiño Universidad de Cuenca Eliminación de n-ésima palabra Ejercicio propuesto por René Estrella. El usuario ingresa un texto, una palabra y un entero n. El programa elimina la n- ésima ocurrencia de la palabra en el texto y muestra el texto resultante. No se con- 5 sidera distinción entre mayúsculas y minúsculas. Ejemplo: Supongamos que el usuario ingresa el siguiente texto: El rally se correrá también en Bolivia, específicamente en el extremo sur del Lago Titicaca, el más alto del mundo, y el ya clásico Salar de Uyuni. 10 Luego ingresa la palabra “el” y el número 3. En el texto ingresado hay 6 ocurren- cias de la cadena “el”, pero sólo 4 de ellas corresponden a una palabra, ya que no se consideran las ocurrencias de “el” que no forman una palabra completa, por ejemplo “...del Lago Titicaca...” y “...más alto del mundo...”. Como asumimos que el usuario desea eliminar la 3ra ocurrencia de la palabra en el texto, se eliminaría la 15 que corresponde a “...el más alto...”, y por lo tanto lo que debería mostrar el pro- grama es: El rally se correrá también en Bolivia, específicamente en el extremo sur del Lago Titicaca, más alto del mundo, y el ya clásico Salar de Uyuni. Cifrado por sustitución 20 “En un sistema de cifrado por sustitución, cada letra o grupo de letras se reempla- zan por otra letra o grupo de letras para disfrazarla. Uno de los sistemas de cifrado más viejos conocido es el sistema de cifrado de César, atribuido a Julio César. En este método, a se vuelve D, b se vuelve E, c se vuelve F, ... , y z se vuelve C. Por ejemplo, ataque se vuelve DWDTXH.” (Tanenbaum y Wetherall, 2012, p. 662) 25 1. Escribir un programa que permita codifcar mensajes secretos de forma que no puedan ser interpretados con una lectura directa. Se debe utilizar las si- guientes reglas: a) Se debe reemplazar cada letra por la siguiente más uno, es decir en lugar de la “a” iría la “c”, excepto las letras “y” y “z”, que se deberá reempla - 30 zar 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. 163 Angel Vázquez-Patiño Universidad de Cuenca c) El mensaje resultante debe contener la primera letra de cada palabra del mensaje en mayúscula. Se puede usar variables globales y funciones según se necesite, pero es obli- gatoria la función ENCRIPTAR que reciba como entrada el mensaje y de- 5 vuelva el mensaje encriptado. 2. “Una ligera generalización del sistema de cifrado de César permite que el alfabeto de texto cifrado se desplace k letras, en lugar de siempre [un número fjo]. En este caso, k se convierte en una clave del método general de alfabetos desplazados circularmente.” (Tanenbaum y Wetherall, 2012, p. 10 662) Si k=2, por ejemplo, sustituiremos la “a” por la “c”, la “b” por la “e”, y así sucesivamente. El problema que aparece en las últimas “k” letras del alfabeto tiene fácil solución: en el ejemplo, la letra “y” se sustituirá por la “a” y la letra “z” por la “b”. La sustitución debe aplicarse a las letras minúsculas y mayúsculas y a los dígitos de igual manera: el “0” se sustituye 15 por el “2”, el “1” por el “3” y así hasta llegar al “9”, que se sustituye por el “1”. Escriba un programa que lea un texto y el valor de k, y muestre su versión encriptada. Cifrado por transposición 20 La información acerca de los sistemas de cifrado por transposición se basa en el li- bro de Tanenbaum y Wetherall (2012). Los sistemas de cifrado por sustitución (vea el ejercicio llamado Cifrado por susti- tución, página 163) conservan el orden de los símbolos de texto plano, pero los dis- frazan. En contraste, los sistemas de cifrado por transposición reordenan las letras 25 pero no las disfrazan. En la fgura 14 se presenta un sistema de cifrado por trans- posició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 MEGA- BUCK. 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 30 escribe de manera horizontal, en flas, las cuales se rellenan para completar la ma- triz si es necesario. El texto cifrado se lee por columnas, comenzando por la colum- na cuya letra clave es la más baja. 164 Angel Vázquez-Patiño Universidad de Cuenca Figura 14: Un sistema de cifrado por transposición.Tomado de Tanenbaum y Wetherall (2012, p. 664). Desarrolle un programa de cifrado y descifrado por transposición. Una de las fun- ciones que se desarrollen (cifrar) en el programa debe tener como parámetros el texto a cifrar y la clave, y debe devolver el texto cifrado. Otra de las funciones que se desarrollen (descifrar) en el programa debe tener como parámetros el texto 5 cifrado y la clave, y debe devolver el texto descifrado. * Manejo de una cadena con información personal a) Escriba un programa con funciones que permita al usuario ingresar una línea de texto en el siguiente formato: NOMBRE APELLIDO, EDAD; NOMBRE APELLIDO, EDAD; NOMBRE APELLIDO, EDAD; NOMBRE 10 APELLIDO, EDAD. Por ejemplo: Pedro Pérez, 35; Lara Muñoz, 45; José Calle, 20; María Cárdenas, 22; Clara Arévalo, 65. El programa debe encontrar la persona que tiene mayor edad. Debe mostrar al 15 usuario los datos de la persona con mayor edad, de la siguiente forma: Por ejemplo: NOMBRE: nombre ingresado NOMBRE: Clara APELLIDO: apellido ingresado APELLIDO: Arévalo EDAD: edad ingresada EDAD: 65 b) Escriba un programa utilizando funciones, que permita al usuario ingresar una línea de texto en el siguiente formato: NOMBRE APELLIDO, SUELDO; NOMBRE APELLIDO, SUELDO; NOMBRE APELLIDO, SUELDO; NOMBRE APELLIDO, SUELDO. 165 Angel Vázquez-Patiño Universidad de Cuenca Por ejemplo: Pedro Pérez, 3500; Luis Muñoz, 2450; José Calle, 1200; María Cárdenas, 2200; Clara Arévalo, 3650. El programa debe encontrar la persona que tiene menor sueldo. Debe mostrar al 5 usuario los datos de la persona con menor sueldo, de la siguiente forma: Por ejemplo: NOMBRE: nombre ingresado NOMBRE: José APELLIDO: apellido ingresado APELLIDO: Calle SUELDO: sueldo ingresado SUELDO: 1200 * Línea de comandos Simule una terminal que ejecute comandos para operaciones aritméticas básicas (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 si- 10 guiente sintaxis y funcionalidad: • Sumar num1,num2,num3,…,numN Uno se ingresa mediante el teclado el comando sumar (cualquier carácter del co- mando puede ser minúscula o mayúscula), un espacio y la lista de números (pue- den ser reales; el separador de decimales es el punto) a sumar; todo en una misma 15 línea. Luego de “dar enter” el resultado en la línea siguiente de la pantalla es Suma: valor de la suma. Si hay un error en la sintaxis, el programa debe mostrar un error; por ejemplo si se ingresa suma 1;3,4, el programa debe decir “Hubo un error de sintaxis en el comando ingresado.” • Restar num1,num2 20 Uno se ingresa mediante el teclado el comando restar (cualquier carácter del co- mando puede ser minúscula o mayúscula), un espacio y dos (2) números (pueden ser reales; el separador de decimales es el punto) a restar; todo en una misma lí- nea. Luego de “dar enter” el resultado en la línea siguiente de la pantalla es Resta: valor de la resta (la resta es num1-num2). Si hay un error en la sintaxis, el progra- 25 ma debe mostrar un error; por ejemplo si se ingresa restar 1,3,4, el programa debe decir “Hubo un error de sintaxis en el comando ingresado.” • Multiplicar num1,num2,num3,…,numN 166 Angel Vázquez-Patiño Universidad de Cuenca Uno se ingresa mediante el teclado el comando multiplicar (cualquier carácter del comando puede ser minúscula o mayúscula), un espacio y la lista de números (pue- den ser reales; el separador de decimales es el punto) a multiplicar; todo en una misma línea. Luego de “dar enter” el resultado en la línea siguiente de la pantalla 5 es Multiplicación: valor de la multiplicación. Si hay un error en la sintaxis, el pro- grama debe mostrar un error; por ejemplo si se ingresa multiplicar 1;3.2,4.2, el pro- grama debe decir “Hubo un error de sintaxis en el comando ingresado.” • Dividir num1,num2 Uno se ingresa mediante el teclado el comando dividir (cualquier carácter del co- 10 mando puede ser minúscula o mayúscula), un espacio y dos (2) números (pueden ser reales; el separador de decimales es el punto) a dividir; todo en una misma lí - nea. Luego de “dar enter” el resultado en la línea siguiente de la pantalla es Divi- sión: valor de la división (la división es num1/num2). Si hay un error en la sinta- xis, el programa debe mostrar un error; por ejemplo si se ingresa dividir 1,3,4,5, el 15 programa debe decir “Hubo un error de sintaxis en el comando ingresado.” • Estadísticas Uno se ingresa mediante el teclado el comando estadísticas (cualquier carácter del comando puede ser minúscula o mayúscula, o tener la letra i con tilde o sin tilde). Luego de “dar enter” el resultado en la línea siguiente de la pantalla es 20 Número de veces que se utilizó correctamente cada comando Sumar: num veces Restar: num veces Multiplicar: num veces Dividir: num veces 25 Si el número de veces es 1, debe decir 1 vez (y no 1 veces). • Salir Uno se ingresa mediante el teclado el comando salir (cualquier carácter del coman- do puede ser minúscula o mayúscula) y se termina la ejecución del programa. Nota: antes del comando y después de los números que necesita el comando (en 30 los comandos sumar, restar, multiplicar y dividir) no importa si se ingresan espa- cios 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 nin- gún mensaje de error. Por ejemplo: espacio espacio espacio suMaR 1,2,3,4,5,6 espa- 167 Angel Vázquez-Patiño Universidad de Cuenca cio espacio no debería dar ningún error de sintaxis. Utilice/cree funciones don- de se necesite. A continuación se muestra un ejemplo de ejecución del programa. Las líneas en ne- grita son los comandos (y los respectivos números que necesita el mismo) que se 5 ingresan por parte del usuario. sumar 1, 2, 4 Suma: 7 RestaR 3,4 Resta: -1 10 MultiPlicar 4,5,3,2,4 Multiplicación: 480 Dividir 4,3 División: 1,333333333 ReSTar 5,4 15 Resta: 1 Suma 4,5,6,12,13,5,8,7 Hubo un error de sintaxis en el comando ingresado. EstAdísticAS Número de veces que se utilizó correctamente cada comando 20 Sumar: 1 vez Restar: 2 veces Multiplicar: 1 vez Dividir: 1 vez Salir 25 * Mantenimiento de datos de personas Se requiere realizar un programa que permita hacer un mantenimiento de los da- tos de personas. Generalmente un mantenimiento signifca realizar operaciones de inserción, actualización, eliminación y búsquedas de registros; la actualización, eli- minación y búsqueda, por lo general, se realiza en base a un campo específco (que 30 identifca unívocamente a cada registro). Por ejemplo, la siguiente tabla muestra la información de tres personas (en este caso la cédula es el valor que identifca uní - vocamente a cada persona). Cédula Nombre Apellido Edad 01064634657 Juan Pérez 23 01064636638 Víctor Guzmán 21 168 Angel Vázquez-Patiño Universidad de Cuenca 01064688644 Pedro Flores 20 Los registros (un registro es el conjunto de valores de una misma persona) se de- ben ingresar en forma de cadena. La coma es el separador de valores de los campos (campo es cada dato del registro: cédula, nombre, apellido y edad) y el punto y coma es el separador de registros. La información de la tabla del ejemplo se repre- 5 sentaría con la siguiente cadena: 01064634657,Juan,Pérez,23;01064636638,Víctor,Guzmán,21;01064688644,Pedro,Flor es,20; El programa debe permitir, mediante un menú: 1. Ingresar un nuevo registro. 10 2. Actualizar los valores de los campos de una persona (la cédula no se puede modifcar). 3. Eliminar el registro de una persona. 4. Mostrar los valores de los campos de una persona. 5. Listar los registros de todas las personas. 15 6. Calcular el promedio de las edades de todas las personas. 7. Terminar el programa. Este ejercicio pretende mejorar sus destrezas para usar funciones, por eso, usted debe implementar las funciones que considere necesarias. Una restricción con la que debe cumplir su programa es que utilice una variable 20 global para la cadena de datos de personas y para el número total de personas. Ejemplo: Ingreso Se le pide al usuario que ingrese los datos de la persona Cédula: 01064634657 25 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 30 de campos 169 Angel Vázquez-Patiño Universidad de Cuenca Cédula: 01064634657 Nombre: Diego Apellido: Sarmiento Edad: 25 5 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 re- gistrada.”. Para este ejemplo, el resultado de la actualización de la cadena que contiene la in - formación de las personas es: 10 01064634657,Diego,Sarmiento,25;01064636638,Víctor,Guzmán,21;01064688644,Pedro ,Flores,20; Eliminación Se le pide al usuario que ingrese la cédula de la persona a eliminar • Cédula: 01064634657 15 Se elimina el registro de esa persona de la cadena de personas: 01064636638,Víctor,Guzmán,21;01064688644,Pedro,Flores,20; Visualización Se le pide al usuario que ingrese la cédula • Cédula: 01064634657 20 El programa muestra el resto de campos Nombre: Juan Apellido: Pérez Edad: 23 Si la cédula que se busca no se encuentra en la cadena que contiene la información 25 de todas las personas, se muestra un mensaje de error: “La persona no ha sido re- gistrada.”. Listar Se muestran uno a uno todos los registros de personas Cédula: 01064636638 30 Nombre: Víctor Apellido: Guzmán Edad: 21 170 Angel Vázquez-Patiño Universidad de Cuenca Cédula: 01064688644 Nombre: Pedro Apellido: Flores Edad: 20 5 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. 171 Angel Vázquez-Patiño Universidad de Cuenca Búsquedas Algunos de los siguientes ejercicios son basados en el libro de Gómez Fuentes y Cervantes Ojeda (2013). 1. Implemente un programa que pida al usuario el tamaño de un arreglo y que 5 pida sus datos (números reales). Solicitar al usuario un número a buscar dentro del arreglo dado y que el programa determine si el número está en el arreglo y, de ser así, en qué posición está. 2. Implemente una función llamada busquedaSecuencial que tenga como pará- metros un arreglo y un elemento a buscar en el arreglo. La función debe re- 10 gresar la posición índice del elemento si se encuentra en el arreglo y -1 si no lo encuentra en el arreglo. 3. Implemente un programa que lea números enteros y que los almacene en un arreglo. Preguntar al usuario por un número y determinar si este número está en el arreglo usando búsqueda binaria. 15 4. Implemente la función busquedaBinaria que tenga como parámetros un arre- glo y un elemento a buscar en el arreglo. La función debe regresar la posi- ción índice del elemento si se encuentra en el arreglo y, si no se encuentra en el arreglo, regresar un -1. 5. El siguiente es un programa que le permitirá tener una idea de la efciencia 20 de los métodos de búsqueda en cuanto al número de comparaciones neces- arias que se llevan a cabo en cada algoritmo y el tiempo que se demora cada uno en la ejecución. a) Implemente una función que reciba un arreglo de n elementos enteros y el algoritmo a utilizar para buscar uno de los elementos (son dos paráme- 25 tros: arreglo de elementos y algoritmo de búsqueda). La función devuelve la posición en la que se encuentra el elemento (si no se encuentra, de- vuelve -1), el número de comparaciones realizadas para encontrarlo y el tiempo de ejecución en segundos. b) Genere un arreglo de 21 elementos con números aleatorios enteros en el 30 rango [-15, 15]. Los números no deben repetirse en el arreglo. c) Utilice la función desarrollada en el literal a para buscar un elemento dado en el arreglo generado con cada uno de los algoritmos de búsqueda. 172 Angel Vázquez-Patiño Universidad de Cuenca Para efectos de comprobación de su programa, haga que la búsqueda sea de un número que está en el arreglo (lo escoge al azar). Con los resulta- dos haga una tabla en donde se muestre el algoritmo, el número de com- paraciones y el tiempo: 5 ================================================ Tabla de comparación para algoritmos de búsqueda ================================================ -------------------------------------------------------- Algoritmo # comparaciones Tiempo [seg.] 10 --------- --------------- ------------- Algoritmo 1 ## ## Algoritmo 2 ## ## ... ... ... -------------------------------------------------------- 15 d) Genere 1000 arreglos que cumplan con las condiciones del literal b. En cada uno de los arreglos generados se debe buscar un elemento al azar (que debe estar en el arreglo) utilizando la función del literal a. De cada búsqueda se debe ir guardando el número de comparaciones y el tiempo de cálculo utilizado. Finalmente, presente una tabla con estadísticas de 20 efciencia (estos datos son empíricos) de los algoritmos y un histograma para representar las mismas (el histograma presenta los valores normali- zados; los dos signos de numeral en el histograma signifca que debe po- ner los números que representa cada barra): ================================================ 25 Tabla de comparación para algoritmos de búsqueda ================================================ Los resultados presentados son el promedio de la búsqueda de un elemento al azar (se asegura que está dentro del arreglo) en los 1000 arreglos generados aleatoriamente. Con el mismo arreglo generado 30 aleatoriamente, se realizó la búsqueda del mismo elemento (elegido al azar) con todos los métodos; así en cada uno de los 1000 arreglos (en cada nuevo arreglo se eligió un nuevo elemento al azar para buscarlo). --------------------------------------------------------------- Algoritmo # comparaciones Tiempo [seg.] 35 promedio promedio --------- --------------- ------------- Algoritmo 1 ## ## 173 Angel Vázquez-Patiño Universidad de Cuenca Algoritmo 2 ## ## ... ... ... --------------------------------------------------------------- ======================================= 5 Histograma para comparación de métricas ======================================= ----------------------------------------------------------------- Algoritmo 1 | # comparaciones (prom) |▬▬▬▬▬▬▬▬▬▬ ## 10 Tiempo [seg.] (prom) |▬▬▬▬▬▬▬ ## | Algoritmo 2 | # comparaciones (prom) |▬▬▬▬▬▬▬ ## Tiempo [seg.] (prom) |▬▬▬▬▬▬▬▬ ## 15 | . | . . . | . . . | . . ----------------------------------------------------------------- 20 e) De acuerdo a los datos, discuta la efciencia 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 174 Angel Vázquez-Patiño Universidad de Cuenca Ordenamiento Miscelánea Algunos de los siguientes ejercicios son basados en el libro de Joyanes Aguilar et al. (2003). 5 1. * Dada la siguiente lista {a, m, c, j, k} después de dos pasadas de un algo- ritmo de ordenación, la lista ha quedado {a, c, m, j, k}. ¿Qué algoritmo de ordenamiento se está utilizando? a) Inserción b) Selección 10 c) Burbuja d) Ninguna de las anteriores 2. Dada la lista de números {-5, 18, -12, 17, -6, -20, -4, -8}, escribir cómo evo- lucionaría dicha lista hasta quedar completamente ordenada de manera des- cendente mediante: a) ordenamiento de burbuja, b) algoritmo de selección y 15 c) algoritmo de inserción. 3. Dada la lista de letras {o, f, e, s, a, q, v, o}, escribir cómo evolucionaría di- cha lista hasta quedar completamente ordenada de manera ascendente me- diante: a) ordenamiento de burbuja, b) algoritmo de selección y c) algoritmo de inserción. 20 4. Dado un arreglo de números reales, escriba un método que ordene los ele- mentos del arreglo de tal forma que los números pares aparezcan antes que los números impares. Además, los números pares deberán estar ordenados de forma ascendente, mientras que los números impares deberán estar ordena- dos de forma descendente. Esto es, el arreglo {1,2,3,4,5,6} quedará como 25 {2,4,6,5,3,1}. 5. Genere un arreglo de 11 elementos guardando en cada elemento un número entero aleatorio entre [1, 15]. Grafque en un histograma horizontal los valo- res de cada elemento y vaya mostrando paso a paso la ordenación. Haga dos versiones: una para ordenación ascendente y otra ordenación descendente. 30 Por ejemplo, si se tuvieran sólo 3 elementos las gráfcas serían las siguientes: Iteración 0 (elementos sin ordenar): E01 ***** 175 Angel Vázquez-Patiño Universidad de Cuenca E02 * E03 ** Iteración 1: E01 * 5 E02 ***** E03 ** Iteración 2: E01 * E02 ** 10 E02 ***** ¡Fin! Los elementos se ordenaron luego de 2 iteraciones. 6. Genere un arreglo de 13 elementos guardando en cada elemento un número entero aleatorio entre [0, 10]. Grafque en un histograma horizontal los valo- res de cada elemento y vaya mostrando paso a paso la ordenación. Haga dos 15 versiones: una para ordenación ascendente y otra ordenación descendente. Además se debe presentar un menú para elegir el método de ordenamiento a utilizar. 7. Se ha recolectado información del peso y la estatura de n personas. Imple- mente una función que reciba una matriz de 2×n en donde en la primera fla 20 estén los datos de peso y en la segunda fla los datos de la estatura. La fun- ción devuelve la matriz ordenada de manera ascendente o descendente con respecto al peso o a la estatura. La función recoge como parámetros matriz, optOrdenamiento, optVariable, donde optOrdenamiento indica si es ordena- miento ascendente o descendente (una cadena asc o desc) y optVariable in- 25 dica la variable con respecto a la cual se ordena (una cadena peso o estatu- ra). 8. Se ha recolectado información del peso y la estatura de n personas. Imple- mente una función que reciba una matriz de 2 x n en donde en la primera fla estén los datos de peso y en la segunda fla los datos de la estatura (para 30 realizar pruebas usted puede generar números reales aleatorios para el peso y la estatura de las n personas). La función devuelve la matriz ordenada de manera ascendente o descendente con respecto al peso o a la estatura. La función recoge como parámetros matriz, optOrdenamiento, optVariable, al- gOrdenamiento, donde optOrdenamiento indica si es ordenamiento ascenden- 35 te o descendente (una cadena asc o desc), optVariable indica la variable con 176 Angel Vázquez-Patiño Universidad de Cuenca respecto a la cual se ordena (una cadena peso o estatura) y algOrdenamien- to indica qué algoritmo de ordenamiento que se desea utilizar. 9. Implemente un programa que permita la introducción de 10 números enteros en un arreglo y, a través de un menú, la selección de uno de los métodos de 5 ordenación estudiados (e.g., Selección, Burbuja, Inserción, Inserción binaria, Shell). Terminará con la presentación por pantalla del arreglo ordenado. 10. Implemente una función que permita ordenar por fechas y de mayor a me- nor una matriz de N elementos (flas N <= 40). Cada fla de la matriz es un registro, con los campos, de tipo entero, día (columna 1), mes (columna 2), 10 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 contra- tos 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 (flas N <= 40). Cada fla de la matriz es un re - 15 gistro, 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 contra- tos 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 20 número de contratos realizados en una determinada fecha. 12. Ingrese nombres de equipos de fútbol con su respectivo puntaje; visualizar- los ordenados por el puntaje mostrando el número de iteraciones que se uti- lizaron. El usuario puede seleccionar el método que quiere utilizar para ha- cer la ordenación. 25 13. El siguiente es un programa que le permitirá tener una idea de la efciencia de los métodos de ordenamiento en cuanto al número de comparaciones e in- tercambios que se llevan a cabo en cada algoritmo de ordenamiento y el tiempo que se demora cada uno en la ejecución. a) Implemente una función que reciba un arreglo de n elementos enteros y 30 el algoritmo a utilizar para ordenarlos (dos parámetros: elementos y algo- ritmo). La función devuelve los elementos ordenados, el número de com- paraciones y el número de intercambios realizados para ordenarlos, y el tiempo de cálculo en segundos. 177 Angel Vázquez-Patiño Universidad de Cuenca b) Genere un arreglo de 11 elementos con números aleatorios enteros en el rango [-9, 9]. c) Utilice la función desarrollada para ordenar el arreglo generado con cada uno de los algoritmos de ordenación. Con los resultados haga una tabla 5 en donde se muestre el algoritmo, el número de comparaciones, el núme- ro de intercambios y el tiempo de cálculo en segundos: ==================================================== Tabla de comparación para algoritmos de ordenamiento ==================================================== 10 --------------------------------------------------------------------- Algoritmo # comparaciones # intercambios Tiempo [seg.] --------- --------------- -------------- ------------- Algoritmo 1 ## ## ## Algoritmo 2 ## ## ## 15 Algoritmo 3 ## ## ## ... .. .. .. --------------------------------------------------------------------- d) Genere 9999 arreglos que cumplan con las condiciones del literal b. Cada uno de los arreglos generados deben ser ordenados utilizando la función 20 del literal a. De cada arreglo ordenado debe ir guardando el número de comparaciones, el número de intercambios y el tiempo de cálculo en se- gundos. Finalmente, presente una tabla con estadísticas de efciencia de los métodos y un histograma para representar las mismas (el histograma presenta los valores normalizados; los dos signos de numeral en el histo- 25 grama signifca que debe poner los números que representa cada barra): ==================================================== Tabla de comparación para algoritmos de ordenamiento ==================================================== Los resultados presentados son el promedio del ordenamiento de 9999 30 arreglos generados aleatoriamente. Con el mismo arreglo generado aleatoriamente, se realizó el ordenamiento con todos los algoritmos; así con cada uno de los 9999 arreglos. --------------------------------------------------------------------- # comparaciones # intercambios Tiempo [seg.] 35 Algoritmo promedio promedio promedio --------- --------------- -------------- ------------- Algoritmo 1 ## ## ## 178 Angel Vázquez-Patiño Universidad de Cuenca Algoritmo 2 ## ## ## Algoritmo 3 ## ## ## ... .. .. .. --------------------------------------------------------------------- 5 ======================================= Histograma para comparación de métricas ======================================= ----------------------------------------------------------------- Algoritmo 1 | 10 # comparaciones (prom) |▬▬▬▬▬▬▬▬▬▬ ## # intercambios (prom) |▬▬▬▬▬▬▬▬▬▬▬▬ ## Tiempo [seg.] (prom) |▬▬▬▬▬▬▬ ## | Algoritmo 2 | 15 # comparaciones (prom) |▬▬▬▬▬▬▬ ## # intercambios (prom) |▬▬▬▬▬▬▬▬▬▬▬ ## Tiempo [seg.] (prom) |▬▬▬▬▬▬▬▬ ## | Algoritmo 3 | 20 # comparaciones (prom) |▬▬▬▬▬▬▬▬▬▬▬▬▬▬ ## # intercambios (prom) |▬▬▬▬▬▬▬▬▬ ## Tiempo [seg.] (prom) |▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬ ## | . | . . 25 . | . . . | . . ----------------------------------------------------------------- e) De acuerdo a los datos, discuta la efciencia de los métodos estudiados. ¿Qué método es el mejor y por qué?, ¿Qué método es el peor y por qué?, 30 ¿Cuándo utilizaría cada método?, etc. 14. El ejercicio está dividido en los siguientes pasos: a) Implemente una función que devuelva un número entero aleatorio en el rango [LímInferior, LímSuperior]. b) Genere un arreglo de n elementos, donde n es un número aleatorio entre 35 25 y 50. c) Llene el arreglo con números aleatorios enteros entre -99 y 99. d) La mitad (si n/2 no es entero, trúnquelo) del arreglo ordénelo con el mé- todo de la burbuja. e) La otra mitad del arreglo ordénelo con el método de la selección. 179 Angel Vázquez-Patiño Universidad de Cuenca f) Con las dos mitades ordenadas, aplique el método de la inserción para ordenar el arreglo completo. Nota 1: Dentro del método principal (main) solamente deben haber el arre- glo generado con n elementos y máximo un arreglo auxiliar (dos arreglos en 5 total). Nota 2: Cada método de ordenamiento debe estar implementado en una función diferente. 15. * El ejercicio está dividido en los siguientes pasos: a) Implemente una función que devuelva un número entero aleatorio en el 10 rango [LímInferior, LímSuperior]. b) Implemente una función que devuelva una palabra cuyo número de letras sea dado como parámetro. Cada letra de la palabra es generada indivi- dualmente al azar; las letras deben ser sólo minúsculas. c) Genere un arreglo de n elementos, donde n es un número aleatorio entre 15 25 y 50. d) Llene el arreglo con palabras aleatorias de m letras, donde m es un nú- mero aleatorio entre 3 y 5. e) La mitad (si n/2 no es entero, trúnquelo) del arreglo ordénelo con el mé- todo de la burbuja. 20 f) La otra mitad del arreglo ordénelo con el método de la selección. g) Con las dos mitades ordenadas, aplique el método de la inserción para ordenar el arreglo completo. Nota 1: Dentro del método principal (main) solamente deben haber el arre- glo generado con n elementos y máximo un arreglo auxiliar (dos arreglos en 25 total). Nota 2: Cada método de ordenamiento debe estar implementado en una función diferente. 16. Pregunta * Menú, ordenamiento y búsqueda de registros 30 Escriba un programa que muestre el siguiente menú: 1. Ingreso de datos de N de estudiantes 2. Ordenar por una columna especifcada por el usuario 180 Angel Vázquez-Patiño Universidad de Cuenca 3. Buscar un registro por apellido 4. Listar todos los datos, ordenados alfabéticamente por apellido 5. Salir Los datos de cada estudiante son: el nombre y apellido y la nota promedio (entre 1 5 y 20 puntos, inclusivo). Por ejemplo: Nombre : Juan Apellido : Pérez Promedio : 18 Se debe almacenar los datos en una matriz. Si hay más de un estudiante con el 10 apellido buscado, se debe mostrar todos los estudiantes que coinciden con el apelli- do especifcado. * Calificaciones de estudiantes El objetivo del programa es gestionar califcaciones de estudiantes. Se deben regis- trar n estudiantes (n ≥ 3, validar). De cada uno de los estudiantes se deben ingre- 15 sar, el nombre y una califcación; los datos se registran en arreglos separados. A partir de los dos arreglos se deben ordenar los datos de acuerdo al nombre del es- tudiante 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 califcación y la máxima califcación. Además, se deben obtener 20 los nombres de los tres estudiantes con las máximas califcaciones y los nombres de los tres estudiantes con las mínimas califcaciones. Detallando los requerimientos utilizando un ejemplo, se tendría lo siguiente: 1. Escribir una función f1 que permita ingresar los datos de los estudiantes. 181 Angel Vázquez-Patiño Universidad de Cuenca Nombres Calificaciones Juan 16 Andrés 18 Pedro 15 María 11 Xavier 10 Ximena 17 Fernando 19 ... ... Jaime 5 2. Escribir una función f2 que reciba los dos arreglos ingresados en f1 y devuel- va una matriz con los nombres y califcaciones de forma ascendente, por nombre. Andrés 18 Fernando 19 Jaime 5 Juan 16 A= María 11 Pedro 15 Xavier 10 ... ... Ximena 17 3. Escribir una función f3 que reciba como entrada la matriz generada en f2 y 5 devuelva una matriz con la califcación mínima y califcación máxima. Jaime 5 B= Fernando 19 182 Angel Vázquez-Patiño Universidad de Cuenca 4. Escribir una función f4 que reciba como entrada la matriz generada en f2 y devuelva una matriz con las tres mayores califcaciones y las tres menores califcaciones. Fernando 19 Andrés 18 Ximena 17 C= Jaime 5 Xavier 10 María 11 Ordenamientos en matriz 5 Desarrolle un programa que pida al usuario ingresar las dimensiones (nxm) de una matriz y rellene los elementos de dicha matriz con números enteros aleatorios en un rango dado por el mismo usuario. Muestre la matriz generada y luego, realice los siguientes ordenamientos: • Las columnas pares ordénelas de manera descendente con el método de in- 10 serción y las columnas impares ordénelas de manera ascendente con el méto- do de selección. Muestre la matriz original luego de aplicados estos cambios. • Las flas pares ordénelas de manera ascendente y las flas impares ordénelas de manera descendente; este ordenamiento de flas, en ambos casos, debe realizarse con el método de ordenamiento de burbuja. Muestre la matriz ori- 15 ginal luego de aplicados estos cambios. • Las “diagonales derecha-izquierda” ordénelas de manera ascendente con el método de inserción; muestre la matriz original luego de aplicados estos cambios. Las "diagonales izquierda–derecha" ordénelas de manera descen- dente con el método de selección; muestre la matriz original luego de aplica- 20 dos estos cambios. A continuación se muestra un ejemplo de ejecución del programa: Ingreso de datos ================ Dimensión de la matriz 25 n: 3 183 Angel Vázquez-Patiño Universidad de Cuenca m: 4 Rango para generación de números aleatorios inf: -2 sup: 10 5 Matriz generada 8 4 9 5 2 1 7 4 3 5 -1 2 Resultados 10 ========== Luego de ordenadas las columnas 2 5 -1 5 3 4 7 4 8 1 9 2 15 Luego de ordenadas las filas 9 8 5 4 1 2 4 7 5 3 2 -1 Luego de ordenadas las “diagonales derecha–izquierda” 20 8 2 1 5 4 3 5 -1 9 7 4 2 Luego de ordenadas las “diagonales izquierda–derecha” 8 7 9 5 25 5 1 4 4 3 2 -1 2 * Manejo de datos de personas Escriba un programa que lea los datos de n personas (el n se pide al usuario), con- siderando los siguientes campos: 30 1. Nombre 2. Apellido 3. Edad 4. Profesión 184 Angel Vázquez-Patiño Universidad de Cuenca La información debe ser validada al momento de ingresar cada uno de los datos. Almacene la información ingresada en una estructura que considere adecuada para realizar las siguientes operaciones: a) Ordenar los datos de acuerdo a lo que se especifque en el momento de la 5 ejecución del programa. Por ejemplo, puede ordenarse por apellido, o por edad. Se debe mostrar los datos ordenados con todos los campos separados por comas. Si se ordena por apellido, se muestra: APELLIDO, NOMBRE, EDAD, PROFESIÓN. Si se ordena por profesión, se muestra: PROFESIÓN, NOMBRE, APELLIDO, EDAD. 10 b) Buscar todas las ocurrencias de un valor ingresado por el usuario. Por ejem- plo, buscar todos los que tengan 30 años de edad, o todos lo que tengan por apellido “Pérez”. Debe mostrarse un menú de opciones que permita ingresar información, buscar y mostrar los datos ordenados según el criterio que especifque el usuario. 185 Angel Vázquez-Patiño Universidad de Cuenca Archivos Miscelánea 1. ¿Qué signifca EOF? a) Empty or full 5 b) End of fle c) End of foop d) Las anteriores respuestas no son correctas 2. Pregunta 186 Angel Vázquez-Patiño Universidad de Cuenca Miscelánea de Ejercicios Un buen lugar para comenzar a practicar más está en http://www.lab.dit.upm.es/ ~fprg/examenes/ * Combate de pokemones 5 Vea el vídeo https://youtu.be/SDv2vOIFIj8. Realizar un programa que permita simular el combate entre dos pokemones a tra- vés de las siguientes opciones del menú: 1.- Ingresar datos de los pokemones 2.- Simular combate 10 3.- Terminar Ingresar opción <1-3>: 1)Ingresar datos de los pokemones (i.e. nombres, poder de ataque). Por ejemplo se ingresa los pokemones: 1) Pikachu con poder de ataque 55 y 2) Jigglypuff con su poder de ataque 45 15 2)Simular combate Se tiene que usar una función para decidir aleatoriamente qué jugador inicia la pe- lea. 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 defne el jugador que tiene el primer turno, los siguientes turnos son interca- 20 lados, 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 25 un jugador ataca o no. Solamente si el resultado es 1, el jugador al que le toca el turno ataca. Recuerde que luego de defnido 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 30 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, Jiggl- 187 Angel Vázquez-Patiño Universidad de Cuenca ypuffno ataca. Para el siguiente turno de Pikachu la función azar(2) devuelve 1. Cómo es 1 Pikachu ataca y Jigglypuff termina con -10 de vida, entonces el comba- te termina. Se tiene que mostrar por cada turno: de quién fue el turno y cómo que - daron las vidas de los dos contrincantes y al fnal quien ganó y en qué turno. 5 Ejemplo de ejecución: Combate de pokemones 1.- Ingresar datos de los pokemones 2.- Simular combate 3.- Terminar 10 Ingresar opción <1-3>: 1 Nombre del primer Pokemon: Pikachu Poder de ataque del primer Pokemon: 55 Nombre del segundo Pokemon: Jigglypuff Poder de ataque del segundo Pokemon: 45 15 Combate de pokemones 1.- Ingresar datos de los pokemones 2.- Simular combate 3.- Terminar Ingresar opción <1-3>: 2 20 Vidas:Pikachu(100) vs Jigglypuff(100) 1.- Turno: Pickachu (55 de poder). (Sí ataca, azar(2) devolvió 1) Vidas: Pikachu (100) vs Jigglypuff (45) 2.- Turno: Jigglypuff (45 de poder). (No ataca, azar(2) devolvió 0) Vidas: Pikachu (100) vs Jigglypuff (45) 25 3.- Turno: Pickachu (55 de poder). (Sí ataca, azar(2) devolvió 1) Vidas: Pikachu (100) vs Jigglypuff (-10) Pokemon ganador: Pikachu en 3 turnos. Combate de pokemones 1.- Ingresar datos de los pokemones 30 2.- Simular combate 3.- Terminar Ingresar opción <1-3>: 3 (termina el programa) 188 Angel Vázquez-Patiño Universidad de Cuenca Solución de un sistema de ecuaciones por matrices Conversión de un número en base diez a sistema binario Conversión de un número en base binaria a sistema en base diez Cálculo de las tres alturas de un triángulo dadas las longitudes de sus 5 lados Valor futuro de una inversión Cálculo del capital inicial Cálculo de la tasa de interés Cálculo del número de años 10 Media, mediana y varianza de N datos Transformación de números decimales a romanos Desarrolle un algoritmo que permita transformar un número decimal n ≤ 5000 a número romano. La información mostrada a continuación, que debe tomar en cuen- ta para este ejercicio, fue tomada de Wikipedia (https://goo.gl/auCPx7). 15 La siguiente tabla muestra los símbolos válidos en el sistema de los números roma- nos, y sus equivalencias en el sistema decimal. Signo Valor I 1 V 5 X 10 L 50 C 100 D 500 M 1000 Para la notación moderna de los números romanos se utilizan las siguientes nor- mas: • Los números se leen de izquierda a derecha empezando por los símbolos con 20 mayor valor, o conjunto de símbolos de mayor valor. 189 Angel Vázquez-Patiño Universidad de Cuenca • 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). 5 • 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. 10 • La unidad y los símbolos de base 10 también pueden estar restando antes de un símbolo de mayor valor, pero con las siguientes normas: 1. solo pueden aparecer restando sobre los símbolos con base 5 y 10 de valor inmediatamente superiores, pero no de otros con valores más altos (e.g., ‘IV’ y ‘IX’, pero no ‘IL’ ni ‘IC’). 15 2. en el caso de estar restando, no pueden repetirse. • Los símbolos con base 5 no pueden utilizarse para restar (e.g., 45 se escribe ‘XLV’ y no ‘VL’). • Para números con valores igual o superiores a 4000, se coloca una línea hori- zontal por encima del número, para indicar que la base de la multiplicación 20 es por 1000: Romano (miles) Decimal V 5000 X 10 000 L 50 000 C 100 000 D 500 000 M 1 000 000 190 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 (vali- dar para que siga ingresando números mientras no cumple la condición) nos diga el número de dígitos que tiene. 5 * Pirámide invertida Represente mediante un diagrama de fujo 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 10 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 15 1 2 1 1 Cubos e impares Considere la siguiente propiedad: • Sumando el primer número impar positivo se obtiene el primer cubo. 20 • Sumando los dos siguientes impares se obtiene el segundo cubo. • Sumando los tres siguientes impares se obtiene el tercer cubo, y así sucesivamente. Expresado de forma matemática: 13 = 1 =1 25 2 =3+5 3 =8 3 = 7 + 9 + 11 3 = 27 4 = 13 + 15 + 17 + 19 = 64 3 El usuario ingresa un entero positivo n. El programa debe mostrar los n primeros cubos calculándolos mediante la propiedad descrita. 30 Cantidad de dígitos fijo de números mostrados Se ingresan dos límites: límite inferior con un valor mínimo de 1 y límite superior con un valor máximo de 9999 (validar valores mínimos y máximos de los límites y que el límite superior no sea menor al límite inferior). Se ingresa un paso (incre- 191 Angel Vázquez-Patiño Universidad de Cuenca mento) entre 1 y 1000 (validar para que siga ingresando números mientras no cum- ple 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 te- ner el número de dígitos que tenga el límite superior; es decir, los número que se 5 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 10 Paso: 3 Lo que se muestra en pantalla es: 01 04 07 15 10 Ejemplo 2: Límite inferior: 1 Límite superior: 1500 Paso: 500 20 Lo que se muestra en pantalla es: 0001 0501 1001 Algoritmo de Gauss y Método de eliminación de Gauss 25 Para la resolución de sistemas de ecuaciones lineales existe el método de factoriza- ción LU. Un algoritmo que se utiliza para implementar este método es el algoritmo de Gauss que a su vez se utiliza en el método de eliminación de Gauss. Realice la implementación de ambos algoritmos basándose en la explicación dada en el libro de Quarteroni et al. (2014, pp. 146–147). 30 1. Implemente el algoritmo de Gauss (página 146). 2. Implemente el método de eliminación de Gauss (página 147). Métodos de Jacobi y de Gauss-Seidel Vea el libro de Quarteroni et al. (2014, pp. 168–173). 192 Angel Vázquez-Patiño Universidad de Cuenca Dados Escribir un programa que simule el lanzamiento de dos dados y muestre por panta- lla la frecuencia de los resultados de mil lanzamientos. Búsquedas y ordenación 5 1. Diseñar una función recursiva que realice una búsqueda binaria. 2. Diseñar un procedimiento recursivo que ordene una lista de elementos por el método Quick Sort. Interpolación Para resolver los siguientes ejercicios revise las páginas 80-83 del libro de Quartero- 10 ni et al. (2014). 1. Implemente la interpolación polinómica mediante la matriz de Vandermon- de. 2. Implemente la interpolación polinómica de Lagrange para encontrar el poli- nomio interpolador que pase por tres puntos. 15 3. Implemente la interpolación polinómica de Lagrange para encontrar el poli- nomio interpolador que pase por cuatro puntos. Integración numérica Para resolver los siguientes ejercicios revise la sección 4.3 Numerical integration del libro de Quarteroni et al. (2014). 20 1. Implemente la fórmula de cuadratura de punto medio compuesto para inte- gración numérica. 2. Implemente la fórmula trapezoidal compuesta para integración numérica. 3. Implemente la fórmula de cuadratura de Simpson para integración numérica con un polinomio integrador de Lagrange de segundo grado. 25 4. Implemente la fórmula de cuadratura de Simpson para integración numérica con un polinomio integrador de Lagrange de tercer grado. Ecuaciones diferenciales ordinarias (EDO) • Implemente el método de Euler y úselo para integrar numéricamente la ecuación 193 Angel Vázquez-Patiño Universidad de Cuenca dy/dx = f(x, y) = - 2x3 + 12x2 – 20x + 8.5 desde x0 = 0 hasta xn = 4 con un tamaño de paso de h = 0.2 (i.e., x1 = x0 + 0.2, x2 = x1 + 0.2, x3 = x2 + 0.2, etc.). La condición inicial en x0 = 0 es y0 = 1. 5 El método de Euler consiste en dividir el intervalo que va desde x 0 a xn en subintervalos de ancho (17) y aplicar la fórmula iterativa (18) 10 Para comprobar sus resultados sepa que la integral analítica de la función dy/dx es y = - 0.5x4 + 4x3 - 10x2 + 8.5x + 1. La fgura 15 muestra las gráf- cas de la solución analítica y la solución numérica cuyos valores de yi (apro- ximados) usted debe encontrar. La tabla 2 muestra los valores de los puntos de la aproximación mediante el método de Euler. 15 Si desea más información acerca del método puede leer la defnición en el li- bro de Chapra et al. (2007), páginas 719-722. 194 Angel Vázquez-Patiño Universidad de Cuenca Figura 15: Comparación de la solución analítica con una solución numérica usando el método de Euler, para la integral dy/dx desde x0 = 0 hasta xn = 4 con un tama- ño de paso h = 0.2. La condición inicial en x0 = 0 es y0 = 1. Tabla 2: Solución numérica usando el método de Euler, para la integral dy/dx desde x0 = 0 hasta xn = 4 con un tamaño de paso h = 0.2. La condición inicial en x0 = 0 es y0 = 1. i xi yi (aproximación) 0 0 1 1 0.2 2.7 2 0.4 3.6928 3 0.6 4.1512 4 0.8 4.2288 5 1 4.06 6 1.2 3.76 7 1.4 3.4248 8 1.6 3.1312 9 1.8 2.9368 10 2 2.88 11 2.2 2.98 12 2.4 3.2368 13 2.6 3.6312 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 • 195 Angel Vázquez-Patiño Universidad de Cuenca ¿Qué Hace el Algoritmo/Programa? 1. * ¿Cuál es el valor fnal de las variables a, b y c? Proceso sin_titulo a<-5 5 b<-6 c<-7 aux<-a b<-a c<-b 10 Escribir a, b, c FinProceso 2. * ¿Cuál es el valor de la variable x? Proceso sin_titulo Definir x Como Entero 15 Definir z Como Entero x<-2 z<-5 Si z<0 Entonces x<-x+2 20 Sino Si x>1 Entonces x<-x+1 Sino x<-5 25 Fin Si Fin Si Escribir x FinProceso 3. * ¿Cuál es el resultado de ejecutar el siguiente pseudocódigo? 30 Proceso valorC c<-50 Mientras c>=0 Hacer Escribir c c<-c+1 35 Fin Mientras FinProceso 4. * ¿Cuál es el resultado de ejecutar el siguiente pseudocódigo? Proceso sin_titulo 196 Angel Vázquez-Patiño Universidad de Cuenca Para i<-1 Hasta 5 Con Paso 1 Hacer Segun i Hacer 1: Escribir "a" 5 2: Escribir "b" 3: Escribir "c" De Otro Modo: 10 Escribir "d" Fin Segun Fin Para FinProceso 5. ¿Qué realiza o cuál es el fn del siguiente algoritmo o programa? 15 Proceso sin_titulo Leer var1 Leer var2 Mientras var1<var2 Hacer Leer var1 20 Leer var2 Fin Mientras var3<-0 Mientras var1 >= var2 Hacer var1<-var1-var2 25 var3<-var3+1 Fin Mientras Escribir var3 Escribir var1 FinProceso 30 6. ¿Qué realiza o cuál es el fn del siguiente algoritmo o programa? Proceso sin_titulo var1<-10 Leer var2 Mientras var2<1 Hacer 35 Leer var2 Fin Mientras 197 Angel Vázquez-Patiño Universidad de Cuenca Para var3<-1 Hasta var2 Con Paso 1 Hacer var4<-1 Mientras var4<=var1 Hacer var5<-var4*var3 5 Escribir var5 var4<-var4+1 Fin Mientras Escribir '***** ****** ***** *****' Fin Para 10 FinProceso 7. ¿Qué realiza o cuál es el fn del siguiente algoritmo o programa? Proceso sin_titulo Leer var1 Mientras var1<0 Hacer 15 Leer var1 Fin Mientras var2<-1 var3<-11 Mientras var2<=var1 Hacer 20 Leer var4 Mientras var4<1 O var4>10 Hacer Leer var4 Fin Mientras Si var4<var3 Entonces 25 var3<-var4 Fin Si var2<-var2+1 Fin Mientras Escribir var3 30 FinProceso 1. * Con respecto al siguiente algoritmo 198 Angel Vázquez-Patiño Universidad de Cuenca Proceso sin_titulo Para i<-1 Hasta 7 Con Paso 3 Hacer cont<-1 Mientras cont<=5 Hacer 5 Escribir Sin Saltar i,'^',cont,': ',i^cont, ' ' cont<-cont+2 Fin Mientras Escribir '' Fin Para 10 FinProceso ¿Cuál de las siguientes versiones hace exactamente lo mismo? a) Proceso sin_titulo cont<-1 15 Mientras cont<=8 Hacer Para i<-1 Hasta 5 Con Paso 2 Hacer Escribir Sin Saltar cont,'^',i,': ',cont^i, ' ' Fin Para Escribir '' 20 cont<-cont+4 Fin Mientras FinProceso b) Proceso sin_titulo 25 cont<-1 Mientras cont<=7 Hacer Para i<-1 Hasta 5 Con Paso 2 Hacer Escribir Sin Saltar cont,'^',i,': ',cont^i, ' ' Fin Para 30 Escribir '' Fin Mientras FinProceso c) Proceso sin_titulo 35 cont<-1 Mientras cont<=7 Hacer Para i<-1 Hasta 5 Con Paso 2 Hacer Escribir Sin Saltar cont,'^',i,': ',cont^i, ' ' Fin Para 199 Angel Vázquez-Patiño Universidad de Cuenca Escribir '' cont<-cont+3 Fin Mientras FinProceso 5 d) Ninguna de las anteriores Lenguaje Java 1. * ¿Para el siguiente segmento de código cuál es la salida del programa? a) -120 b) 0 10 c) 60 d) Ninguna de las anteriores public class Test { public static void main (String[] args) { int j = operacion(); 15 System.out.println("Resultado: " + j); } public static int operacion(){ j = -1; for(int i=5; i>=0; i--) 20 j=j*i; } } 2. * ¿Para el siguiente segmento de código cuál es la salida del programa? a) 8 25 b) 72 c) 0 d) 36 public class Test { static int resultado = 0; 30 public static void main (String[] args) { operacion(3); System.out.println("Resultado: " + resultado); } 200 Angel Vázquez-Patiño Universidad de Cuenca public static int potencia(int base, int exp){ int j = 1; for(int i=0; i<exp; i++) j=j*base; 5 return j; } public static void operacion(int resultado){ int i=1; for(int j=1; j<resultado; j++) 10 i=j*potencia(j, 2); resultado = i; } } 8. * ¿Cuál es el tiempo de vida de una variable global? 15 a) Existe tanto tiempo como el programa b) Existe mientras una función se encuentra ejecutando c) Existe mientras un bucle for se encuentra ejecutando d) Existe mientras un parámetro de una función cambie de valor 9. Indicar cuáles de las siguientes declaraciones de matrices no son válidas y el 20 porqué. a) int primos={2,3,5,7,11}; b) int [] resultados=int [30]; c) int [] primos= new{2,3,5,7,11}; 10. Completar el siguiente método que imprime los elementos de una matriz bi- 25 dimensional (la matriz puede tener distinto número de elementos en cada fla). public static void imprime(int[][] a){ for(int i=0; i<a.length; i++){ for(int j=0; -------------; j++){ 30 System.out.print(a[i][j] + “ ”); } } } 11. ¿Cuál es la salida del siguiente programa? 35 public class Ejercicio { 201 Angel Vázquez-Patiño Universidad de Cuenca public static void main(String[] args){ int [] matriz = {1,2,3}; metodoA(matriz); for(int i=0; i<matriz.length; i++) 5 System.out.print(matriz[i]++ + " "); for(int i=0; i<matriz.length; i++) System.out.print(matriz[i] + " "); } static void metodoA(int [] b){ 10 for(int i=0; i<b.length;i++) b[i]=b[i]+3; } } 12. * ¿Cuál es la salida del siguiente programa? 15 public class Ejercicio { public static void main (String[] args) { char[] matriz = {'e','u','o','i','a'}; metodo(matriz); for(int i=0; i<matriz.length; i++){ 20 System.out.println(matriz[i]); } } public static void metodo(char[] vocales){ char aux; 25 for(int i=1; i<vocales.length; i++){ if(vocales[i-1]>vocales[i]){ aux=vocales[i-1]; vocales[i-1]=vocales[i]; vocales[i]=aux; 30 } } } } 13. * ¿Cuál es la salida del siguiente fragmento de código? 35 int index = 1; while(index < 10){ System.out.println(index); index ++; } 40 14. * ¿Cuál es la salida del siguiente programa? 202 Angel Vázquez-Patiño Universidad de Cuenca public class Ejercicio { public static void main (String args[]) { int c = 1; final int N=5; 5 while(c<=N){ System.out.println(c); c--; } } 10 } 15. * Diga si la proposición referente al siguiente método programado en Java es verdadera o falsa: El método llamado funcion muestra (imprime en panta- lla) los elementos de cualquier tipo de arreglo bidimensional enviado como argumento sin que haya ningún error al momento de la ejecución. 15 Nota: el método no tiene absolutamente ningún error de sintaxis, es decir, sí se compila sin ningún error. public static void funcion (int[][] parametro) { for(int i = 0; i < parametro.length; i++) for(int j = 0; j < parametro.length; j++) 20 System.out.println(parametro[i][j]); } a) La proposición es verdadera b) La proposición es falsa 16. * ¿Qué retorna la siguiente función? 25 public static int misterioso(int a, int n) { int i, r, x; i = n; r = 1; 30 x = a; while (i > 0) { if (i % 2 != 0) { r = r * x; } 35 x = x * x; i = i / 2; } 203 Angel Vázquez-Patiño Universidad de Cuenca return r; } a) El mínimo común múltiplo de los parámetros a y n. b) El resultado de elevar el parámero n a la a-ésima potencia. 5 c) El resultado de sacar la raíz n-ésima del parámetro a. d) El resultado de elevar el parámero a a la n-ésima potencia. 17. * Dada las siguientes líneas de código del siguiente programa, identifque la salida correcta del mismo. public static void main(String[] args) { 10 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){ 15 cadena = cadena +" "+ arreglo[i]; } } System.out.println(cadena); } 20 public static void funcion(int[] arreglo) { for (int i=1; i < arreglo.length; i++) { int aux = arreglo[i]; int j; for (j=i-1; j >=0 && arreglo[j] > aux; j--){ 25 arreglo[j+1] = arreglo[j]; } arreglo[j+1] = aux; } } 30 a) 2 8 5 7 9 b) 2 2 4 6 8 c) 7 9 5 9 3 d) 2 9 9 5 3 18. * ¿Qué es lo que muestra en pantalla el siguiente código? 35 public static void main(String[] args) { int[][] m = { {6, 7, 5, 0, 4}, {3, 8, 4}, {1, 0, 2, 7} }; 204 Angel Vázquez-Patiño Universidad de Cuenca for(int i = 0; i < m.length; i++) { System.out.print(m[i].length + “ “); } } 5 a) 4 4 7 b) 5 3 4 c) 0 8 2 d) 6 3 1 19. * ¿Cuál es el ámbito de la variable x? 10 1) public void counter(int StartingNumber){ 2) for (int x = StartingNumber; x<100; x++) 3) { 4) JOptionPane.showMessageDialog(null, x); 5) 15 6) } 7) JOptionPane.showMessageDialog(null, “Fin del método”, x); 8) } a) Líneas desde la 2 a 7 b) Líneas desde la 2 a 6 20 c) Línea 4 d) Líneas desde la 1 a 8 20. * ¿Cuál es la salida correcta del siguiente programa? public class ProgramacionI { public static int contador = 0; 25 public static void main(String[] args) { String cadena1, cadena2; cadena1 = "cadena"; cadena2 = "programación"; for (int i = 0; i < cadena2.length(); i++) { 30 for (int j = 0; j < cadena1.length(); j++) { if (i == j) { contar(); } } 35 } System.out.println(contador); } public static void contar() { contador = contador + 2; 205 Angel Vázquez-Patiño Universidad de Cuenca } } 21. * ¿Cuál es la salida correcta del siguiente programa? public class ProgramacionI { 5 public static void main(String[] args) { String str = "manejo de cadenas con java"; int inicio = str.indexOf("c"); int fin = str.indexOf("e", inicio + 1); System.out.println(str.substring(inicio, fin + 3)); 10 } } a) cadenas b) cade c) cadena 15 d) de 22. * ¿Qué muestra el siguiente programa? public class ProgramacionI { public static void main(String[] args) { int contador; 20 int limite; contador = 2; limite = 10; 25 do { switch (contador % 2) { case 0: System.out.print(contador + " es par\n"); break; 30 case 1: System.out.print(contador + " es impar\n"); break; } contador += 2; 35 } while (contador < limite); } } 23. Pregunta 206 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> 5 int main() { int a = 4, b = 1, x; do{ a += 2; b++; 10 }while(a<=b); a += 3; b += 2; a = a+b%2+a%3; x = a/b; 15 if(x>b){ b = b+4; a = b%3; x = a%b; } 20 b++; x = x*(10/8)+a%b; for(int i=0; i<a; i=i+1) printf("%d", a); printf("\n"); 25 for(int i=0; i<b; i+=2) printf("%d", b); for(int i=0; i<=b; i++) printf("%d", x); printf("\nVariable a: %d\n", a); 30 printf("Variable b: %d\n", b); printf("Variable x: %d\n", x); } 2. Pregunta 207 Angel Vázquez-Patiño Universidad de Cuenca Fórmulas y Relaciones Estadística Media ponderada Para una serie de datos no vacía: 5 a la que corresponden los pesos: la media ponderada es: (19) Medidas de longitud • 1 milla = 1609 metros 10 • 1 pulgada = 0.0254 metros • 1 yarda = 3 pies • 1 pie = 12 pulgadas Unidades de capacidad • 1 pie cúbico = 0.0283 metros cúbicos 15 • 1 metro cúbico = 1000 litros • 1 yarda cúbica = 27 pies cúbicos. Unidades de capacidad de información • 8 bits = 1 byte • 1024 bytes = 1 kilobyte (KB) 20 • 1024 KB = 1 megabyte (MB) • 1024 MB = 1 gigabyte (GB) 208 Angel Vázquez-Patiño Universidad de Cuenca • 1024 GB = 1 terabyte (TB) Tiempo • 1 hora = 60 minutos • 1 minuto = 60 segundos 5 • 1 hora = 3600 segundos Unidades de temperatura Relación entre grados celsius (centígrados, C) y fahrenheit (F). (20) Círculo 10 r: radio l: longitud o perímetro a: área (21) (22) 15 Esfera • r: radio • s: superfcie o área • v: volumen (23) 20 (24) Cuadrado Ángulos (25) 209 Angel Vázquez-Patiño Universidad de Cuenca Ecuación de segundo grado Dada la ecuación de segundo grado (26) las raíces o ceros de la función son: 5 (27) Logaritmos El logaritmo de un número en cualquier base puede obtenerse por la relación (28) en donde, , ; , . 210 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áfca. 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. Scientifc 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. 211