Ejercicios Básicos de Programación 13 de junio de 2017 Angel Vázquez-Patiño Departamento de Ciencias de la Computación Universidad de Cuenca Cuenca, Ecuador angel.vazquezp @ ucuenca.edu.ec Contenido Introducción.............................................................................................................10 Fundamentos...........................................................................................................11 Qué es programar................................................................................................11 Qué es un lenguaje de programación...................................................................11 Modelización de problemas del mundo real.........................................................12 Del problema real a su solución por computadora..............................................12 Conceptos acerca de software..............................................................................13 Variables y tipos de datos...................................................................................13 Algoritmos...........................................................................................................13 Ejercicios desde cero........................................................................................14 Diagramas de flujo...............................................................................................16 Pseudocódigo.......................................................................................................16 Prueba de escritorio.............................................................................................16 Codificación.........................................................................................................17 Documentación y su importancia........................................................................17 Programación Secuencial.........................................................................................18 Miscelánea...........................................................................................................18 Respaldo de información.....................................................................................19 Cálculos espaciales básicos..................................................................................20 Distancia euclidiana........................................................................................20 Distancia de Manhattan..................................................................................20 * Métricas Lp...................................................................................................20 Distancia ortogonal.........................................................................................21 Distancia de un segmento de recta a un punto...............................................21 Cálculo de interés................................................................................................22 Costo de llamada.................................................................................................22 Angel Vázquez-Patiño Universidad de Cuenca Cálculo de potencia.............................................................................................22 Área de un triángulo dadas las longitudes de los lados.......................................23 Hexágono regular.................................................................................................23 Área de un triángulo dadas las coordenadas de sus vértices...............................23 Puntos colineales.................................................................................................24 Movimiento rectilíneo uniforme...........................................................................24 Ponderación de calificaciones...............................................................................24 Sistema de ecuaciones lineales.............................................................................24 * Vuelto/cambio de una compra.........................................................................25 * Transformación entre unidades de tiempo.......................................................25 Cálculo de tiempo en horas, minutos y segundos................................................25 Transformación de pies a metros.........................................................................25 Unidades de capacidad........................................................................................25 Cálculo de comisión.............................................................................................26 Cálculo de descuento...........................................................................................26 Calificación de programación..............................................................................26 Porcentaje de mujeres y hombres........................................................................27 * Cálculo de la edad de una persona...................................................................27 Conversión de radianes a grados centesimales y viceversa..................................27 * Conversión de temperaturas de Grados Celsius a Fahrenheit y viceversa.......27 Área y volumen de una esfera.............................................................................27 Longitud y área de un círculo.............................................................................27 Solución de ecuaciones de segundo grado............................................................27 Intercambio de valores de variables.....................................................................28 Multiplicación de polinomios...............................................................................29 Caída de cuerpos en el vacío...............................................................................29 Ley de gravitación universal................................................................................29 Logaritmo de un número en cualquier base........................................................29 Trabajo conjunto.................................................................................................29 Estructuras de control.............................................................................................30 Miscelánea...........................................................................................................30 Estructura de decisión IF....................................................................................44 Miscelánea.......................................................................................................44 Aprobación de curso........................................................................................45 Número par o impar........................................................................................45 Número nulo, positivo o negativo....................................................................45 Aumento de sueldo en base a sueldo actual....................................................46 2 Angel Vázquez-Patiño Universidad de Cuenca Nota alfabética................................................................................................46 Día de la semana.............................................................................................46 Estación del año..............................................................................................46 Divisibilidad de dos números...........................................................................46 Aritmética básica con 3 números....................................................................47 * Incentivo por producción..............................................................................47 Posición del menor de n números....................................................................47 Puntaje en olimpiada......................................................................................48 Pago en estacionamiento.................................................................................48 Número de cifras de un número......................................................................48 Número con ceros a la izquierda.....................................................................48 Promoción en una papelería............................................................................49 Saldos y pagos mínimos..................................................................................49 Ordenamiento de números...............................................................................49 Restricción de ingreso......................................................................................50 Vocales o consonantes.....................................................................................50 Conversión de unidades de masa.....................................................................50 Mayor y menor de 10 números........................................................................50 Estructura de selección........................................................................................51 Miscelánea.......................................................................................................51 Meses, de números a letras..............................................................................51 Signo zodiacal..................................................................................................52 Total de ventas................................................................................................52 Estructura de repetición WHILE........................................................................54 Miscelánea.......................................................................................................54 Números de n a m...........................................................................................55 Números pares del 1 al 100.............................................................................55 Acumulador del 1 al 100.................................................................................55 Contador de números impares.........................................................................56 Múltiplos de n.................................................................................................56 Suma y promedio de n números......................................................................56 Mayor y menor de una serie de números.........................................................57 Subsidio familiar..............................................................................................57 * Factura.........................................................................................................57 Repetición de series.........................................................................................58 Encuesta a familias.........................................................................................58 Conteo de votos...............................................................................................58 3 Angel Vázquez-Patiño Universidad de Cuenca * Contador de mayores de edad......................................................................58 Factorial de un número...................................................................................58 Combinatoria...................................................................................................59 Simple random walks......................................................................................59 * Dibujo de cuadrado......................................................................................59 * Dibujo de cuadrado y rombo........................................................................60 Triángulo de Pascal.........................................................................................60 Serie del binomio.............................................................................................61 Interés fijo anual..............................................................................................61 Promedio de edad en escuela..........................................................................62 Trabajo conjunto.............................................................................................62 Frases...............................................................................................................62 Tirada de dados..............................................................................................62 Series y sumatorias..........................................................................................62 Triángulo de números......................................................................................63 Número de días entre dos fechas.....................................................................63 Estructura de repetición DO-WHILE.................................................................64 Miscelánea.......................................................................................................64 Números de n a m...........................................................................................65 Números impares del 1 al 100.........................................................................66 Acumulador del 1 al 100.................................................................................66 Contador de números pares.............................................................................66 Codificación de caracteres...............................................................................66 Ingreso de binarios..........................................................................................66 Ingreso de números mientras sean positivos....................................................67 Conteo de frases..............................................................................................67 Ingreso de 5 números.......................................................................................67 Longitud y área de un círculo: validación.......................................................67 Cantidad de números ingresados.....................................................................67 Cuadrado de números menores a n.................................................................67 Contador de pares e impares...........................................................................67 Contador de familias según número de miembros...........................................67 * Números con vocales....................................................................................68 * Operador potencia........................................................................................68 Factores de un número entero.........................................................................68 * Factorial.......................................................................................................68 * Números perfectos........................................................................................68 4 Angel Vázquez-Patiño Universidad de Cuenca Números primos..............................................................................................68 Número de dígitos de un número entero.........................................................69 Valor relativo de un número............................................................................69 Cálculo de comisiones......................................................................................69 Ordenamientos................................................................................................69 Juego: adivina el número.................................................................................70 Cara o cruz......................................................................................................70 Análisis de frecuencias en lanzamientos de un dado.......................................70 Series y sumatorias..........................................................................................70 Número de cifras de un número......................................................................71 Reloj de 24 horas.............................................................................................71 * Progresión geométrica..................................................................................71 * Números de la serie Fibonacci.....................................................................72 * Aproximación de π.......................................................................................72 Aproximación del logaritmo natural...............................................................73 * Aproximación del arco seno.........................................................................73 * Dibujo de triángulos.....................................................................................73 Menú...............................................................................................................74 Función exponencial........................................................................................75 Número en cualquier base...............................................................................75 Menú: revisión de número...............................................................................75 Tabla de multiplicar de un número entre 0 y 10.............................................75 Estructura de repetición FOR.............................................................................76 Miscelánea.......................................................................................................76 Signo zodiacal y número de suerte..................................................................79 Series y sumatorias..........................................................................................79 Menú: media, mayor y menor..........................................................................80 Manejo contable..............................................................................................81 * Factorización de trinomio.............................................................................81 Cálculos con dígitos de un número..................................................................82 * Serie de Leibniz............................................................................................82 * Carrera de caballos.......................................................................................83 Número de Armstrong.....................................................................................84 * Prueba del nueve de la división....................................................................84 * Encontrando triángulos rectángulos.............................................................84 La diagonal de Cantor.....................................................................................85 Random walks.................................................................................................86 5 Angel Vázquez-Patiño Universidad de Cuenca * Suma de dos números...................................................................................86 Raíz cuadrada de un número..........................................................................86 Estructuras de Datos...............................................................................................90 Arreglos...............................................................................................................90 Miscelánea.......................................................................................................90 Manejo de arreglos..........................................................................................94 * Eliminación de duplicados............................................................................94 Ordenamiento de n números...........................................................................95 Ángulo entre vectores......................................................................................95 Relleno de arreglo con números aleatorios......................................................95 Graficación de frecuencias...............................................................................95 Criba de Eratóstenes.......................................................................................96 Algoritmo de Havel-Hakimi.............................................................................97 Matrices...............................................................................................................97 Miscelánea.......................................................................................................97 Suma y resta de matrices..............................................................................103 Producto de un escalar por una matriz.........................................................103 Diagonal principal de una matriz..................................................................103 * Transpuesta de una matriz.........................................................................103 Determinante de una matriz.........................................................................103 Producto de matrices....................................................................................104 Punto de silla de una matriz.........................................................................104 Tablero de ajedrez.........................................................................................104 El cuadrado latino.........................................................................................104 El cuadrado mágico.......................................................................................104 Cadena de ADN............................................................................................105 Gimnasia cerebral..........................................................................................106 Cálculos espaciales básicos............................................................................108 Formación de grupos de trabajo....................................................................110 * Matriz de adyacencia..................................................................................113 Craps.............................................................................................................115 Hormiga de Langton......................................................................................115 * Las ocho reinas...........................................................................................117 * Datos de personas.......................................................................................118 * Datos de empresas y empleados.................................................................120 * Estadística descriptiva: frecuencias e histograma.......................................122 Un algoritmo voraz para el número cromático..............................................123 6 Angel Vázquez-Patiño Universidad de Cuenca Algoritmo de Floyd-Warshall........................................................................123 Funciones...............................................................................................................124 Ámbito de las variables.....................................................................................124 Miscelánea.........................................................................................................124 * Histograma.....................................................................................................128 Aritmética básica...............................................................................................128 Potenciación.......................................................................................................129 Aproximación de sinh-1......................................................................................129 Función W de Lambert......................................................................................129 Factorial de un número......................................................................................130 Máximo común divisor y mínimo común múltiplo............................................130 El método de la bisección..................................................................................131 * El método de Newton.....................................................................................132 Ordenamiento de n números..............................................................................133 Búsqueda lineal..................................................................................................134 Búsqueda binaria o dicotómica..........................................................................134 Juego de dados entre dos...................................................................................134 Manejo de Caracteres y Cadenas...........................................................................136 Miscelánea.........................................................................................................136 * Datos personales.............................................................................................144 Estadísticas de texto..........................................................................................144 * Analizador de tweets......................................................................................145 Eliminación de n-ésima palabra.........................................................................146 Cifrado por sustitución......................................................................................147 Cifrado por transposición..................................................................................148 * Línea de comandos.........................................................................................149 * Mantenimiento de datos de personas..............................................................151 Búsquedas..............................................................................................................155 Ordenamiento........................................................................................................158 Miscelánea.........................................................................................................158 * Calificaciones de estudiantes...........................................................................164 Ordenamientos en matriz..................................................................................165 Archivos.................................................................................................................168 Miscelánea.........................................................................................................168 Miscelánea de Ejercicios........................................................................................169 * Combate de pokemones..................................................................................169 Solución de un sistema de ecuaciones por matrices...........................................171 7 Angel Vázquez-Patiño Universidad de Cuenca Conversión de un número en base diez a sistema binario.................................171 Conversión de un número en base binaria a sistema en base diez.....................171 Cálculo de las tres alturas de un triángulo dadas las longitudes de sus lados. .171 Valor futuro de una inversión............................................................................171 Cálculo del capital inicial..................................................................................171 Cálculo de la tasa de interés..............................................................................171 Cálculo del número de años...............................................................................171 Media, mediana y varianza de N datos.............................................................171 Transformación de números decimales a romanos.............................................171 Dígitos de un número........................................................................................173 * Pirámide invertida..........................................................................................173 Cubos e impares................................................................................................173 Cantidad de dígitos fijo de números mostrados.................................................173 Algoritmo de Gauss y Método de eliminación de Gauss...................................174 Métodos de Jacobi y de Gauss-Seidel................................................................174 Dados.................................................................................................................175 Búsquedas y ordenación....................................................................................175 Interpolación......................................................................................................175 Integración numérica.........................................................................................175 Ecuaciones diferenciales ordinarias (EDO)........................................................175 ¿Qué Hace el Algoritmo/Programa?.....................................................................178 Lenguaje Java....................................................................................................182 Lenguaje C........................................................................................................189 Fórmulas y Relaciones...........................................................................................190 Estadística.........................................................................................................190 Media ponderada...........................................................................................190 Medidas de longitud..........................................................................................190 Unidades de capacidad......................................................................................190 Unidades de capacidad de información..............................................................190 Tiempo..............................................................................................................191 Unidades de temperatura..................................................................................191 Círculo...............................................................................................................191 Esfera.................................................................................................................191 Cuadrado...........................................................................................................191 Ángulos..............................................................................................................191 Ecuación de segundo grado...............................................................................192 Logaritmos.........................................................................................................192 8 Angel Vázquez-Patiño Universidad de Cuenca Referencias.............................................................................................................193 9 Angel Vázquez-Patiño Universidad de Cuenca Introducción Los algoritmos están ordenamos de acuerdo a su complejidad. Los ejercicios que tienen un asterisco al comienzo son ejercicios tomados en alguna prueba o examen. Las presentaciones utilizadas por Angel Vázquez para el curso de Programación 1 en la Facultad de Ingeniería de la Universidad de Cuenca son: 1. 2. 3. 4. 5. 6. 7. 8. https://www.slideshare.net/angenio2/programacin-presentacin-del-curso https://www.slideshare.net/angenio2/programacin-fundamentos-64227508 https://www.slideshare.net/angenio2/programacin-algoritmos https://www.slideshare.net/angenio2/programacin-estructuras-de-control https://www.slideshare.net/angenio2/programacin-introduccin-a-java https://www.slideshare.net/angenio2/programacin-1-introduccin-a-c https://www.slideshare.net/angenio2/programacin-tipos-de-datos-java https://www.slideshare.net/angenio2/programacin-1-tipos-bsicos-de-datosen-c 9. https://www.slideshare.net/angenio2/programacin-estructuras-de-datos 10. https://www.slideshare.net/angenio2/programacin-1-estructuras-de-datosen-c 11. https://www.slideshare.net/angenio2/programacin-funciones 12. https://www.slideshare.net/angenio2/programacin-1-funciones-en-c 13. https://www.slideshare.net/angenio2/programacin-1-cadenas-en-c 14. https://www.slideshare.net/angenio2/programacin-bsquedas-yordenamientos Cualquier comentario, duda o sugerencia con respecto a los ejercicios o las presentaciones siempre es bienvenida. 10 Angel Vázquez-Patiño Universidad de Cuenca Fundamentos Qué es programar 1. * Indique qué es programar 2. La programación se puede definir como a) el proceso de diseñar, codificar, depurar y mantener el código fuente de programas de computador b) la ejecución de programas de ordenador desde la línea de comandos c) la instalación de programas en sistemas operativos desde la línea de comandos d) las anteriores respuestas no son correctas 3. Pregunta Qué es un lenguaje de programación 1. Cuál(es) de los siguientes son lenguajes de programación a) Eiffel b) C# c) Fortran d) DOS 2. ¿Cuál es el código ASCII decimal de “nueva línea” (line feed)? a) 10 b) 13 c) 32 d) Las anteriores respuestas no son correctas 3. ¿Cuál es el código ASCII decimal de la letra A mayúscula? a) 32 b) 65 c) 97 11 Angel Vázquez-Patiño Universidad de Cuenca d) 126 4. En un lenguaje débilmente tipado a) Un valor de un tipo puede ser tratado como de otro tipo b) Un valor de un tipo nunca puede ser tratado como de otro tipo c) Un valor de un tipo puede ser tratado como de otro tipo siempre que se realice una conversión de forma explícita d) Las anteriores respuestas no son correctas 5. El lenguaje ensamblador se sitúa a) Más cerca del lenguaje máquina que de los lenguajes de alto nivel b) Más cerca de los lenguajes de alto nivel que del lenguaje máquina c) No hay un lenguaje ensamblador d) Las anteriores respuestas no son correctas 6. Se considera que el primer lenguaje de alto nivel fue a) Ada b) C c) Fortran d) Java 7. Imperativo, declarativo y orientado a objetos son a) Modos de compilar el código fuente de un programa de ordenador b) Modos de definir el pseudocódigo de un programa de ordenador c) Paradigmas de programación d) Las anteriores respuestas no son correctas 8. Pregunta Modelización de problemas del mundo real Del problema real a su solución por computadora 1. * Enumere las etapas de la resolución de un problema con computador. 12 Angel Vázquez-Patiño Universidad de Cuenca 2. * Describa las etapas de la resolución de un problema con computadora Conceptos acerca de software Variables y tipos de datos 1. int, char, float, string y boolean son a) Funciones de acceso a datos b) Instrucciones de acceso a datos c) Sentencias de control d) Tipos de datos 2. Una variable es (seleccione una o más opciones según corresponda) a) La que almacena un valor entero b) Una constante que varía su valor c) A la que se le asigna un nombre d) La que permite la entrada de datos e) La que permite almacenar un valor capturado Algoritmos 1. * Explique lo qué es un algoritmo. Dé un ejemplo sencillo. 2. * ¿Cuáles son las características que debe cumplir un algoritmo? 3. * Describa las características de un algoritmo. 4. * Describa qué es un algoritmo y liste (sólo mencionarlas) las formas de representar los algoritmos que conozca. Dé un ejemplo sencillo de algoritmo indicando qué es lo que hace. 5. * Respecto a los algoritmos, ¿qué tipo o tipos de representación existen? Descríbalos. 6. ¿Qué es un algoritmo? a) Un conjunto de instrucciones o reglas bien definidas, ordenadas y finitas que permiten realizar una actividad mediante pasos sucesivos que no generen dudas a quien deba realizar dicha actividad. 13 Angel Vázquez-Patiño Universidad de Cuenca b) Es una igualdad entre dos expresiones algebraicas, denominadas miembros, en las que aparecen valores conocidos o datos, y desconocidos o incógnitas, relacionados mediante operaciones c) Es una relación de variables que pueden ser cuantificadas para calcular el valor de otras de muy difícil o imposible cálculo y que suministra una solución para un problema. d) Las anteriores respuestas no son correctas. 7. * Un algoritmo es (seleccione una o más opciones según corresponda) a) Secuencia de pasos b) Secuencia de instrucciones c) Produce un resultado deseado d) Es finito e) No siempre se alcanza un resultado Ejercicios desde cero 1. Algoritmo para preparar un margarita 2. Algoritmo para comprar los víveres de la semana 3. Algoritmo para construir una mesa 4. Algoritmo para calcular el área y el perímetro de un cuadrado 5. Algoritmo para calcular el volumen de una esfera 6. Algoritmo para calcular el IVA de una compra 7. Algoritmo para calcular la edad de una persona (tomar en cuenta sólo el año de nacimiento y el año actual) 8. Algoritmo para calcular el cubo de un número 9. Algoritmo para pasar de grados sexagesimales a radianes 10. Algoritmo para calcular el valor total a pagar por dos productos incluyendo el IVA y un impuesto más del 1% (se impone al valor de los productos, antes de calcular el IVA) 14 Angel Vázquez-Patiño Universidad de Cuenca 11. Algoritmo para calcular la distancia entre dos puntos dadas sus coordenadas cartesianas 12. Algoritmo para convertir un número de bits a bytes, KB, MB y GB. Vea la sección Unidades de capacidad de información de este documento. 13. Algoritmo para convertir minutos a días y horas 14. Sacar el promedio de las notas de 4 estudiantes 15. Algoritmo que calcule el área de un triángulo dadas las coordenadas cartesianas de sus vértices 16. Algoritmo que calcule el valor de un cateto dados los valores de la hipotenusa y del otro cateto de un triángulo rectángulo 17. Algoritmo que calcule el valor de la tangente de los lados opuestos a los catetos de un triángulo rectángulo dados los valores de la hipotenusa y uno de los catetos 18. Algoritmo que calcule el área de un triángulo dados los valores de los lados (revise el concepto de semiperímetro, ecuación 7) 19. Algoritmo que calcule las raíces de una ecuación cuadrática cuya forma canónica es ax2+bx+c=0 20. Algoritmo que muestre el valor absoluto de un número 21. Algoritmo que indica si un triángulo es equilátero, isósceles o escaleno dadas las longitudes de sus lados 22. Algoritmo para saber si una persona es mayor de edad o no 23. Algoritmo para saber si un número es par o impar 24. Algoritmo para saber cuál es el mayor de dos números 25. Algoritmo para calcular el total a pagar por una compra. Si la compra es de más de $100, el descuento es de 10%, caso contrario no hay descuento. 26. Algoritmo para saber cuántos dígitos tiene un número 27. Algoritmo para encontrar el ángulo entre dos arreglos 28. Algoritmo para encontrar la ecuación de una recta dados dos puntos de la misma 15 Angel Vázquez-Patiño Universidad de Cuenca 29. Algoritmo para pasar coordenadas polares a cartesianas 30. Algoritmo para pasar coordenadas cartesianas a esféricas 31. Algoritmo que calcule la suma de los números del 1 al 10 Diagramas de flujo 1. * Describa qué es un diagrama de flujo. Dé un ejemplo sencillo (explique qué hace el algoritmo del ejemplo). 2. * El Diagrama de Flujo se utiliza para mostrar gráficamente la solución de un problema a) Verdadero b) Falso 3. Pseudocódigo 1. * Describa qué es un pseudocódigo. Dé un ejemplo sencillo (explique qué hace el algoritmo del ejemplo). 2. * El pseudocódigo permite escribir programas utilizando el lenguaje natural. a) Verdadero b) Falso Prueba de escritorio 1. Con respecto a la prueba de escritorio se puede afirmar que (seleccione una o más opciones según corresponda): a) Es una herramienta útil que permite entender qué hace un algoritmo b) Es una herramienta útil que permite entender qué hace un flujograma c) Es una herramienta útil que permite entender qué hace un Lenguaje de Programación 2. Pregunta 16 Angel Vázquez-Patiño Universidad de Cuenca Codificación 1. En el contexto de los diferentes tipos de errores que existen al momento de codificar y ejecutar un programa. Si en un lenguaje compilado usted pudo realizar la compilación de su código fuente sin errores, ¿qué otros tipos de errores podrían aparecer en la ejecución del programa? 2. Pregunta Documentación y su importancia 1. Documentar el código fuente es añadir suficiente información para explicar lo que hace para que los humanos entiendan cuál es el objetivo de cada instrucción o conjunto de instrucciones. En este contexto, ¿qué información, como documentación, debe agregar al código un programa? 2. Pregunta 17 Angel Vázquez-Patiño Universidad de Cuenca Programación Secuencial Miscelánea 1. Escriba un algoritmo que imprima lo siguiente en pantalla: E S T U D I A N T E N I V E R S I N G E N I E R Í A D A D 2. * Mostrar la salida en pantalla del siguiente algoritmo Proceso cambioVariable Definir a, b, c, aux Como Entero; a <- 5; b <- 6; c <- 7; aux <- a; b <- a; c <- b; Escribir a, “ ”, b, “ ”, c; FinProceso 3. Se piden dos números y se presentan los resultados de la suma, resta, producto y división. Primero elabore un algoritmo que resuelva el problema y luego trate de editarlo para que use la menor cantidad de variables posible. 4. * Realice el diagrama de flujo, el pseudocódigo y la prueba de escritorio del siguiente ejercicio: Pedir al usuario el ingreso de tres números (x, y y z). Mostrar la suma de los tres números. Mostrar el resultado de x+y-z+100. Mostrar el resultado de (x-y)(x+y). 5. Elabore un algoritmo que permita solucionar el siguiente enunciado: se ingresan 5 números por el teclado del computador, encontrar la suma y el 18 Angel Vázquez-Patiño Universidad de Cuenca promedio de los números ingresados. Represente el algoritmo a través de un diagrama de flujo, pseudocódigo; realice la prueba de escritorio. 6. El usuario ingresa la población de un país y su tasa de crecimiento anual (expresada como un porcentaje; por ejemplo 10, 20, 60). Calcular la población de ese país luego de uno, dos y tres años, asumiendo que la tasa de crecimiento poblacional se mantiene constante. Una vez que haya elaborado su primer algoritmo para solucionar el problema, pregúntese lo siguiente: ¿cuál es el número mínimo de variables que puede utilizar para resolver el problema? Una vez que resuelva el problema con el mínimo número de variables posible, conteste si el orden de las instrucciones cambiaría el resultado (i.e., ya no resolviera el problema). 7. Se ha establecido que el número máximo de latidos de corazón por minuto que cualquier persona puede alcanzar sin correr riesgos de salud es igual a 220 menos la edad de la persona en años. Asociaciones médicas recomiendan mantener el número de latidos por minuto durante una sesión de ejercicio físico en un rango seguro que está entre el 50 y el 85% del número máximo mencionado. Calcular el rango seguro de latidos por minuto usando la edad de una persona como dato de entrada. 8. La jornada de trabajo normal de un empleado durante una semana comprende 40 horas. Por cada hora trabajada dentro de esas 40 horas un empleado recibe el salario normal. Todas las horas trabajadas por encima de esas 40 horas se consideran horas extras. Por cada hora extra el empleado recibe 1.5 veces el salario que recibe por una hora normal. El usuario ingresa el salario normal por hora que gana un empleado y el número de horas trabajadas durante la semana. Mostrar el salario total semanal que gana el empleado. Respaldo de información Elaborar un algoritmo que permita calcular el número de CDs necesarios para hacer una copia de seguridad de la información almacenada en un disco duro cuya capacidad se conoce (es dada por el usuario). Considerar que el disco duro está lleno de información y su capacidad está expresada en GB. Cada CD que se utilizará para el respaldo tiene una capacidad de 700 MB; un GB tiene 1024 MB. Represente el algoritmo con un diagrama de flujo y pseudocódigo; además, realice 19 Angel Vázquez-Patiño Universidad de Cuenca las pruebas de escritorio necesarias para verificar el correcto funcionamiento del algoritmo. Cálculos espaciales básicos La mayor parte de los análisis espaciales hacen uso de cálculos geométricos sencillos, a partir de los cuales se construyen algoritmos más complejos. A continuación se plantean ejercicios relacionados con cálculos básicos que constituyen los fundamentos del análisis geométrico tanto en el plano como en el espacio. Para más detalles lea la sección 10.3 Algunos cálculos espaciales básicos del libro de Olaya (2011). Distancia euclidiana Se tienen los puntos A(x1, y1) y B(x2, y2) en el plano cartesiano, elabore el algoritmo que permite obtener la distancia euclidiana entre A y B. La distancia euclidiana entre dos puntos (x1, y1) y (x2, y2) es (1) Distancia de Manhattan En el análisis geográfico es habitual utilizar la denominada distancia de Manhattan, (2) Desarrolle un algoritmo que calcule la distancia de Manhattan de dos puntos A(x 1, y1) y B(x2, y2) dados. * Métricas Lp Tanto la distancia euclidiana como la de Manhattan son casos particulares de las denominadas métricas Lp que corresponden a una expresión de la forma (3) Con p=1 y β=1, se tiene la distancia de Manhattan y con p=2 y β=1, se tiene la distancia euclidiana. Desarrolle un algoritmo que calcule la distancia basada en métricas Lp dadas las coordenadas de dos puntos A(x1, y1) y B(x2, y2) y los valores de las variables β y p. 20 Angel Vázquez-Patiño Universidad de Cuenca Distancia ortogonal Información tomada de Wikipedia (https://goo.gl/B5NTCj). En Geometría euclidiana, la distancia de un punto a una recta es la distancia más corta entre ese punto y un punto de una línea o recta. Sean A un punto y D una recta (vea la figura 1), se define la distancia entre A y D como la distancia mínima entre A y un punto M de D. Para una recta D definida por su ecuación reducida y = ax + b y siendo A un punto de la forma A = (xA, yA). (4) Figura 1: Distancia ortogonal del punto A a la recta D. Para calcular la distancia de un punto M, (x0, y0, z0), a un plano D, ax + by + cz + d = 0, se tiene (5) Desarrolle un algoritmo que calcule la distancia ortogonal de un punto a una recta y del mismo punto a un plano. Distancia de un segmento de recta a un punto Dado un segmento de recta definido por los extremos A(x1, y1) y B(x2, y2), y un punto C(x3, y3), la distancia del punto C al segmento AB se calcula como la distancia del punto C hasta la intersección (D) de una recta que pasa por el punto C y es perpendicular al segmento AB (vea la figura 2). El punto de intersección D tiene las coordenadas x = x1 + u(x2 – x1) 21 Angel Vázquez-Patiño Universidad de Cuenca y = y1 + u(y2 – y1) donde u se obtiene de (6) Figura 2: Distancia de un segmento de recta AB a un punto C. Desarrolle un algoritmo que calcule la distancia de un punto a un segmento de recta. Los datos que se dan son las coordenadas de los puntos A, B y C (vea la figura 2). Cálculo de interés Suponga que un individuo desea invertir su capital en un banco y desea saber cuánto dinero ganará después de un mes si el banco paga a razón de 2% mensual. Realice el algoritmo que permita hacer el cálculo. Costo de llamada Se requiere un programa para determinar el costo que tendrá realizar una llamada telefónica con base en el tiempo que dura la llamada y en el costo por minuto. Represente la solución mediante un diagrama de flujo y pseudocódigo; además, verifique la validez del algoritmo mediante una prueba de escritorio. Cálculo de potencia Se desea calcular la potencia eléctrica de circuito de la figura 3. Realice un diagrama de flujo y el pseudocódigo que representen el algoritmo para resolver el problema. Considere que: y . 22 Angel Vázquez-Patiño Universidad de Cuenca Figura 3: Circuito eléctrico. Área de un triángulo dadas las longitudes de los lados En geometría plana elemental, la fórmula de Herón da el área de un triángulo conociendo las longitudes de sus tres lados a, b y c (vea https://goo.gl/OEybZb): donde s es el semiperímetro del triángulo: (7) Desarrolle dadas las diagrama necesarias un algoritmo que permita calcular el área, en cm², de un triángulo, longitudes, en metros, de sus lados. Represente el algoritmo con un de flujo y pseudocódigo; además, realice las pruebas de escritorio para verificar el correcto funcionamiento del algoritmo. Hexágono regular • Desarrolle un algoritmo que dadas las longitudes de un hexágono regular, calcule el área del polígono. • Desarrolle un algoritmo para calcular la apotema y el perímetro de un hexágono regular inscrito en una circunferencia de un radio dado. Área de un triángulo dadas las coordenadas de sus vértices El teorema 12 de la línea recta (Charles Lehmann, 1994, chap. 3) menciona: el área del triángulo que tiene por vértices los puntos (x1, y1), (x2, y2) y (x3, y3) es x 1 1 x 2 2 x3 y1 1 y2 1 , y3 1 | | debiendo tomarse el valor absoluto del determinante. 23 Angel Vázquez-Patiño Universidad de Cuenca Proponga un algoritmo para calcular el área de un triángulo dadas las coordenadas de sus vértices. Puntos colineales Un corolario del teorema 12 de la línea recta (Charles Lehmann, 1994, chap. 3) menciona: una condición necesaria y suficiente para que tres puntos diferentes de coordenadas (x1, y1), (x2, y2) y (x3, y3) sean colineales es que x1 x2 x3 y1 1 y 2 1 =0 y3 1 | | Proponga un algoritmo para saber si tres puntos dados son colineales. Movimiento rectilíneo uniforme Proponga un algoritmo para calcular la distancia recorrida (m) por un móvil que tiene velocidad constante (km/h) durante un tiempo t (s). Ponderación de calificaciones Fuente: (Pinales Delgado and Velázquez Amador, 2014) 1. Un estudiante realiza cuatro exámenes (/25) durante el semestre, los cuales tienen la misma ponderación. Realice el pseudocódigo y el diagrama de flujo que representen el algoritmo correspondiente para obtener el promedio de las calificaciones obtenidas. 2. Realice el diagrama de flujo, y pseudocódigo que representen el algoritmo para determinar el promedio que obtendrá un alumno considerando que realiza tres exámenes (/100), de los cuales el primero y el segundo tienen una ponderación de 25%, mientras que el tercero de 50%. Sistema de ecuaciones lineales 1. Elaborar un algoritmo que resuelva un sistema de ecuaciones lineales con dos incógnitas. 2. Elaborar un algoritmo que resuelva un sistema de ecuaciones lineales con tres incógnitas. 24 Angel Vázquez-Patiño Universidad de Cuenca * Vuelto/cambio de una compra Partiendo de una cantidad de dinero menor a un dólar que se tiene que dar de cambio (vuelto), calcular el número de monedas que hay que dar (suponiendo que se cuenta con todas las monedas necesarias) de 1, 5, 10, 25, 50 centavos. Debe dar la menor cantidad de monedas posible. Realice el diagrama de flujo y pseudocódigo del programa; además, verifique la validez del mismo realizando la prueba de escritorio. * Transformación entre unidades de tiempo Partiendo de una cantidad de tiempo medida en segundos, calcular el número de semanas, días, horas, minutos y segundos a los que corresponde. Cálculo de tiempo en horas, minutos y segundos Dos Atletas recorren la misma distancia y se registran sus tiempos en segundos (at1seg) y minutos (at2min) respectivamente. 1. Se desea saber el tiempo total utilizado por el primer atleta en horas (at1horas), minutos (at1min) y segundos. 2. Se desea saber el tiempo total utilizado por el segundo atleta en horas (at2horas), minutos y segundos (at2seg). Transformación de pies a metros Dada una cantidad expresada en pies y otra en metros, determinar la suma pero convertida a pulgadas, a yardas, a metros y a millas por separado. Unidades de capacidad Dos tanques llenos de agua tienen expresadas sus capacidades en litros y en yardas cúbicas respectivamente. De la cantidad total de agua, el 75% se dedica al consumo doméstico y el 25% se dedica al riego. Diseñe un programa que haga lo siguiente: 1. Determine la cantidad total de agua expresada en yardas cúbicas y en metros cúbicos. 2. Determine las cantidades de agua dedicadas al riego y al consumo doméstico expresadas en metros cúbicos y en pies cúbicos. 25 Angel Vázquez-Patiño Universidad de Cuenca Cálculo de comisión Un vendedor recibe un sueldo base más un 10% extra por comisión de sus ventas, el vendedor desea saber cuánto dinero obtendrá por concepto de comisiones por las tres ventas que realiza en el mes y el total que recibirá en el mes tomando en cuenta su sueldo base y comisiones. Cálculo de descuento Una tienda ofrece un descuento sobre el total de la compra y un cliente desea saber cuánto deberá pagar finalmente por su compra. 1. Realice un algoritmo que calcule un descuento del 15%. 2. Realice un algoritmo que calcule un descuento d (%) ingresado por el usuario. 3. Realice un algoritmo que calcule un descuento d ingresado y muestre el descuento aplicado y el total a pagar de la compra. Calificación de programación Un alumno desea saber cuál será su calificación final en la materia de programación. Dicha calificación se compone de los siguientes porcentajes: • 55% del promedio de sus tres calificaciones parciales (cada una de las tres calificaciones fueron dadas sobre 20 y las tres tienen la misma ponderación) • 30% de la calificación del examen final (/20) • 15% de la calificación de un trabajo final (/20) 1. Realice un programa que calcule la calificación final de la materia si la calificación final está dada sobre 20. 2. Realice un programa que calcule la calificación final de la materia si la calificación final está dada sobre 30. 3. Realice un programa que calcule la calificación final de la materia si la calificación final está dada sobre n ( ). 4. Realice un programa que calcule la calificación final de la materia si la calificación final está dada sobre n ( ) y los porcentajes de los que se compone la calificación final ya no son 55%, 30% ni 15%, sino que son ingresados por el usuario ( , , ; ). 26 Angel Vázquez-Patiño Universidad de Cuenca Porcentaje de mujeres y hombres Un maestro desea saber qué porcentaje de hombres y qué porcentaje de mujeres hay en un grupo de estudiantes. Realice un programa que pida el número de estudiantes mujeres, el número de estudiantes hombres y muestre el porcentaje de mujeres y el porcentaje de hombres. * Cálculo de la edad de una persona Realice un algoritmo que determine aproximadamente (i.e., asuma que todos los años tienen 365 días y que todos los meses tienen 30 días) cuántos meses, semanas, días y horas ha vivido una persona dada la fecha y hora (no minutos) de nacimiento. Realice el diagrama de flujo y pseudocódigo del programa; además, verifique la validez del mismo realizando la prueba de escritorio. Conversión de radianes a grados centesimales y viceversa * Conversión de temperaturas de Grados Celsius a Fahrenheit y viceversa • Realice un programa que reciba una temperatura en grados celsius y los convierta a grados fahrenheit. • Realice un programa que reciba una temperatura en grados fahrenheit y los convierta a grados celsius. La relación entre grados Celsius y grados Fahrenheit se muestra en la ecuación 19. Área y volumen de una esfera Dado el radio (r) de una esfera, realizar un programa que calcule la superficie (s) y el volumen (v) de la misma. Longitud y área de un círculo Dado el radio (r) de un círculo, calcular la longitud (l) y el área (a). Solución de ecuaciones de segundo grado Dada la ecuación de segundo grado la función. Vea la ecuación 26. calcular las raíces o ceros de 27 Angel Vázquez-Patiño Universidad de Cuenca Intercambio de valores de variables 1. Pida al usuario ingresar dos números. El primer número se ingresará en la variable var1 y el segundo número se ingresará en la variable var2. Diseñe un algoritmo que, al finalizar el proceso, haga que el valor de la variable var1 tenga el valor de la variable var2 y viceversa. Por ejemplo, si se ingresa primero el valor 4 y luego el valor 7, la asignación de las variables sería y ; al finalizar el algoritmo, la asignación de las variables sería y . 2. * Escribir un programa (algoritmo) que permita leer cuatro variables: a, b, c y d. Como resultado final se debe tener lo siguiente: a) diagrama de flujo y prueba de escritorio ◦ en a queda el valor de b ◦ en b queda el valor de c ◦ en c queda el valor de d ◦ en d queda el valor de a b) pseudocódigo y prueba de escritorio ◦ en a queda el valor de d ◦ en b queda el valor de c ◦ en c queda el valor de b ◦ en d queda el valor de a El número de variables que maneje su algoritmo no debe sobrepasar las 5 variables. 3. Dados cinco valores en cinco variables (var1, var2, var3, var4 y var5), realice un algoritmo para que, luego de terminar su ejecución, los valores de las variables queden de la siguiente manera: • var5 debe contener el valor de la variable var3 • var2 debe contener el valor de la variable var4 • var1 debe contener el valor de la variable var5 • var3 debe contener el valor de la variable var2 28 Angel Vázquez-Patiño • Universidad de Cuenca var4 debe contener el valor de la variable var1 El número de variables que maneje su algoritmo no debe sobrepasar las 6 variables. Multiplicación de polinomios Dados dos polinomios de segundo grado de parte del usuario, calcular la multiplicación de dichos polinomios. Caída de cuerpos en el vacío Ley de gravitación universal (8) Logaritmo de un número en cualquier base Elaborar un algoritmo que pueda calcular el logaritmo de un número en cualquier base. Vea la ecuación 27. Trabajo conjunto Considere primero los siguientes problemas de razonamiento: 1. Si una persona termina una obra en 3 horas y una segunda persona termina la obra en 6 horas ¿cuánto se demoran en terminar la misma obra si trabajan juntas? 2. Si una persona termina una obra en 3 horas, una segunda persona termina la obra en 6 horas y una tercera persona termina la obra en 12 horas ¿cuánto se demoran en terminar la misma obra si trabajan juntas? Luego de resolver los ejercicios anteriores, realice un algoritmo que pida el tiempo (individual) que se demoran en concluir una misma obra 4 personas diferentes y calcule el tiempo que se demoran en terminar la misma obra si trabajan juntas. 29 Angel Vázquez-Patiño Universidad de Cuenca Estructuras de control La teoría para poder resolver los ejercicios de estructuras de control la puede encontrar en https://goo.gl/OMZYqA. Miscelánea Algunas de las preguntas fueron basadas en el libro de Vázquez Gómez (2012). 1. * ¿Qué opción utilizaría para identificar que la variable x1 sea la mayor de 5 variables? a) If (x1>x2) AND (x1>x3) AND (x1>x4) AND (x1>x5): b) If (x1>x2) OR (x1>x3) AND (x1>x4) OR (x1>x5): c) If (x1>x2) AND (x1>x3) OR (x1>x4) AND (x1>x5): 2. * ¿Cuál es el orden correcto para la resolución de un problema con computadora? a) Análisis, Diseño, Especificación, Escritura, Verificación b) Análisis, Especificación, Diseño, Escritura, Verificación c) Análisis, Diseño, Escritura, Especificación, Verificación 3. * ¿A qué estructura de control se refiere la siguiente imagen?: a) if b) while c) for 30 Angel Vázquez-Patiño Universidad de Cuenca 4. * ¿Cuál de las siguientes estructuras utilizaría, si se desconoce el número exacto de veces que se debe ejecutar un bloque de instrucciones? a) if b) for c) while 5. * ¿Cuál de las siguientes estructuras utilizaría, si deseo repetir “n” veces un bloque de acciones? a) if b) for c) while 6. * Explique qué estructura de repetición utilizaría si de antemano no supiera el número de iteraciones del bucle sino que se debe repetir cuando una condición es verdadera. Dé un ejemplo sencillo (diagrama de flujo, explique qué hace el algoritmo del ejemplo). 7. * Explique qué es un contador, para qué lo utilizaría. Dé un ejemplo sencillo (diagrama de flujo, explique qué hace el algoritmo del ejemplo). 8. * ¿Cuál es la diferencia entre un acumulador y un contador? ¿Diría que el acumulador es un caso particular de contador o que un contador es un caso particular de acumulador? Explique su respuesta. 9. * Explique qué estructura de repetición utilizaría si de antemano supiera el número de iteraciones del bucle. Dé un ejemplo sencillo (diagrama de flujo, explique qué hace el algoritmo). 10. * Explique qué es un acumulador, para qué lo utilizaría. Dé un ejemplo sencillo (diagrama de flujo, explique qué hace el algoritmo del ejemplo). 11. * Suponga que usted elabora un algoritmo donde se pide ingresar 100 números para luego realizar alguna operación con cada uno de ellos. Para el proceso de ingreso de esos 100 números (tenga en cuenta que podrían ser n números) usted podría utilizar (escoja 1 opción): a) un bucle (lazo) for b) un bucle (lazo) if 31 Angel Vázquez-Patiño Universidad de Cuenca c) un bucle (lazo) while d) tanto la opción a y la opción b funcionarían e) tanto la opción a y la opción c funcionarían 12. if, else, for y while son a) Funciones de acceso a datos b) Sentencias de control c) Tipos de datos d) Las anteriores respuestas no son correctas 13. * Un bucle, ciclo o lazo es a) Una sentencia que permite decidir si se ejecuta o no se ejecuta una sola vez un bloque aislado de código b) Una sentencia que ejecuta otra sentencia que a su vez ejecuta la primera sentencia c) Una sentencia que permite ejecutar un bloque aislado de código varias veces hasta que se cumpla (o deje de cumplirse) una condición d) Todas las anteriores respuestas son correctas 14. ¿Qué muestra el siguiente algoritmo? Algoritmo misterioso x <- 1 z <- 0 Mientras x <= 10 Hacer y <- x * x Escribir y z <- z + y x <- x + 1 FinMientras Escribir z FinAlgoritmo 15. * ¿Cuál de los siguientes algoritmos imprime en pantalla lo que está a continuación? * ***** 32 Angel Vázquez-Patiño Universidad de Cuenca ** ***** * ***** ** ***** * ***** a) Proceso estrellas2 b1 <- 1; b2 <- 0; c1 <- 20; Repetir Si b1 = 1 Entonces Si b2 = 1 Entonces Escribir "**"; b2 <- 0; Sino Escribir "*"; b2 <- 1; FinSi b1 <- 3; Sino Escribir "*****"; b1 <- 1; FinSi c1 <- c1 + 2; Hasta Que c1 < 1 FinProceso b) Proceso estrellas1 b1 <- 1; b2 <- 0; Para i<-10 Hasta 100 Con Paso 10 Hacer Si b1 = 1 Entonces Si b2 = 1 Entonces Escribir "**"; b2 <- 0; 33 Angel Vázquez-Patiño Universidad de Cuenca Sino Escribir "*"; b2 <- 1; FinSi b1 <- 3; Sino FinSi FinPara FinProceso Escribir "*****"; b1 <- 1; c) Proceso estrellas3 b1 <- 1; b2 <- 0; c1 <- 10; Mientras c1 <= 10 Hacer Si b1 = 1 Entonces Si b2 = 1 Entonces Escribir "**"; b2 <- 0; Sino Escribir "*"; b2 <- 1; FinSi b1 <- 3; Sino Escribir "*****"; b1 <- 1; FinSi c1 <- c1 + 1; FinMientras FinProceso 16. ¿Cuál es el resultado de ejecutar el siguiente algoritmo? Algoritmo algortimo_misterioso cont <- "*" l = 5*5-20 Para x <- 1 Hasta l Con Paso 1 Hacer Escribir cont cont <- cont+"*" 34 Angel Vázquez-Patiño Universidad de Cuenca FinPara Para i <- l Hasta 1 Con Paso -1 Hacer cont <- "" l <- l-1 Para j <- l Hasta 1 Con Paso -1 Hacer cont <- cont+"*" FinPara Escribir cont FinPara FinAlgoritmo 17. * Con respecto a las estructuras de repetición estudiadas en el curso, cuál de las siguientes proposiciones es verdadera: a) SIEMPRE es posible utilizar un for para comportamiento iterativo que utilizando un while. obtener el mismo b) SIEMPRE es posible utilizar un while para obtener el mismo comportamiento iterativo que utilizando un for. c) Existen SOLAMENTE algunos casos donde es posible utilizar un while para obtener el mismo comportamiento iterativo que utilizando un for. d) las opciones a, b y c son proposiciones verdaderas. 18. * ¿Qué muestra el siguiente algoritmo? Algoritmo misterioso Definir j Como Entero; Para i = 3 Hasta 1 Con Paso -1 Hacer j = i + 1; Mientras j < 4 Hacer Escribir j – 1; j = j + 1; FinMientras FinPara FinAlgoritmo 19. * Realice la prueba de escritorio y muestre el resultado impreso del siguiente programa. 35 Angel Vázquez-Patiño Universidad de Cuenca 20. ¿Qué muestra el siguiente algoritmo? Proceso desconocido i = 0; Para i = (i + 1) hasta 10 Con Paso 1 Hacer Mostrar i - 1; i = i + 1; FinPara FinProceso 21. ¿Qué muestra el siguiente algoritmo? Algoritmo WhatsTheOutput n = 5 Mientras n>0 Si (n mod 2) = 0 suma = suma - 1 FinSi suma = suma + 1 n = n - 1 mostrar suma FinMientras 36 Angel Vázquez-Patiño Universidad de Cuenca FinAlgoritmo a) 1 2 3 4 5 b) 1 1 2 3 4 c) 1 1 2 2 3 d) 1 2 2 4 5 22. * Implementar el mismo algoritmo utilizando las estructuras de control While y Repeat (una versión usando While y otra versión usando Repeat). Proceso estrellas Definir b1 Como Entero; b1 <- 1; Para i <- 10 Hasta 100 Con Paso 10 Hacer Si b1 = 1 Entonces Escribir “*”; b1 <- 0; Sino Escribir “*****”; b1 <- 1; FinSi FinPara FinProceso 23. * ¿Qué muestra el siguiente algoritmo? Algoritmo misterioso Definir c1, c2 Como Entero; Para i <- 8 Hasta 0 Con Paso -2 Hacer c1 <- -1; Repetir Escribir Sin Saltar "X"; c1 <- c1 + 1; Hasta Que c1 >= i c1 <- 8 - i; c2 <- 0; Mientras c2 < c1 Hacer Escribir Sin Saltar "O"; c2 <- c2 + 1; Fin Mientras Escribir " "; 37 Angel Vázquez-Patiño Universidad de Cuenca Fin Para FinAlgoritmo 24. Se utilizan para tomar decisiones lógicas. Esta es la razón que se suelan denominar también estructuras de decisión, condicionales o alternativas. a) b) c) d) Estructuras selectivas Estructuras simples Estructura secuencial Estructuras complejas 25. Ejecuta una determinada acción cuando se cumple una determinada condición. a) For b) Do-while c) Repeat-until d) If-then 26. Es aquella variable que es utilizada en un ciclo repetitivo y tiene por objetivo almacenar valores cuyos incrementos o decrementos son en forma constante por cada iteración de ciclo o bucle en cuestión. a) Arreglo b) Contador c) Ciclo d) Acumulador e) Bucle 27. Por lo general, se emplean en los ciclos para controlar el número de iteraciones en los mismos, o para almacenar totales de elementos. a) Arreglo b) Array c) Ciclo d) Bandera e) Contador 38 Angel Vázquez-Patiño Universidad de Cuenca 28. Es el hecho de repetir la ejecución de una secuencia de acciones. a) Array b) Contador c) Iteración d) Bucle 29. Ejemplos de los ciclos repetitivos más comunes. a) For, if-else, if-then-else b) While, for, if-else c) While, do-while y for d) Do-while, for, if-then-else 30. Puede estar compuesto de todos sus elementos de tipo cadena, otro puede tener todos sus elementos de tipo entero, etc. a) Arreglo b) Contador c) Ciclo d) Array 31. Dado el siguiente pseudocódigo, ¿cuál será el valor final de la variable i? Algoritmo valorDeI i <- 1; Leer n; Mientras i < n Hacer i <- i + 1; Fin Mientras FinAlgoritmo a) 1 si el valor introducido es igual o menor que 0; el valor introducido menos uno en cualquier otro caso b) 1 si el valor introducido es igual o menor que 1; el valor introducido en cualquier otro caso c) 1 si el valor introducido es igual o menor que 1; el valor introducido más uno en cualquier otro caso 39 Angel Vázquez-Patiño Universidad de Cuenca d) Las anteriores respuestas no son correctas 32. * ¿Cuál es el resultado de ejecutar el siguiente algoritmo? Algoritmo misterioso a = 0 b = a+10 Según b Hacer 0: Mientras b > a Hacer Escribir a b = b + a Fin Mientras 10: Si a = 0 Entonces Escribir b + 11 b = b + a FinSi 11: Escribir '11' De Otro Modo: Escribir a Fin Según FinAlgoritmo 33. * ¿Cuál es el resultado de ejecutar el siguiente algoritmo? ¿Cuál sería el resultado si se reemplaza la primera instrucción (fila = 5) por fila = 4? Algoritmo misterioso fila = 5 Mientras fila >= 1 Hacer columna = 1 Mientras columna <= 10 Hacer Si (fila Mod 2) = 0 Entonces Escribir Sin Saltar "<" Sino Escribir Sin Saltar ">" FinSi columna = columna + 1 FinMientras fila = fila - 1 Escribir "" FinMientras FinAlgoritmo 40 Angel Vázquez-Patiño Universidad de Cuenca 34. * ¿Cuál es el resultado de ejecutar el siguiente algoritmo? Algoritmo misterioso n = -1 Mientras n <= 3 Hacer Si (n >= 0) Si (n = 2) Escribir "uno" FinSi Sino Escribir "dos" FinSi n = n + 1 FinMientras Escribir "tres" FinAlgoritmo 35. ¿Cuál es el resultado de ejecutar el siguiente algoritmo? Proceso algoritmo_misterioso definir a Como Entero; definir b Como Entero; definir x Como Entero; a<-4; b<-0; Repetir a<-a+2; b<-b+1; Hasta Que a>b; a<-a+3; b<-b+2; a<-a+b%2+a MOD 3; x<-trunc(a/b); Si (x>b) entonces b<-b+4; a<-b mod 3; x<-a MOD b; Finsi b<-b+1; x<-x*trunc(10/8) + a mod Escribir "el valor de la Escribir "el valor de la Escribir "el valor de la FinProceso b; variable a es : ", a; variable b es : ", b; variable x es : ", x; 41 Angel Vázquez-Patiño Universidad de Cuenca 36. * ¿Cuál de los siguientes algoritmos NO hace lo mismo que los otros dos? a) El algoritmo opcion_A b) El algoritmo opcion_B c) El algoritmo opcion_C 37. * Seleccione la(s) respuesta(s) correcta(s) respecto a las instrucciones de repetición. La instrucción do-while es similar a la instrucción while, la diferencia es que: a) El do-while evalúa su expresión al inicio y while lo hace al final al final b) El do-while evalúa su expresión al final y el while lo hace al inicio c) El while se ejecuta por lo menos una vez d) El do-while se ejecuta por lo menos una vez 38. * ¿Cuál de los siguientes algoritmos NO presenta los mismos resultados que los otros dos? a, b ∈ [0, ∞) y a > b. 42 Angel Vázquez-Patiño Universidad de Cuenca a) El algoritmo opcion_1 b) El algoritmo opcion_2 c) El algoritmo opcion_3 39. Para el diagrama de flujo mostrado a continuación a) Escribir el pseudocódigo correspondiente b) Realizar la prueba de escritorio c) Mostrar cual sería la salida en pantalla 43 Angel Vázquez-Patiño Universidad de Cuenca 40. Pregunta Estructura de decisión IF Miscelánea 1. Dados tres números indicar si cada uno es par o impar. Además, indicar si todos los números son pares, si son impares o si están “mezclados” (no todos son pares ni todos son impares). 2. Mostrar un menú con las opciones Archivo, Buscar y Salir. En caso de que el usuario no indique ninguna de las opciones, se debe mostrar un mensaje de error. 3. Dados tres números, indicar si se ingresaron en orden ascendente, descendente o sin ningún orden. 4. Escriba un programa para ingresar los lados de un triángulo y verificar si es un equilátero, isósceles o escaleno. 5. El usuario ingresa 3 números que representan las longitudes de los lados de un triángulo. Indicar si se trata de un triángulo rectángulo. 6. Escriba un programa para verificar si los lados ingresados corresponden a un triángulo. 44 Angel Vázquez-Patiño Universidad de Cuenca 7. Escriba un programa para verificar si los ángulos de los vértices de un triángulo cumplen con la condición para formar un triángulo. 8. Escriba un programa que dado un mes del año (en letras), indique el número de días de ese mes. 9. Escriba un programa para ingresar un número y verificar si es divisible para 5 y para 11. 10. Elabore un algoritmo que permita solucionar el siguiente enunciado: se ingresan 5 números por el teclado del computador, encontrar el número mayor, el número menor, la suma y el promedio entre número mayor y el menor. Represente el algoritmo a través de un diagrama de flujo, pseudocódigo; realice la prueba de escritorio. 11. El IESS necesita clasificar a las personas que se jubilarán este año. Existen tres tipos de jubilaciones: por edad, por antigüedad joven y por antigüedad adulta. Las personas adscritas a la jubilación por edad deben tener 60 años o más y una antigüedad en su empleo de menos de 25 años. Las personas adscritas a la jubilación por antigüedad joven deben tener menos de 60 años y una antigüedad en su empleo de 25 años o más. Las personas adscritas a la jubilación por antigüedad adulta deben tener 60 años o más y una antigüedad en su empleo de 25 años o más. Determinar en qué tipo de jubilación quedará adscrita una persona. 12. Pregunta Aprobación de curso Dadas las notas de dos pruebas y dos exámenes (/20), calcular el promedio de las cuatro notas y si la persona tiene 12 o más, aprueba el curso, caso contrario, pierde el año. Número par o impar Escriba un algoritmo que indique si un número dado es par o impar. Número nulo, positivo o negativo Escriba un algoritmo que indique si un número dado es positivo, negativo o nulo (i.e., igual a cero). 45 Angel Vázquez-Patiño Universidad de Cuenca Aumento de sueldo en base a sueldo actual Nota alfabética El programa solicita una calificación al usuario que está en el rango [0, 20] y la transforma en nota alfabética según la siguiente tabla: Nota numérica Nota alfabética [0; 10,5) Insuficiente [10,5; 11) Suficiente [11; 15) Bien [15; 18) Notable [18; 20] Sobresaliente Día de la semana Se pide un número de la semana entre 1 y 7 (1 es domingo) al usuario y se presenta el nombre del día. Estación del año Se pide un número de mes entre 1 y 12 al usuario y se presenta a qué estación del año pertenece. Divisibilidad de dos números Dados dos números n1 y n2: • Realizar un programa que indique si el número n2 es divisor del número n1. • Realizar un programa que verifique que el número n1 sea mayor o igual al número n2, si es así el programa debe indicar si el número n2 es divisor del número n1, caso contrario el programa debe decir “¡ERROR! El primer número ingresado debe ser mayor o igual al segundo.” 46 Angel Vázquez-Patiño Universidad de Cuenca Aritmética básica con 3 números • Escriba un algoritmo que dados tres números indique si el tercero es el resultado de la suma del primero y el segundo. • Escriba un algoritmo que dados tres números indique si el tercero es el resultado de la resta entre los dos primeros: 1) el primero menos el segundo y 2) el segundo menos el primero. • Escriba un algoritmo que dados tres números indique si el tercero es el resultado de la multiplicación del primero por el segundo. • Escriba un algoritmo que dados tres números indique si el tercero es el resto de la división entre los dos primeros: 1) el primero para el segundo y 2) el segundo para el primero. Valide su algoritmo para que se evite un error de división para cero, mostrando, antes de que se dé dicho error, que el divisor es cero. * Incentivo por producción Se tiene registrada la producción (unidades) logradas por un operario a lo largo de la semana (lunes a sábado). Elabore un algoritmo que nos muestre o nos diga si el operario recibirá incentivos sabiendo que el promedio de producción mínimo es de 100 unidades. Realice el diagrama de flujo, el pseudocódigo y la prueba de escritorio. Posición del menor de n números 1. Determine el menor valor de 2 números, indicando además en qué orden fue ingresado (i.e., si fue el primer número o el segundo). Considere que el menor valor no puede repetirse. Por ejemplo, si los números ingresados fueran: 14, 19. El resultado debe ser: “El menor valor ingresado fue 14 y corresponde al 1° número ingresado”. 2. Determine el menor valor de 3 números, indicando además en qué orden fue ingresado (i.e., si fue el primero en ser ingresado, si fue el segundo o si fue el tercero). Considere que el menor valor no puede repetirse. Por ejemplo, si los números ingresados fueran: 14, 19, 14. El resultado debe ser: “El menor valor ingresado fue 14 y corresponde al 3° número ingresado”. 3. Determine el menor valor de 5 números, indicando además en qué orden fue ingresado. Considere que el menor valor no puede repetirse. Por ejemplo, si 47 Angel Vázquez-Patiño Universidad de Cuenca los números ingresados fueran: 14, 19, 14, 16, 19. El resultado debe ser: “El menor valor ingresado fue 14 y corresponde al 3° número ingresado”. Puntaje en olimpiada En una olimpiada de tiro al blanco se llega a un acuerdo entre los participantes para que el puntaje obtenido sea calculado en base al puntaje original (0 a 10) alcanzado en el tiro efectuado, multiplicado por un factor según la siguiente tabla: Puntaje original Factor 0 [1, 5] [6, 8] 0 6 9 [9, 10] 10 Para un tiro realizado determine el puntaje alcanzado aplicando el factor que le corresponde. Pago en estacionamiento En un estacionamiento cobran $2 por hora o fracción los días Lunes, Martes y Miércoles, $2.5 los días Jueves y Viernes, $3 los días Sábado y Domingo. Se considera fracción de hora cuando haya pasado de 5 minutos. Diseñe un programa que determine cuánto debe pagar un cliente por su estacionamiento en un solo día de la semana. Si el día ingresado es incorrecto imprima un mensaje de error. Número de cifras de un número Diseñe un programa que lea un número entero (positivo o negativo) de máximo 4 cifras (validar) y determine si tiene 1, 2, 3 o 4 cifras imprimiendo lo que corresponda. Número con ceros a la izquierda Diseñe un programa que ingrese un número entero positivo que no tenga más de 4 cifras y lo imprima completando con ceros por la izquierda de tal manera que siempre se ve con 4 cifras. Por ejemplo, si el número ingresado fuera 18, el resultado deberá ser 0018. Si el número ingresado no fuera correcto debe imprimir un mensaje de error. 48 Angel Vázquez-Patiño Universidad de Cuenca Promoción en una papelería En una Librería han puesto en oferta la venta de cuadernos al por mayor, obsequiando lapiceros Lucas, Cross y/o Novo dependiendo de la cantidad de cuadernos comprados, de la siguiente manera: • Compra menos que 12, ningún obsequio. • Compra no menos que 12 pero menos que 24, obsequio: 1 Lucas por cada 4 cuadernos. • Compra no menos que 24 pero menos que 36, obsequio: 2 Cross por cada 4 cuadernos. • Compra no menos que 36, obsequio: 3 Novo por cada 4 cuadernos. Adicionalmente 1 Lucas y 1 Cross. Diseñe un algoritmo que determine cuántos lapiceros Lucas, Cross y Novo recibe un cliente como obsequio. Saldos y pagos mínimos Fuente: (Pinales Delgado and Velázquez Amador, 2014, p. 92) El banco “Bandido de peluche” desea calcular para uno de sus clientes el saldo actual (saldoAct), el pago mínimo (pagoMin) y el pago para no generar intereses (pagoSinInteres). Los datos que se conocen son: saldo anterior (saldoAnt) del cliente, monto de las compras que realizó y el pago que depositó en el corte (abono) anterior (corteAnt). Para calcular el pago mínimo se debe considerar 15% del saldo, y para no generar intereses corresponde 85% del saldo. Considere que este saldo (actual) debe incluir 12% de los intereses causados por no realizar el pago mínimo para no generar intereses en el corte (abono) anterior y $200 por multa si abonó (en el corte anterior) menos del pago mínimo. Realice el algoritmo correspondiente y represéntelo mediante el diagrama de flujo y pseudocódigo. Ordenamiento de números • Se pide a un usuario 2 números y se muestran en orden ascendente. • Se pide a un usuario 3 números y se muestran en orden descendente. • Se pide a un usuario 4 números y se muestran en el orden que quiera el usuario. 49 Angel Vázquez-Patiño Universidad de Cuenca Restricción de ingreso Un programa que permita ingresar solamente el 1 y el 0. Vocales o consonantes El usuario puede ingresar un carácter y se debe indicar si el carácter es vocal, consonante, número u otro. Conversión de unidades de masa Dada la masa expresada en Kg transformar a otra unidad de acuerdo a un menú. El menú tiene las siguientes opciones: 1. Hectogramos 2. Gramos 3. Decigramos 4. Centigramos 5. Miligramos Mayor y menor de 10 números El usuario ingresa 10 números y el programa muestra el menor y el mayor de los números ingresados. 50 Angel Vázquez-Patiño Universidad de Cuenca Estructura de selección Miscelánea 1. Elabore un algoritmo que calcule independientemente la suma de los pares y los impares de los números entre 1 y 1000, utilizando un switch. 2. En la feria del hogar se ha encontrado una tienda que vende al contado y al crédito en 6, 12, 18, 24 mensualidades sus artefactos: televisores, refrigeradoras, hornos micro hondas. Se desea saber en cualquier momento cuántas ventas se han realizado al contado, cuántas al crédito en 6, cuantas al crédito en 12, cuántas al en 18, cuántas en 24 mensualidades. 3. Una persona va de compras N veces a un supermercado donde le obsequian un chocolate por cada vez que compra más de $5. Se desea saber cuántos chocolates ha ganado en las N veces que compró. 4. Una empresa tiene N trabajadores, a cada uno de ellos se le paga un sueldo según las horas trabajadas a cierta tarifa por hora. Además a cada trabajador cuyo sueldo superó los $600 se le descuenta 10% por concepto de impuesto a la renta. Se desea saber cuántos trabajadores gana más de $600, cuántos ganan hasta $600 y cuánto dinero se tiene que pagar al estado por concepto de impuestos 5. Se ponen a la venta las entradas para un partido de fútbol internacional. El precio de la entrada depende de la tribuna: tribuna norte y sur cuesta $25, tribuna este cuesta $45 y tribuna oeste cuesta $65. Diseñe un algoritmo que controle la venta de entradas a fin de poder saber la cantidad de personas que asisten a cada tribuna, la cantidad total de personas (asistencia) y el monto total recaudado por la venta de todas las entradas (recaudación). 6. Meses, de números a letras El programa solicita el ingreso de un número que representa un mes y lo escribe en letras. Si el número ingresado es mayor que 12 o menor que 1, el programa envía el mensaje “¡ERROR! No existe tal mes.”. En caso contrario, si el número ingresado fue 1, se imprimirá en pantalla “Enero”, si el número ingresado fue 2, se imprimirá “Febrero”, etc. 51 Angel Vázquez-Patiño Universidad de Cuenca Signo zodiacal Elaborar un algoritmo para leer la fecha de nacimiento (mes y día) de una persona y muestre su signo zodiacal; si se ingresa un mes o día inconsistente se debe presentar un mensaje que diga “Fecha no reconocida.”. Tome en cuenta la siguiente información: • • • • • • • • • • • • Acuario: Piscis: Aries: Tauro: Géminis: Cáncer: Leo: Virgo: Libra: Escorpión: Sagitario: Capricornio: enero 21 - febrero 20 febrero 21 - marzo 20 marzo 21 - abril 20 abril 21 - mayo 20 mayo 21 - junio 20 junio 21 - julio 20 julio 21 - agosto 20 agosto 21 - septiembre 20 septiembre 21 - octubre 20 octubre 21 - noviembre 20 noviembre 21 - diciembre 20 diciembre 21 - enero 20 Total de ventas Ingresar la información de personas hasta que el usuario ingrese n (no más datos). Ingrese la nacionalidad (ecuatoriano, ecu; extranjero, ext), la talla (sma, med, lar), sexo (masculino, mas; femenino, fem) y el importe por la venta (imp). Se calcula un descuento de acuerdo a las siguientes condiciones: • • • • • • • • • • • • ecu, sma, mas: descuento 5%. ecu, sma, fem: descuento 4%. ecu, med, mas: descuento 7%. ecu, med, fem: descuento 9%. ecu, lar, mas: descuento 10%. ecu, lar, fem: descuento 12%. ext, sma, mas: descuento 4%. ext, sma, fem: descuento 5%. ext, med, mas: descuento 9%. ext, med, fem: descuento 7%. ext, lar, mas: descuento 12%. ext, lar, fem: descuento 10%. 52 Angel Vázquez-Patiño Universidad de Cuenca Mostrar el número de clientes nacionales, el número de clientes extranjeros, número de tallas sma, med y lar, número de hombres, número de mujeres, e importe total por todas las compras. 53 Angel Vázquez-Patiño Universidad de Cuenca Estructura de repetición WHILE Miscelánea 1. Elabore un algoritmo que permita solucionar el siguiente enunciado: se ingresan por el teclado del computador 2 números enteros positivos, encontrar la suma y el promedio de todos los factoriales de los números pares comprendidos entre esos dos números ingresados. Mostrar la suma y el promedio. Se pide representar el algoritmo a través del diagrama de flujo, pseudocódigo y realizar la prueba de escritorio. Ejemplo: A= 2 B= 8 Números contenidos entre A y B son: 3,4,5,6,7 de donde 4 y 6 son números pares. Se calcula el factorial de 4! = 24 y de 6!=720. La suma de los 2 factoriales es 24 + 720 = 744, el promedio es 744/2= 372. 2. Se sabe que la media geométrica y la media aritmética se calculan mediante las siguientes fórmulas: • MedG = RaízN-ésima(num1 num2 num3 ... numN) • MedA = (num1 + num2 + num3 + ... + numN) / N Desarrolle un algoritmo que lea N valores, calcule ambas medias y que imprima la que sea menor. 3. Una pareja desea invertir su dinero en un banco, el cual otorga el 2% de interés anual. ¿Cuál será la cantidad de dinero que esta persona tendrá al cabo de un año si la ganancia de cada mes es reinvertida? 4. Haga la prueba de escritorio e indique cuál es el resultado en pantalla de ejecutar el siguiente algoritmo: Algoritmo misterioso Definir suma, i, j Como Entero; Para i <- 1 Hasta 4 Con Paso 1 Hacer 54 Angel Vázquez-Patiño Universidad de Cuenca Para j <- 3 Hasta 0 Con Paso -1 Hacer suma <- i * (10^i) + j; Escribir Sin Saltar suma, " "; Fin Para Escribir " "; Fin Para FinAlgoritmo 5. * Haga la prueba de escritorio e indique cuál es el resultado en pantalla de ejecutar el siguiente algoritmo: Algoritmo misterioso n = 7; Para i = 0 hasta n Con Paso 1 Para j = n-i hasta 1 Con Paso -1 Mostrar Sin Saltar "#"; FinPara Mostrar ""; FinPara FinAlgoritmo 6. Pregunta Números de n a m 1. Hacer un programa que imprima los números enteros del 1 al 5. 2. Hacer un programa que imprima los números enteros desde 1 a n. 3. Hacer un programa que imprima los números enteros desde n a 1. 4. Hacer un programa que imprima los números enteros de n a m (n<m). 5. Hacer un programa que imprima los números enteros de m a n (n<m). Números pares del 1 al 100 Desarrolle un algoritmo que imprima en pantalla los números pares entre 1 y 100, inclusivo. Acumulador del 1 al 100 Hacer un programa que imprima la suma de los 100 primeros números. 55 Angel Vázquez-Patiño Universidad de Cuenca Contador de números impares Hacer un programa que imprima en pantalla los números impares del 1 hasta el 10 y que imprima en pantalla la cantidad de números impares. Múltiplos de n 1. Mostrar los múltiplos de 3 comprendidos entre los números 1 y 15. 2. Contar los números múltiplos de 3 comprendidos entre los números 1 y 15. 3. Contar y sumar los números múltiplos de 3 comprendidos entre los números 1 y 15. 4. Contar y sumar los números múltiplos de n (n>1) comprendidos entre los números enteros m y w (m<w). Proceso SumaDeMultiplosDeN acu<-0 Escribir 'Ingrese el límite inferior (m)' Leer m Escribir 'Ingrese el límite superior (w)' Leer w Escribir 'Ingrese n' Leer n Para i<-m Hasta w Con Paso 1 Hacer r<-i MOD n Si r=0 Entonces acu<-acu+i Fin Si Fin Para Escribir 'Suma: ' Escribir acu FinProceso Suma y promedio de n números 1. Pedir 5 números al usuario y mostrar la suma y promedio de los números ingresados. 2. Preguntar al usuario cuántos números va a ingresar. Ingresar los n números y mostrar la suma y promedio de los n números ingresados. 56 Angel Vázquez-Patiño Universidad de Cuenca Mayor y menor de una serie de números 1. Imprimir el mayor de una serie de cinco números ingresados por el usuario. 2. Imprimir el menor de una serie de cinco números ingresados por el usuario. 3. Preguntar al usuario cuántos números va a ingresar. Leer los n números. Imprimir el mayor y el menor de los n números ingresados. Subsidio familiar El gobierno ha implementado como parte de su programa social, un subsidio familiar bajo la siguiente reglamentación: • Las familias que tienen hasta 2 hijos, reciben $70, las que tienen entre 3 y 5 reciben $90 y las que tienen 6 o más reciben $120 mensual. • Por cada hijo en edad escolar reciben $10 adicionales. Se considera la edad escolar entre 6 y 18 años. • Si la madre de familia fuera viuda, la familia recibe $20 adicionales. Determinar el monto mensual que recibirá una familia de acuerdo a su realidad familiar. Validación: haga una siguiente versión de su programa en donde se indique cuando el usuario ingresa un valor incoherente; si se ingresa un valor incoherente, el programa termina en ese momento. * Factura Desarrolle un algoritmo que realice la facturación de productos. Considerando que se realiza la compra de N productos, que cada producto tiene un precio de venta X, y que hay algunos productos que se les impone el 14% del IVA. El programa deberá tener las siguientes opciones de menú: 1. Registro de items: ingreso de los precios de los N productos indicando si se les aplica o no el IVA. 2. Facturación: muestra el valor total a pagar y el descuento realizado. 3. Salir Para calcular el descuento: si el valor total es mayor a 100 dólares se realizará un descuento del 10% sobre el monto total. Si el valor total es mayor a 200 dolares se realizará un descuento del 5% sobre el monto total. 57 Angel Vázquez-Patiño Universidad de Cuenca Repetición de series 1. Imprimir 5 veces la serie de números del 1 al 6. 2. Pedir el número de veces que el usuario quiere repetir la serie de números del 1 al 6. Repetir las n veces la serie. 3. Pedir el número de veces que el usuario quiere repetir una serie. Pedir el límite inferior (m) y superior (w) de la serie. Repetir las n veces indicadas la serie de números desde m a w. Encuesta a familias Realice un programa que a través de la computadora se desea hacer la siguiente encuesta: • Tienen televisión o no tienen. Contar los que tienen y los que no tienen. • Es en color o no es en color. Contarlos. • Piensan compararlos o no. Contarlos. • Hallar el porcentaje de cada uno. Conteo de votos Leer 550.000 votos otorgados a 3 candidatos ( e imprimir el número del candidato y su cantidad de votos. ) a alcalde de Cuenca * Contador de mayores de edad Elabore un algoritmo que solicite la edad de n personas, y que muestre cuántos son mayores de edad y cuántos son menores de edad. Mayores de edad son las personas de 18 años o más. Factorial de un número El factorial de un número se calcula de la siguiente manera: … 58 Angel Vázquez-Patiño Universidad de Cuenca Por ejemplo, el factorial de 5 es Elabore un algoritmo que calcule el factorial de un número entero positivo. Combinatoria El número de combinaciones que podemos formar tomando m elementos de un conjunto con n elementos es: (9) Implemente un algoritmo que pida el valor de n y m y calcule el valor de la combinatoria. Hay que tomar en cuenta que el valor de n ha de ser mayor o igual que m (validar). Puede comprobar la validez de su programa introduciendo los valores n=15, m=10; el resultado es 3003. Simple random walks Random walks (https://goo.gl/k4SwIu) es una formalización matemática de la trayectoria que resulta de hacer sucesivos pasos aleatorios. Por ejemplo, la ruta trazada por una molécula mientras viaja por un líquido o un gas y el camino que sigue un animal en su búsqueda de comida. Imagine un caminante aleatorio con eventos {0, 1} (en un tiempo t cualquiera: 0, no camina; 1, camina un paso) y probabilidad P(0) = 0,5 y P(1) = 0,5. Realice un algoritmo que imprima la trayectoria del caminante aleatorio en los tiempos [1, 20] como se muestra en el vídeo https://youtu.be/S_YUVIUIW60. Luego de realizado el algoritmo, revise el ejercicio llamado Random walks. * Dibujo de cuadrado Desarrolle un algoritmo que pida al usuario el tamaño del lado de un cuadrado y que muestre un cuadrado hueco de ese tamaño, compuesto de asteriscos y espacios en blanco. Su algoritmo debe funcionar con cuadrados que tengan lados de todas las longitudes entre 1 y 20 (validar). Por ejemplo, si su programa lee un tamaño de 5, debe imprimir ***** * * * * * * ***** 59 Angel Vázquez-Patiño Universidad de Cuenca * Dibujo de cuadrado y rombo Dado un valor N, muestre un cuadrado de lado 2N con un rombo en el centro. Por ejemplo Ingrese N: 5 ********** **** **** *** *** ** ** * * * * ** ** *** *** **** **** ********** Ingrese N: 6 ************ ***** ***** **** **** *** *** ** ** * * * * ** ** *** *** **** **** ***** ***** ************ Ingrese N: 3 ****** ** ** * * * * ** ** ****** Triángulo de Pascal El triángulo de Pascal es una representación de los coeficientes binomiales ordenados en forma triangular. Su construcción está relacionada con los coeficientes binomiales según la regla de Pascal. Si entonces para todo entero positivo n y todo entero positivo k entre 0 y n (la fórmula para calcular combinaciones está en la ecuación 9). Su construcción es de la siguiente manera: 1. se comienza en el número 1 centrado en la parte superior 2. se escriben una serie de números en las casillas situadas en sentido diagonal descendente, a ambos lados, del siguiente modo: se suman las parejas de cifras situadas horizontalmente (1 + 1), y el resultado (2) se escribe debajo de dichas casillas; el proceso continúa escribiendo en las casillas inferiores la suma de las dos cifras situadas sobre ellas (1 + 2 = 3), etc. 60 Angel Vázquez-Patiño Universidad de Cuenca Una animación del proceso se puede ver en https://goo.gl/J0hSES. La figura 4 muestra un ejemplo de la construcción del triángulo de Pascal para n=7. Figura 4: Triángulo de pascal para n=7. Desarrolle un algoritmo que permita visualizar un triángulo de Pascal dado el valor de n. Represente el algoritmo con un diagrama de flujo y pseudocódigo; además, realice las pruebas de escritorio necesarias para verificar el correcto funcionamiento del algoritmo. Finalmente, implemente el algoritmo. Serie del binomio Siempre que -1<x<1, el miembro de la izquierda de la ecuación 10 se puede aproximar tanto como se quiera tomando un número suficientemente grande de términos (n) en el desarrollo de la derecha: (10) Desarrolle un algoritmo para hacer la aproximación de (1+x)n hasta que el error sea despreciable (use su propio criterio). Valide el número x. Para más información vea el Álgebra elemental moderna (González and Mancill, 2009, chap. 15). Interés fijo anual Un cliente de un banco deposita equis cantidad de dólares cada mes en una cuenta de ahorros. La cuenta percibe un interés fijo durante un año de 10% anual. Realice un algoritmo para determinar el total de la inversión final de cada año en los próximos N años. Vea periodos de interés compuesto: http://goo.gl/VByZsr 61 Angel Vázquez-Patiño Universidad de Cuenca Promedio de edad en escuela Los directivos de equis escuela requieren determinar cuál es la edad promedio de cada uno de los M salones y cuál es la edad promedio de toda la escuela. Realice un algoritmo para determinar estos promedios y represente la solución mediante el diagrama de flujo, el pseudocódigo y el diagrama N/S. Trabajo conjunto Considere primero los siguientes problemas de razonamiento: 1. Si una persona termina una obra en 3 horas y una segunda persona termina la obra en 6 horas ¿cuánto se demoran en terminar la misma obra si trabajan juntas? 2. Si una persona termina una obra en 3 horas, una segunda persona termina la obra en 6 horas y una tercera persona termina la obra en 12 horas ¿cuánto se demoran en terminar la misma obra si trabajan juntas? Luego de resolver los ejercicios anteriores, realice un algoritmo que pida el tiempo (individual) que se demoran en concluir una misma obra n personas diferentes y calcule el tiempo que se demoran en terminar la misma obra si trabajan juntas. Frases • Introducir una frase por teclado. Imprimirla cinco veces en filas consecutivas, pero cada impresión ir desplazada cuatro columnas hacia la derecha • Introducir una frase por teclado. Imprimirla en el centro de la pantalla. Tirada de dados • Simular cien tiradas de dos dados y contar las veces que entre los dos suman 10. • Simular cien tiradas de tres dados y ver cuál es la suma que mayor frecuencia tiene. Series y sumatorias • Sume los primeros 100 números de 62 . Angel Vázquez-Patiño • Universidad de Cuenca * Ingresados un valor de n y m, donde n es mayor que m (validar), calcular la sumatoria de los n primeros términos. Debe elaborar el algoritmo para realizar la potencia y el factorial. Triángulo de números Dado un número n, visualizar un triángulo de la siguiente manera: Con 1 2 4 7 3 5 8 6 9 3 5 8 12 6 9 13 10 Con 1 2 4 7 11 10 Número de días entre dos fechas Elabore un algoritmo que pida dos fechas (día, mes y año) y muestre el número de días que hay de diferencia entre estas dos fechas. Considerar los meses que tienen 30 días, los meses que tienen 31 días y suponga que febrero tiene 28 días siempre. 63 Angel Vázquez-Patiño Universidad de Cuenca Estructura de repetición DO-WHILE Miscelánea 1. El usuario ingresa una lista de valores numéricos. El ingreso de los números termina cuando el usuario ingrese el valor -9999. Determinar el rango (mínimo y máximo) y el promedio de los valores ingresados. No se debe considerar para los cálculos el número -9999. 2. Elabore un algoritmo que pida números hasta que se introduzca un número negativo. De todos los números introducidos calcular la suma de todos los números pares, la suma de todos los números impares y el promedio de todos los números introducidos. 3. El número ingresado puede tener cualquier número de dígitos y debe ser positivo (validar). 4. El promedio ponderado se calcula en dos pasos: a) Obteniendo la suma de multiplicar las calificaciones alcanzadas en las asignaturas cursadas por su número de créditos correspondientes (ver ejemplo). b) Dividir la suma anterior entre la suma de los créditos. El anterior es un ejemplo con 3 asignaturas, recuerde que los estudiantes pueden llevar un número variable de asignaturas. Se leerán el código de la asignatura, la calificación y los créditos. Se terminará de leer cuando el código sea “9999”. 64 Angel Vázquez-Patiño Universidad de Cuenca La suma de los créditos debe ser mayor o igual que 25 y menor o igual que 50. Si al finalizar la lectura la suma de los créditos no se cumple la condición se deberá emitir un mensaje de error y deberá comenzar nuevamente. Desarrolle un algoritmo que calcule e imprima: • • El número de asignaturas cursó el estudiante La suma de los créditos y el promedio ponderado 5. Indique cuál es el resultado de la ejecución del siguiente algoritmo: Algoritmo misterioso fila = 5; Mientras fila >= 1 Hacer columna = 1; Mientras columna <= 10 Hacer Si (fila Mod 2) = 0 Entonces Escribir Sin Saltar “<”; Sino Escribir Sin Saltar “>”; FinSi columna = columna + 1; FinMientras fila = fila – 1; Escribir “”; FinMientras FinAlgoritmo ¿Cuál sería el resultado de la ejecución si la primera instrucción (fila = 5) es cambiada por fila = 4? 6. Pregunta Números de n a m Para los siguientes ejercicios NO utilice FOR, utilice WHILE. 1. Hacer un programa que imprima los números enteros del 1 al 5. 2. Hacer un programa que imprima los números enteros desde 1 a n. 65 Angel Vázquez-Patiño Universidad de Cuenca 3. Hacer un programa que imprima los números enteros desde n a 1. 4. Hacer un programa que imprima los números enteros de n a m (n<m). 5. Hacer un programa que imprima los números enteros de m a n (n<m). Números impares del 1 al 100 Hacer un pseudocódigo que imprima los números impares entre 0 y 100. Utilice WHILE para realizar las iteraciones. Acumulador del 1 al 100 Hacer un programa que imprima la suma de los 100 primeros números. Utilice WHILE para hacer las iteraciones. Contador de números pares Hacer un programa que imprima en pantalla los números pares del 1 hasta el 10 y que imprima en pantalla la cantidad de números pares. Utilice WHILE para hacer las iteraciones. Codificación de caracteres Desarrolle un algoritmo que permita leer caracteres hasta que el usuario ingrese el carácter X/x (mayúscula o minúscula). Cada vez que se ingrese un carácter, transformar su código ASCII a binario y mostrar los 1s con - (guiones) y los 0s con . (puntos). A continuación se muestra un ejemplo h 104: --.-... O 79: -..---l 108: --.--.. A 65: -.....x Ingreso de binarios Hacer un algoritmo que sólo nos permita introducir 0 o 1. Si se ingresa un número diferente, el programa termina. 66 Angel Vázquez-Patiño Universidad de Cuenca Ingreso de números mientras sean positivos Realizar un programa que lea números. Mientras el número ingresado sea positivo, el programa sigue leyendo números desde el teclado. El momento que ingresa un número igual o menor a cero, el programa termina. Conteo de frases Introducir tantas frases como queramos y contarlas. Siempre se pregunta al usuario si desea ingresar más frases; sí=1, no=0. Ingreso de 5 números Escriba un programa que lea exactamente cinco números. Utilice WHILE. Longitud y área de un círculo: validación Dado el radio (r) de un círculo, calcular la longitud (l) y el área (a). Dado que el valor del radio no debe ser negativo (sí puede ser igual a cero), valide el ingreso de dicho valor. Cantidad de números ingresados Permitir al usuario ingresar números mayores a cero hasta que el usuario ingrese un número negativo o el cero. Luego, indicar al usuario cuántos números ingresó. Cuadrado de números menores a n Pedir al usuario un número n y presentar los números al cuadrado desde 1 hasta n. Utilizar la estructura de repetición while. Contador de pares e impares Realice un programa que luego de leer 10 números, cuente el número de números pares e impares. Haga una versión utilizando while y switch; y otra versión utilizando while e if. Contador de familias según número de miembros Realice un programa que lea el número de miembros de familias. El programa deja de leer números cuando se ingresa un número negativo o menor a cero. Antes de terminar, el programa presenta la cantidad de familias que tiene un miembro, dos miembros, tres miembros, cuatro miembros, cinco miembros y las familias que tienen más de seis miembros. 67 Angel Vázquez-Patiño Universidad de Cuenca * Números con vocales Imprima los números del 00000 al 99999 con la particularidad de que cada vez que debiera imprimirse el 1 (en cualquiera de los dígitos) se sustituya con A, el 3 con E, el 5 con I, el 7 con O y el 9 con U, i.e., 00000, 0000A, 00002, … , UUUUO, UUUU8, UUUUU. No utilice más de una estructura de control FOR, ni más de dos estructuras de control WHILE, ni más de dos estructuras de control REPEAT. * Operador potencia Suponga que no existe el operador potencia. Escriba un programa que lea dos valores enteros, llamados base y exponente y devuelva base elevado a la potencia exponente. Factores de un número entero * Factorial que lea un número n y calcule su factorial ( ). No se debe usar ninguna función predeterminada de ningún lenguaje de programación (e.g., factorial de MATLAB). El programa debe validar que sólo se ingresen números enteros positivos y el cero; en caso que no ingrese un número entero positivo o el cero, avisa del error y vuelve a pedir el número. Escriba un programa * Números perfectos Un número perfecto es un entero positivo, que es igual a la suma de todos los enteros positivos (excluido él mismo) que son divisores del número. El primer número perfecto es 6, ya que los divisores de 6 son 1, 2, 3 y 1 + 2 + 3 = 6. Elabore un algoritmo que lea un número entero positivo n (validar que se positivo; suponga que el número ingresado siempre es entero) y muestre en pantalla si ese número es o no perfecto. Sólo si es perfecto, deberá sacar la suma del factorial de cada uno de los números que son divisores (excluido él mismo). Números primos • Un número primo es un entero cuyos divisores enteros son sólo 1 y el mismo número. Por ejemplo, el número 7: es divisible sólo para 1 y para 7. Elabore un algoritmo que lea un número entero positivo n (validar que se positivo; suponga que el número ingresado siempre es entero) y muestre en pantalla si 68 Angel Vázquez-Patiño Universidad de Cuenca ese número es o no primo. Sólo si es primo, deberá sacar la suma del factorial de cada uno de los números entre 1 y n (sin incluir 1 ni n). Por ejemplo: si se ingresa el número cuatro, el algoritmo debe indicar que no es primo y además presentar la suma de (8). • Comprobar si un numero mayor o igual (validar) que la unidad es primo. El programa sigue pidiendo números mientras no sean primos. Número de dígitos de un número entero El usuario ingresa un valor entero no mayor a 10 millones. Separar el número en sus dígitos y mostrarlos según el siguiente ejemplo para el número 5432: Número: 5432 Número separado: 2 unidades 3 decenas 4 centenas 5 miles Valor relativo de un número El usuario ingresa un entero positivo. Descomponer dicho entero en potencias de 10 y mostrarlo según el siguiente ejemplo (tenga en cuenta que el entero ingresado puede tener un número arbitrario de dígitos): Número: 5432 5 4 3 2 × × × × 10^3 10^2 10^1 10^0 = 5000 = 400 = 30 = 2 ---5432 Cálculo de comisiones Ordenamientos • Proponga un algoritmo para ordenar ascendente y descendentemente dos números. • Proponga un algoritmo para ordenar ascendente y descendentemente tres números. 69 Angel Vázquez-Patiño Universidad de Cuenca Juego: adivina el número Desarrolle un juego simple que pida al usuario que adivine un número en 10 intentos. El juego termina cuando se haya adivinado el número o cuando se hayan agotado todos los intentos. Tenga en cuenta la función azar(n) de PseInt1 que genera un número entero al azar en el rango [0, n−1]. Cara o cruz Simular el lanzamiento de una moneda al aire e imprimir si ha salido cara o cruz. El momento que adivina, termina el algoritmo. Análisis de frecuencias en lanzamientos de un dado Utilice una función para generar números aleatorios enteros en el rango [1, 6] para simular el resultado del lanzamiento de un dado (e.g., en PseInt, Azar()). Realice “lanzamientos” hasta que tres veces seguidas salga el mismo número. Una vez que se terminen los lanzamientos, muestre una tabla de frecuencias que indique la cantidad de veces que salieron los números 1, 2, … y 6. Finalmente, haga un gráfico de barras horizontales con esos datos. Por ejemplo, suponga que al azar salieron los siguientes números: 2, 4, 1, 6, 6, 2, 1, 5, 4, 1, 6, 5, 4, 4, 2, 5, 1, 3, 3, 3. El resultado en pantalla debería ser: Tabla de frecuencias 1 4 2 3 3 3 4 4 5 3 6 3 Gráfico de barras 1 **** 2 *** 3 *** 4 **** 5 *** 6 *** Series y sumatorias 1. Hallar la sumatoria de la serie 1 http://pseint.sourceforge.net 70 Angel Vázquez-Patiño Universidad de Cuenca hasta que la sumatoria sea mayor a un número dado. 1. Indicar cuántos términos hay que sumar (cuál es el valor de n) de la siguiente serie para que la suma sea mayor o igual a 1000. 1. Indicar cuál es el valor de la siguiente sumatoria, sumando los términos hasta que el último término sumado sea menor a 0.0001. Número de cifras de un número Diseñe un programa que lea un número entero (positivo o negativo) y determine si tiene 1, 2, 3, 4 o más de 4 cifras imprimiendo lo que corresponda. Reloj de 24 horas Una empresa necesita visualizar un reloj de 24 horas (00:00:00 - 23:59:59). Realice un programa que visualice el conteo del tiempo con el formato hh:mm:ss segundo a segundo. Haga versiones con todas las estructuras de repetición que conozca. Luego de desarrollar este algoritmo revise la Miscelánea de la subsección Estructura de repetición FOR (página 76) y desarrolle un ejercicio parecido con la condición de que hay un límite en el tiempo que se muestra. * Progresión geométrica Una progresión geométrica es una secuencia en la que el elemento se obtiene multiplicando el elemento anterior por una constante denominada razón. Así, es una progresión geométrica con razón igual a 3. Escriba un programa que lea un número inicial (5 en el ejemplo dado) y la razón (3 en el ejemplo dado) y genere la progresión geométrica. El programa terminará después de presentar un término mayor que un cierto límite dado (por ejemplo 133 para la progresión que se presenta aquí). 71 Angel Vázquez-Patiño Universidad de Cuenca * Números de la serie Fibonacci • La sucesión de Fibonacci es la siguiente: Es decir , , y cada uno de los siguientes términos se calculan sumando los dos anteriores: . Escriba un programa que genere dicha sucesión, presentando en pantalla cada uno de los términos. El programa terminará después de presentar un término mayor que un cierto límite dado (por ejemplo 33 para la serie que se presenta aquí). • Elabore un algoritmo que muestre los términos de la serie de Fibonacci que sean menores a 100000: * Aproximación de π Dado que es la suma de la serie , (11) se puede calcular una aproximación de sumando un número dado de términos, para un número suficientemente grande de . Nota: para realizar la potencia puede utilizar el acento circunflejo ^. Calcule una aproximación de con un error aproximado (i.e., igual o menor) de 0.001. El error aproximado está dado por (12) donde es la aproximación actual y es la aproximación anterior. 72 Aproximación del logaritmo natural El logaritmo natural de se puede aproximar con la serie (13) sumando un número suficientemente grande de términos. Calcule una aproximación del logaritmo natural de con un error aproximado (i.e., igual o menor) de 0.0001. Para saber qué es el error aproximado vea la ecuación 12. * Aproximación del arco seno Para n→∞ (en la práctica un número suficientemente alto) el arco seno de x se puede calcular con la siguiente serie de Taylor: Realizar lo siguiente: 1. Escriba el pseudocódigo de un algoritmo para encontrar el valor de la función arco seno de x dado el valor de n y x. Debe utilizar la estructura de repetición Mientras o Repetir Hasta. 2. Validar que el usuario ingrese valores de x hasta que cumpla la condición. 3. No debe utilizar ninguna función ni ^ o ! para calcular la potencia o el factorial. Esto significa que debe desarrollar los algoritmos para realizar esos cálculos. 4. Para el cálculo de la potencia utilice la estructura de repetición Para. 5. Para el cálculo del factorial debe utilizar la estructura de repetición Mientras. 6. La serie de Taylor nos da el valor del arco seno de x en radianes, el algoritmo que usted proponga debe mostrar el valor en radianes y en grados sexagesimales. Tenga en cuenta que 1 radián es igual a 57.2958 grados sexagesimales. * Dibujo de triángulos • Escriba un programa que lea dos enteros: el primero debe ser impar (validar) y el segundo puede ser par o impar. La salida debe ser un triángulo dibujado con el segundo número dado y de anchura máxima dada por primer entero leído. Se debe presentar la multiplicación de los números Angel Vázquez-Patiño Universidad de Cuenca de cada fila del triángulo. Dos ejemplos: si el primer entero es 7 y 9 y el segundo entero es 1 y 2, los triángulos deben ser: Primer número : 7 Segundo número: 1 1 111 11111 1111111 • Primer número: 9 Segundo número: 2 1 1 1 1 2 222 22222 2222222 222222222 2 8 32 128 512 Escriba un programa que lea dos enteros (mayores a cero, validar): el primero de ellos necesariamente debe ser impar (validar) mientras que el segundo puede ser par o impar. La salida debe ser un triángulo dibujado con el segundo número dado y de anchura máxima dada por primer entero leído. Se debe presentar la suma de los números de cada fila del triángulo. Dos ejemplos: si el primer entero es 7 y 9 y el segundo entero es 1 y 2, los triángulos deben ser: Primer número : 7 Segundo número: 1 1 111 11111 1111111 Primer número: 9 Segundo número: 2 1 3 5 7 2 222 22222 2222222 222222222 2 6 10 14 18 Menú • Introducir dos números por teclado y mediante un menú, calcule su suma, su resta, su multiplicación o su división; se sale del programa luego de seleccionar la opción salir del menú. • Hacer un programa que permita introducir un número por teclado y sobre él se realicen las siguientes operaciones: comprobar si es primo, hallar su factorial o imprimir su tabla de multiplicar de acuerdo a lo seleccionado en un menú; se sale del programa luego de seleccionar la opción salir del menú. 74 Angel Vázquez-Patiño Universidad de Cuenca Función exponencial Realice un algoritmo para obtener una función exponencial, la cual está dada por: No se debe usar la función potencia ni ninguna función que calcule el factorial (debe hacer el algoritmo para calcular la potencia y para calcular el factorial). Número en cualquier base Reciba dos números enteros, el primero representa un número y el segundo representa la base de numeración. Proponga un algoritmo para retornar el número expresado en dicha base de numeración. Menú: revisión de número Desarrolle un algoritmo (pseudocódigo y diagrama de flujo) que presente un menú con las siguientes opciones: 1. Ingresar un Número: pide un número positivo mayor a cero; si no cumple esta condición, debe mostrar el mensaje “¡El número debe ser positivo mayor a cero!” y vuelve a pedir un número 2. Analizar el Número: muestra el número transformado en binario, indica si es par o impar, si es primo o no es primo 3. Terminar el Algoritmo Tabla de multiplicar de un número entre 0 y 10 Dos versiones: while y for. 75 Angel Vázquez-Patiño Universidad de Cuenca Estructura de repetición FOR Miscelánea 1. * Realice la prueba de escritorio del siguiente pseudocódigo e indique cuál es la salida en pantalla del mismo. Algoritmo misterioso Definir c1, c2 Como Entero; Para i <- 8 Hasta 0 Con Paso -2 Hacer c1 <- -1; Repetir Escribir Sin Saltar '*'; c1 <- c1 + 1; Hasta Que c1 >= i c1 <- 8 - i; c2 <- 0; Mientras c2 < c1 Hacer Escribir Sin Saltar '0'; c2 <- c2 + 1; Fin Mientras Escribir ' '; Fin Para FinAlgoritmo 2. Desarrolle un algoritmo que lea N valores de números positivos y que imprima la suma de aquellos que sean impares y menores a 200. 3. Desarrolle un algoritmo que lea una serie de valores que terminará cuando se lea el valor cero y que imprima la suma de aquellos que son negativos. Siempre el usuario ingresa al menos un valor diferente a cero. 4. Desarrolle un algoritmo que pregunte una contraseña, el usuario sólo tiene derecho a 3 intentos. Cuando el usuario escriba la contraseña correcta se imprimirá "¡Enhorabuena!" y terminará el algoritmo. En caso de no escribir la contraseña correcta se imprimirá “Lo siento, contraseña equivocada”. Si se cumplen los 3 intentos y el usuario no escribe la contraseña correcta se imprimirá “Oportunidades Agotadas” y finaliza la ejecución del algoritmo. 5. El departamento de control de tránsito desea saber, de los autos que entran a control, cuántos tienen sello municipal de cada color (amarillo, rosado, rojo, verde y azul). Conociendo el último dígito de la placa de cada 76 Angel Vázquez-Patiño Universidad de Cuenca automóvil se puede determinar el color de la calcomanía utilizando la siguiente tabla: Dígitos Color de la calcomanía 1o2 Amarilla 3o4 Rosa 5o6 Roja 7o8 Verde 9o0 Azul Desarrolle un algoritmo que permita ingresar las placas de automóviles. Se termina de registrar autos cuando se ingresa una placa xxx. Todos los días se presenta al menos un automóvil a revisión. 6. N miembros de un club contra la obesidad desean saber cuánto han bajado o subido de peso desde la última vez que se reunieron. Para esto es necesario que cada uno se pese en 10 básculas distintas y después obtener el promedio de su peso. Si existe diferencia positiva entre el peso promedio y el peso de la última reunión significa que subieron. Si la diferencia es negativa, significa que bajaron. Desarrolle un algoritmo que informe a cada persona si subió o bajó de peso y qué cantidad de Kilos. 7. Una persona recopila ciertos datos aplicando encuestas para el último Censo Nacional de Población y Vivienda. Desea obtener de todas las personas que alcance a encuestar en un día, qué porcentaje tiene estudios de primaria, secundaria, carrera técnica, profesional y posgrado. Desarrolle el algoritmo que le permita calcular esa información. 8. En una tienda de descuento se efectúa una promoción en la cual se hace un descuento sobre el valor de cada producto comprado según el color de la bolita que el cliente saque al pagar en caja. Si la bolita es de color blanco no se le hará descuento alguno, si es verde se le hará un 10% de descuento, si es amarilla un 25%, si es azul un 50% y si es roja un 100%. Determinar la cantidad final que el cliente deberá pagar por su compra. Se sabe que sólo hay bolitas de los colores mencionados. 9. Se leen los nombres, edad y sueldo de 5000 personas y se desea saber el monto total que la empresa pagará a las personas que son mayores de 35 años y que perciben un sueldo mensual mayor o igual a $500. 77 Angel Vázquez-Patiño Universidad de Cuenca 10. Una cadena de 754 tiendas reporta sus ventas brutas y sus costos de venta mensuales. Desarrolle un algoritmo que lea los costos y ventas, que calcule e imprima la utilidad neta de cada tienda, y que informe cuántas tiendas obtuvieron utilidad neta superior a los $50000 mensuales. 11. Una estación climática proporciona un par de temperaturas diarias (Max y Min). El par para terminar la lectura será cuando ambas temperaturas sean igual a 0. Una lectura de (9 y 9) es un error y no forma parte de los días de lectura. Calcular e imprimir el promedio de las temperaturas que son válidas. Imprimir cuántos días se proporcionaron datos y el número de veces que hubo error (lectura 9 y 9). 12. Mostrar la tabla de cuadrados y cubos de los números desde el 1 hasta el valor ingresado por el usuario. El siguiente es un ejemplo donde el usuario ingresó el número 5: 1 1 1 2 4 8 3 9 27 4 16 64 5 25 125 13. * Desarrolle un algoritmo que muestre el tiempo (en formato 24h00) segundo a segundo desde 00:00:00 hasta una hora (con sus minutos y segundos) dada por el usuario. Por ejemplo 00:00:00, 00:00:01, 00:00:02,…, 20:20:17. Antes de realizar este ejercicio desarrolle el ejercicio Reloj de 24 horas de la página 71. 14. Desarrolle un algoritmo que reciba un número entero positivo (validar) y que retorne un nuevo número con sus cifras invertidas. 15. Desarrollar un algoritmo que realice lo siguiente: a) Pida números comprendidos entre 1 y 16, inclusivo. Validar. b) Si la suma de los N primeros números ingresados es múltiplo del cuatro, se mostrará un rectángulo de lados 4 y N de la siguiente manera (en el ejemplo la suma fue múltiplo de cuatro con N=3) xxxx 78 Angel Vázquez-Patiño Universidad de Cuenca x x xxxx c) Con el primer número impar que se ingrese se muestra una “cruz” de lado igual al número impar. Por ejemplo con el impar 5 x x xxxxx x x d) El algoritmo termina cuando se haya dado lo del literal b y c. 16. Pregunta Signo zodiacal y número de suerte Desarrollar un algoritmo que pida el nombre del usuario, el día, mes y año actual y el día, mes y año de nacimiento del usuario. En base a esos datos el algoritmo indica el signo zodiacal, la edad en horas y segundos y número de suerte del usuario. El número de suerte se calcula sumando los dígitos de su año de nacimiento, si el número es mayor a nueve se resta nueve de manera que el valor esté entre 1 y 91. El signo zodiacal se calcula en base a la siguiente información: • • • • • • • • • • • • 21/marzo - 20/abril 21/abril - 20/mayo 21/mayo - 20 junio 21/junio - 20/julio 21/julio - 20/agosto 21/agosto - 20/septiembre 21/septiembre - 20/octubre 21/octubre - 20/noviembre 21/noviembre - 20/diciembre 21/diciembre - 20/enero 21/enero - 20/febrero 21/febrero - 20/marzo Aries Tauro Géminis Cáncer Leo Virgo Libra Escorpión Sagitario Capricornio Acuario Piscis Series y sumatorias • 1 Genere la serie 1, 5, 3, 7, 5, 9, 7, …, 23. Si necesita mayor explicación resuelva primero el ejercicio * Prueba del nueve de la división (página 84). 79 Angel Vázquez-Patiño Universidad de Cuenca • Genere la serie 5,10,15,20,25,30,35 … n. • Si n=7 genere 7, 6, 5, 4, 3, 2 y 1. • * Desarrolle un algoritmo para resolver el siguiente problema; representar el algoritmo con un diagrama de flujo y un pseudocódigo, y realizar la prueba de escritorio. Encontrar el n-ésimo término de la serie 2, 3, 4, 7, 8, 15, 24, 60, … Dado el primer término n0 = 2, el término ni es la suma de los divisores del término anterior (ni-1) Ejemplos N-ésimo término a mostrar: 5 Término: 8 N-ésimo término a mostrar: 7 Término: 24 • Pregunta Menú: media, mayor y menor Implemente un algoritmo que muestre el siguiente menú: Menú 1. 2. 3. 4. 5. Ingresar número Mostrar media Mostrar menor Mostrar mayor Salir Opción [1-5]: El usuario ingresa un número a la vez utilizando la opción 1. En cualquier momento, después de ingresar al menos un número (validar), se puede mostrar la media, el mayor o el menor de los números ingresados (con al menos un número ingresado ya se puede usar las opciones 2-4). Una vez que escoge una de las opciones 1-4 y realiza la acción pertinente, debe siempre volver al menú. La ejecución se termina si y sólo si se escoge la opción 5. 80 Angel Vázquez-Patiño Universidad de Cuenca Manejo contable Desarrolle un programa que permita manejar transacciones de una cuenta. El saldo inicial de la cuenta es $0. El programa debe tener el siguiente menú: 1. 2. 3. 4. Depósito Retiro Saldo Salir El programa debe solicitar al usuario que indique si desea realizar un depósito o un retiro. Si el usuario elige hacer un retiro (opción 2 del menú), se solicita un valor y debe verificarse que haya saldo suficiente para retirar. De no ser así se envía un mensaje al usuario notificando esa situación. Si hay saldo suficiente, se resta el valor ingresado al saldo. Si el usuario elige hacer un depósito (opción 1 del menú) se solicita un valor y ese valor se suma al saldo. Al final de cada transacción se vuelve al menú. La opción 3 del menú muestra el saldo que se tiene en ese momento. La opción 4 termina la ejecución del programa. * Factorización de trinomio Realizar un algoritmo para factorizar un trinomio de la forma x 2 + bx + c sabiendo que los factores serán (x+m)(x+n), en donde m y n son dos números enteros tales que (m×n) = c y (m+n) = b. Los valores b y c son los coeficientes del trinomio y vienen dados por el usuario. Los valores b y c, para este ejercicio, serán siempre positivos (validar). El algoritmo debe terminar inmediatamente después que encuentra una de las posibles soluciones. Además, se debe mostrar un mensaje si no es posible factorizar el trinomio. Ejemplo Ecuación: x2 + 7x + 12; b = 7, c = 12 Salida: Los factores del trinomio x2 + 7x + 12 son: (x + 3)(x + 4) Ecuación: x2 + 6x + 10; b = 6, c = 10 Salida: El trinomio x2 + 6x + 10 no se puede descomponer en factores. 81 Angel Vázquez-Patiño Universidad de Cuenca Cálculos con dígitos de un número Desarrolle un algoritmo que pida un número positivo de tres dígitos o más (se pide un solo valor); si no cumple esta condición, debe mostrar el mensaje “¡El número debe ser positivo de más de dos dígitos!” y volver a pedir un número. Luego, muestre la suma, producto, media, máximo y mínimo de los dígitos del número ingresado. Finalmente, muestre la suma, producto, media, máximo y mínimo de los dígitos del número ingresado elevados a un exponente igual a la cantidad de dígitos. A continuación se muestra un ejemplo de ejecución (así exactamente debe mostrar los resultados): Número a analizar: 27 ¡El número debe ser positivo de más de dos dígitos! Número a analizar: -188 ¡El número debe ser positivo de más de dos dígitos! Número a analizar: 15423 Suma: 1 + 5 + 4 + 2 + 3 = 15 Producto: 1 × 5 × 4 × 2 × 3 = 120 Media: (1 + 5 + 4 + 2 + 3) / 5 = 3 Máximo: max(1, 5, 4, 2, 3) = 5 Mínimo: min(1, 5, 4, 2, 3) = 1 ******************************************************* Suma: 1^5 + 5^5 + 4^5 + 2^5 + 3^5 = 4425 Producto: 1^5 × 5^5 × 4^5 × 2^5 × 3^5 = 24883200000 Media: (1^5 + 5^5 + 4^5 + 2^5 + 3^5) / 5 = 885 Máximo: max(1^5, 5^5, 4^5, 2^5, 3^5) = 3125 Mínimo: min(1^5, 5^5, 4^5, 2^5, 3^5) = 1 * Serie de Leibniz La serie de Leibniz o Gregory-Leibniz es una serie infinita cuya suma de términos converge a π/4: (14) Calcule una aproximación de con un error aproximado (i.e., igual o menor) de 0.0001. El error aproximado está dado por 82 Angel Vázquez-Patiño Universidad de Cuenca (15) donde es la aproximación sumando n términos y sumando n-1 términos. es la aproximación * Carrera de caballos Simular una carrera de caballos. Pueden participar 2, 3, 4 o 5 caballos (validar). En cada turno un caballo puede avanzar dos o tres metros pero también puede no avanzar o incluso, por algún motivo, puede retroceder un metro. El caballo ganador es aquel que primero llegue a la meta (o que la pase) ubicada a diez metros del punto de partida. Si por algún motivo el caballo, estando en el punto de partida, quiere retroceder un metro, se entiende que el caballo se queda en el punto de partida (i.e., no sigue retrocediendo más atrás del punto de partida). El vídeo Carrera de caballos1 (Vázquez-Patiño, 2016) muestra la simulación con cinco y dos caballos2. El siguiente resultado muestra un instante de la carrera de cinco caballos en donde el quinto caballo queda a cuatro metros del punto de partida luego de haber retrocedido un metro. ********************************************************** Turno: caballo 5 > Metros avanzados por el caballo 5: -1 ********************************************************** -----------------------Caballo 1 X ----------------------------------------------Caballo 2 X ----------------------------------------------Caballo 3 X X X X X X ----------------------------------------------Caballo 4 X X X X X ----------------------------------------------Caballo 5 X X X X 1 2 https://youtu.be/zeB_zArHc2Y En el vídeo se muestra un algoritmo que no toma en cuenta la consideración de que un caballo no puede ir más atrás del punto de partida. 83 Angel Vázquez-Patiño Universidad de Cuenca -----------------------********************************************************* Número de Armstrong Elabore un programa que indique si un número es un número de Armstrong. Un número es de Armstrong si la suma de los dígitos que lo componen elevados, cada uno, al número de dígitos del número es igual al número analizado. Por ejemplo, 153 = 13 + 53 + 33 = 1 + 125 + 27 = 153; 9474 = 9 4 + 44 + 74 + 44. El número ingresado debe ser positivo (validar). * Prueba del nueve de la división Realizar un algoritmo para realizar la prueba del 9 de la división entre dos números. Solicitar al usuario que ingrese dos números enteros, el dividendo y el divisor, tal que dividendo > divisor. Realizar la división entre los dos números y la prueba del 9 para comprobar si el resultado de la división es correcto. A continuación se da un ejemplo de cómo se realiza la prueba del nueve. Si se cumple que D = d c + r, la división está realizada correctamente. * Encontrando triángulos rectángulos Mostrar todos los triángulos rectángulos cuyas longitudes de sus lados no sobrepasan un valor dado y son valores enteros; además, indicar la cantidad de dichos triángulos. Por ejemplo, si el usuario ingresa 10, el algoritmo deberá mostrar todas las tripletas para las cuales las longitudes del cateto 1, cateto 2 e hipotenusa son números enteros y ninguno de ellos es mayor que 10. A continuación se muestra un ejemplo del resultado de la ejecución del algoritmo. Valor máximo:> 20 1) Hipotenusa: 5 2) Hipotenusa: 5 Cateto 1: 3 Cateto 1: 4 Cateto 2: 4 Cateto 2: 3 84 Angel Vázquez-Patiño 3) 4) 5) 6) 7) 8) 9) 10) 11) 12) Hipotenusa: Hipotenusa: Hipotenusa: Hipotenusa: Hipotenusa: Hipotenusa: Hipotenusa: Hipotenusa: Hipotenusa: Hipotenusa: 10 10 13 13 15 15 17 17 20 20 Cateto Cateto Cateto Cateto Cateto Cateto Cateto Cateto Cateto Cateto Universidad de Cuenca 1: 1: 1: 1: 1: 1: 1: 1: 1: 1: 6 8 5 12 9 12 8 15 12 16 Cateto Cateto Cateto Cateto Cateto Cateto Cateto Cateto Cateto Cateto 2: 2: 2: 2: 2: 2: 2: 2: 2: 2: 8 6 12 5 12 9 15 8 16 12 Para el valor máximo de 20 existen 12 tripletas que representan triángulos rectángulos. La diagonal de Cantor Ejercicio propuesto por René Estrella. Georg Cantor fue un matemático ruso que es considerado como uno de los padres de la teoría de conjuntos. Entre otras muchas contribuciones a las matemáticas, Cantor usó un argumento conocido como el argumento de la diagonal para demostrar que el conjunto de números reales es no-numerable. En este ejercicio vamos a considerar una simplificación del argumento de Cantor para proponer un algoritmo que ejecute la siguiente tarea. El usuario ingresa una lista de n números enteros. Cada uno de estos números debe tener un número de dígitos igual a n. Una forma de ver la lista de números ingresados es como una matriz de n filas (n = número de valores ingresados) por n columnas (n = número de dígitos de los números). Evidentemente, cada celda de esta matriz contendrá un dígito decimal (0 - 9). En el ejemplo que se muestra a continuación n = 4, lo que significa que el usuario ingresó 4 números enteros de 4 dígitos cada uno. 1234 4815 1623 4211 El resultado que debe mostrar el algoritmo es un número entero de n dígitos, para el cual el primer dígito es distinto del primer dígito del primero número, el segundo dígito es distinto del segundo dígito del segundo número, el tercer dígito es diferente al tercer dígito del tercer número y así sucesivamente. Como una 85 Angel Vázquez-Patiño Universidad de Cuenca ilustración, para el ejemplo mostrado arriba, el resultado de una ejecución válida del algoritmo sería el número entero 2932. La única información que se le deberá solicitar al usuario será la lista de números enteros a considerar. En particular, NO se deberá solicitar cuántos números se van a ingresar. Random walks Antes de desarrollar este algoritmo, revise el algoritmo pedido en el ejercicio llamado Simple random walks. Imagine un caminante aleatorio con eventos {0, 1} (en un tiempo t cualquiera: 0, no camina; 1, camina un paso) y probabilidad P(0) = 1-p , y P(1) = p. Realice un algoritmo que imprima la trayectoria del caminante aleatorio hasta que haya dado n pasos (no en los tiempos 1 al n sino hasta que haya logrado dar n pasos sin importar en cuántos tiempos). * Suma de dos números Realizar la suma de dos números positivos de hasta 4 cifras, cifra por cifra. No necesariamente los dos números tienen el mismo número de cifras. Por ejemplo: Número 1: 1325 Número 2: 4794 11 1325 +4794 ---6119 Número 1: 789 Número 2: 5689 111 789 +5689 ---6478 Número 1: 99 Número 2: 999 11 99 + 999 ---1098 Raíz cuadrada de un número Se desea conocer la raíz cuadrada de un número “n”, entero positivo (validar). No es posible utilizar la función SQRT (u otra cualquiera) para encontrar cualquier resultado parcial de la solución. Se debe realizar la solución para el número indicado. Los pasos para resolver la raíz cuadrada son los siguientes: 1. A partir de la cifra de las unidades, de derecha a izquierda, se separan grupos de dos cifras. El primer grupo que queda a la izquierda puede tener 1 o 2 cifras. En este caso tiene 1. 86 Angel Vázquez-Patiño Universidad de Cuenca 2. Se calcula la raíz cuadrada del número formado por la cifra (o cifras) del primer grupo de la izquierda (en este caso es 5). Su raíz cuadrada es 2 (no es 3 porque 3² = 9 y sería mayor a 5). Se escribe en la casilla de la raíz y se resta su cuadrado del número del primer grupo. 3. A la derecha del resto obtenido (número 1), se baja el siguiente grupo de dos cifras (47) y, debajo de la raíz (2), se escribe su doble (4). 4. Se busca la cifra más alta posible (en este caso es 3) que, añadida como cifra de las unidades al doble de la raíz que hemos obtenido (4), cumpla que el producto del número resultante (43) por esta misma cifra (3), sea igual o menor que el resto anterior (147). Truco* 5. Se resta el producto obtenido (“129”) del resto (“147”) y se coloca la cifra hallada (“3”) en la raíz, a continuación de la cifra que ya se tenía (“2”). 87 Angel Vázquez-Patiño Universidad de Cuenca 6. A la derecha del resto obtenido (18), se baja el siguiente grupo de dos cifras (56) y, en la siguiente casilla de la derecha, escribimos el doble de la raíz (46) que se ha obtenido hasta ahora (23). 7. De nuevo se repite el paso 4: se busca la cifra más alta posible (en este caso es 4) que, añadida como cifra de las unidades al doble de la raíz que hemos obtenido (46), cumpla que el producto del número resultante (464) por esta misma cifra (4), sea igual o menor que el resto anterior (1856). Truco* 8. Se repite el paso 5: se resta el producto obtenido (1856) del resto que se tenía (1856) y, como en este caso da 0 y no se tienen más grupos de dos cifras qué bajar, se ha terminado de hallar la raíz. 88 Angel Vázquez-Patiño Universidad de Cuenca 89 Angel Vázquez-Patiño Universidad de Cuenca Estructuras de Datos Arreglos Miscelánea Algunos de los ejercicios están basados en los libros de Pinales Delgado y Velázquez Amador (2014), Alcalde Lancharro y García López (1992), Chaves Torres (2012) y Parra Terrazos (n.d.). 1. ¿Cuál es una de las ventajas más importantes de usar un arreglo? a) b) c) d) Almacenar Almacenar Almacenar Almacenar tipos de datos un conjunto de datos variables constantes 2. Lea un arreglo de 10 números enteros y luego imprima los elementos en un orden inverso. 3. Dado un arreglo de n números, presentar el valor de la función sinh -1 de cada número. 4. Implemente un programa que genere aleatoriamente los sueldos de 200 empleados de una empresa en un arreglo y determine el menor sueldo, el mayor sueldo, el sueldo promedio y el total a pagar por parte de la empresa. 5. Implemente un programa que ingrese los sueldos de N empleados de una empresa en un arreglo con capacidad máxima para 100 empleados. Imprima luego un listado de los sueldos superiores al sueldo promedio. 6. Implemente un programa que lea 50 notas de un examen en un arreglo y determine: a) la nota promedio, b) la mayor nota, c) la menor nota, d) el número de alumnos que comparten la menor nota y e) el número de alumnos que comparten la mayor nota. 7. Implemente un algoritmo que lea los nombres y las edades de diez estudiantes, y que almacene los datos en dos arreglos. Con base en esto se debe imprimir el nombre del estudiante con la mayor edad. 8. Implemente un algoritmo que lea un arreglo y a partir de él forme un segundo arreglo, de tal forma que el primer elemento pase a ser el segundo, 90 Angel Vázquez-Patiño Universidad de Cuenca el segundo pase a ser el tercero y así sucesivamente (el último pasa a ser el primer elemento). 9. Implemente un programa que lea dos arreglos de N valores enteros y determine un arreglo C tal que sus elementos vengan dados por: C(0) = A(0) + B(N-1), C(1) = A(1) + B(N-2), C(2) = A(2) + B(N-3), ..., C(N-1) = A(N-1) + B(0). Imprima luego los tres arreglos en tres columnas paralelas, cada uno en una columna. 10. Implemente una función que reciba como parámetros un arreglo de enteros A y un número entero n, y devuelva un nuevo arreglo B que sea igual al arreglo A pero desplazado n posiciones hacia la izquierda. Tenga en cuenta que los n primeros elementos en el arreglo A al ser desplazados hacia la izquierda pasan a ser los últimos elementos del arreglo B. Por ejemplo, con n = 3: A={1, 2, 3, 4, 5, 6, 7} B={4, 5, 6, 7, 1, 2, 3} 11. Implemente un algoritmo para insertar un dato en un arreglo en una posición escogida por el usuario. Si la posición está ocupada, los datos se desplazan a la derecha para dar espacio al nuevo dato. Si el arreglo está lleno no se inserta el dato y se muestra un mensaje. 12. Una empresa requiere controlar la existencia de diez productos, los cuales se almacenan en un arreglo A, mientras que los pedidos de los clientes de estos productos se almacenan en un arreglo B. Se requiere generar un tercer arreglo C, con base en los anteriores, que represente lo que se requiere comprar para mantener la existencia de inventario. Para este fin se considera lo siguiente: si los valores correspondientes de los arreglos A y B son iguales, se almacena este mismo valor; si el valor de B es mayor que el de A, se almacena el doble de la diferencia entre B y A; si se da el caso de que A es mayor que B, se almacena B, que indica lo que se requiere comprar para mantener la existencia en inventario. 13. Se tiene un arreglo de 15 filas y 12 columnas. Realice un algoritmo que permita leer el arreglo y que calcule y presente los resultados siguientes: el menor elemento del arreglo; la suma de los elementos de las cinco primeras filas del arreglo; y el total de elementos negativos en las columnas de la quinta a la nueve. 91 Angel Vázquez-Patiño Universidad de Cuenca 14. Para facturar el servicio de energía la empresa eléctrica cuenta con una lista de usuarios almacenada en un arreglo y las lecturas del mes anterior (en KW) en un segundo arreglo. Se requiere un algoritmo que lea el costo de cada KW, tome la lectura actual de cada usuario y la registre en un tercer arreglo, calcule el consumo del mes por diferencia de lecturas y muestre para cada usuario: nombre, consumo y valor a pagar. 15. * Desarrolle un programa que genere dos arreglos de cien elementos con números al azar y que calcule la suma de éstos (elemento a elemento) guardando su resultado en otro arreglo, el cual se debe presentar en pantalla junto con los dos arreglos generados. 16. Se tiene un arreglo de cien elementos representando calificaciones de los estudiantes de una escuela. Realice un algoritmo que lea el arreglo y calcule la calificación promedio del grupo, además, que cuente los estudiantes que obtuvieron calificaciones arriba del promedio del grupo. 17. Realice un algoritmo que lea un vector de cien elementos y que calcule su magnitud y represéntelo mediante diagrama de flujo y pseudocódigo. 18. Implemente un algoritmo que calcule el producto de dos vectores. Uno de ellos es de una fila con diez elementos y el otro con una columna de diez elementos. 19. Cree un arreglo de 20 elementos con nombres de personas. Visualice los elementos de la lista debiendo ir cada uno en una fila distinta. 20. Hacer un programa que lea las calificaciones de un alumno en 10 asignaturas, las almacene en un arreglo y calcule e imprima su media y mediana. 21. Hacer un programa que genere de manera aleatoria 10 calificaciones entre 0 y 100, muestre las calificaciones y permita buscar una nota en el arreglo (devuelve la posición en el arreglo). 22. Elabore un diccionario simple de inglés a español utilizando dos arreglos de tipo cadena con 20 palabras como mínimo. 23. Lea un arreglo de N elementos y luego imprima cuántos y cuáles elementos (i.e., número de índice) son múltiplos de 6. 24. Generar con números aleatorios un arreglo de 20 elementos, imprima la posición y el valor del elemento mayor almacenado en el arreglo. 92 Angel Vázquez-Patiño Universidad de Cuenca 25. Generar con números aleatorios dos arreglos A y B de 45 elementos cada uno, sumar el elemento uno del arreglo A con el elemento uno del arreglo B y así sucesivamente hasta 45, almacenar el resultado en un arreglo C, e imprimir el arreglo resultante. 26. Desarrolle un programa que lea un arreglo de N elementos y rote todas sus componentes un lugar hacia su derecha. Teniendo en cuenta que la última componente se ha de desplazar al primera lugar. 27. Dado un número entero positivo de 10 cifras, desarrolle un programa que compruebe si el número es capicúa utilizando un arreglo de 10 componentes. La palabra capicúa (en matemáticas, número palíndromo) se refiere a cualquier número que se lee igual de izquierda a derecha que de derecha a izquierda. Ejemplos: 161, 2992, 3003, 2882. 28. Desarrolle un programa que genere aleatoriamente 50 números enteros en el rango [-50, 50], sin que se pueda generar un mismo número más de una vez. Estos números se deben almacenar en un arreglo y se debe calcular e imprimir la suma de los elementos de índice par y las de índice impar. 29. Desarrolle un programa que genere aleatoriamente 50 números enteros en el rango [-50, 50], pudiéndose repetir hasta dos veces un mismo número. Estos números se deben almacenar en un arreglo, se lo debe invertir y se lo debe imprimir (se debe imprimir el arreglo original y el invertido). 30. Desarrolle un programa que genere aleatoriamente 50 números enteros en el rango [-50, 50], pudiéndose repetir hasta tres veces un mismo número. Estos números se deben almacenar en un arreglo y se deben mostrar el mayor y menor número, y la frecuencia de estos. 31. * Desarrolle un programa que genere los números de la serie Fibonacci y los guarde en un arreglo de 55 elementos (debe generar 55 términos de la serie). Luego, dar la opción al usuario de poder visualizar un elemento de la serie dado su número ordinal (los números ordinales comienzan desde uno). 32. Genere un primer arreglo de 50 elementos con números aleatorios reales en el rango [1, 6]. Genere un segundo arreglo con 50 elementos con números aleatorios enteros en el rango [2, 7]. Genere un tercer arreglo donde se guarden los resultados de elevar el elemento del primer arreglo al exponente indicado en el segundo arreglo; los cálculos se hacen con elementos con el 93 Angel Vázquez-Patiño Universidad de Cuenca mismo número de índice. Muestre los arreglos de manera vertical en tres columnas, cada una para cada arreglo: Base arreglo11 arreglo12 arreglo13 arreglo14 arreglo15 Exponente arreglo21 arreglo22 arreglo23 arreglo24 arreglo25 Potencia arreglo11^arreglo21 arreglo12^arreglo22 arreglo13^arreglo23 arreglo14^arreglo24 arreglo15^arreglo25 33. Generar un arreglo con 100 números aleatorios enteros en el rango [1, 2020], sin que se repitan dichos números. En un segundo arreglo guardar la palabra sí, en la posición correspondiente del arreglo uno donde el número represente un año bisiesto, caso contrario guardar la palabra no. Mostrar los valores de los dos arreglos de manera vertical (en columnas): Año 1563 4 Bisiesto No Sí Manejo de arreglos 1. Generar un arreglo llamado angles que contenga los ángulos múltiplos de 30° entre 30° y 360°. 2. Extraer del arreglo los elementos cuyo índice es par y guardarlos en un arreglo llamado evenAngles. 3. Extraer del arreglo los elementos cuyo índice es impar y guardarlos en un arreglo llamado oddAngles. 4. Concatenar en un cuarto arreglo los arreglos evenAngles y oddAngles. * Eliminación de duplicados Fuente: (Deitel and Deitel, 2012, chap. 7). Use una arreglo para resolver el siguiente problema: Escriba una aplicación que permita el ingreso de n números, cada uno en el rango [10, 100]. Cada vez que un número sea leído, muéstrelo sólo si no es un duplicado de un número ya ingresado. Prever el “peor caso”, en el que todos los n números son diferentes. Use el arreglo más pequeño posible para resolver este problema. Muestre el conjunto completo de valores únicos ingresados después de que el usuario ingrese cada nuevo valor. 94 Angel Vázquez-Patiño Universidad de Cuenca Ordenamiento de n números Dados n números en un arreglo, realizar la ordenación de los mismos tanto de forma ascendente como descendente. Ángulo entre vectores Dados dos vectores, encontrar el ángulo entre ellos. Dar los resultados en radianes y en grados sexagesimales. Relleno de arreglo con números aleatorios Generar un arreglo de 50 elementos enteros con las siguientes restricciones: 1. Los números aleatorios deben estar en el rango . es el décimo dígito de su cédula. Por ejemplo, si su cédula termina en 4, el rango sería . 2. Siendo repetirá. el componente i del arreglo (hay 50 componentes), , . Esto quiere decir que ningún componente del arreglo se 3. Puede darse el caso en el que el primer elemento generado de manera aleatoria sea mayor a . En ese caso no se podrían llenar con valores todos los componentes del arreglo. Indicar si esto pasa y mostrar los valores de los componentes generados. Graficación de frecuencias • Simular el lanzamiento de un dado 100 veces. En un arreglo de seis elementos guardar el número de veces que el dado salió con el número respectivo de índice del arreglo. Por último, mostrar la tabla de frecuencias y un gráfico de las mismas. Por ejemplo, si 20 veces salió 6, 30 veces salió 5, 10 veces salió 4, 5 veces salió 3, 10 veces salió 2, 25 veces salió 1, la tabla de frecuencias y el gráfico serían: Valor 1 2 3 4 5 TABLA Frecuencia 25 10 5 10 30 95 Angel Vázquez-Patiño 6 Universidad de Cuenca 20 Gráfica 1 ************************* 2 ********** 3 ***** 4 ********** 5 ****************************** 6 ******************** • Simular el lanzamiento de dos dados al mismo tiempo en 100 ocasiones. En un arreglo guardar el número de veces que la suma de los valores de los dados salió con el número respectivo de índice del arreglo (el índice desde dos). Por último, mostrar la tabla de frecuencias y un gráfico de las mismas. Criba de Eratóstenes Fuente: (Deitel and Deitel, 2012, chap. 7). Un número primo es cualquier entero mayor que 1 que es divisible solamente para sí mismo y para 1. La criba de Eratóstenes es un método para encontrar números primos. Esta opera de la siguiente manera: 1. Se crea un arreglo de tipo primitivo booleano con todos los elementos inicializados con el valor TRUE. Los elementos del arreglo cuyos índices corresponden a un número primo se mantendrán con el valor TRUE. Todos los demás elementos eventualmente contendrán el valor FALSE. 2. Comenzando con el índice 2 del arreglo, se determina si un elemento dado es TRUE. Si es así, se itera a través de lo que queda del arreglo y se establece como FALSE todo elemento cuyo índice es múltiplo del índice para el elemento con valor TRUE. Entonces, se continúa el proceso con el siguiente elemento con valor TRUE. Para el índice 2 del arreglo, todos los elementos más allá del elemento 2 en el arreglo, que tengan índices que sean múltiplos de 2 (índices 4, 6, 8, 10, etc.), serán establecidos como FALSE; para el índice 3 del arreglo, todos los elementos más allá del elemento 3 en el arreglo, que tengan índices que sean múltiplos de 3 (índices 6, 9, 12, 15, etc.), serán establecidos como FALSE; y así en adelante. Cuando este proceso termina, los elementos del arreglo que tienen el valor TRUE indican que el índice de ese elemento corresponde a un número primo. Estos índices deben ser visualizados. Una animación del proceso se puede encontrar en 96 Angel Vázquez-Patiño Universidad de Cuenca Wikipedia https://goo.gl/6w5Atn. A continuación se muestra el proceso para encontrar los números primos entre 2 y 20. Escriba una aplicación que use un arreglo para encontrar y mostrar los números primos entre 2 y 1000. Ignore los elementos con índices menores que 2. Algoritmo de Havel-Hakimi Implemente una función cuyo parámetro sea un arreglo con una serie de números enteros no negativos (el cero sí es aceptado) que puede estar ordenado o no, y devuelva true si la serie corresponde a una serie gráfica o false en caso de que la serie no corresponda a una serie gráfica. Vea la explicación del algoritmo mediante el siguiente enlace https://youtu.be/-prrZd_NJqQ. Matrices Miscelánea Algunos de los siguientes ejercicios se basan en los libros de Pinales Delgado y Velázquez Amador (2014), Alcalde Lancharro and García López (1992) y Chaves Torres (2012). 1. Cree una matriz de N×M (leer N y M por teclado). Imprima los cuatro valores que se encuentran en los vértices de la matriz (mat[0][0], etc.). 2. Genere e imprima una matriz de 4 filas y 5 columnas con números aleatorios entre 1 y 100. 97 Angel Vázquez-Patiño Universidad de Cuenca 3. Desarrolle un programa que genere una matriz de cinco filas y diez columnas con números enteros aleatorios, los imprima e indique los valores máximo y mínimo y sus posiciones dentro de la matriz. 4. Desarrolle un programa que genere e imprima una matriz unitaria de orden N. Una matriz unitaria de orden N es la que tiene N filas y N columnas con todas sus componentes iguales a 0, excepto las de su diagonal principal, que son iguales a 1. 5. Implemente una función para determinar si dos matrices (enviadas como argumentos) contienen los mismos elementos. La función tiene un tercer parámetro para indicar si se desea que la función actúe 1) comparando las dos matrices elemento a elemento o 2) comparando las dos matrices aunque los elementos no se presenten en el mismo orden. 6. Implemente una función que construya y devuelva matrices cuadradas de cualquier dimensión mayor o igual a 1, cuyos elementos sigan el patrón mostrado en la tabla 1 (cada elemento es la suma de sus índices). La dimensión se pasará como parámetro a la función. El resultado se imprimirá desde el programa/función principal. Tabla 1: Matriz de 4 x 4. Se está tomando en cuenta que los índices de la matriz comienzan en cero (como en el lenguaje de programación Java o C). 0 1 2 3 1 2 3 4 2 3 4 5 3 4 5 6 7. Dada la matriz Letras[20][20], llenar de caracteres del alfabeto, calcular la frecuencia absoluta y la frecuencia relativa para cada una de las vocales. 8. Implemente un algoritmo que lea un arreglo de M filas y N columnas y que calcule la suma de los elementos de la diagonal principal. 9. Implemente un algoritmo para obtener una matriz como el resultado de la resta de dos matrices de orden M×N. 10. Implemente un algoritmo para determinar si una matriz es de tipo diagonal. Una matriz es de tipo diagonal si es una matriz cuadrada en la cual todos sus elementos son cero, excepto los de la diagonal principal. 98 Angel Vázquez-Patiño Universidad de Cuenca 11. Se tiene una matriz de seis filas y ocho columnas y se sabe que se tiene un elemento negativo. Realice un algoritmo que indique la posición que ese elemento ocupa en el arreglo (en la fila y la columna en la que se encuentra ese elemento). 12. Se tienen dos matrices cuadradas (de 12 filas y 12 columnas cada una). Realice un algoritmo que lea las matrices y que determine si la diagonal principal de la primera es igual a la diagonal principal de la segunda. (Diagonal principal es donde los subíndices i y j son iguales). 13. * Se tiene una matriz de 12 filas por 19 columnas y se desea tener un programa para encontrar todos sus elementos negativos y para que los cambie por un cero. Desarrolle el programa que haga eso. 14. Realice un algoritmo que lea una matriz de seis filas y seis columnas y que cuente los elementos negativos que contiene y los elementos de la diagonal principal que son igual a cero. 15. Una compañía de transporte cuenta con cinco chóferes, de los cuales se conoce: nombre, horas trabajadas cada día de la semana (seis días) y sueldo por hora. Realice un algoritmo que: a) b) c) d) e) Calcule el total de horas trabajadas a la semana para cada trabajador. Calcule el sueldo semanal para cada uno de ellos. Calcule el total que pagará la empresa. Indique el nombre del trabajador que labora más horas el día lunes. Imprima un reporte con todos los datos anteriores. 16. Indurama cuenta con N chóferes, de los cuales se conoce el nombre y los kilómetros que conducen durante cada día de la semana; esa información se guarda en un arreglo de Nx6. Se requiere un programa que capture esa información y genere un arreglo con el total de kilómetros que recorrió cada chófer durante la semana. Al final se debe presentar un reporte donde se muestre el nombre del chófer, los kilómetros recorridos cada día y el total de éstos, como se muestra en la tabla. Adicionalmente, se debe mostrar un reporte con el chófer que ha recorrido más kilómetros en un día determinado de la semana y el número de kilómetros recorridos por todos los chóferes en un día de la semana. La información del día de la semana será solicitada al usuario. 99 Angel Vázquez-Patiño Nombre Universidad de Cuenca Lun Mar Mié Jue Vie Sáb Tot K N Chófer 1 # km # km # km # km # km # km # km N Chófer 2 # km # km # km # km # km # km # km ... ... ... ... ... ... ... ... N Chófer n # km # km # km # km # km # km # km 17. Implemente un algoritmo que lea una matriz de C columnas y R filas. A partir de ellas genere dos arreglos que contengan la suma de sus filas y la suma de sus columnas. 18. Implemente un algoritmo que calcule el valor que se obtiene al multiplicar entre sí los elementos de la diagonal principal de una matriz de 5 por 5 elementos. 19. Realice un algoritmo que a partir de la diagonal principal de una matriz de 5 por 5 elementos encuentre cuántos elementos tienen valor par y cuántos valores impares. 20. Cree un arreglo multidimensional de 3 páginas, 4 filas y 5 columnas donde el primer elemento valga 1, el segundo 2, el tercero 3 y así sucesivamente. Imprima los valores. 21. Cargar en una matriz las notas de los alumnos de un colegio en función del número de cursos (filas) y del número de alumnos por curso (columnas). Presentar la mediana de cada curso. 22. Ordenar una matriz de M filas y N columnas de izquierda a derecha y de arriba hacia abajo. Debe presentar la matriz en orden ascendente y en orden descendente (muestra dos matrices). Por ejemplo, la siguiente es una matriz de 2×3 ordenada ascendentemente. -5 0 2 10 11 99 Para que no tenga que ingresar datos en cada prueba que haga de su algoritmo, desarrolle una función que devuelva una matriz de f filas y c columnas con número aleatorios (no ordenados). 23. Dado el arreglo T de tamaño n, si el tamaño es par invertir los elementos de la mitad de los elementos, caso contrario hacer lo mismo pero dejando sin 100 Angel Vázquez-Patiño Universidad de Cuenca mover el número de la posición intermedia. Ejemplo: T=[1, 2, 3, 4, 5, 6], T(invertido)=[3, 2, 1, 6, 5, 4]; T=[1, 2, 3, 5, 6], T(invertido)=[2, 1, 3, 6, 5]. 24. Dadas dos matrices A y B intercambiar los mínimos de A con los máximos de B. 25. Se dispone de un arreglo multidimensional de 5 páginas, 10 filas y 20 columnas, que se refieren al colegio, al curso y al número de estudiantes (se asume que cada curso tiene exactamente 20 estudiantes), respectivamente. Imprimir la nota media por curso (son 50 resultados) y la nota media máxima con su centro de pertenencia. La nota media máxima hace referencia al valor máximo entre las 50 medias que corresponden a los 10 cursos de los 5 colegios. Para que no tenga que ingresar datos en cada prueba que haga de su algoritmo, desarrolle una función igenerarMatriz3D(int p, int f, int c) que devuelva una matriz de p páginas, f filas y c columnas con número aleatorios. 26. Una empresa guarda en arreglo multidimensional de 3×12×4 las ventas realizadas por sus tres representantes a lo largo de doce meses de sus cuatro productos, VENTAS [ representante, mes, producto ]. Se desea proyectar el arreglo tridimensional sobre uno de dos dimensiones que represente el total de ventas, TOTAL [ mes, producto ], para lo cual se suma las ventas de cada producto de cada mes de todos los representantes. Imprima ambos arreglos. 27. Desarrolle un programa que lea una matriz cuadrada de orden 3 y calcule e imprima su potencia N-ésima, siendo N un dato de entrada. Vea https://goo.gl/NYT4Xi 28. * Implemente un algoritmo que lea una matriz de n×m, en la cual se registra números. El proceso de llenado de la matriz debe realizarse en una función. Sobre esta matriz se pide calcular la media y mediana de cada fila. Los resultados de la media y mediana deben ser almacenados en arreglos independientes. Los cálculos de la media y mediana deben ser realizados en funciones distintas. El programa debe mostrar los resultados de la media y mediana en funciones independientes. 29. * Desarrolle un programa que, ingresadas por parte del usuario dos matrices, A y B, de diferentes dimensiones, intercambie los tres mínimos 101 Angel Vázquez-Patiño Universidad de Cuenca números de A con los tres máximos números de B. El intercambio tiene que darse en orden inverso, es decir, el mínimo número de A con el máximo de B y así sucesivamente. El programa debe mostrar en pantalla las matrices ingresadas por el usuario y las matrices luego del intercambio. Por ejemplo, si A y B son: entonces, luego del intercambio, las matrices serían: Como sugerencia, usted podría utilizar dos matrices que indiquen las posiciones de los mínimos y máximos, así (los índices de filas y columnas comienzan en cero en este ejemplo específico): 30. * Desarrolle una función que dada una matriz A de n×m devuelva una matriz B de m×n que sea formada leyendo la matriz en el sentido mostrado a continuación: 102 Angel Vázquez-Patiño Universidad de Cuenca ← 8 ← 4← 9 ← 5 A= → 2 → 1 → 7 → 4 ← 3 ← 5← 6 ← 2 5 9 4 B= 8 2 1 7 4 2 6 5 3 31. Pregunta Suma y resta de matrices Pedir al usuario el número de filas y columnas de dos matrices que ingresará. Ingresar las dos matrices. Calcular la suma de las dos matrices y guardar el resultado en una matriz resultado. Calcular la resta de las dos matrices y guardar el resultado en una segunda matriz resultado. Mostrar al usuario las dos matrices resultado. Producto de un escalar por una matriz Pedir al usuario el número de filas y columnas de una matriz que ingresará. Ingresar dicha matriz. Ingresar un número escalar. Multiplicar el escalar por la matriz y mostrar el resultado al usuario. Diagonal principal de una matriz Ingresar una matriz cuadrada y guardar en un arreglo la diagonal principal de la matriz. * Transpuesta de una matriz • Pedir al usuario el número de filas y columnas de una matriz que ingresará. Ingresar dicha matriz. Calcular la transpuesta, guardarla en otra matriz y mostrarla al usuario. • Generar una matriz de 4 filas y 5 columnas con números aleatorios entre 1 y 100, y hacer su matriz transpuesta. Determinante de una matriz Ingresar una matriz cuadrada y calcular la determinante de la matriz y presentarla al usuario. 103 Angel Vázquez-Patiño Universidad de Cuenca Producto de matrices Pedir al usuario el número de filas y columnas de dos matrices que ingresará. Ingresar las dos matrices. Calcular el producto de las matrices y presentarla al usuario. Punto de silla de una matriz 1. Se dice que una matriz tiene un punto de silla si algún elemento de la matriz es el menor valor de su fila y a la vez el mayor de su columna. Escribir un programa que genere una matriz de números enteros aleatorios (el usuario debe ingresar las dimensiones) y calcule la posición de un punto de silla (si es que existe). 2. Elabore un algoritmo que genere matrices de números enteros aleatorios (el usuario debe ingresar las dimensiones) hasta que genere una matriz con un (o más) punto de silla. Tablero de ajedrez Visualice en pantalla un tablero de ajedrez: los peones con el número 1, las torres con el 7, los caballos con 0, los alfiles con 4, el rey con 8 y la reina con 2. El cuadrado latino Desarrolle un programa que imprima un cuadrado latino de orden N. Un cuadrado latino de orden N es una matriz cuadrada en la que su primera fila contiene los N primeros números naturales y cada una de las siguientes N-1 filas contiene la rotación de la fila anterior un lugar a la derecha. Por ejemplo, es siguiente es un cuadrado latino de orden 4. Fuente: (Alcalde Lancharro and García López, 1992). 1 4 3 2 2 1 4 3 3 2 1 4 4 3 2 1 El cuadrado mágico 1. Un cuadrado mágico 3×3 es una matriz de 3×3 formada por números del 1 al 9 donde la suma de sus filas, sus columnas y sus diagonales son idénticas. Crear un programa que permita introducir una matriz cuadrada de 3×3 por teclado y determine si este cuadrado es mágico o no. El programa deberá 104 Angel Vázquez-Patiño Universidad de Cuenca comprobar que los números introducidos son correctos, es decir, están entre el 1 y el 9; además, se debe comprobar que los números no se repitan en el ingreso. 2. Genere un cuadrado mágico dado el orden N (validar). Un cuadrado mágico es una matriz cuadrada de orden impar N que contiene números enteros desde 1 hasta N2. La suma de los números que figuran en cada fila, cada columna y cada diagonal son iguales. Un ejemplo es: 8 3 4 1 5 9 6 7 2 Para generar un cuadrado mágico siga estos pasos: 1. Sitúe el número 1 en la casilla central de la primera fila. 2. Cada número que sigue debe colocarse en la casilla correspondiente a la fila anterior y columna posterior. 3. Si un número generado cae en una casilla ocupada, no aplique la regla anterior, sino que debe colocarlo en la casilla de la fila posterior e igual columna. 4. Se considera que la fila anterior a la primera es la última y la columna posterior a la última es la primera. Cadena de ADN Una cadena de ADN se representa como una secuencia circular de bases (adenina, timina, citosina y guanina) que es única para cada ser vivo, por ejemplo A T T A G C T G Esta cadena se puede representar como un arreglo de caracteres recorriéndola en sentido horario desde la parte superior izquierda: A T G C G T A T Se pide diseñar una función que devuelva true si dos cadenas de ADN, enviadas como parámetros, coinciden. 105 Angel Vázquez-Patiño Universidad de Cuenca Muy importante: la secuencia de ADN es cíclica, por lo que puede comenzar en cualquier posición. Por ejemplo, las dos secuencias siguientes coinciden: A T G C G T A T A T A T G C G T Gimnasia cerebral Lea la descripción del Juego del alfabeto en www.pnlnet.com/el-juego-del-alfabeto. Implemente un programa que tenga el menú: ======================= El juego del alfabeto ======================= Menú a. Nivel básico b. Nivel intermedio c. Nivel avanzado d. Salir ______________________ Opción[a-d]: ====================== Para el nivel básico se debe imprimir el alfabeto de izquierda a derecha y de arriba hacia abajo en una matriz de 5x5. No tome en cuenta la letra ñ ni w. Debajo de cada letra del abecedario se debe imprimir la letra I o D o J de manera aleatoria pero sólo se pueden repetir dos veces seguidas las letras I y D pero no la J (viendo la matriz de izquierda a derecha y de arriba hacia abajo). Un ejemplo se muestra a continuación: A I B D C J D I E D F I G I H J I D J J K D L D M I N J O I P I Q J R I S I T J 106 Angel Vázquez-Patiño U D V I X J Y D Universidad de Cuenca Z D Para el nivel intermedio se debe imprimir el alfabeto de izquierda a derecha y de arriba hacia abajo en una matriz de 5x5 pero en orden inverso, i.e., de la zeta hasta la a. No tome en cuenta la letra ñ ni w. Debajo de cada letra del abecedario se debe imprimir la letra I o D o J de manera aleatoria pero sólo se pueden repetir dos veces seguidas las letras I y D pero no la J (viendo la matriz de izquierda a derecha y de arriba hacia abajo). Un ejemplo se muestra a continuación: Z I Y D X J V I U D T I S I R J Q D P J O D N D M I L J K I J I I J H I G I F J E D D I C J B D A D Para el nivel avanzado se debe imprimir el alfabeto de arriba hacia abajo y de izquierda a derecha en una matriz de 5x5. No tome en cuenta la letra ñ ni w. Debajo de cada letra del abecedario se debe imprimir la letra I o D o J de manera aleatoria pero sólo se pueden repetir dos veces seguidas las letras I y D pero no la J (viendo la matriz de izquierda a derecha y de arriba hacia abajo). Un ejemplo se muestra a continuación: A I F D K J P I U D B I G I L J Q D V J C D H D M I R J X I D I N S Y 107 Angel Vázquez-Patiño Universidad de Cuenca I J I I J E D J I O J T D Z D Cálculos espaciales básicos Los siguientes ejercicios se basan en el capítulo 10.3 Algunos cálculos espaciales básicos del libro de Olaya (2011). Distancia de tablero de ajedrez Cuando se utilizar imágenes raster pueden definirse distintos tipos de distancias considerando principalmente el número de celdas por las que debe pasarse para ir de una celda a otra. Por ejemplo, si se permite el movimiento en todas direcciones, las ocho celdas aledañas a un píxel tienen una distancia de uno, puesto que se necesita un único paso para llegar a cualquiera de ellas. Por similitud a la forma en que uno puede moverse en un tablero de ajedrez, este tipo de distancia se conoce como distancia de tablero de ajedrez 1. Utilizando una matriz de 8 filas por 8 columnas, pida al usuario la celda de la que quiere calcular la distancia de tablero de ajedrez. 2. La celda indicada por el usuario tendrá el valor cero, a las demás celdas de la matriz póngales el valor que corresponde a la distancia de tablero de ajedrez desde la celda a la mencionada por el usuario. La figura 5.a muestra un ejemplo para una matriz de 5×5 con la celda central como la elegida por el usuario. 3. Presente en pantalla los valores de la matriz. 108 Angel Vázquez-Patiño Universidad de Cuenca Figura 5: Distintos tipos de distancia ráster: a) tablero de ajedrez, b) Manhattan, c) ortogonal y d) Chamfer 3–4. Fuente: Olaya (2011). Distancia Manhattan En el ajedrez, la distancia entre cuadrados en el tablero de ajedrez para las torres se mide en distancia Manhattan (vea la ecuación 2 y la figura 5). De igual manera, en ciencias de la información geográfica pueden definirse algunos tipos de distancia ráster considerando el mismo principio (i.e., número de celdas por las que debe pasarse para ir de una celda a otra). 1. Genere una matriz de 8 filas y 8 columnas con números enteros aleatorios en el rango [1, 32]. Se deben generar dos celdas (de las 64) con el mismo número y sólo dos celdas pueden tener el mismo número (por eso el rango [1, 32]). Como ejemplo vea la siguiente matriz generada. 109 Angel Vázquez-Patiño Universidad de Cuenca 1 2 3 4 5 1 2 8 7 8 9 2 13 1 15 17 20 3 14 16 14 3 22 4 24 25 11 26 1 5 2 18 29 30 31 Figura 6: Matriz de 8x8 con números enteros aleatorios en el rango [1, 32]. Sólo dos celdas tienen el mismo número. 2. Muestre en pantalla la matriz generada. 3. Calcule la distancia Manhattan entre cada par de celdas que contengan el mismo número. Como ejemplo vea parte del resultado (2 de los 32 números) que debería mostrar su programa. Distancia Manhattan =================== ------------------------------Valor: 1 Posiciones: (2, 2), (4, 5) Distancia Manhattan: 5 ------------------------------Valor: 2 Posiciones: (1, 1), (5, 1) Distancia Manhattan: 4 Formación de grupos de trabajo Con una matriz en donde se tiene como campos el número, apellido 1, apellido 2, nombre 1 y nombre 2 de cada estudiante, implemente un programa que genere grupos de trabajo con estudiantes escogidos al azar. Para generar los grupos de trabajo el usuario indica el número de estudiantes de cada grupo a generar. Es posible que algún grupo quede con un número inferior al indicado por el usuario; 110 Angel Vázquez-Patiño Universidad de Cuenca en ese caso solamente se debe indicar en pantalla cuál es el grupo que tiene menos estudiantes que el pedido (ver el segundo ejemplo de ejecución). El programa debe leer un archivo .csv (vea https://es.wikipedia.org/wiki/CSV) en donde se indican los campos de los estudiantes del curso. Un ejemplo de archivo es el siguiente (podría llamarse listaEstudiantes.csv): 1,Abad,Sigcho,Carlos,Daniel 2,Agudo,Güiracocha,Dayana,Isabel 3,Andrade,Carchi,Julio,César 4,Arévalo,Angamarca,Moisés,Santiago El siguiente es un primer ejemplo de ejecución del programa: Número de estudiantes por grupo: 2 Grupo 1 1. Julio César Andrade Carchi 2. Carlos Daniel Abad Sigcho Grupo 2 1. Dayana Isabel Agudo Güiracocha 2. Moisés Santiago Arévalo Angamarca El siguiente es un segundo ejemplo de ejecución del programa en donde hay un grupo que tiene menos estudiantes de los pedidos por el usuario: Número de estudiantes por grupo: 3 Grupo 1 1. Moisés Santiago Arévalo Angamarca 2. Dayana Isabel Agudo Güiracocha 3. Julio César Andrade Carchi Grupo 2 ¡Este grupo es de 1 estudiante y no de 3 como lo pedido! 1. Carlos Daniel Abad Sigcho Una vez que pueda generar los grupos dado el número de estudiantes que se desean en cada grupo, haga otro programa que genere los grupos dado el número total de grupos que se desean hacer (analice muy bien cuál es la diferencia con el primer programa realizado). Por ejemplo, el siguiente es una ejecución del segundo programa en donde el usuario quiso generar tres grupos: Número de grupos: 3 Grupo 1 1. Julio César Andrade Carchi Grupo 2 111 Angel Vázquez-Patiño Universidad de Cuenca 1. Carlos Daniel Abad Sigcho Grupo 3 1. Dayana Isabel Agudo Güiracocha 2. Moisés Santiago Arévalo Angamarca Puesto que el objetivo de este ejercicio es el manejo de matrices, se presenta a continuación una solución para leer el archivo en el lenguaje de programación Java. En su programa, para cargar los datos a una matriz (la matriz lista en el código presentado), debe usar la función String[][] cargarLista(String rutaArchivo, int numEstudiantes); rutaArchivos es la ruta absoluta del archivo que contiene la lista de estudiantes y numEstudiantes es el número total de estudiantes. import import import import java.io.BufferedReader; java.io.FileReader; java.io.IOException; java.util.Arrays; public class listaEstudiantes { public static void main (String args[]) { String[][] lista = cargarLista("listaEstudiantes.csv", 24); } public static String[][] cargarLista(String rutaArchivo, int numEstudiantes){ // numEstudiantes: Número de estudiantes // que están en el archivo csv // int numEstudiantes = 24; // separador de campos del archivo csv String SEPARADOR = ","; String QUOTE = "\""; String[][] lista = new String[numEstudiantes][]; BufferedReader br = null; try { br = new BufferedReader(new FileReader(rutaArchivo)); String line = br.readLine(); 112 Angel Vázquez-Patiño Universidad de Cuenca int i = 0; while (null!=line) { String [] campos = line.split(SEPARADOR); //System.out.println(Arrays.toString(campos)); campos = removeTrailingQuotes(campos, QUOTE); lista[i++] = campos; line = br.readLine(); } } catch (Exception e) { System.out.println(e.getMessage()); } finally { try{ br.close(); }catch(IOException e){ System.out.println(e.getMessage()); } } return lista; } private static String[] removeTrailingQuotes(String[] fields, String QUOTE) { String result[] = new String[fields.length]; for (int i=0;i<result.length;i++){ result[i] = fields[i].replaceAll("^"+QUOTE, "").replaceAll(QUOTE+"$", ""); } return result; } } * Matriz de adyacencia Una de las implementaciones más frecuentes para la representación de grafos son las matrices de adyacencia. Una matriz de adyacencia A (implementada como una matriz bidimensional) determina las adyacencias entre pares de vértices de un grafo. En una matriz de adyacencia, los vértices se conciben como enteros en el conjunto {1, 2, …, n} y las aristas como pares de tales enteros. Esto permite almacenar referencias a las aristas en las celdas de una matriz bidimensional de nxn. Cada fila y cada columna representan un vértice del grafo y cada posición 113 Angel Vázquez-Patiño Universidad de Cuenca representa una arista (o la ausencia de esta) cuyo vértice origen se encuentra en la fila y vértice final se encuentra en la columna. Las siguientes figuras muestran la representación gráfica de un grafo dirigido simple, un grafo no dirigido simple, un grafo euleriano y un multigrafo con sus respectivas matrices de adyacencia. Escribir un programa que implemente las funciones que se detallan a continuación. Todas las funciones reciben como entrada el grafo representado mediante su matriz de adyacencia: 1. Una función que devuelva 1 si el grafo es euleriano. Se debe devolver 0 si el grafo no es euleriano. Un grafo es euleriano si cada vértice tiene un grado par. El grado o valencia de un vértice es el número de aristas incidentes al vértice. 2. Una función que devuelva 1 si el grafo es simple. Se debe devolver 0 si el grafo no es Simple. Un grafo simple es aquel que no tiene aristas paralelas o múltiples que unan el mismo par de vértices. 3. Una función que devuelva 1 si el grafo es multigrafo. Se debe devolver 0 si el grafo no es multigrafo. Un grafo que cuente con múltiples aristas entre dos vértices se denomina multigrafo 4. Una función que devuelva 1 si el grafo simple es dirigido. Se debe devolver 0 si el grafo simple es no dirigido. Si G es un grafo simple con n vértices y m aristas, entonces: ◦ Si G es no dirigido, m≤n(n-1)/2 ◦ Si G es dirigido, m≤n(n-1) 114 Angel Vázquez-Patiño Universidad de Cuenca Craps Un juego de azar muy popular es el juego de dados conocido como craps, el cual es jugado en casinos y callejones de todo el mundo. Las reglas del juego son muy fáciles (Deitel and Deitel, 2012): Usted lanza dos dados. Cada dado tiene seis caras, que contienen uno, dos, tres, cuatro, cinco y seis puntos, respectivamente. Después que los dados paran, se calcula la suma de los puntos en las dos caras que están hacia arriba. Si la suma es 7 u 11 en el primer lanzamiento, usted gana (termina el juego). Si la suma es 2, 3 o 12 en el primer lanzamiento (llamado “craps”), usted pierde (es decir, la “casa” gana; termina el juego). Si la suma es 4, 5, 6, 8, 9 o 10 en el primer lanzamiento, esa suma se convierte en su “punto” (continúa el juego). Para ganar, debe continuar lanzando los dados hasta que “hace su punto” (es decir, la suma de los puntos en las dos caras que están hacia arriba es igual que la suma en el primer lanzamiento). Se pierde por sacar un 7 antes de que “hace su punto”. Escriba una aplicación que ejecute 1'000.000 de juegos de craps y conteste las siguientes preguntas: 1. ¿Cuántos juegos fueron ganados en el primer lanzamiento, en el segundo lanzamiento, en el tercer lanzamiento, …, en el vigésimo lanzamiento y después del vigésimo lanzamiento? 2. ¿Cuántos juegos fueron perdidos en el primer lanzamiento, en el segundo lanzamiento, en el tercer lanzamiento, …, en el vigésimo lanzamiento y después del vigésimo lanzamiento? 3. ¿Cuáles son las probabilidades de ganar en el juego de craps? Nota: debe descubrir que el juego de craps es uno de los juegos de casino más justos; ¿Qué cree que esto significa? 4. ¿Cuál es la duración promedio de un juego de craps? Nota: la duración hace referencia al número de lanzamientos antes de terminar el juego. 5. ¿Las probabilidades de ganar mejoran con la duración del juego? Hormiga de Langton La siguiente información es tomada de wikipedia (https://goo.gl/6dNIEW). 115 Angel Vázquez-Patiño Universidad de Cuenca La hormiga de Langton es una máquina de Turing bidimensional con un conjunto de reglas muy sencillo y que da lugar a comportamientos emergentes complejos. La hormiga de Langton clásica opera sobre una matriz cuadrada, en que cada celda puede estar en uno de dos estados: blanco o negro (1 o 0). En la matriz se identifica arbitrariamente una celda como la hormiga. La hormiga siempre está mirando en una de las cuatro direcciones cardinales y se mueve una celda cada vez, de acuerdo con las siguientes reglas: 1. Si está sobre una celda blanca, cambia el color de la celda, gira noventa grados a la derecha y avanza una celda. 2. Si está sobre una celda negra, cambia el color de la celda, gira noventa grados a la izquierda y avanza una celda. Implemente un programa que realice lo siguiente: 1. Genere una matriz de 100×100 con 5000 celdas blancas (valor 1) y 5000 celdas negras (valor 0). Las celdas deben ser “pintadas” al azar. 2. Identifique arbitrariamente una celda como la hormiga. 3. Haga que la homiga camine hasta que llegue a los límites de la matriz. 4. Cada vez que la hormiga se mueva una celda, muestre la información de la matriz como se muestra en la figura 7. Figura 7: imagen tomada de Wikipedia https://goo.gl/6dNIEW. 116 Angel Vázquez-Patiño Universidad de Cuenca * Las ocho reinas Este problema clásico en ciencias de la computación fue propuesto por René Estrella. Este problema consiste en ubicar ocho reinas en un tablero de ajedrez de tal manera que no se ataquen entre sí. Por lo tanto, la solución requiere que no existan dos reinas que se encuentren en la misma fila, columna o diagonal. En este sentido, una configuración candidata consiste en una forma específica de ubicar las ocho reinas en el tablero (que pueden o no atacarse entre sí), mientras que una solución es una configuración candidata que cumple el requerimiento de que las reinas no se ataquen entre sí. Se sabe que este problema tiene 92 soluciones distintas, es decir, existen 92 formas de ubicar las ocho reinas en el tablero de forma que el requerimiento del problema se cumpla (vea https://goo.gl/fFo9WL). En la siguiente figura se muestra una de las posibles soluciones: Figura 8: Una de las posibles soluciones al problema de las ocho reinas. El objetivo de este ejercicio es escribir un programa que encuentre, al menos, una de las soluciones a este problema. El programa además debe permitir al usuario ingresar una configuración candidata indicando las coordenadas de la ubicación de cada una de las ocho reinas. En particular, el programa debe mostrar un menú con tres opciones: 1. Generar solución 2. Ingresar configuración candidata 3. Salir 117 Angel Vázquez-Patiño Universidad de Cuenca A continuación, se detalla cada una de estas tareas. 1. Generar solución El programa genera una configuración candidata y verifica si esa configuración corresponde a una solución. Si este es el caso, muestra la solución en pantalla simulando un tablero de ajedrez e indicando la ubicación de las ocho reinas. Si la configuración generada no corresponde a una solución, se descarta y se repite el proceso, volviéndose a generar otra configuración candidata. 2. Ingresar configuración candidata Cuando el usuario escoge esta opción se le solicita que ingrese ocho pares de coordenadas numéricas que indiquen la ubicación de las reinas en el tablero. Cada coordenada será un número entero en el rango [1, 8], considerando que el par de coordenadas (1, 1) corresponde a la casilla superior izquierda del tablero y la coordenada (8, 8) corresponde a la casilla inferior derecha. A continuación, el programa mostrará la configuración ingresada en forma de un tablero con la ubicación de las ocho reinas e indicando si se trata de una solución o no. Por ejemplo, si el usuario ingresa las siguientes coordenadas: Coordenadas Coordenadas Coordenadas Coordenadas Coordenadas Coordenadas Coordenadas Coordenadas Reina Reina Reina Reina Reina Reina Reina Reina 1: 2: 3: 4: 5: 6: 7: 8: 1, 2, 3, 4, 5, 6, 7, 8, 3 6 4 2 8 5 7 1 La configuración resultante sería la que se muestra en la figura 8, la cual evidentemente corresponde a una solución del problema. 3. Salir El programa solamente termina cuando se escoja esta opción. * Datos de personas El programa va a almacenar registros en una matriz. Para ello se debe hacer lo siguiente: 1. Ingreso de campos de los registros 118 Angel Vázquez-Patiño Universidad de Cuenca Solicite al usuario que ingrese uno a uno los campos de una matriz que almacenará los registros y cree un índice que asocie el campo a una columna de la matriz. Luego, cree la matriz que almacenará los registros. Ejemplo cédula nombre apellido edad ... Índice cédula 0 nombre 1 apellido 2 edad 3 ... ... 2. Ingreso de datos Una vez ingresados los campos con los que se va a trabajar, pida al usuario que ingrese los registros como cadenas, de la siguiente manera (en base a los campos puestos en el ejemplo anterior): apellido:cevallos;edad:22;cedula:0104132548 cedula:0108562554;edad:25;nombre:juan;apellido:malo Nóte que los registros no necesariamente contienen todos los campos, ni se ingresan los datos en orden de acuerdo a los campos ingresados en el punto 1. Cada vez que se ingresa un registro, éste se debe pasar a la matriz de datos. Para ello, procese la cadena que representa cada registro y basado en el índice creado en el punto 1 guarde cada campo en la columna correspondiente de la matriz. Después de cada ingreso, muestre la matriz de datos. Para los dos registros de ejemplo la matriz de datos sería la siguiente: 0104132548 0108562554 juan cevallos 22 malo 25 119 Angel Vázquez-Patiño Universidad de Cuenca Si un registro contiene un campo que inicialmente no se consideró, el programa deberá indicar con una mensaje que el campo no fue encontrado. Por ejemplo, si se ingresa el siguiente registro, el programa deberá mostrar un mensaje de error y la matriz de datos resultante. cedula:0305677824;teléfono:4023568;nombre:sara;apellido:abril ¡Advertencia! El campo teléfono no existe pero se ingresa el registro. 0104132548 cevallos 22 25 0108562554 juan malo 0305677824 sara abril 3. Búsquedas El programa debe permitir buscar un registro por cualquier campo. Es decir, se pregunta al usuario por qué campo desea buscar, se busca ese registro utilizando la búsqueda binaria y se muestran los datos de ese registro. Además, se muestra la matriz antes y después de cada búsqueda. Por ejemplo: ¿Por qué campo desea buscar? apellido Ingrese el valor a buscar: malo El programa deberá mostrar la matriz antes y después de la búsqueda y los datos del registro si existe. cédula: 0108562554 nombre: juan apellido: malo edad: 25 * Datos de empresas y empleados Dados los siguientes datos de entrada en formato de cadena: String datosEmpresas = "emp1,Marcimex;emp2,Etapa;emp3,Elecaustro;"; String datosEmpleados = "emp1,Juan,1500;emp2,Arturo,1200;emp1,Pedro,1100;" + "emp2,Ramiro,1400;emp1,Jaime,900;emp3,Xavier,800;" + "emp3,Jorge,1000;emp1,Edgar,1200;emp3,Daniel,950;"; La variable datosEmpresas almacena el código y nombre de una lista de empresas, en donde cada dato está separado por coma y cada registro por punto y coma. 120 Angel Vázquez-Patiño Universidad de Cuenca La variable datosEmpleados almacena el código de la empresa a la que pertenece un empleado, el nombre del empleado y el salario de una lista de empleados, en donde cada dato está separado por coma y cada registro por punto y coma. Realizar un programa que haga lo siguiente: 1. Mostrar los datos de una empresa en particular dado el código de la misma. 2. Listar todas las empresas. 3. Listar los empleados de una empresa en particular ordenados de forma descendente según el salario. 4. Mostrar un listado de empresas con el salario promedio de los empleados de la misma. Ejemplo 1. Mostrar los datos de una empresa Se pide al usuario el código de la empresa que desea mostrar • Código: emp3 El sistema muestra los datos de la empresa • Código: emp3 • Nombre: Elecaustro 2. Listar todas las empresas. Código Nombre emp1 Marcimex emp2 Etapa emp3 Elecaustro 3. Listar los empleados de una empresa en particular ordenados de forma descendente según el salario. Se pide al usuario el código de la empresa que desea mostrar • Código: emp1 El sistema muestra los empleados de la empresa emp1 (Marcimex) ordenados de forma descendente según el salario. Empresa: Marcimex 121 Angel Vázquez-Patiño Universidad de Cuenca Empleado Salario Juan 1500 Edgar 1200 Pedro 1100 Jaime 900 4. Mostrar un listado de empresas con el salario promedio de los empleados de la misma. (Tenga en cuenta que los datos pueden tener decimales) Empresa Salario promedio Marcimex 1175 Etapa 1300 Elecaustro 916.67 * Estadística descriptiva: frecuencias e histograma 1. Pedir al usuario el número de datos N. Validar que N sea un número en el intervalo [10, 25]. 2. Generar un arreglo con N datos aleatorios en el intervalo [1, 20]. 3. Pedir al usuario el número de rangos R para crear el histograma, con la condición de que R sea un divisor de la nota máxima posible (20). 4. Generar la matriz de resumen (explicada en el ejemplo). 5. Generar y mostrar el histograma utilizando una matriz. Ejemplo 1. El programa solicita al usuario el número de datos a generar Número de datos: 20 2. Generar un arreglo de N datos aleatorios entre 1 y 20, inclusivo. 1 2 3 3 7 7 6 9 8 6 10 12 13 15 17 18 18 19 20 20 3. Pedir al usuario el número de rangos R para crear el histograma. Número de rangos: 4 4. Generar la matriz de resumen. 122 Angel Vázquez-Patiño Universidad de Cuenca 1 5 4 6 10 7 11 15 3 16 20 6 Nota: las columnas de esta matriz representan, de izquierda a derecha, el límite inferior, el límite superior y la frecuencia de cada rango. 5. Generar y mostrar el histograma utilizando una matriz # # # # # # # # # # # # # # # # # # # # 1-5 6-10 11-15 16-20 Un algoritmo voraz para el número cromático Vea https://youtu.be/DyRh5UhtVvw Algoritmo de Floyd-Warshall El algoritmo de Floyd-Warshall es un algoritmo de análisis sobre grafos para encontrar el camino mínimo en grafos dirigidos ponderados. El algoritmo encuentra el camino entre todos los pares de vértices en una única ejecución. Vea https://youtu.be/T_eGloMib1w y https://youtu.be/DTfrTDQEfNk e implemente el algoritmo. Muestre también el diagrama de flujo del algoritmo. 123 Angel Vázquez-Patiño Universidad de Cuenca Funciones Ámbito de las variables 1. * ¿Cómo se conocen a las variables que son creadas dentro del programa y fuera de cualquier función? a) b) c) d) Estáticas Globales Instancia Locales 2. ¿Cuál es la diferencia entre una llamada de función por valor y una llamada de función por referencia? 3. ¿Cómo se conocen a las variables que son declaradas dentro de una función o bloque de código que pueden ser usadas sólo por sentencias que están dentro de esa función o bloque y no pueden ser conocidas por funciones fuera de donde fueron declaradas? 4. ¿Cuando se declara una variable global, es inicializada automáticamente por el sistema? 5. ¿Cuando se declara una variable local, es inicializada automáticamente por el sistema? 6. ¿Cuando una variable global y una variable local tienen el mismo nombre cuál tiene prioridad dentro de la función donde se declaró la variable local? 7. Miscelánea Algunos de los siguientes ejercicios son tomados del libro de Pérez Montes (2010) o del libro de la Editorial Macro (2001). 1. Implemente una función que imprima en pantalla el doble del valor que se le pasa como parámetro. 2. Implemente una función que reciba como parámetro un número N, y muestre por pantalla N veces el mensaje “Función ejecutándose”. Validar N para que sea mayor o igual a cero. 124 Angel Vázquez-Patiño Universidad de Cuenca 3. Implemente una función que devuelva el valor absoluto de cualquier número real dado. 4. Implemente una función que indique si un año es bisiesto o no. Un año es bisiesto si es múltiplo de 4 (por ejemplo 1984). Sin embargo, los años múltiplos de 100 sólo son bisiestos si a la vez son múltiplos de 400 (por ejemplo, 1800 no fue bisiesto, mientras que 2000 sí lo fue). 5. Implemente una función que calcule la distancia euclídea entre dos puntos. 6. Implemente una función que imprima en pantalla el seno, coseno y tangente de un ángulo dado. El ángulo puede estar en grados sexagesimales o radianes; para distinguir el uno del otro use otro parámetro. 7. Implemente una función que sume los 137 primeros números pares (>0). 8. Implemente una función que sume los n primeros números impares (>0). 9. Implemente una función que genere un número aleatorio real entre un rango enviado como parámetro. 10. Implemente una función que imprima en pantalla un número dado de asteriscos indicado en el parámetro recibido. El argumento indica el número de asteriscos del cateto del triángulo rectángulo que se “dibuja”. Por ejemplo, para un triángulo rectángulo de cateto 8, se imprimiría en pantalla * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 11. Implemente una función que reciba dos números y que devuelva el número mayor. 12. Implemente una función que reciba tres números y que devuelva el máximo. 13. Implemente una función que tenga como parámetro un arreglo de números reales y que devuelva el máximo de los números. 14. Implemente una función que tenga como parámetro una matriz de números reales y que devuelva el mínimo de los números. 125 Angel Vázquez-Patiño Universidad de Cuenca 15. Implemente una función que reciba dos enteros y muestre todos los números comprendidos entre ellos (de manera ascendente, desde el número menor hasta el número mayor), inclusive. Los números pueden ser ingresados en orden ascendente o descendente. 16. Implemente una función que calcule la suma 17. Implemente una función que calcule la suma (debe escribir también la función para realizar la potencia) 18. Implemente una función que transforme a binario un número entre 0 y 255. 19. Implemente una función que imprima en pantalla el área o el volumen de un cilindro, según se especifique. Para distinguir un caso de otro se le enviará a la función el carácter 'a' (para área) o 'v' (para el volumen). Además hemos de enviar a la función el radio y la altura. 20. Implemente una función que reciba como parámetros una cadena de caracteres y un carácter; la función devuelve el número de veces que se encuentra el carácter en la cadena. 21. Implemente una función que indique si un número entero es primo. 22. Implemente una función a la que se le pasa un número entero y devuelve el número (i.e., la cantidad) de divisores primos que tiene. 23. Implemente una función que indique si dos números enteros positivos son amigos. Dos números son amigos si la suma de sus divisores (distintos de ellos mismos) son iguales. 24. Implemente una función que calcule el máximo común divisor de dos números. 25. Implemente una función que calcule el máximo común divisor de tres números. 26. Implemente una función que calcule el mínimo común múltiplo de dos números. 27. Implemente una función que calcule el mínimo común múltiplo de tres números. 126 Angel Vázquez-Patiño Universidad de Cuenca 28. Implemente una función que voltee un número entero positivo dado. Por ejemplo, si se ingresa 98786, se devuelve 68789. 29. Implemente una función que reciba un arreglo de números enteros y devuelva el máximo común divisor de esos números. 30. Implemente una función que reciba un arreglo de números enteros y devuelva el mínimo común múltiplo de esos números. 31. Implemente una función que reciba como parámetros dos arreglos. La primera con los 6 números de una apuesta de la primitiva y la segunda con los 6 números ganadores. La función debe devolver el número de aciertos. 32. Implemente una función que reciba un arreglo que debe rellenar. Se leerá por teclado una serie de números hasta que el usuario escriba “PARAR” o hasta que el arreglo se llene: guarde sólo los pares e ignore los impares. Se devuelve la cantidad de impares ignorados. 33. Implemente una función que reciba una matriz de enteros y un número, e indique si el número se encuentra en la matriz. 34. Implemente una función que devuelva el valor máximo de una matriz. 35. Implemente una función que devuelva, en un arreglo, el área y el volumen de un cilindro. Hemos de pasarle a la función el radio y la altura. 36. Implemente una función que recibe un número entero y devuelve, en un arreglo, los divisores primos que tiene. 37. Implemente la función opera_tabla, a la que se le pasa dos matrices y qué operación se desea realizar: sumar, restar, multiplicar o dividir (mediante un carácter: 's', 'r', 'm', 'd'). La función devuelve una matriz con los resultados. 38. Implemente una función que calcule el n-ésimo término de la serie de Fibonacci. En esta serie el n-ésimo valor se calcula sumando los dos valores anteriores. Es decir fibonacci(n) = fibonacci(n-1) + fibonacci(n-2), siendo fibonacci(0) = 1 y fibonacci(1) = 1. 39. Igual que el ejercicio anterior, pero pudiendo configurar los valores de los dos primeros términos de la serie. 40. Implemente una función que reciba una matriz de enteros, representando un tablero de ajedrez. Disponemos de las constantes PB (peón blanco), TN 127 Angel Vázquez-Patiño Universidad de Cuenca (torre negra), etc. (P, T, C, A, R, D). La función debe devolver un valor booleano, que indique si el rey negro está amenazado. 41. Igual que el ejercicio anterior, pero indicando si existe jaque mate a las negras. 42. * Histograma Implemente un programa usando funciones que lea N números de enteros positivos entre 1 y 250. Se han definido los siguientes rangos: 0-50, 51-100, 101-150, 151-200, 201-250. Se debe mostrar el número de datos que está en cada uno de los rangos especificados, separados por un TAB. Además, se debe mostrar un histograma. Por ejemplo: Tabla de valores por rango --------------------------------------------------------------------------0-50 51-100 101-150 151-200 201-250 --------------------------------------------------------------------------17 8 10 5 32 --------------------------------------------------------------------------Histograma |----------------------------------------------------------------0-50 | ******************* 51-100 | ********* 101-150 | *********** 151-200 | ***** 201-250 | **************************************************** |----------------------------------------------------------------- Aritmética básica Visualizar el siguiente menú 1. 2. 3. 4. 5. Suma Resta Multiplicación División Salir 128 Angel Vázquez-Patiño Universidad de Cuenca Si no se ingresa un número del 1 al 5, se debe mostrar un error que lo indique y debe pedir el ingreso de una opción válida. Opción 1: suma dos números, el primero en el rango [-1000, -1] y el segundo en el rango [1, 1000]. Opción 2: resta dos números, el primero en el rango [-1000, 1] y el segundo en el rango [-1, 1000]. Opción 3: multiplica dos números, el primero en el rango [100, 200] y el segundo en el rango [-10, 2]. Opción 4: división del primer número entre el segundo; el primero en el rango [-10, 10] y el segundo en el rango [-5, -1] U [1, 5]. Potenciación Desarrolle un programa que pida dos números. Se debe calcular la potencia tomando como base el primer número y como exponente el segundo número dado. El resultado, luego de visualizarlo, debe elevarlo al cubo, ese resultado, luego de visualizarlo, debe elevarlo al cuadrado (se debe presentar este último resultado también). Aproximación de sinh-1 Para n→∞ (en la práctica un número suficientemente alto) la función sinh -1 de x se puede calcular con la siguiente serie de Taylor: Desarrollar un programa que calcule el valor de la función sinh -1 de un valor x dado. Las funciones para calcular el factorial y la potencia deben ser realizadas por usted (i.e., no utilizar ninguna función predefinida de ningún lenguaje de programación). La serie de Taylor nos da el valor de la función sinh -1 de x en radianes, el algoritmo que usted proponga debe mostrar el valor en radianes y en grados sexagesimales (i.e., escribir una función que pase radianes a grados sexagesimales). Tenga en cuenta que 1 radián es igual a 57.2958 grados sexagesimales. Función W de Lambert La función W de Lambert o también conocida como función Omega o log producto, es la función inversa de f(w)=wew donde ew es la función exponencial natural y w es cualquier número complejo. Para n→∞ (en la práctica un número suficientemente alto) la función W de Lambert de x se puede calcular con la siguiente serie de Taylor: 129 Angel Vázquez-Patiño Universidad de Cuenca Desarrolle un programa que pida los valores de x (cualquier número real) y n (cualquier número entero) para calcular el valor de la función W de Lambert de x con n términos de la serie de Taylor. El programa debe hacer uso de una función desarrollada por usted mismo llamada funcionW. No se pueden usar funciones predeterminadas de ningún lenguaje de programación para calcular el factorial o la potencia de un número (tampoco se puede usar el acento circunflejo, ^); esto quiere decir que debe desarrollar las funciones para calcular la potencia (llámela miPotencia) y el factorial (llámela miFactorial) de un número. Además, debe validar el valor de x como se indica en la serie de Taylor; para este fin, desarrolle una función llamada xValido (devuelve verdadero o falso de acuerdo a la validación) y una función miABS (devuelve el valor absoluto de cualquier número real). Factorial de un número Desarrolle un algoritmo para calcular el factorial de un número dado. Este algoritmo debe tener una función recursiva. Una explicación de funciones recursivas se encuentra en la sección 7.8 del libro de Alcalde Lancharro y García López (1992). Máximo común divisor y mínimo común múltiplo Desarrolle un programa que calcule el máximo común divisor (MCD) y el mínimo común múltiplo (MCM) de dos números ingresados por el usuario. El programa deberá manejar un menú con las siguientes opciones. 1. 2. 3. 4. Ingreso de datos (Se pide al usuario que ingrese los dos números) Máximo Común Divisor (Calcula el MCD) Mínimo Común Múltiplo (Calcula el MCM) Salir Ejemplo: 1. Ingreso de datos número1: 12 número2: 30 El MCD de 12 y 30 es: 6 El MCM de 12 y 30 es: 60 130 Angel Vázquez-Patiño Universidad de Cuenca El método de la bisección Implemente una función que utilice el método de la bisección (vea Quarteroni et al., 2014, pp. 43–47) para encontrar uno de los dos ceros de la función en el rango indicado por el usuario. 131 * El método de Newton El método de Newton es un algoritmo iterativo que permite encontrar los ceros (i.e., cortes con el eje de las abscisas) de una función f(x). El método trabaja con los valores de f(x) y f'(x) (i.e., la derivada de la función). Las aproximaciones del cero de la función están dadas por la fórmula iterativa que permite calcular una secuencia de valores x(k) (las aproximaciones del cero de la función) comenzando con un valor inicial x(0). El algoritmo termina cuando el valor absoluto de la diferencia entre una aproximación (x(k+1)) y la anterior (x(k)) es menor a un valor llamado tolerancia o cuando se cumple un número máximo de iteraciones. En la siguiente figura se pueden apreciar las primeras iteraciones generadas por el método de Newton con un valor inicial x(0) para la función f(x) = x + ex + 10/(1 + x2) - 5. Para este ejercicio se va a aproximar el cero de la función f(x) = π/3 - x + x2 - x3; f'(x) = - 1 + 2x - 3x2. 1. Escriba una función valorInicial() que genere la aproximación inicial x(0) (valor real) en el rango [-½π, ⅔π]. Utilice una función predeterminada para usar el valor de π, no una aproximación. 2. Escriba una función funcionEvaluada(x) que devuelva el valor de la función f(x) evaluada en el punto x que se envía como parámetro. Utilice una función predeterminada para usar el valor de π, no una aproximación. 3. Escriba una función funcionDerivada(x) que devuelva el valor de la función f'(x) evaluada en el punto x que se envía como parámetro. Angel Vázquez-Patiño Universidad de Cuenca 4. Escriba una función newton(x0, tol, nmax) que devuelva en una matriz los resultados del método. x0, tol y nmax son respectivamente x(0), tolerancia y número máximo de iteraciones. En la primera fila de la matriz se debe devolver 1) la aproximación del cero de la función, 2) el valor de f(x) en ese punto, 3) el número de iteraciones que se hicieron para encontrar la aproximación del cero y 4) la diferencia entre las aproximaciones x(k+1) y x(k) (i.e., la primera fila no debe tener más de 4 columnas). En la segunda fila de la matriz se debe devolver la secuencia de aproximaciones x(0), x(1), x(2), …, x(n). Por ejemplo, la función podría devolver una matriz (los valores no necesariamente reflejan la salida de una ejecución del programa; sólo se pretende aclarar el número de columnas que tendría cada fila) 1.023 -0.010 0.002 31.000 0.001 2.100 1.010 0.900 ... 1.019 1.200 1.022 1.023 Si en algún momento el valor de f'(x) llega a ser cero, escribir en pantalla “La derivada de la función fue cero en m” (m es el valor de x donde se evaluó la derivada de la función) y use un valor de 0.0000001 para la derivada en esa iteración. 5. Escribir una función mostrarMatriz(matriz) para mostrar la matriz que devuelve la función newton(x0, tol, nmax) enviando como parámetro x0 el valor generado por la función valorInicial(). Esta función debe primero mostrar los valores de la primera fila en forma horizontal (debe indicar a qué corresponde cada valor) y luego las aproximaciones del cero de la función (segunda fila) en forma vertical. Ordenamiento de n números • Diseñe una función que ordene los números de un arreglo que se le pasa. Se devuelve un arreglo con los números ordenados. • Diseñe una función que ordene los números de una matriz que se le pasa. Se devuelve una matriz con los números ordenados. 133 Angel Vázquez-Patiño Universidad de Cuenca Búsqueda lineal • Diseñe una función que realice la búsqueda lineal de un arreglo. La función devuelve el índice (del arreglo original) en donde se encuentra el número buscado; si no se encuentra el número, la función devuelve -1. Una explicación de la búsqueda lineal se puede encontrar en la sección 6.2 del libro de Alcalde Lancharro y García López (1992). • Diseñe una función que realice la búsqueda lineal de una matriz. La función devuelve el índice (de la matriz original) en donde se encuentra el número buscado; si no se encuentra el número, la función devuelve (-1, -1). Una explicación de la búsqueda lineal en matrices se puede encontrar en la sección 6.2.3 del libro de Alcalde Lancharro y García López (1992). Búsqueda binaria o dicotómica Diseñe una función que realice la búsqueda dicotómica o binaria de un arreglo. La función devuelve el índice (del arreglo original) en donde se encuentra el número buscado; si no se encuentra el número, la función devuelve -1. Una explicación de la búsqueda binaria o dicotómica se puede encontrar en la sección 6.3 del libro de Alcalde Lancharro y García López (1992). Juego de dados entre dos En el juego cada jugador tiene dos dados (hay cuatro dados en total). En cada turno los dos jugadores lanzan los dos dados al mismo tiempo. El juego termina cuando la suma de los valores de ambos jugadores es igual, e.g., el un jugador saca 3 y 5 (suman 8), y el segundo jugador saca 6 y 2 (suman 8). El ganador es la persona cuya suma de valores de lanzamientos sea mayor. Por ejemplo, en la siguiente tabla se muestra un juego que concluye en el turno 4 (pues la suma es igual); el ganador es el jugador 2. 134 Angel Vázquez-Patiño Universidad de Cuenca En el caso de que la suma total sea igual para ambos jugadores, se debe continuar el juego; nuevamente, termina cuando la suma de los valores de ambos jugadores es igual. Esto significa que siempre uno y sólo uno de los jugadores es ganador. Se debe ir mostrando los valores sacados por los dos jugadores en cada turno. Por ejemplo, lo siguiente es una ejecución del programa: Inicia el juego. Turno 1 2 3 4 Jugador 1 Dados 1 y 2 1 y 3 4 y 1 6 y 6 5 y 4 Suma total Suma 4 5 12 9 30 Jugador 2 Dados 1 y 2 2 y 2 3 y 5 2 y 4 6 y 3 Suma total Suma 4 8 6 9 27 Finaliza el juego. El ganador es: Jugador 1. 1. Implemente una función que devuelva un número entero al azar en el rango [1, 6]. 2. Implemente una función que devuelva la suma (como número entero) de dos números al azar en el rango [1, 6]. En esta función tiene que utilizar la función implementada en el punto anterior. 3. Debe mostrar los valores sacados en cada turno mediante una función. Debe utilizar secuencias de escape para poder presentar la información con las tabulaciones pertinentes que presenten los resultados como se mostró en el ejemplo de ejecución del programa (i.e., perfectamente alineados). 135 Angel Vázquez-Patiño Universidad de Cuenca Manejo de Caracteres y Cadenas Miscelánea 1. Dada una cadena, presentar de manera vertical cada letra de la cadena con su respectivo valor ASCII (primera columna la letra, segunda columna el valor). 2. Hacer un programa que ingrese una cadena de caracteres y determine el número de mayúsculas y el número de minúsculas. 3. Sustituir todos los espacios en blanco de una frase por un asterisco. 4. Implemente una función que devuelva una cadena sin los espacios en blanco. 5. Ingresar una frase y reportar cada palabra en una línea diferente. 6. Solicitar el ingreso de los apellidos de dos personas. Mostrar un mensaje indicando si son iguales o distintos. 7. Desarrolle un algoritmo que pida el ingreso de un nombre y un apellido de dos personas e indique si las dos personas tienen el mismo apellido. Se pide como una sola cadena el nombre y apellido de una persona y como otra cadena el nombre y apellido de la otra persona. 8. Solicitar el ingreso del apellido, nombre y edad de dos personas como cadenas (validar que sea una edad correcta entre 0 y 130 años). Mostrar el nombre de la persona con mayor edad. 9. Leer una cadena y decir si es un número entero o real válido. Asuma que el usuario ingresa solamente números (0-9) y puntos (.). 10. Contar cuántas palabras tiene una cadena. Escribir dos versiones del programa: a) Asumir que cada palabra está separada por un sólo espacio en blanco. b) No se sabe cómo están separadas las palabras: pueden estar separadas por más de un espacio en blanco. 11. Escriba un programa que lea una frase y a continuación visualice cada palabra de la frase en columnas, seguida del número de letras que tiene cada palabra. 136 Angel Vázquez-Patiño Universidad de Cuenca 12. Ingresar una frase y modificarla convirtiendo el primer carácter de cada palabra si esta fuera una letra, de minúsculas a mayúsculas. 13. Mostrar el número de veces que aparece la letra a en la cadena “Mañana es sábado y voy a irme a pasear por los hermosos parques de Cuenca”. 14. Muestre el número de veces que aparecen las letras a, o y e en la cadena “Mañana es sábado y voy a irme a pasear por los hermosos parques de Cuenca”. Además, si el número de veces que se repite la a es superior a 10 debe aparecer el mensaje “Exceso de a”, si el número de veces que se repite la o es superior a 5 debe mostrarse “Exceso de o” y si se repite más de 3 veces la letra e debe mostrarse “Exceso de e”. 15. Contar el número de letras del alfabeto español de un texto ingresado. 16. Contar el número de vocales que se encuentran en una cadena. 17. Contar el número de consonantes que se encuentran en una cadena. 18. El usuario ingresa una frase y el programa debe mostrar cuántas palabras de una letra, de dos letras, de tres letras, de cuatro letras y de cinco o más letras existen en el texto ingresado. Asuma que no hay signos de puntuación ni interrogación (i.e. sólo se ingresan letras). Ejemplo: Ingrese una frase Una frase no debe contener palabras innecesarias así como un párrafo no debe contener frases innecesarias Resultados 1 2 3 4 5+ letra : letras: letras: letras: letras: 0 3 2 3 8 palabras palabras palabras palabras palabras 19. Dada la cadena “En mi próxima vida, creeré en la reencarnación”, mostrar lo siguiente: a) b) c) d) Su longitud El carácter asociado al índice 7 La subcadena “creeré” El índice que ocupa el carácter ‘x’, desde la izquierda 137 Angel Vázquez-Patiño Universidad de Cuenca e) f) g) h) El índice que ocupa el carácter ‘x’, desde la derecha La cadena transformada a mayúsculas La cadena transformada a minúsculas La cadena transformadas las minúsculas a mayúsculas y las mayúsculas a minúsculas i) Por último, comprobar si el primer carácter de la cadena es ‘E’ y mostrar un mensaje que lo indique 20. Verificar si una cadena de texto almacenada en la cadena nif, es un NIF correcto o no. Si lo es, se imprimirá en pantalla su parte numérica; si no lo es, se mostrará el mensaje “NIF no válido”. Se tendrá en cuenta lo siguiente: Suponer que los NIFs tienen 8 dígitos y, a continuación, una letra (no importa que sea mayúscula o minúscula). Pista: dos condiciones que debe cumplir el NIF: tener 9 caracteres y que el último sea una letra. Comprobado esto, verificar que el resto de caracteres son dígitos. 21. Solicitar el ingreso del nombre y edad de dos personas. Validar el nombre ingresado: 1) que no hayan espacios o caracteres diferentes a las vocales (vocales con tildes o diéresis también), consonantes, o la ñ (u otros caracteres usados en nombres en español) y 2) que sólo la primera letra del nombre esté en mayúscula (si no lo está, transformar el nombre a un formato donde la primera letra sea mayúscula y las demás minúsculas). Validar que sea una edad correcta: 1) que no hayan caracteres que no sean números y 2) verificar que la edad esté entre 0 y 150 años. Mostrar el nombre de la persona con mayor edad. 22. Invertir las palabras de una cadena. Por ejemplo, si la cadena es “Esta es una prueba de programación”, el resultado es “programación de prueba una es Esta”. 23. Implemente un programa que reciba una cadena S y una letra X, y coloque en mayúsculas cada ocurrencia de X en S (el programa debe modificar la variable S). 24. Ingresar una cadena de caracteres formadas por números y letras (en ese orden) y obtenga otra cadena donde aparezca cada letra tantas veces como lo indique el número que lo precede. E.g. si la cadena es 2w4r5f se debe obtener la siguiente cadena: wwrrrrfffff. 138 Angel Vázquez-Patiño Universidad de Cuenca 25. Leer una frase y encontrar la palabra de mayor longitud. El programa debe imprimir la palabra y el número de caracteres de la misma. 26. Ingresar una cadena de caracteres y obtener otra con todos los caracteres de las posiciones impares de la cadena. 27. Hacer un programa que al recibir como dato una cadena de caracteres que represente una fecha en formato (dd/mm/aa), genere otra cadena con la misma fecha pero con formato (dd de nombre del mes de aaaa). E.g. si se ingresa la cadena 20/11/2006 la otra cadena será 20 de Noviembre de 2006. 28. Escriba un programa para ingresar un número telefónico en formato de cadena y que luego lo convierta de la siguiente manera: Número Telefónico: 5256284000 Nueva Cadena: (52)-5-6284000 29. Escribir un programa que al recibir como datos dos cadenas de caracteres forme una tercera cadena intercalando los caracteres de las palabras de las cadenas recibidas. 30. Implementar una función cuya entrada sea una cadena S y un factor de multiplicación N, y genere la cadena N veces. Por ejemplo: Hola, 3 se convertirá en Hola Hola Hola. 31. Contar cuántas veces se encuentra una subcadena dentro de una cadena. 32. Hacer un programa que elimine todas las ocurrencias de una subcadena dentro de una cadena. 33. Ingrese un texto e indique qué caracteres alfanuméricos no han aparecido en el texto. 34. Ingrese un texto e indique el porcentaje de palabras que tiene menos de 5 caracteres y el porcentaje de palabras con 5 o más caracteres. 35. Escriba un programa que lea una frase y sustituya todas las secuencias de dos o varios blancos por un solo blanco y visualizar la frase obtenida. 36. Escriba un programa que calcule la frecuencia de aparición de las vocales de un texto proporcionado por el usuario. Esta solución se debe presentar en forma de histograma, e.g.: 139 Angel Vázquez-Patiño a e i o u 15 8 5 1 6 Universidad de Cuenca *************** ******** ***** * ****** 37. Dada una cadena de caracteres. Realizar lo siguiente: a) b) c) d) e) f) g) h) i) j) Extraer los n primeros caracteres de la cadena. Extraer los n últimos caracteres de la cadena. Eliminar los espacios en blanco que haya al final de la cadena. Eliminar los espacios en blanco que haya al comienzo de la cadena. Eliminar de una cadena los n caracteres que aparecen a partir de la posición p. Eliminar la primera aparición de una cadena dentro de otra. Insertar una cadena dentro de otra a partir de la posición p. Contar el número de veces que aparece una cadena dentro de otra. Borrar todas las apariciones de una cadena dentro de otra. Sustituir todas las apariciones de una cadena dentro de otra, por una tercera. 38. Un grupo de inteligencia militar desea codificar los mensajes secretos de tal forma que no puedan ser interpretados con una lectura directa, para lo cual han establecido las siguientes reglas: a) Todo mensaje debe tener sus letras en mayúsculas. b) Reemplazar cada letra por la que sigue según abecedario, excepto Z que se deberá reemplazar con la letra A. c) Reemplazar cada dígito encontrado por el siguiente número excepto el 9 que deberá ser reemplazado por el 0. 39. Dada una palabra (una sola palabra) indicar si es palíndromo. Puede ver más información en https://goo.gl/NkkZw. 40. Dada una frase (una o más palabras) indicar si es palíndromo. Ignore mayúsculas y minúsculas, signos de puntuación y espacios en blanco. 41. El usuario ingresa una hora como cadena de caracteres; la hora no necesariamente cumple con el formato hh:mm:ss (e.g., 01:09:04) sino que puede estar expresada, por ejemplo, de la siguiente manera: 1:09:4, 1:9:4, 01:09:4, etc (siempre primero la hora, segundo los minutos y luego los 140 Angel Vázquez-Patiño Universidad de Cuenca segundos). El programa debe mostrar la hora en formato de cadena de caracteres luego de un número n de segundos/minutos/horas ingresados por el usuario. El usuario escoge de un menú si quiere que n sean segundos, minutos u horas. Ejemplo, si se ingresa 1:8:04, y se escoge 60 segundos (se suma 60 segundos a la hora ingresada), el resultado es 01:09:04 (el resultado sí debe seguir el formato hh:mm:ss). 42. * Escribir una función llamada terminaEnVocal que verifique si una palabra termina en vocal independientemente de si está en mayúsculas o minúsculas. También escribir una función denominada manipulacionDeCadenas que reciba como parámetro una frase y visualice en pantalla (una en cada línea) las palabras de la misma y el número total de palabras que terminan en vocal. La función de verificación de si termina en vocal o no, debe ser utilizada para contar el número total de palabras que terminan en vocal. A continuación se muestra un ejemplo: Entrada Ingrese la frase: HolA mundo cruel Salida HolA mundo cruel El número de palabras que terminan en vocal es: 2 43. * Implementar un algoritmo que permita gestionar las siguientes opciones: a) Función que permita mostrar un menú de las diferentes opciones b) Función que permita ingresar un listado de números enteros separados por comas (,) en una variable global de tipo cadena. c) Función que permita calcular el promedio de los números ingresados en la cadena d) Función que permita extraer el menor o el mayor de los números de la cadena, en este caso es obligatorio el uso de parámetros para definir si se extrae el menor o el mayor. A continuación se muestra un ejemplo de ejecución del programa: Ingrese los números separados por comas: 4,5,6,12,13,5,8,7 Menú 141 Angel Vázquez-Patiño 1. 2. 3. 4. Universidad de Cuenca Promedio Máximo Mínimo Salir Elija una opción [1-4]: 1 El promedio es: 7.5 Menú 1. Promedio 2. Máximo 3. Mínimo 4. Salir Elija una opción [1-4]: 2 El máximo es: 13 Menú 1. Promedio 2. Máximo 3. Mínimo 4. Salir Elija una opción [1-4]: 3 El mínimo es: 4 Menú 1. Promedio 2. Máximo 3. Mínimo 4. Salir Elija una opción [1-4]: 4 Saliendo del programa... 44. Dados dos números en forma de arreglo de caracteres, implemente una función que genere el arreglo suma. Ejemplo: Sea A = { ‘2’, ‘0’, ‘1’, ‘2’ } 142 2 0 1 2 Angel Vázquez-Patiño Universidad de Cuenca Sea B = { ‘1’, ‘9’ } suma(A, B) = { ‘2’, ‘0’, ‘3’, ‘1’ } 1 9 2 0 3 1 La función que se pide recibe como argumentos dos arreglos de caracteres, y devuelve como resultado un arreglo de caracteres. El arreglo resultado tendrá el mínimo tamaño necesario para contener el número; o sea, sin “ceros a la izquierda” 45. Escribir un programa que elimine la k-ésima palabra de una cadena. Debe escribir una función para realizar esto. La función recoge como parámetros la cadena y k, y devuelve la cadena de resultado. 46. Construir una función para que busque una subcadena en una cadena a partir de una determinada posición y que devuelva la posición donde se encuentra la subcadena en caso contrario que devuelva cero. 47. Escriba un programa que cuente el número de palabras que tengan al menos cuatro vocales diferentes dado un párrafo. Luego, escribir una función que recoja como parámetros un párrafo y el número mínimo de vocales diferentes que deben tener las palabras a buscar; la función devuelve el número de palabras en el párrafo con el mínimo de vocales indicado. Finalmente, edite la función para que recoja un parámetro más que indique si el número mínimo es de vocales o consonantes; la función devuelve el número de palabras en el párrafo que tiene mínimo el número de vocales o consonantes de acuerdo a lo que se indique. 48. Implemente una función que voltee una palabra (cadena) dada. Por ejemplo, si se ingresa arepa, se devuelve apera. Además, indicar si esas dos palabras son iguales. 49. * Un anagrama es una palabra o frase formada intercambiando (en cualquier orden) las letras de otra palabra o frase. Por ejemplo Esponja es un anagrama de Japonés. Escriba una función que determine si una cadena es un anagrama de otra (“las palabras poseen las mismas letras, con la misma cantidad de apariciones, pero en un orden diferente”). Ignore mayúsculas y minúsculas, signos de puntuación y espacios en blanco. Puede ver más información en https://goo.gl/hXM1vS. 50. Dada una cadena de caracteres, escriba una función que imprima en pantalla todas las permutaciones de los caracteres de la cadena de entrada. 143 Angel Vázquez-Patiño Universidad de Cuenca Ejemplo: permutaciones(“abc”) imprime: {“abc”, “acb”, “bac”, “bca”, “cab”, “cba”} 51. Ejercicio * Datos personales Implemente un programa usando funciones que lea cadenas de caracteres en el siguiente formato: Nombres;Apellidos;Profesión;Edad;Lugar de Residencia Los valores entre punto y comas pueden estar formados por letras, números o espacios en blanco. Por ejemplo: Juan;Pérez Torres;Ingeniero;37;Cuenca Karen Susana;López Alvear;Economista;32;Loja El programa debe separar de cada cadena de caracteres, cada valor entre punto y coma y mostrarlos como resultado en líneas separadas: Por ejemplo: Nombres: Juan Apellidos: Pérez Torres Profesión: Ingeniero Edad: 37 Vive en: Cuenca Nombres: Karen Susana Apellidos: López Alvear Profesión: Economista Edad: 32 Vive en: Loja Estadísticas de texto Ejercicio propuesto por René Estrella. El usuario ingresa un texto. El programa muestra las siguientes estadísticas acerca del texto ingresado: 1. conteo de vocales 144 Angel Vázquez-Patiño 2. 3. 4. 5. 6. 7. 8. conteo conteo conteo conteo conteo conteo conteo Universidad de Cuenca de consonantes de dígitos de caracteres especiales de mayúsculas de minúsculas de palabras categorizadas por longitud total de palabras Ejemplo: El usuario ingresa: Náufrago (título original en inglés: Cast Away) es una película dirigida por el cineasta estadounidense Robert Zemeckis, protagonizada por Tom Hanks y estrenada en el año 2000. El programa muestra: Vocales: 59 Consonantes: 78 Dígitos: 4 Caracteres especiales: 10 Mayúsculas: 7 Minúsculas: 130 Palabras categorizadas por número de caracteres: 1: 1 2: 5 3: 5 4: 2 5 o más: 14 Total palabras: 27 El ejemplo ilustra los siguientes aspectos: 1. Las vocales tildadas se cuentan como caracteres especiales, y no como vocales. 2. El conteo de vocales y consonantes considera tanto mayúsculas y minúsculas. Por ejemplo, el número de consonantes (78), corresponde a 6 mayúsculas y 72 minúsculas. * Analizador de tweets Ejercicio propuesto por René Estrella. 145 Angel Vázquez-Patiño Universidad de Cuenca El objetivo de este ejercicio es escribir un analizador simple de tweets. El dato de entrada para el programa sería el texto de un tweet y el programa debería mostrar la siguiente información: 1. Número y lista de cuentas de twitter mencionadas (las cuentas de twitter empiezan con @) 2. Número y lista de hashtags mencionados (los hashtags empiezan por #) 3. Conteo de palabras según el número de letras: número de palabras con una letra, con dos letras, con tres letras, con cuatro letras, con cinco letras, y con más de cinco letras. Este conteo incluye cuentas y hashtags. Ejemplo Tweet: Sigue las últimas noticias de #Cuenca, #Ecuador y el Mundo en @eltiempocuenca #marcandodiferencia @IGecuador Resultados 2 cuentas: eltiempocuenca IGecuador 3 hashtags: Cuenca, Ecuador marcandodiferencia Conteo de palabras: 1 letra: 1 2 letras: 3 3 letras: 1 4 letras: 0 5 letras: 2 5+ letras: 7 Eliminación de n-ésima palabra Ejercicio propuesto por René Estrella. El usuario ingresa un texto, una palabra y un entero n. El programa elimina la nésima ocurrencia de la palabra en el texto y muestra el texto resultante. No se considera distinción entre mayúsculas y minúsculas. 146 Angel Vázquez-Patiño Universidad de Cuenca Ejemplo: Supongamos que el usuario ingresa el siguiente texto: El rally se correrá también en Bolivia, específicamente en el extremo sur del Lago Titicaca, el más alto del mundo, y el ya clásico Salar de Uyuni. Luego ingresa la palabra “el” y el número 3. En el texto ingresado hay 6 ocurrencias de la cadena “el”, pero sólo 4 de ellas corresponden a una palabra, ya que no se consideran las ocurrencias de “el” que no forman una palabra completa, por ejemplo “...del Lago Titicaca...” y “...más alto del mundo...”. Como asumimos que el usuario desea eliminar la 3 ra ocurrencia de la palabra en el texto, se eliminaría la que corresponde a “...el más alto...”, y por lo tanto lo que debería mostrar el programa es: El rally se correrá también en Bolivia, específicamente en el extremo sur del Lago Titicaca, más alto del mundo, y el ya clásico Salar de Uyuni. Cifrado por sustitución “En un sistema de cifrado por sustitución, cada letra o grupo de letras se reemplazan por otra letra o grupo de letras para disfrazarla. Uno de los sistemas de cifrado más viejos conocido es el sistema de cifrado de César, atribuido a Julio César. En este método, a se vuelve D, b se vuelve E, c se vuelve F, ... , y z se vuelve C. Por ejemplo, ataque se vuelve DWDTXH.” (Tanenbaum y Wetherall, 2012, p. 662) 1. Escribir un programa que permita codificar mensajes secretos de forma que no puedan ser interpretados con una lectura directa. Se debe utilizar las siguientes reglas: a) Se debe reemplazar cada letra por la siguiente más uno, es decir en lugar de la “a” iría la “c”, excepto las letras “y” y “z”, que se deberá reemplazar con la letra “a” y “b” respectivamente. b) De la cadena resultante en el numeral 1 se deberá remplazar las letras vocales por los números 0,1,2,3,4, respectivamente. c) El mensaje resultante debe contener la primera letra de cada palabra del mensaje en mayúscula. Se puede usar variables globales y funciones según se necesite, pero es obligatoria la función ENCRIPTAR que reciba como entrada el mensaje y devuelva el mensaje encriptado. 147 Angel Vázquez-Patiño Universidad de Cuenca 2. “Una ligera generalización del sistema de cifrado de César permite que el alfabeto de texto cifrado se desplace k letras, en lugar de siempre [un número fijo]. En este caso, k se convierte en una clave del método general de alfabetos desplazados circularmente.” (Tanenbaum y Wetherall, 2012, p. 662) Si k=2, por ejemplo, sustituiremos la “a” por la “c”, la “b” por la “e”, y así sucesivamente. El problema que aparece en las últimas “k” letras del alfabeto tiene fácil solución: en el ejemplo, la letra “y” se sustituirá por la “a” y la letra “z” por la “b”. La sustitución debe aplicarse a las letras minúsculas y mayúsculas y a los dígitos de igual manera: el “0” se sustituye por el “2”, el “1” por el “3” y así hasta llegar al “9”, que se sustituye por el “1”. Escriba un programa que lea un texto y el valor de k, y muestre su versión encriptada. Cifrado por transposición La información acerca de los sistemas de cifrado por transposición se basa en el libro de Tanenbaum y Wetherall (2012). Los sistemas de cifrado por sustitución (vea el ejercicio llamado Cifrado por sustitución, página 147) conservan el orden de los símbolos de texto plano, pero los disfrazan. En contraste, los sistemas de cifrado por transposición reordenan las letras pero no las disfrazan. En la figura 9 se presenta un sistema de cifrado por transposición común, la transposición columnar. La clave del sistema de cifrado es una palabra o frase que no contiene letras repetidas. En este ejemplo, la clave es MEGABUCK. El propósito de la clave es ordenar las columnas; la columna 1 está bajo la letra clave más cercana al inicio del alfabeto, y así sucesivamente. El texto plano se escribe de manera horizontal, en filas, las cuales se rellenan para completar la matriz si es necesario. El texto cifrado se lee por columnas, comenzando por la columna cuya letra clave es la más baja. 148 Angel Vázquez-Patiño Universidad de Cuenca Figura 9: Un sistema de cifrado por transposición.Tomado de Tanenbaum y Wetherall (2012, p. 664). Desarrolle un programa de cifrado y descifrado por transposición. Una de las funciones que se desarrollen (cifrar) en el programa debe tener como parámetros el texto a cifrar y la clave, y debe devolver el texto cifrado. Otra de las funciones que se desarrollen (descifrar) en el programa debe tener como parámetros el texto cifrado y la clave, y debe devolver el texto descifrado. * Línea de comandos Simule una terminal que ejecute comandos para operaciones aritméticas básicas (sumar, restar, multiplicar, dividir) y de información de uso. Los comandos sumar, restar, multiplicar, dividir y estadísticas (sólo hay cinco comandos) tienen la siguiente sintaxis y funcionalidad: • Sumar num1,num2,num3,…,numN Uno se ingresa mediante el teclado el comando sumar (cualquier carácter del comando puede ser minúscula o mayúscula), un espacio y la lista de números (pueden ser reales; el separador de decimales es el punto) a sumar; todo en una misma línea. Luego de “dar enter” el resultado en la línea siguiente de la pantalla es Suma: valor de la suma. Si hay un error en la sintaxis, el programa debe mostrar un error; por ejemplo si se ingresa suma 1;3,4, el programa debe decir “Hubo un error de sintaxis en el comando ingresado.” • Restar num1,num2 Uno se ingresa mediante el teclado el comando restar (cualquier carácter del comando puede ser minúscula o mayúscula), un espacio y dos (2) números (pueden ser reales; el separador de decimales es el punto) a restar; todo en una misma línea. Luego de “dar enter” el resultado en la línea siguiente de la pantalla es 149 Angel Vázquez-Patiño Universidad de Cuenca Resta: valor de la resta (la resta es num1-num2). Si hay un error en la sintaxis, el programa debe mostrar un error; por ejemplo si se ingresa restar 1,3,4, el programa debe decir “Hubo un error de sintaxis en el comando ingresado.” • Multiplicar num1,num2,num3,…,numN Uno se ingresa mediante el teclado el comando multiplicar (cualquier carácter del comando puede ser minúscula o mayúscula), un espacio y la lista de números (pueden ser reales; el separador de decimales es el punto) a multiplicar; todo en una misma línea. Luego de “dar enter” el resultado en la línea siguiente de la pantalla es Multiplicación: valor de la multiplicación. Si hay un error en la sintaxis, el programa debe mostrar un error; por ejemplo si se ingresa multiplicar 1;3.2,4.2, el programa debe decir “Hubo un error de sintaxis en el comando ingresado.” • Dividir num1,num2 Uno se ingresa mediante el teclado el comando dividir (cualquier carácter del comando puede ser minúscula o mayúscula), un espacio y dos (2) números (pueden ser reales; el separador de decimales es el punto) a dividir; todo en una misma línea. Luego de “dar enter” el resultado en la línea siguiente de la pantalla es División: valor de la división (la división es num1/num2). Si hay un error en la sintaxis, el programa debe mostrar un error; por ejemplo si se ingresa dividir 1,3,4,5, el programa debe decir “Hubo un error de sintaxis en el comando ingresado.” • Estadísticas Uno se ingresa mediante el teclado el comando estadísticas (cualquier carácter del comando puede ser minúscula o mayúscula, o tener la letra i con tilde o sin tilde). Luego de “dar enter” el resultado en la línea siguiente de la pantalla es Número de veces que se utilizó correctamente cada comando Sumar: num veces Restar: num veces Multiplicar: num veces Dividir: num veces Si el número de veces es 1, debe decir 1 vez (y no 1 veces). • Salir 150 Angel Vázquez-Patiño Universidad de Cuenca Uno se ingresa mediante el teclado el comando salir (cualquier carácter del comando puede ser minúscula o mayúscula) y se termina la ejecución del programa. Nota: antes del comando y después de los números que necesita el comando (en los comandos sumar, restar, multiplicar y dividir) no importa si se ingresan espacios en blanco; con que no haya un error en la sintaxis (entre el comando y los números que necesita el comando sólo debe haber un espacio), no debería haber ningún mensaje de error. Por ejemplo: espacio espacio espacio suMaR 1,2,3,4,5,6 espacio espacio no debería dar ningún error de sintaxis. Utilice/cree funciones donde se necesite. A continuación se muestra un ejemplo de ejecución del programa. Las líneas en negrita son los comandos (y los respectivos números que necesita el mismo) que se ingresan por parte del usuario. sumar 1, 2, 4 Suma: 7 RestaR 3,4 Resta: -1 MultiPlicar 4,5,3,2,4 Multiplicación: 480 Dividir 4,3 División: 1,333333333 ReSTar 5,4 Resta: 1 Suma 4,5,6,12,13,5,8,7 Hubo un error de sintaxis en el comando ingresado. EstAdísticAS Número de veces que se utilizó correctamente cada comando Sumar: 1 vez Restar: 2 veces Multiplicar: 1 vez Dividir: 1 vez Salir * Mantenimiento de datos de personas Se requiere realizar un programa que permita hacer un mantenimiento de los datos de personas. Generalmente un mantenimiento significa realizar operaciones de inserción, actualización, eliminación y búsquedas de registros; la actualización, eliminación y búsqueda, por lo general, se realiza en base a un campo específico 151 Angel Vázquez-Patiño Universidad de Cuenca (que identifica unívocamente a cada registro). Por ejemplo, la siguiente tabla muestra la información de tres personas (en este caso la cédula es el valor que identifica unívocamente a cada persona). Cédula Nombre Apellido Edad 01064634657 Juan Pérez 23 01064636638 Víctor Guzmán 21 01064688644 Pedro Flores 20 Los registros (un registro es el conjunto de valores de una misma persona) se deben ingresar en forma de cadena. La coma es el separador de valores de los campos (campo es cada dato del registro: cédula, nombre, apellido y edad) y el punto y coma es el separador de registros. La información de la tabla del ejemplo se representaría con la siguiente cadena: 01064634657,Juan,Pérez,23;01064636638,Víctor,Guzmán,21;01064688644,Pedro,Flor es,20; El programa debe permitir, mediante un menú: 1. Ingresar un nuevo registro. 2. Actualizar los valores de los campos de una persona (la cédula no se puede modificar). 3. Eliminar el registro de una persona. 4. Mostrar los valores de los campos de una persona. 5. Listar los registros de todas las personas. 6. Calcular el promedio de las edades de todas las personas. 7. Terminar el programa. Este ejercicio pretende mejorar sus destrezas para usar funciones, por eso, usted debe implementar las funciones que considere necesarias. Una restricción con la que debe cumplir su programa es que utilice una variable global para la cadena de datos de personas y para el número total de personas. Ejemplo: Ingreso Se le pide al usuario que ingrese los datos de la persona 152 Angel Vázquez-Patiño Universidad de Cuenca Cédula: 01064634657 Nombre: Juan Apellido: Pérez Edad: 23 Actualización Se le pide al usuario que ingrese una cédula existente y los nuevos valores del resto de campos Cédula: 01064634657 Nombre: Diego Apellido: Sarmiento Edad: 25 Si la cédula que se busca no se encuentra en la cadena que contiene la información de todas las personas, se muestra un mensaje de error: “La persona no ha sido registrada.”. Para este ejemplo, el resultado de la actualización de la cadena que contiene la información de las personas es: 01064634657,Diego,Sarmiento,25;01064636638,Víctor,Guzmán,21;01064688644,Pedro ,Flores,20; Eliminación Se le pide al usuario que ingrese la cédula de la persona a eliminar • Cédula: 01064634657 Se elimina el registro de esa persona de la cadena de personas: 01064636638,Víctor,Guzmán,21;01064688644,Pedro,Flores,20; Visualización Se le pide al usuario que ingrese la cédula • Cédula: 01064634657 El programa muestra el resto de campos Nombre: Juan Apellido: Pérez Edad: 23 153 Angel Vázquez-Patiño Universidad de Cuenca Si la cédula que se busca no se encuentra en la cadena que contiene la información de todas las personas, se muestra un mensaje de error: “La persona no ha sido registrada.”. Listar Se muestran uno a uno todos los registros de personas Cédula: 01064636638 Nombre: Víctor Apellido: Guzmán Edad: 21 Cédula: 01064688644 Nombre: Pedro Apellido: Flores Edad: 20 Promedio de edades Se calcula y muestra el promedio de las edades de todas las personas que estén en ese momento en la lista. 154 Angel Vázquez-Patiño Universidad de Cuenca Búsquedas Algunos de los siguientes ejercicios son basados en el libro de Gómez Fuentes y Cervantes Ojeda (2013). 1. Implemente un programa que pida al usuario el tamaño de un arreglo y que pida sus datos (números reales). Solicitar al usuario un número a buscar dentro del arreglo dado y que el programa determine si el número está en el arreglo y, de ser así, en qué posición está. 2. Implemente una función llamada busquedaSecuencial que tenga como parámetros un arreglo y un elemento a buscar en el arreglo. La función debe regresar la posición índice del elemento si se encuentra en el arreglo y -1 si no lo encuentra en el arreglo. 3. Implemente un programa que lea números enteros y que los almacene en un arreglo. Preguntar al usuario por un número y determinar si este número está en el arreglo usando búsqueda binaria. 4. Implemente la función busquedaBinaria que tenga como parámetros un arreglo y un elemento a buscar en el arreglo. La función debe regresar la posición índice del elemento si se encuentra en el arreglo y, si no se encuentra en el arreglo, regresar un -1. 5. El siguiente es un programa que le permitirá tener una idea de la eficiencia de los métodos de búsqueda en cuanto al número de comparaciones necesarias que se llevan a cabo en cada algoritmo y el tiempo que se demora cada uno en la ejecución. a) Implemente una función que reciba un arreglo de n elementos enteros y el algoritmo a utilizar para buscar uno de los elementos (son dos parámetros: arreglo de elementos y algoritmo de búsqueda). La función devuelve la posición en la que se encuentra el elemento (si no se encuentra, devuelve -1), el número de comparaciones realizadas para encontrarlo y el tiempo de ejecución en segundos. b) Genere un arreglo de 21 elementos con números aleatorios enteros en el rango [-15, 15]. Los números no deben repetirse en el arreglo. c) Utilice la función desarrollada en el literal a para buscar un elemento dado en el arreglo generado con cada uno de los algoritmos de búsqueda. 155 Angel Vázquez-Patiño Universidad de Cuenca Para efectos de comprobación de su programa, haga que la búsqueda sea de un número que está en el arreglo (lo escoge al azar). Con los resultados haga una tabla en donde se muestre el algoritmo, el número de comparaciones y el tiempo: ================================================ Tabla de comparación para algoritmos de búsqueda ================================================ -------------------------------------------------------Algoritmo # comparaciones Tiempo [seg.] ----------------------------------Algoritmo 1 ## ## Algoritmo 2 ## ## ... ... ... -------------------------------------------------------- d) Genere 1000 arreglos que cumplan con las condiciones del literal b. En cada uno de los arreglos generados se debe buscar un elemento al azar (que debe estar en el arreglo) utilizando la función del literal a. De cada búsqueda se debe ir guardando el número de comparaciones y el tiempo de cálculo utilizado. Finalmente, presente una tabla con estadísticas de eficiencia (estos datos son empíricos) de los algoritmos y un histograma para representar las mismas (el histograma presenta los valores normalizados; los dos signos de numeral en el histograma significa que debe poner los números que representa cada barra): ================================================ Tabla de comparación para algoritmos de búsqueda ================================================ Los resultados presentados son el promedio de la búsqueda de un elemento al azar (se asegura que está dentro del arreglo) en los 1000 arreglos generados aleatoriamente. Con el mismo arreglo generado aleatoriamente, se realizó la búsqueda del mismo elemento (elegido al azar) con todos los métodos; así en cada uno de los 1000 arreglos (en cada nuevo arreglo se eligió un nuevo elemento al azar para buscarlo). --------------------------------------------------------------Algoritmo # comparaciones Tiempo [seg.] promedio promedio ----------------------------------Algoritmo 1 ## ## 156 Angel Vázquez-Patiño Universidad de Cuenca Algoritmo 2 ## ## ... ... ... --------------------------------------------------------------======================================= Histograma para comparación de métricas ======================================= ----------------------------------------------------------------Algoritmo 1 | # comparaciones (prom) |▬▬▬▬▬▬▬▬▬▬ ## Tiempo [seg.] (prom) |▬▬▬▬▬▬▬ ## | Algoritmo 2 | # comparaciones (prom) |▬▬▬▬▬▬▬ ## Tiempo [seg.] (prom) |▬▬▬▬▬▬▬▬ ## | . | . . . | . . . | . . ----------------------------------------------------------------- e) De acuerdo a los datos, discuta la eficiencia de los métodos estudiados. ¿Qué método es el mejor y por qué?, ¿Qué método es el peor y por qué?, ¿Cuándo utilizaría cada método?, etc. 6. Ejercicio 157 Angel Vázquez-Patiño Universidad de Cuenca Ordenamiento Miscelánea Algunos de los siguientes ejercicios son basados en el libro de Joyanes Aguilar et al. (2003). 1. * Dada la siguiente lista {a, m, c, j, k} después de dos pasadas de un algoritmo de ordenación, la lista ha quedado {a, c, m, j, k}. ¿Qué algoritmo de ordenamiento se está utilizando? a) b) c) d) Inserción Selección Burbuja Ninguna de las anteriores 2. Dada la lista de números {-5, 18, -12, 17, -6, -20, -4, -8}, escribir cómo evolucionaría dicha lista hasta quedar completamente ordenada de manera descendente mediante: a) ordenamiento de burbuja, b) algoritmo de selección y c) algoritmo de inserción. 3. Dada la lista de letras {o, f, e, s, a, q, v, o}, escribir cómo evolucionaría dicha lista hasta quedar completamente ordenada de manera ascendente mediante: a) ordenamiento de burbuja, b) algoritmo de selección y c) algoritmo de inserción. 4. Dado un arreglo de números reales, escriba un método que ordene los elementos del arreglo de tal forma que los números pares aparezcan antes que los números impares. Además, los números pares deberán estar ordenados de forma ascendente, mientras que los números impares deberán estar ordenados de forma descendente. Esto es, el arreglo {1,2,3,4,5,6} quedará como {2,4,6,5,3,1}. 5. Genere un arreglo de 11 elementos guardando en cada elemento un número entero aleatorio entre [1, 15]. Grafique en un histograma horizontal los valores de cada elemento y vaya mostrando paso a paso la ordenación. Haga dos versiones: una para ordenación ascendente y otra ordenación descendente. Por ejemplo, si se tuvieran sólo 3 elementos las gráficas serían las siguientes: Iteración 0 (elementos sin ordenar): 158 Angel Vázquez-Patiño Universidad de Cuenca E01 ***** E02 * E03 ** Iteración 1: E01 * E02 ***** E03 ** Iteración 2: E01 * E02 ** E02 ***** ¡Fin! Los elementos se ordenaron luego de 2 iteraciones. 6. Genere un arreglo de 13 elementos guardando en cada elemento un número entero aleatorio entre [0, 10]. Grafique en un histograma horizontal los valores de cada elemento y vaya mostrando paso a paso la ordenación. Haga dos versiones: una para ordenación ascendente y otra ordenación descendente. Además se debe presentar un menú para elegir el método de ordenamiento a utilizar. 7. Se ha recolectado información del peso y la estatura de n personas. Implemente una función que reciba una matriz de 2×n en donde en la primera fila estén los datos de peso y en la segunda fila los datos de la estatura. La función devuelve la matriz ordenada de manera ascendente o descendente con respecto al peso o a la estatura. La función recoge como parámetros matriz, optOrdenamiento, optVariable, donde optOrdenamiento indica si es ordenamiento ascendente o descendente (una cadena asc o desc) y optVariable indica la variable con respecto a la cual se ordena (una cadena peso o estatura). 8. Se ha recolectado información del peso y la estatura de n personas. Implemente una función que reciba una matriz de 2 x n en donde en la primera fila estén los datos de peso y en la segunda fila los datos de la estatura (para realizar pruebas usted puede generar números reales aleatorios para el peso y la estatura de las n personas). La función devuelve la matriz ordenada de manera ascendente o descendente con respecto al peso o a la estatura. La función recoge como parámetros matriz, optOrdenamiento, optVariable, algOrdenamiento, donde optOrdenamiento 159 Angel Vázquez-Patiño Universidad de Cuenca indica si es ordenamiento ascendente o descendente (una cadena asc o desc), optVariable indica la variable con respecto a la cual se ordena (una cadena peso o estatura) y algOrdenamiento indica qué algoritmo de ordenamiento que se desea utilizar. 9. Implemente un programa que permita la introducción de 10 números enteros en un arreglo y, a través de un menú, la selección de uno de los métodos de ordenación estudiados (e.g., Selección, Burbuja, Inserción, Inserción binaria, Shell). Terminará con la presentación por pantalla del arreglo ordenado. 10. Implemente una función que permita ordenar por fechas y de mayor a menor una matriz de N elementos (filas N <= 40). Cada fila de la matriz es un registro, con los campos, de tipo entero, día (columna 1), mes (columna 2), año (columna 3) y número de contrato (columna 4). Damos por supuesto que la introducción de datos fue correcta, pudiendo existir diversos contratos con la misma fecha, pero no números de contrato repetidos. 11. Realizar una función que permita ordenar por fechas y de mayor a menor una matriz de N elementos (filas N <= 40). Cada fila de la matriz es un registro, con los campos, de tipo entero, día (columna 1), mes (columna 2), año (columna 3) y número de contrato (columna 4). Damos por supuesto que la introducción de datos fue correcta, pudiendo existir diversos contratos con la misma fecha, pero no números de contrato repetidos. Luego, dada la lista ordenada en forma decreciente, diseñar una función que devuelva el número de contratos realizados en una determinada fecha. 12. Ingrese nombres de equipos de fútbol con su respectivo puntaje; visualizarlos ordenados por el puntaje mostrando el número de iteraciones que se utilizaron. El usuario puede seleccionar el método que quiere utilizar para hacer la ordenación. 13. El siguiente es un programa que le permitirá tener una idea de la eficiencia de los métodos de ordenamiento en cuanto al número de comparaciones e intercambios que se llevan a cabo en cada algoritmo de ordenamiento y el tiempo que se demora cada uno en la ejecución. a) Implemente una función que reciba un arreglo de n elementos enteros y el algoritmo a utilizar para ordenarlos (dos parámetros: elementos y algoritmo). La función devuelve los elementos ordenados, el número de 160 Angel Vázquez-Patiño Universidad de Cuenca comparaciones y el número de intercambios realizados para ordenarlos, y el tiempo de cálculo en segundos. b) Genere un arreglo de 11 elementos con números aleatorios enteros en el rango [-9, 9]. c) Utilice la función desarrollada para ordenar el arreglo generado con cada uno de los algoritmos de ordenación. Con los resultados haga una tabla en donde se muestre el algoritmo, el número de comparaciones, el número de intercambios y el tiempo de cálculo en segundos: ==================================================== Tabla de comparación para algoritmos de ordenamiento ==================================================== --------------------------------------------------------------------Algoritmo # comparaciones # intercambios Tiempo [seg.] -----------------------------------------------Algoritmo 1 ## ## ## Algoritmo 2 ## ## ## Algoritmo 3 ## ## ## ... .. .. .. --------------------------------------------------------------------- d) Genere 9999 arreglos que cumplan con las condiciones del literal b. Cada uno de los arreglos generados deben ser ordenados utilizando la función del literal a. De cada arreglo ordenado debe ir guardando el número de comparaciones, el número de intercambios y el tiempo de cálculo en segundos. Finalmente, presente una tabla con estadísticas de eficiencia de los métodos y un histograma para representar las mismas (el histograma presenta los valores normalizados; los dos signos de numeral en el histograma significa que debe poner los números que representa cada barra): ==================================================== Tabla de comparación para algoritmos de ordenamiento ==================================================== Los resultados presentados son el promedio del ordenamiento de 9999 arreglos generados aleatoriamente. Con el mismo arreglo generado aleatoriamente, se realizó el ordenamiento con todos los algoritmos; así con cada uno de los 9999 arreglos. --------------------------------------------------------------------- 161 Angel Vázquez-Patiño Universidad de Cuenca # comparaciones # intercambios Tiempo [seg.] Algoritmo promedio promedio promedio -----------------------------------------------Algoritmo 1 ## ## ## Algoritmo 2 ## ## ## Algoritmo 3 ## ## ## ... .. .. .. --------------------------------------------------------------------======================================= Histograma para comparación de métricas ======================================= ----------------------------------------------------------------Algoritmo 1 | # comparaciones (prom) |▬▬▬▬▬▬▬▬▬▬ ## # intercambios (prom) |▬▬▬▬▬▬▬▬▬▬▬▬ ## Tiempo [seg.] (prom) |▬▬▬▬▬▬▬ ## | Algoritmo 2 | # comparaciones (prom) |▬▬▬▬▬▬▬ ## # intercambios (prom) |▬▬▬▬▬▬▬▬▬▬▬ ## Tiempo [seg.] (prom) |▬▬▬▬▬▬▬▬ ## | Algoritmo 3 | # comparaciones (prom) |▬▬▬▬▬▬▬▬▬▬▬▬▬▬ ## # intercambios (prom) |▬▬▬▬▬▬▬▬▬ ## Tiempo [seg.] (prom) |▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬ ## | . | . . . | . . . | . . ----------------------------------------------------------------- e) De acuerdo a los datos, discuta la eficiencia de los métodos estudiados. ¿Qué método es el mejor y por qué?, ¿Qué método es el peor y por qué?, ¿Cuándo utilizaría cada método?, etc. 14. El ejercicio está dividido en los siguientes pasos: a) Implemente una función que devuelva un número entero aleatorio en el rango [LímInferior, LímSuperior]. b) Genere un arreglo de n elementos, donde n es un número aleatorio entre 25 y 50. 162 Angel Vázquez-Patiño Universidad de Cuenca c) Llene el arreglo con números aleatorios enteros entre -99 y 99. d) La mitad (si n/2 no es entero, trúnquelo) del arreglo ordénelo con el método de la burbuja. e) La otra mitad del arreglo ordénelo con el método de la selección. f) Con las dos mitades ordenadas, aplique el método de la inserción para ordenar el arreglo completo. Nota 1: Dentro del método principal (main) solamente deben haber el arreglo generado con n elementos y máximo un arreglo auxiliar (dos arreglos en total). Nota 2: Cada método de ordenamiento debe estar implementado en una función diferente. 15. * El ejercicio está dividido en los siguientes pasos: a) Implemente una función que devuelva un número entero aleatorio en el rango [LímInferior, LímSuperior]. b) Implemente una función que devuelva una palabra cuyo número de letras sea dado como parámetro. Cada letra de la palabra es generada individualmente al azar; las letras deben ser sólo minúsculas. c) Genere un arreglo de n elementos, donde n es un número aleatorio entre 25 y 50. d) Llene el arreglo con palabras aleatorias de m letras, donde m es un número aleatorio entre 3 y 5. e) La mitad (si n/2 no es entero, trúnquelo) del arreglo ordénelo con el método de la burbuja. f) La otra mitad del arreglo ordénelo con el método de la selección. g) Con las dos mitades ordenadas, aplique el método de la inserción para ordenar el arreglo completo. Nota 1: Dentro del método principal (main) solamente deben haber el arreglo generado con n elementos y máximo un arreglo auxiliar (dos arreglos en total). Nota 2: Cada método de ordenamiento debe estar implementado en una función diferente. 16. Pregunta 163 Angel Vázquez-Patiño Universidad de Cuenca * Calificaciones de estudiantes El objetivo del programa es gestionar calificaciones de estudiantes. Se deben registrar n estudiantes (n ≥ 3, validar). De cada uno de los estudiantes se deben ingresar, el nombre y una calificación; los datos se registran en arreglos separados. A partir de los dos arreglos se deben ordenar los datos de acuerdo al nombre del estudiante de manera ascendente, obteniendo como resultado una matriz de nx2. Sobre la matriz resultante se tienen que obtener los nombres de los estudiantes que tienen la mínima calificación y la máxima calificación. Además, se deben obtener los nombres de los tres estudiantes con las máximas calificaciones y los nombres de los tres estudiantes con las mínimas calificaciones. Detallando los requerimientos utilizando un ejemplo, se tendría lo siguiente: 1. Escribir una función f1 que permita ingresar los datos de los estudiantes. Nombres Calificaciones Juan 16 Andrés 18 Pedro 15 María 11 Xavier 10 Ximena 17 Fernando 19 ... ... Jaime 5 2. Escribir una función f2 que reciba los dos arreglos ingresados en f1 y devuelva una matriz con los nombres y calificaciones de forma ascendente, por nombre. 164 Angel Vázquez-Patiño Universidad de Cuenca Andrés 18 Fernando 19 Jaime 5 Juan 16 A= María 11 Pedro 15 Xavier 10 ... ... Ximena 17 3. Escribir una función f3 que reciba como entrada la matriz generada en f2 y devuelva una matriz con la calificación mínima y calificación máxima. B= Jaime 5 Fernando 19 4. Escribir una función f4 que reciba como entrada la matriz generada en f2 y devuelva una matriz con las tres mayores calificaciones y las tres menores calificaciones. C= Fernando 19 Andrés 18 Ximena 17 Jaime 5 Xavier 10 María 11 Ordenamientos en matriz Desarrolle un programa que pida al usuario ingresar las dimensiones (nxm) de una matriz y rellene los elementos de dicha matriz con números enteros aleatorios en 165 Angel Vázquez-Patiño Universidad de Cuenca un rango dado por el mismo usuario. Muestre la matriz generada y luego, realice los siguientes ordenamientos: • Las columnas pares ordénelas de manera descendente con el método de inserción y las columnas impares ordénelas de manera ascendente con el método de selección. Muestre la matriz original luego de aplicados estos cambios. • Las filas pares ordénelas de manera ascendente y las filas impares ordénelas de manera descendente; este ordenamiento de filas, en ambos casos, debe realizarse con el método de ordenamiento de burbuja. Muestre la matriz original luego de aplicados estos cambios. • Las “diagonales derecha–izquierda” ordénelas de manera ascendente con el método de inserción; muestre la matriz original luego de aplicados estos cambios. Las "diagonales izquierda–derecha" ordénelas de manera descendente con el método de selección; muestre la matriz original luego de aplicados estos cambios. A continuación se muestra un ejemplo de ejecución del programa: Ingreso de datos ================ Dimensión de la matriz n: 3 m: 4 Rango para generación de números aleatorios inf: -2 sup: 10 8 2 3 Matriz generada 4 9 5 1 7 4 5 -1 2 Resultados ========== Luego de ordenadas las columnas 2 5 -1 5 3 4 7 4 8 1 9 2 166 Angel Vázquez-Patiño Universidad de Cuenca Luego 9 1 5 de ordenadas las filas 8 5 4 2 4 7 3 2 -1 Luego 8 4 9 de ordenadas las “diagonales derecha–izquierda” 2 1 5 3 5 -1 7 4 2 Luego 8 5 3 de ordenadas las “diagonales izquierda–derecha” 7 9 5 1 4 4 2 -1 2 167 Angel Vázquez-Patiño Universidad de Cuenca Archivos Miscelánea 1. ¿Qué significa EOF? a) b) c) d) Empty or full End of file End of floop Las anteriores respuestas no son correctas 2. Pregunta 168 Angel Vázquez-Patiño Universidad de Cuenca Miscelánea de Ejercicios Un buen lugar para comenzar a http://www.lab.dit.upm.es/~fprg/examenes/ practicar más está en * Combate de pokemones Ejercicio propuesto por María Fernanda Granda. Realizar un programa que permita simular el combate entre dos pokemones a través de las siguientes opciones del menú: 1.- Ingresar datos de los pokemones 2.- Simular combate 3.- Terminar Ingresar opción <1-3>: 1)Ingresar datos de los pokemones (i.e. nombres, poder de ataque). Por ejemplo se ingresa los pokemones: 1) Pikachu con poder de ataque 55 y 2) Jigglypuff con su poder de ataque 45 2)Simular combate Se tiene que usar una función para decidir aleatoriamente qué jugador inicia la pelea. Para ello se usará la función azar(2). Esta función devolverá 0 ó 1. Si es 0 el Jugador1 inicia la pelea, caso contrario inicia el Jugador2. Recuerde que una vez que se define el jugador que tiene el primer turno, los siguientes turnos son intercalados, i.e., un jugador, el otro, un jugador, el otro, etc. Ambos jugadores inician sus vidas con 100 puntos y se tienen que ir simulando el combate restando de la vida de los pokemones el poder de ataque de su contrincante, esto se hace en base al turno de ataque. Por cada turno se debe nuevamente utilizar la función azar(2) para determinar si un jugador ataca o no. Solamente si el resultado es 1, el jugador al que le toca el turno ataca. Recuerde que luego de definido al azar el jugador que comienza (el que tiene el primer turno), los turnos son intercalados entre los dos. Como ejemplo, suponga que la función azar(2) devuelve 0. Por lo tanto Pikachu inicia con el primer turno. Entonces se usa la función azar(2) para determinar si Pikachu ataca o no. Suponga que la función azar(2) devuelve 1. Cómo el resultado es 1 éste ataca y en el primer turno Jigglypuff queda con 45 de vida. Luego es el turno de Jigglypuff y suponga que la función azar(2) devuelve 0. Cómo es 0, 169 Angel Vázquez-Patiño Universidad de Cuenca Jigglypuffno ataca. Para el siguiente turno de Pikachu la función azar(2) devuelve 1. Cómo es 1 Pikachu ataca y Jigglypuff termina con -10 de vida, entonces el combate termina. Se tiene que mostrar por cada turno: de quién fue el turno y cómo quedaron las vidas de los dos contrincantes y al final quien ganó y en qué turno. Ejemplo de ejecución: Combate de pokemones 1.- Ingresar datos de los pokemones 2.- Simular combate 3.- Terminar Ingresar opción <1-3>: 1 Nombre del primer Pokemon: Pikachu Poder de ataque del primer Pokemon: 55 Nombre del segundo Pokemon: Jigglypuff Poder de ataque del segundo Pokemon: 45 Combate de pokemones 1.- Ingresar datos de los pokemones 2.- Simular combate 3.- Terminar Ingresar opción <1-3>: 2 Vidas:Pikachu(100) vs Jigglypuff(100) 1.- Turno: Pickachu (55 de poder). (Sí ataca, azar(2) devolvió 1) Vidas: Pikachu (100) vs Jigglypuff (45) 2.- Turno: Jigglypuff (45 de poder). (No ataca, azar(2) devolvió 0) Vidas: Pikachu (100) vs Jigglypuff (45) 3.- Turno: Pickachu (55 de poder). (Sí ataca, azar(2) devolvió 1) Vidas: Pikachu (100) vs Jigglypuff (-10) Pokemon ganador: Pikachu en 3 turnos. Combate de pokemones 1.- Ingresar datos de los pokemones 2.- Simular combate 3.- Terminar Ingresar opción <1-3>: 3 170 Angel Vázquez-Patiño Universidad de Cuenca (termina el programa) Solución de un sistema de ecuaciones por matrices Conversión de un número en base diez a sistema binario Conversión de un número en base binaria a sistema en base diez Cálculo de las tres alturas de un triángulo dadas las longitudes de sus lados Valor futuro de una inversión Cálculo del capital inicial Cálculo de la tasa de interés Cálculo del número de años Media, mediana y varianza de N datos Transformación de números decimales a romanos Desarrolle un algoritmo que permita transformar un número decimal n ≤ 5000 a número romano. La información mostrada a continuación, que debe tomar en cuenta para este ejercicio, fue tomada de Wikipedia (https://goo.gl/auCPx7). La siguiente tabla muestra los símbolos válidos en el sistema de los números romanos, y sus equivalencias en el sistema decimal. Signo Valor I 1 V 5 X 10 L 50 C 100 D 500 M 1000 Para la notación moderna de los números romanos se utilizan las siguientes normas: 171 Angel Vázquez-Patiño • Universidad de Cuenca Los números se leen de izquierda a derecha empezando por los símbolos con mayor valor, o conjunto de símbolos de mayor valor. • Un símbolo seguido de otro de igual o inferior valor, suma (e.g., X·X·I = 10+10+1 = 21), mientras que si está seguido de otro de mayor valor, ambos símbolos forman un conjunto en el cual debe restarse el valor del primero al valor del siguiente (e.g., X·IX = 10+[10-1] = 19). • La unidad (I) y los números con base 10 (X, C y M) pueden repetirse hasta 3 veces consecutivas como sumandos. • Los números con base 5 (V, L y D), no pueden repetirse seguidos, ya que la suma de esos dos símbolos tiene representación con alguno de los símbolos anteriores. • La unidad y los símbolos de base 10 también pueden estar restando antes de un símbolo de mayor valor, pero con las siguientes normas: 1. solo pueden aparecer restando sobre los símbolos con base 5 y 10 de valor inmediatamente superiores, pero no de otros con valores más altos (e.g., ‘IV’ y ‘IX’, pero no ‘IL’ ni ‘IC’). 2. en el caso de estar restando, no pueden repetirse. • Los símbolos con base 5 no pueden utilizarse para restar (e.g., 45 se escribe ‘XLV’ y no ‘VL’). • Para números con valores igual o superiores a 4000, se coloca una línea horizontal por encima del número, para indicar que la base de la multiplicación es por 1000: Romano (miles) Decimal V 5000 X 10 000 L 50 000 C 100 000 D 500 000 M 1 000 000 172 Angel Vázquez-Patiño Universidad de Cuenca Dígitos de un número Elaborar un algoritmo que dado un número entero positivo (>0) cualquiera (validar para que siga ingresando números mientras no cumple la condición) nos diga el número de dígitos que tiene. * Pirámide invertida Represente mediante un diagrama de flujo el algoritmo que solicite un número n y escriba en pantalla una pirámide invertida. La altura de la pirámide es igual a n. Valide que el usuario ingrese números mayores o iguales a uno (vuelva a solicitar si no cumple la condición). La siguiente pirámide muestra el ejemplo de la ejecución del algoritmo con n igual a 5. Ingrese la altura (n): 5 1 2 1 3 2 1 4 3 2 1 5 4 3 2 1 4 3 2 1 3 2 1 2 1 1 Cubos e impares Considere la siguiente propiedad: • Sumando el primer número impar positivo se obtiene el primer cubo. • Sumando los dos siguientes impares se obtiene el segundo cubo. • Sumando los tres siguientes impares se obtiene el tercer cubo, y así sucesivamente. Expresado de forma matemática: 13 = 1 =1 3 2 =3+5 =8 3 3 = 7 + 9 + 11 = 27 3 4 = 13 + 15 + 17 + 19 = 64 El usuario ingresa un entero positivo n. El programa debe mostrar los n primeros cubos calculándolos mediante la propiedad descrita. Cantidad de dígitos fijo de números mostrados Se ingresan dos límites: límite inferior con un valor mínimo de 1 y límite superior con un valor máximo de 9999 (validar valores mínimos y máximos de los límites y que el límite superior no sea menor al límite inferior). Se ingresa un paso 173 Angel Vázquez-Patiño Universidad de Cuenca (incremento) entre 1 y 1000 (validar para que siga ingresando números mientras no cumple la condición). Imprimir los valores desde el límite inferior al límite superior con el paso (incremento) dado por el usuario. Los números que se muestran deben tener el número de dígitos que tenga el límite superior; es decir, los número que se van a mostrar que tienen un número de dígitos menor al número de dígitos del límite superior, deben completar el número de dígitos con ceros a la izquierda. Ejemplo 1: Límite inferior: 1 Límite superior: 12 Paso: 3 Lo que se muestra en pantalla es: 01 04 07 10 Ejemplo 2: Límite inferior: 1 Límite superior: 1500 Paso: 500 Lo que se muestra en pantalla es: 0001 0501 1001 Algoritmo de Gauss y Método de eliminación de Gauss Para la resolución de sistemas de ecuaciones lineales existe el método de factorización LU. Un algoritmo que se utiliza para implementar este método es el algoritmo de Gauss que a su vez se utiliza en el método de eliminación de Gauss. Realice la implementación de ambos algoritmos basándose en la explicación dada en el libro de Quarteroni et al. (2014, pp. 146–147). 1. Implemente el algoritmo de Gauss (página 146). 2. Implemente el método de eliminación de Gauss (página 147). Métodos de Jacobi y de Gauss-Seidel Vea el libro de Quarteroni et al. (2014, pp. 168–173). 174 Angel Vázquez-Patiño Universidad de Cuenca Dados Escribir un programa que simule el lanzamiento de dos dados y muestre por pantalla la frecuencia de los resultados de mil lanzamientos. Búsquedas y ordenación 1. Diseñar una función recursiva que realice una búsqueda binaria. 2. Diseñar un procedimiento recursivo que ordene una lista de elementos por el método Quick Sort. Interpolación Para resolver los siguientes ejercicios revise las páginas 80-83 del libro de Quarteroni et al. (2014). 1. Implemente la Vandermonde. interpolación polinómica mediante la matriz de 2. Implemente la interpolación polinómica de Lagrange para encontrar el polinomio interpolador que pase por tres puntos. 3. Implemente la interpolación polinómica de Lagrange para encontrar el polinomio interpolador que pase por cuatro puntos. Integración numérica Para resolver los siguientes ejercicios revise la sección 4.3 Numerical integration del libro de Quarteroni et al. (2014). 1. Implemente la fórmula de cuadratura de punto medio compuesto para integración numérica. 2. Implemente la fórmula trapezoidal compuesta para integración numérica. 3. Implemente la fórmula de cuadratura de Simpson para integración numérica con un polinomio integrador de Lagrange de segundo grado. 4. Implemente la fórmula de cuadratura de Simpson para integración numérica con un polinomio integrador de Lagrange de tercer grado. Ecuaciones diferenciales ordinarias (EDO) • Implemente el método de Euler y úselo para integrar numéricamente la ecuación 175 Angel Vázquez-Patiño Universidad de Cuenca dy/dx = f(x, y) = - 2x3 + 12x2 – 20x + 8.5 desde x0 = 0 hasta xn = 4 con un tamaño de paso de h = 0.2 (i.e., x1 = x0 + 0.2, x2 = x1 + 0.2, x3 = x2 + 0.2, etc.). La condición inicial en x0 = 0 es y0 = 1. El método de Euler consiste en dividir el intervalo que va desde x 0 a xn en subintervalos de ancho (16) y aplicar la fórmula iterativa (17) Para comprobar sus resultados sepa que la integral analítica de la función dy/dx es y = - 0.5x4 + 4x3 - 10x2 + 8.5x + 1. La figura 10 muestra las gráficas de la solución analítica y la solución numérica cuyos valores de yi (aproximados) usted debe encontrar. La tabla 1 muestra los valores de los puntos de la aproximación mediante el método de Euler. Si desea más información acerca del método puede leer la definición en el libro de Chapra et al. (2007), páginas 719-722. 176 Angel Vázquez-Patiño Universidad de Cuenca Figura 10: Comparación de la solución analítica con una solución numérica usando el método de Euler, para la integral dy/dx desde x0 = 0 hasta xn = 4 con un tamaño de paso h = 0.2. La condición inicial en x0 = 0 es y0 = 1. Tabla 1: Solución numérica usando el método de Euler, para la integral dy/dx desde x0 = 0 hasta xn = 4 con un tamaño de paso h = 0.2. La condición inicial en x0 = 0 es y0 = 1. i 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 xi 0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2 2.2 2.4 2.6 2.8 3 3.2 3.4 3.6 3.8 4 yi (aproximación) 1 2.7 3.6928 4.1512 4.2288 4.06 3.76 3.4248 3.1312 2.9368 2.88 2.98 3.2368 3.6312 4.1248 4.66 5.16 5.5288 5.6512 5.3928 4.6 • 177 Angel Vázquez-Patiño Universidad de Cuenca ¿Qué Hace el Algoritmo/Programa? 1. * ¿Cuál es el valor final de las variables a, b y c? Proceso sin_titulo a<-5 b<-6 c<-7 aux<-a b<-a c<-b Escribir a, b, c FinProceso 2. * ¿Cuál es el valor de la variable x? Proceso sin_titulo Definir x Como Entero Definir z Como Entero x<-2 z<-5 Si z<0 Entonces x<-x+2 Sino Si x>1 Entonces x<-x+1 Sino x<-5 Fin Si Fin Si Escribir x FinProceso 3. * ¿Cuál es el resultado de ejecutar el siguiente pseudocódigo? Proceso valorC c<-50 Mientras c>=0 Hacer Escribir c c<-c+1 Fin Mientras FinProceso 4. * ¿Cuál es el resultado de ejecutar el siguiente pseudocódigo? Proceso sin_titulo 178 Angel Vázquez-Patiño Universidad de Cuenca Para i<-1 Hasta 5 Con Paso 1 Hacer Segun i Hacer 1: Escribir "a" 2: Escribir "b" 3: Escribir "c" De Otro Modo: Escribir "d" Fin Segun Fin Para FinProceso 5. ¿Qué realiza o cuál es el fin del siguiente algoritmo o programa? Proceso sin_titulo Leer var1 Leer var2 Mientras var1<var2 Hacer Leer var1 Leer var2 Fin Mientras var3<-0 Mientras var1 >= var2 Hacer var1<-var1-var2 var3<-var3+1 Fin Mientras Escribir var3 Escribir var1 FinProceso 6. ¿Qué realiza o cuál es el fin del siguiente algoritmo o programa? Proceso sin_titulo var1<-10 Leer var2 Mientras var2<1 Hacer Leer var2 Fin Mientras 179 Angel Vázquez-Patiño Universidad de Cuenca Para var3<-1 Hasta var2 Con Paso 1 Hacer var4<-1 Mientras var4<=var1 Hacer var5<-var4*var3 Escribir var5 var4<-var4+1 Fin Mientras Escribir '***** ****** ***** *****' Fin Para FinProceso 7. ¿Qué realiza o cuál es el fin del siguiente algoritmo o programa? Proceso sin_titulo Leer var1 Mientras var1<0 Hacer Leer var1 Fin Mientras var2<-1 var3<-11 Mientras var2<=var1 Hacer Leer var4 Mientras var4<1 O var4>10 Hacer Leer var4 Fin Mientras Si var4<var3 Entonces var3<-var4 Fin Si var2<-var2+1 Fin Mientras Escribir var3 FinProceso 1. * Con respecto al siguiente algoritmo 180 Angel Vázquez-Patiño Universidad de Cuenca Proceso sin_titulo Para i<-1 Hasta 7 Con Paso 3 Hacer cont<-1 Mientras cont<=5 Hacer Escribir Sin Saltar i,'^',cont,': ',i^cont, ' cont<-cont+2 Fin Mientras Escribir '' Fin Para FinProceso ' ¿Cuál de las siguientes versiones hace exactamente lo mismo? a) Proceso sin_titulo cont<-1 Mientras cont<=8 Hacer Para i<-1 Hasta 5 Con Paso 2 Hacer Escribir Sin Saltar cont,'^',i,': ',cont^i, ' Fin Para Escribir '' cont<-cont+4 Fin Mientras FinProceso ' b) Proceso sin_titulo cont<-1 Mientras cont<=7 Hacer Para i<-1 Hasta 5 Con Paso 2 Hacer Escribir Sin Saltar cont,'^',i,': ',cont^i, ' Fin Para Escribir '' Fin Mientras FinProceso ' c) Proceso sin_titulo cont<-1 Mientras cont<=7 Hacer Para i<-1 Hasta 5 Con Paso 2 Hacer Escribir Sin Saltar cont,'^',i,': ',cont^i, ' Fin Para 181 ' Angel Vázquez-Patiño Universidad de Cuenca Escribir '' cont<-cont+3 Fin Mientras FinProceso d) Ninguna de las anteriores Lenguaje Java 1. * ¿Para el siguiente segmento de código cuál es la salida del programa? a) b) c) d) -120 0 60 Ninguna de las anteriores public class Test { public static void main (String[] args) { int j = operacion(); System.out.println("Resultado: " + j); } public static int operacion(){ j = -1; for(int i=5; i>=0; i--) j=j*i; } } 2. * ¿Para el siguiente segmento de código cuál es la salida del programa? a) b) c) d) 8 72 0 36 public class Test { static int resultado = 0; public static void main (String[] args) { operacion(3); System.out.println("Resultado: " + resultado); } 182 Angel Vázquez-Patiño Universidad de Cuenca public static int potencia(int base, int exp){ int j = 1; for(int i=0; i<exp; i++) j=j*base; return j; } public static void operacion(int resultado){ int i=1; for(int j=1; j<resultado; j++) i=j*potencia(j, 2); resultado = i; } } 8. * ¿Cuál es el tiempo de vida de una variable global? a) b) c) d) Existe Existe Existe Existe tanto tiempo como el programa mientras una función se encuentra ejecutando mientras un bucle for se encuentra ejecutando mientras un parámetro de una función cambie de valor 9. Indicar cuáles de las siguientes declaraciones de matrices no son válidas y el porqué. a) int primos={2,3,5,7,11}; b) int [] resultados=int [30]; c) int [] primos= new{2,3,5,7,11}; 10. Completar el siguiente método que imprime los elementos de una matriz bidimensional (la matriz puede tener distinto número de elementos en cada fila). public static void imprime(int[][] a){ for(int i=0; i<a.length; i++){ for(int j=0; -------------; j++){ System.out.print(a[i][j] + “ ”); } } } 11. ¿Cuál es la salida del siguiente programa? public class Ejercicio { public static void main(String[] args){ int [] matriz = {1,2,3}; 183 Angel Vázquez-Patiño Universidad de Cuenca metodoA(matriz); for(int i=0; i<matriz.length; i++) System.out.print(matriz[i]++ + " "); for(int i=0; i<matriz.length; i++) System.out.print(matriz[i] + " "); } static void metodoA(int [] b){ for(int i=0; i<b.length;i++) b[i]=b[i]+3; } } 12. * ¿Cuál es la salida del siguiente programa? public class Ejercicio { public static void main (String[] args) { char[] matriz = {'e','u','o','i','a'}; metodo(matriz); for(int i=0; i<matriz.length; i++){ System.out.println(matriz[i]); } } public static void metodo(char[] vocales){ char aux; for(int i=1; i<vocales.length; i++){ if(vocales[i-1]>vocales[i]){ aux=vocales[i-1]; vocales[i-1]=vocales[i]; vocales[i]=aux; } } } } 13. * ¿Cuál es la salida del siguiente fragmento de código? int index = 1; while(index < 10){ System.out.println(index); index ++; } 14. * ¿Cuál es la salida del siguiente programa? public class Ejercicio { 184 Angel Vázquez-Patiño Universidad de Cuenca public static void main (String args[]) { int c = 1; final int N=5; while(c<=N){ System.out.println(c); c--; } } } 15. * Diga si la proposición referente al siguiente método programado en Java es verdadera o falsa: El método llamado funcion muestra (imprime en pantalla) los elementos de cualquier tipo de arreglo bidimensional enviado como argumento sin que haya ningún error al momento de la ejecución. Nota: el método no tiene absolutamente ningún error de sintaxis, es decir, sí se compila sin ningún error. public static void funcion (int[][] parametro) { for(int i = 0; i < parametro.length; i++) for(int j = 0; j < parametro.length; j++) System.out.println(parametro[i][j]); } a) La proposición es verdadera b) La proposición es falsa 16. * ¿Qué retorna la siguiente función? public static int misterioso(int a, int n) { int i, r, x; i = n; r = 1; x = a; while (i > 0) { if (i % 2 != 0) { r = r * x; } x = x * x; i = i / 2; } return r; } 185 Angel Vázquez-Patiño Universidad de Cuenca a) El mínimo común múltiplo de los parámetros a y n. b) El resultado de elevar el parámero n a la a-ésima potencia. c) El resultado de sacar la raíz n-ésima del parámetro a. d) El resultado de elevar el parámero a a la n-ésima potencia. 17. * Dada las siguientes líneas de código del siguiente programa, identifique la salida correcta del mismo. public static void main(String[] args) { int arreglo[] = {2,7,8,9,4,5,2,6,8,9,3}; String cadena =""; cadena = cadena + "\nNumeros: "; for(int i=0;i < arreglo.length;i++){ if(arreglo[i]%2!=0){ cadena = cadena +" "+ arreglo[i]; } } System.out.println(cadena); } public static void funcion(int[] arreglo) { for (int i=1; i < arreglo.length; i++) { int aux = arreglo[i]; int j; for (j=i-1; j >=0 && arreglo[j] > aux; j--){ arreglo[j+1] = arreglo[j]; } arreglo[j+1] = aux; } } a) b) c) d) 2 2 7 2 8 2 9 9 5 4 5 9 7 6 9 5 9 8 3 3 18. * ¿Qué es lo que muestra en pantalla el siguiente código? public static void main(String[] args) { int[][] m = { {6, 7, 5, 0, 4}, {3, 8, 4}, {1, 0, 2, 7} }; for(int i = 0; i < m.length; i++) { System.out.print(m[i].length + “ “); 186 Angel Vázquez-Patiño Universidad de Cuenca } } a) b) c) d) 4 5 0 6 4 3 8 3 7 4 2 1 19. * ¿Cuál es el ámbito de la variable x? 1) public void counter(int StartingNumber){ 2) for (int x = StartingNumber; x<100; x++) 3) { 4) JOptionPane.showMessageDialog(null, x); 5) 6) } 7) JOptionPane.showMessageDialog(null, “Fin del método”, x); 8) } a) b) c) d) Líneas desde la 2 a 7 Líneas desde la 2 a 6 Línea 4 Líneas desde la 1 a 8 20. * ¿Cuál es la salida correcta del siguiente programa? public class ProgramacionI { public static int contador = 0; public static void main(String[] args) { String cadena1, cadena2; cadena1 = "cadena"; cadena2 = "programación"; for (int i = 0; i < cadena2.length(); i++) { for (int j = 0; j < cadena1.length(); j++) { if (i == j) { contar(); } } } System.out.println(contador); } public static void contar() { contador = contador + 2; } } 187 Angel Vázquez-Patiño Universidad de Cuenca 21. * ¿Cuál es la salida correcta del siguiente programa? public class ProgramacionI { public static void main(String[] args) { String str = "manejo de cadenas con java"; int inicio = str.indexOf("c"); int fin = str.indexOf("e", inicio + 1); System.out.println(str.substring(inicio, fin + 3)); } } a) cadenas b) cade c) cadena d) de 22. * ¿Qué muestra el siguiente programa? public class ProgramacionI { public static void main(String[] args) { int contador; int limite; contador = 2; limite = 10; do { switch (contador % 2) { case 0: System.out.print(contador + " es par\n"); break; case 1: System.out.print(contador + " es impar\n"); break; } contador += 2; } while (contador < limite); } } 23. Pregunta 188 Angel Vázquez-Patiño Universidad de Cuenca Lenguaje C 1. * Realice la prueba de escritorio del siguiente programa e indique qué se muestra en pantalla. #include<stdio.h> int main() { int a = 4, b = 1, x; do{ a += 2; b++; }while(a<=b); a += 3; b += 2; a = a+b%2+a%3; x = a/b; if(x>b){ b = b+4; a = b%3; x = a%b; } b++; x = x*(10/8)+a%b; for(int i=0; i<a; i=i+1) printf("%d", a); printf("\n"); for(int i=0; i<b; i+=2) printf("%d", b); for(int i=0; i<=b; i++) printf("%d", x); printf("\nVariable a: %d\n", a); printf("Variable b: %d\n", b); printf("Variable x: %d\n", x); } 2. Pregunta 189 Angel Vázquez-Patiño Universidad de Cuenca Fórmulas y Relaciones Estadística Media ponderada Para una serie de datos no vacía: a la que corresponden los pesos: la media ponderada es: (18) Medidas de longitud • 1 milla = 1609 metros • 1 pulgada = 0.0254 metros • 1 yarda = 3 pies • 1 pie = 12 pulgadas Unidades de capacidad • 1 pie cúbico = 0.0283 metros cúbicos • 1 metro cúbico = 1000 litros • 1 yarda cúbica = 27 pies cúbicos. Unidades de capacidad de información • 8 bits = 1 byte • 1024 bytes = 1 kilobyte (KB) • 1024 KB = 1 megabyte (MB) • 1024 MB = 1 gigabyte (GB) 190 Angel Vázquez-Patiño • Universidad de Cuenca 1024 GB = 1 terabyte (TB) Tiempo • 1 hora = 60 minutos • 1 minuto = 60 segundos • 1 hora = 3600 segundos Unidades de temperatura Relación entre grados celsius (centígrados, C) y fahrenheit (F). (19) Círculo r: radio l: longitud o perímetro a: área (20) (21) Esfera • r: radio • s: superficie o área • v: volumen (22) (23) Cuadrado Ángulos (24) 191 Angel Vázquez-Patiño Universidad de Cuenca Ecuación de segundo grado Dada la ecuación de segundo grado (25) las raíces o ceros de la función son: (26) Logaritmos El logaritmo de un número en cualquier base puede obtenerse por la relación (27) en donde, , ; , . 192 Angel Vázquez-Patiño Universidad de Cuenca Referencias Alcalde Lancharro, E., García López, M., 1992. Metodología de la programación: aplicaciones en COBOL y PASCAL. McGraw-Hill, Madrid. Chapra, S.C., Canale, R.P., Enríquez Brito, J., Roa Hano, M. del C., 2007. Métodos Numéricos para Ingenieros, 5th ed. McGraw-Hill Interamericana, México. Charles Lehmann, 1994. Geometría analítica. Editorial Limusa, S.A. de C.V. Grupo noriega editores, México D.F. Chaves Torres, A.N., 2012. Diseño de algoritmos. Universidad Nacional Abierta y a Distancia, Colombia. Deitel, P.J., Deitel, H.M., 2012. Java: How to Program, 9th ed. Prentice Hall, Upper Saddle River, N.J. Editorial Macro, 2001. Turbo Pascal 7.0 Paso a Paso. Editorial Macro, Lima, Perú. Gómez Fuentes, M. del C., Cervantes Ojeda, J., 2013. Inicialízate en la Programación con C++, 1st ed. Universidad Autónoma Metropolitana, México. Joyanes Aguilar, L., Rodríguez Baena, L., Fernández Azuela, M., 2003. Fundamentos de Programación: Libro de Problemas, 2nd ed. : McGraw-Hill, Madrid. Olaya, V., 2011. Sistemas de Información Geográfica. Parra Terrazos, C., n.d. Algoritmos y estructuras de datos I. Universidad Tecnológica del Perú, Lima, Perú. Pérez Montes, F.M., 2010. Ejercicios de Programación en Java: Condicionales, Bucles, Tablas y Funciones. Eduinnova, Sevilla, España. Pinales Delgado, F.J., Velázquez Amador, C.E., 2014. Algoritmos Resueltos con Diagramas de Flujo y Pseudocódigo. Departamento Editorial de la Universidad Autónoma de Aguascalientes, Aguascalientes, México. Quarteroni, A., Saleri, F., Gervasio, P., 2014. Scientific Computing with MATLAB and Octave, 4th ed, Texts in Computational Science and Engineering. Springer Berlin Heidelberg, Berlin, Heidelberg. Tanenbaum, A.S., Wetherall, D.J., 2012. Redes de computadoras, 5th ed. Pearson Educación, México D.F., México. Vázquez Gómez, J.B., 2012. Análisis y diseño de algoritmos, 1st ed. Red tercer milenio, Tlalnepantla, México. Vázquez-Patiño, A., 2016. Carrera de caballos. Cuenca, Ecuador. 193