Fundamentos de Programación Tema 5. Relación I EJERCICIOS. Tema 5. Relación I. 1. Escribe un algoritmo que usando un bucle for infinito, y una sentencia break calcule la suma de los n>0 primeros números que se lean del teclado. El número n es un dato y es el primero de la secuencia. Análisis del problema Primeramente se lee el valor de n que cumpla la condición dada, para posteriormente mediante un bucle for infinito ir leyendo números del teclado hasta que se cumpla que se lea la n indicada. 2. Escribir un programa que lea un límite máximo entero positivo, una base entera positiva, y visualice todas las potencias de la base, menores que el valor especificado límite máximo. Análisis del problema Se implementan tres bucles. Un primer huele do-while, valida la entrada del límite entero positivo. Un segundo bucle do-while, valida la entrada de la base entera positiva. Un tercer bucle controlado por un for escribe las distintas potencias. 3. Diseña un algoritmo que sume los 20 primeros números impares. Análisis del problema Se necesita un acumulador suma que será donde se sumen los respectivos números impares. Para calcular los 20 primeros números impares basta con recorrer mediante un bucle for los números del 0 al 19 y si i es la variable que lo controla, el correspondiente número impar es 2 * i + 1. 4. Escribe un programa que lea un número n1, y escriba la tabla de multiplicar del número. Análisis del problema Se lee el número y mediante un bucle for se itera 10 veces escribiendo los resultados. 5. Escriba un programa que presente la tabla de multiplicar del 1, 2, ..... ,9. Análisis del problema Pág. 1/9 I.E.S. Iliberis Atarfe 03/04 Fundamentos de Programación Tema 5. Relación I Se hace de una manera análoga al ejercicio anterior, pero ahora anidando dos bucles for, y sin leer ningún 6. Diseñar dato. e implementar un programa que solicite a su usuario un valor nonegativo n y visualice la siguiente salida: 1 2 3 ........ n-1 1 2 3 ........ n-1 n ......... 1 2 1 2 3 1 7. Escribir y ejecutar un programa que invierta los dígitos de un entero positivo dado. Análisis del problema Para resolver el problema se inicializa una variable n1 a cero. Un bucle controlado por una variable n (leída por teclado) termina cuando su valor es cero. En cada iteración del bucle se calcula en la propia variable n el valor del cociente entero de n entre 10. Así si la variable n toma el valor de 234, en las sucesivas iteraciones irá tornando los valores 234, 23, 2 y cero. En cada iteración del bucle, se va calculando el resto del cociente entero de n entre 10. Es decir se van calculando los valores, 4, 3, 2. Para conseguir obtener el número invertido, basta con observar que 432 = 4 * 1 0 * 10 + 3 * 1 0 +2 = ( ( (O * 1 0 +4) * 10 +3) * 1 0+2) (Método de Horner de evaluación de polinomios). Es decir basta con acumular en n1 el valor de n1 multiplicado por 10 y sumarle el resto de la división entera. De todo lo dicho anteriormente, se deduce obviamente el programa. 8. Implementar el algoritmo de Euclides (tema 1) que encuentra el máximo común divisor de dos números enteros y positivos. Análisis del problema Pág. 2/9 I.E.S. Iliberis Atarfe 03/04 Fundamentos de Programación Tema 5. Relación I El algoritmo transforma un par de enteros positivos (n, m) en una par (n1, m1) dividiendo repetidamente el entero mayor por el menor y reemplazando el mayor por el menor y el menor por el resto. Cuando el resto es 0, el natural más pequeño distinto de cero de la pareja será el máximo común divisor de la pareja original. La codificación deberá leer primeramente los números enteros n y m, validando la entrada. Posteriormente mediante otro bucle se efectúan las correspondientes transformaciones para obtener el máximo común divisor. 9. Escribe un algoritmo que lea dos números enteros positivos y calcule el mínimo común múltiplo de los dos números. Análisis del problema Una forma sencilla de resolver el problema es tener en cuenta que siempre el producto de dos números positivos cualesquiera coincide con el producto del máximo común divisor por el mínimo común múltiplo. Con lo que modificando el problema anterior, se obtiene el mínimo común múltiplo. Otra manera también sencilla de resolverlo es tomar el mínimo común múltiplo como el mayor de los dos números, y mediante un bucle que itere mientras que los números dados no dividan al mínimo común múltiplo hacer incrementar en una unidad el mínimo común múltiplo. 10. Escribe un programa que presente los valores de la función seno(2x)-x para igual a 0, 0.5, 1.0, ...... 9.5, 10. Análisis del problema Se define la constante simbólica m como 10 y una «función en línea» f(x) (también llamada una macro con argumentos). El bucle se realiza 21 veces; en cada iteración el valor de x se incrementará en 0.5, se calcula el valor de la función y se escriben los resultados. 11. Escribir un programa que calcule y visualice el más grande, el más pequeño y la media de n números (n>O). El valor de n se solicitará al principio del programa y los números serán introducidos por el usuario. Análisis del problema Pág. 3/9 I.E.S. Iliberis Atarfe 03/04 Fundamentos de Programación Tema 5. Relación I Primeramente se lee el número n en un bucle do while que valide que es positivo. Posteriormente se lee el primer número de la serie, y se inicializa el mayor, el menor y la media a ese número. Un bucle for va leyendo el resto de los números, y mediante la técnica voraz (el mejor de todos es o el mejor de todos los anteriores o es el que acabo de leer) se recalculan los nuevos mínimo y máximo, y a la vez se acumula en media el último valor leído. Al final se escriben los resultados y la media que es la suma obtenida en la variable media divido por n. 12. Un número perfecto es un entero positivo, que es igual a la suma de todos los enteros positivos (excluido el mismo) que son divisores del numero. El primer número perfecto es 6, ya que los divisores de 6 son 1, 2, 3 y 1 + 2 + 3 = 6. Escribir un programa que lea un entero positivo n y decida si es perfecto. Análisis del problema Se lee el número n en un bucle validando la entrada. Posteriormente un bucle for, prueba todos los posibles candidatos a divisores menores que n (basta con empezar en 1 y avanzar de uno en uno hasta llegar a n-1 ). Podría mejorarse el bucle llegando sólo a la raíz cuadrada de n). Estos divisores se van acumulando en un acumulador, para al final del bucle comprobar la condición de perfecto y dar el mensaje correspondiente. 13. El valor de ex se puede aproximar por la suma 1+ x + x2 x3 xn + + ... + 2! 3! n! Escribir un programa que tome un valor de x como entrada y visualice la suma para cada uno de los valores de 1 a 100 14. El matemático italiano Leonardo Fibonacci propuso el siguiente problema. Suponiendo que un par de conejos tiene un par de crías cada mes y cada nueva pareja se hace fértil a la edad de un mes. Si se dispone de una pareja fértil y ninguno de los conejos muere. ¿Cuántas parejas habrá después de n años. Mejorar el problema calculando el número de meses necesarios para producir un número dado de parejas de conejos. Pág. 4/9 I.E.S. Iliberis Atarfe 03/04 Fundamentos de Programación Tema 5. Relación I Análisis del problema Para resolver el problema, basta con observar que en cada mes el número de parejas fértiles, coincide con la suma de las parejas fértiles que había en los dos meses inmediatamente anteriores, con lo que para obtener el resultado, basta con usar una variable auxiliar aux en la cual se suman los dos valores que teníamos en los dos meses anteriores, para actualizar de nuevo los valores de los nuevos meses de acuerdo con lo indicado. El programa lee primeramente un número n positivo. Inicializa f1 y f2 con los valores 1, para posteriormente en un bucle for de uno en uno y comenzando por el valor 2, hacemos aux= f1 + f2, f1 = f2 y f2=aux (f1 es el mes anterior y f2 es el actual). Para mejorar la solución pedida, basta con leer el número de parejas, y entrar en un bucle while controlado en este caso por la condición ser menor que np y realizar la misma operación que se hizo en el bucle for. Al final se escribe el valor de la variable i que va contando el número de iteraciones. 15. Determinar si un número dado leído del teclado es primo o no. (tema 1) Análisis del problema Un número positivo es primo, si sólo tiene por divisores el uno y él mismo. Teniendo en cuenta que si hay un número i que divide a otro n menor que la raíz cuadrada de n, entonces hay otro que también lo divide que es mayor que la raíz cuadrada de n; se tiene que basta con comprobar los posibles divisores menores o iguales que la raíz cuadrada del número dado. El programa se realizará con un solo bucle, en el cual se van comprobando los posibles divisores, siempre y cuando no se haya encontrado ya algún divisor anterior, o no se tenga que controlar ningún otro divisor. Se lee primeramente el valor de n, validando que sea positiva, y posteriormente se realiza con otro bucle lo expuesto anteriormente. 16. Calcular la suma de la serie 1/1 + 1/2 + ... + 1/n donde n es un número que se introduce por teclado. Análisis del problema Para realizar la suma de la serie, basta con acumular en una variable s los distintos valores de los términos t = 1/i. Previamente se lee el valor del número de términos n validando la Pág. 5/9 I.E.S. Iliberis Atarfe 03/04 Fundamentos de Programación Tema 5. Relación I entrada y posteriormente con un bucle for controlado por la variable i se va realizando la correspondiente acumulación. 17. Calcular la suma de los términos de la serie: 1/2 + 2/22 + 3/23 + ... + n/2n. Análisis del problema Para realizar la suma de la serie, basta con acumular en una variable s los distintos valores de los términos t = i / 2 i. Previamente se lee el valor del número de términos n validando la entrada, y posteriormente se realiza la acumulación mediante un bucle for. 18. Encontrar un número natural n más pequeño tal que la suma de los n primeros números naturales exceda de una cantidad introducida por el teclado máximo. Análisis del problema Primeramente se lee el valor de la cantidad introducida por teclado máximo validando la entrada. Posteriormente se acumula la serie dada por los distintos números naturales, hasta que se exceda el valor introducido. Esto se realiza mediante un bucle for cuya salida viene dada precisamente por el valor s>= maximo. 19. Escribe un programa que lea un número entero positivo y calcule su factorial, mediante un for, un while y mediante un do while. Análisis del problema En primer lugar se lee el valor del número n1, mediante una sentencia de while validando el dato para posteriormente escribir los tres bucles, con sus correspondientes inicializaciones. 20. Encontrar el número mayor de una serie de números introducidos por teclado. Análisis del problema Comenzar pidiendo el primer número que será distinto de -1. Posteriormente se lee la serie de números. El fin de la entrada de datos viene dado por el valor de -1. El cálculo del máximo se realiza en el cuerpo de un segundo bucle controlado por el valor -1 mediante la Pág. 6/9 I.E.S. Iliberis Atarfe 03/04 Fundamentos de Programación Tema 5. Relación I técnica, «el mayor de todos hasta el último leído coincide con el mayor del último número que he leído o bien coincide con el mayor de todos los que leí anteriormente». 21. Calcular todos los números de tres cifras tales que la suma de los cubos de las cifras es igual al valor del número Análisis del problema La solución se plantea mediante un bucle que recorre todos los números de tres cifras. En cada iteración del bucle, se calcula cada una de las cifras del número y se comprueba la condición, en cuyo caso se escribe. Si el número i = c3c2c1 entonces la condición indicada es i = c1*c1 + c2*c2 + c3*c3. Para calcular las cifras, basta con usar el cociente y la división entera. 22. Diseñar e implementar un programa que cuente el número de sus entradas que son positivas, negativas y cero. 23. Diseñar e implementar un programa que extraiga valores del flujo de entrada estándar y a continuación visualice el mayor y el menor de esos valores en el flujo de salida estándar. El programa debe visualizar mensajes de advertencias cuando no tenga entradas. 24. Diseñar e implementar un programa que solicite al usuario una entrada como un dato tipo fecha y a continuación visualice el número del día correspondiente del año. Ejemplo, si la fecha es 30 12 1999, el número visualizado es 364. 25. Un carácter es un espacio en blanco si es un blanco ( ' ' ), una tabulación ( ‘\t’ ), un carácter de nueva línea ( '\n' ) o un avance de página ( '\f ' ). Diseñar y construir un programa que cuente el número de espacios en blanco de la entrada de datos. 26. Escribir un programa que lea una temperatura en grados Celsius e imprima el equivalente en grados Fahrenheit. 27. Escribir un programa que convierta: (a) centímetros a pulgadas; (b) libras a kilogramos. Pág. 7/9 I.E.S. Iliberis Atarfe 03/04 Fundamentos de Programación 28. Tema 5. Relación I Escribir un programa que lea 3 enteros positivos dia, mes y agno y a continuación visualice la fecha que represente, el número de días, del mes y una frase que diga si el año es o no bisiesto. Ejemplo, 4/11/1999 debe visualizar 4 de noviembre de 1999. Ampliar el programa de modo que calcule la fecha correspondiente a 100 días más tarde. 29. En una empresa de computadoras, los salarios de los empleados se van a aumentar según su contrato actual: Contrato Aumento % 0 a 9.000 dólares 20 9.001 a 15.000 dólares 10 15.001 a 20.000 dólares 5 más de 20.000 dólares 0 Escribir un programa que solicite el salario actual del empleado y calcule y visualice el nuevo salario. 30. La constante pi (3.141592 ...) es muy utilizada en matemáticas. Un método sencillo de calcular su valor es: 2 4 6 Pi = 4. . . ........ 3 57 Escribir un programa que efectúe este cálculo con un número de términos especificados por el usuario. 31. Escribir un programa que visualice un cuadrado mágico de orden impar n, comprendido entre 3 y 11; el usuario elige el valor de n. Un cuadrado mágico se compone de números enteros comprendidos entre 1 y n2. La suma de los números que figuran en cada línea, cada columna y cada diagonal son idénticos. Un ejemplo es: Pág. 8/9 8 1 6 3 5 7 I.E.S. Iliberis Atarfe 03/04 Fundamentos de Programación 4 9 Tema 5. Relación I 2 Un método de construcción del cuadrado consiste en situar el número 1 en el centro de la primera línea, el número siguiente en la casilla situada encima y a la derecha, y así sucesivamente. Es preciso considerar que el cuadrado se cierra sobre sí mismo: la línea encima de la primera es de hecho la última y la columna a la derecha de la última es la primera. Sin embargo, cuando la posición del número caiga en una casilla ocupada, se elige la casilla situada debajo del número que acaba de ser situado. Posteriormente veremos una solución con arrays en el tema 7. 32. Calcular la media de las notas introducidas por teclado con un diálogo interactivo semejante al siguientes: ¿Cuántas notas? 20 Nota 1 : 7.50 Nota 2: 6.40 Nota 3: 4.20 .......... Nota 20: 9.50 Media de éstas 20: 7.475 33. Contar el número de enteros negativos introducidos en una línea. Pág. 9/9 I.E.S. Iliberis Atarfe 03/04