Download Ejercicios - ALUMNOS FISI
Document related concepts
Transcript
Universidad Nacional Mayor de San Marcos Facultad de Ingeniería de Sistemas e Informática E.A.P. de Ingeniería de Sistemas Algorítmica I GUIA DE EJERCICIOS Nº 03 Estructuras Repetitivas A continuación se presentan 20 ejercicios, los cuales deben ser desarrollados creando ALGORITMOS en PSEUDOCODIGO, C++ y DIAGRAMA DE FLUJO. EJERCICIO 1: Calcular el cociente y resto de dos números enteros positivos a y b mediante restas sucesivas. EJERCICIO 2: Introducir dos números enteros positivos n y k, luego hallar el múltiplo de k que este mas cerca de n. Ejemplo: Si n=7 y k=3 => El múltiplo mas cercano de 3 respecto a 7 es 6. Si n=14 y k=5 => El múltiplo mas cercano de 5 respecto a 14 es 15. Si n=10 y k=4 => El múltiplo mas cercano de 5 respecto a 13 es 8 (ó 12). EJERCICIO 3: Los términos de la serie de Fibonacci se calculan así: a1 = 1 a2 = 2 an = an-1 + an-2 Diseñar una función que calcule el n-ésimo término de la serie de Fibonacci. EJERCICIO 4: La exponencial de un número real a se puede aproximar con la serie: a) Escribir una función que calcule la exponencial de a según dicha fórmula, utilizando k=10 y luego k=20. Se obtiene el mismo resultado? b) Modificar la función de manera que el número k sea un parámetro elegido por el usuario. c) Modificar la función de manera que aproxime el resultado hasta que para algún k se cumpla la condición ak/k! <= 10-5. d) Modificar de nuevo la función de manera que aproxime el resultado hasta que ak/k! sea menor que cierto valor infinitesimal e que se pasará como dato a la función. Visualizar el número de términos k necesarios para obtener el resultado requerido. EJERCICIO 5: Imprima todos los primos gemelos entre A y B. Los primos gemelos son parejas de números primos con una diferencia entre sí de exactamente dos. Por ejemplo, tres y cinco son primos gemelos, al igual que 11 y 13. Algorítmica I Guía de Ejercicios Nº 03 - Estructuras Repetitivas EJERCICIO 6: En una Central Telefónica se procesan los llamados realizados en la siguiente forma: Por cada llamada se ingresa: Código de llamada: 3 dígitos (0 al finalizar el proceso) Tipo de día: “1” hábil, “2” feriado Duración de la llamada: entero > 0. Siendo los importes Primeros 3’ Minuto Adicional Días hábiles a 10 a2 Feriados a 15 a3 Se deberá emitir: a) El importe a abonar por cada llamada (código - importe). b) La cantidad de llamadas que superen los 3’ c) El % de llamados que superan los 3’ (sobre el total de llamadas informadas). EJERCICIO 7: Escriba un programa que diga si un número ingresado N es divisible por 11 e indicar la suma de sus cifras de lugar par y la suma de sus cifras de lugar impar. Utilizar: Si la suma de sus cifras de lugar par menos la suma de sus cifras de lugar impar es divisible por 11 entonces el número N es divisible por 11. EJERCICIO 8: Dado un número n se desea mostrar todos los números no primos anteriores a n. EJERCICIO 9: El algoritmo de la multiplicación rusa es una forma “distinta” de calcular la multiplicación de dos números enteros n x m. Para ello este algoritmo va multiplicando por 2 el multiplicador m y dividiendo (sin decimales) por dos el multiplicando n hasta que n tome el valor de 1. Después suma todos aquellos multiplicadores cuyos multiplicandos sean impares. Por ejemplo, para multiplicar 37 y 12 se harían las siguientes iteraciones: Iteración Multiplicando Multiplicador 1 37 12 2 18 24 3 9 48 4 4 96 5 2 192 6 1 384 Con lo que el resultado de multiplicar 37 y 12 sería la suma de los multiplicadores correspondientes a los multiplicandos impares (en negrita), es decir 37 x 12 = 12 + 48 +384 = 444. EJERCICIO 10: Realizar un programa tal que, recibiendo un número primo, devuelva el número primo inmediatamente siguiente y superior a dicho número primo. Por ejemplo, si se ingresa el primo 7, el programa devolverá el primo 11. Hacer el programa para números del intervalos [a,b] donde a<b (a y b son números naturales). Determinar primero si el número ingresado es primo o no y luego el siguiente primo. EJERCICIO 11: Se ingresan los resultados de la evaluación de un curso de Programación; por cada alumno se informa: Prof. Arón Elías Herrera Ponte Pág. 2 Algorítmica I Guía de Ejercicios Nº 03 - Estructuras Repetitivas Número de matricula: 4 dígitos (1-9999) Asistencia: 1, presente; o, ausente Calificación: 2 dígitos (0-10). A partir de esta información se debe calcular e informar: a) Cantidad y % de alumnos presentes. b) Promedio de calificaciones de alumnos presentes. c) % de alumnos aprobados (sobre el total de alumnos presentes). d) Numero de matricula del alumno de mayor calificación. (Si hay varios alumnos con esa calificación: numero de matricula y cantidad de alumnos en esa situación). EJERCICIO 12: Dado un número natural N, calculamos la raíz digital de N sumando los dígitos que lo componen. El proceso se repite sobre el nuevo número hasta que el resultado obtenido tiene un solo dígito. Este último número es la raíz digital del número N. Ejemplo: 347 3 + 4 + 7 = 14 1 + 4 = 5 raizdigital(347) = 5 Escribir un programa que, dado un número entero positivo, devuelva su raíz digital. EJERCICIO 13: Cuando consideramos dos números enteros, n y m, decimos que m divide a n, cuando existe otro entero k tal que: n = m x k. En tal caso, decimos que n es un múltiplo de m y que m es un divisor de n. Decimos que un número p es primo si y sólo si p es distinto de 1 y de -1 y los únicos divisores de p son: 1, -1, p y -p. Escribir un programa que, para cualquier entero positivo n, dé una lista de todos los enteros positivos primos menores o iguales que n. EJERCICIO 14: Dados dos enteros, m y n, un número entero d es el máximo común divisor (o el mayor divisor común) si y sólo si: - d divide a m y d divide a n. - si k divide a m y k divide a n entonces k < d. El algoritmo de Euclides es un método eficaz para calcular el máximo común divisor (mcd) entre dos números enteros. El algoritmo consiste en varias divisiones euclidianas sucesivas. En la primera división, se toma como dividendo el mayor de los números y como divisor el otro (se ahorra así un paso). Luego, el divisor y el resto sirven respectivamente de dividendo y divisor de la siguiente división. El proceso termina cuando se obtiene un resto nulo. El mcd es entonces el penúltimo resto del algoritmo. Ejemplo: Se busca el máximo común divisor de a = 945 y b = 651, números escogidos al azar: 945 = 1 x 651 + 294 651 = 2 x 294 + 63 294 = 4 x 63 + 42 63 = 1 x 42 + 21 42 = 2 x 21 + 0 Entonces mcd(945,651) = 21 (el último resto no nulo). EJERCICIO 15: Sea P(x) = -x4 - x3 + 1, observemos que: P(-1) = -1 + 1 + 1 = 1 > 0 P(1) = -1 - 1 + 1 = -1 < 0 Prof. Arón Elías Herrera Ponte Pág. 3 Algorítmica I Guía de Ejercicios Nº 03 - Estructuras Repetitivas Los matemáticos, mediante el llamado "Teorema del Valor Intermedio" han probado que entre -1 y 1 debe existir una raíz de P, o sea, un número c tal que P(c) = 0. Escribir un programa de manera de determinar c con un error menor que 10 -3. Comentario: El teorema a que hacemos referencia vale en un contexto más general, pues afirma que: si f:[a,b] --> R es una función continua y f(a) < f(b) o bien f(a) > f(b), dado cualquier valor d entre f(a) y f(b), existe c entre a y b tal que f(c) = d. EJERCICIO 16: Escriba un programa que imprima la tabla de multiplicar de un número que se leerá de la entrada estándar. El funcionamiento del programa se muestra en el siguiente ejemplo de ejecución (en negrita, el número introducido por el usuario): Introduzca un número: 5 La tabla de multiplicar del 5 es: 5x1=5 5 x 2 = 10 ... 5 x 10 = 50 EJERCICIO 17: Recuerde el programa de cálculo de superficies del tema anterior. Se desea modificar este programa para que su ejecución se repita indefinidamente hasta que el usuario decida salir del programa. El menú queda ahora de la siguiente forma: ========================================== CÁLCULO DE SUPERFICIES (versión 2.0) ========================================== 1. Cuadrado lado*lado 2. Círculo pi*radio*radio 3. Rectángulo base*altura A. Trapecio (base1+base2)*altura/2 5. Triángulo (base*altura)/2 0. Salir del programa ========================================== Cuando el usuario introduzca una opción del 1 al 5, el programa se comportará de la forma que se vio. Cuando introduzca la opción 0, el programa terminará mostrando el mensaje "Gracias por usar este programa. Que tenga un buen día". EJERCICIO 18: Escriba un programa que lea de la entrada estándar valores que representan años e indique si son o no años bisiestos. El programa seguirá leyendo años hasta un máximo de 10 o hasta que haya leído 3 años bisiestos. Recuerde, una vez más, la regla: "Un año es bisiesto si es divisible por 400, o bien si es divisible por 4 pero no por 100" Por ejemplo, el año 2000 es bisiesto (es divisible por 400), el año 1992 es bisiesto (es divisible por 4 y no por 100), y el año 2100 no es bisiesto (es divisible por 4 y también por 100). EJERCICIO 19: Escriba un algoritmo que, para un n menor que 10 facilitado por teclado, escriba en la pantalla un triángulo como el siguiente (suponiendo n=5) 2 23 235 2357 2 3 5 7 11 Prof. Arón Elías Herrera Ponte Pág. 4 Algorítmica I Guía de Ejercicios Nº 03 - Estructuras Repetitivas EJERCICIO 20: Generar un número aleatorio comprendido entre 1 y el valor de la constante MAXIMO y posteriormente pedir al usuario a que lo adivine. Para ello utiliza las siguientes funciones de la biblioteca stdlib: int rand (void); Genera un número aleatorio comprendido entre 0 y RAND_MAX.(Mirar en la ayuda cuánto vale RAND_MAX). srand((unsigned)time(NULL)); Inicializa la secuencia de números aleatorios con un valor inicial (denominado semilla) obtenido a partir de la hora del reloj interno del ordenador (de ahí la necesidad de incluir el fichero de cabecera time.h). “El fracaso no me sobrecogerá si mi determinación para alcanzar el éxito es lo suficientemente poderosa” … Og Mandino ______________________ Arón Elías Herrera Ponte Profesor Prof. Arón Elías Herrera Ponte Pág. 5