1º Ingeniería Industrial – Grupo D Fundamentos de Informática Curso 2009-2010 Hoja de Problemas 3 – Sentencias de Control y Funciones Nov-09 Problema 1 (Nov-07) Realizar el código de un programa que solicite un valor entero mínimo min y un valor entero máximo max, y una vez realizadas las comprobaciones adecuadas, escriba un bucle for que muestre por pantalla una tabla de valores y valores al cuadrado para todos los números comprendidos entre min y max. Ejemplo: si min vale 9 y max vale 12 el resultado sería (tabla bien alineada): x x*x ---------------9 81 10 100 11 121 12 144 Problema 2 (Nov-07) Escribir un programa completo (cabecera, includes, ...) que realice las siguientes operaciones: Declarar dos variables reales x e y Pedir al usuario el valor de x mediante scanf Si x fuera positivo calcular y según la expresión matemática y 1 2 3x 2 5 x y si x fuese negativo según la expresión y 12 (3x 2 5x) Mostrar los valores finales de x e y con únicamente dos decimales. Nota: para calcular la raíz cuadrada se utiliza la función sqrt(), lo cual requiere añadir al principio del programa el include: #include <math.h> Problema 3 a) Escribir una función float tempfahr (float tempcelsius) que reciba una temperatura en grados centígrados y la convierta a grados fahrenheit. b) Escribir una función principal que permita probarla al solicitar la conversión de varias temperaturas en un proceso iterativo que se acaba a voluntad del usuario. Problema 4 a) b) c) d) Escribir una función int factorial1 (int n) que devuelva el factorial de n. Escribir una función double factorial2 (int n) que devuelva el factorial de n. Escribir una función principal que permita probarlas. ¿Qué diferencias se perciben en la ejecución de ambas? Problema 5 Una compañía eléctrica factura los 200 primeros Kwh a 1,0 € /Kwh, los siguientes 300 a 0,8 € y los restantes a 0,5 €. Escribir una función float cargo (int kwh) que reciba un consumo en Kwh y devuelva la correspondiente cantidad a cargar. Escribir una función principal que pida el consumo de n clientes e informe de cual será la facturación total. 1º Ingeniería Industrial – Grupo D Fundamentos de Informática Curso 2009-2010 Problema 6 Escribir un programa que pida al usuario un capital inicial y un número de años (>=10) y calcule, a partir de ellos, el interés al que hay que poner el capital para doblarlo en los años pedidos. Se ofrecerán al usuario las siguientes opciones: a) b) c) d) Cálculo con un bucle for; Cálculo con un bucle while; Cálculo con un bucle do ...while; Finalizar la ejecución del programa. Para realizar cada una de las opciones (salvo la de la salida) deberán existir funciones que las lleven a cabo. Además, será de utilidad crearse otra función CalculoCapital() que le devuelva al usuario el capital acumulado para un capital inicial, un interés determinado y un número de años. Todas las entradas y salidas de datos se realizarán en el programa principal. El programa debe filtrar los datos para impedir la entrada de información inválida. Nota: capital_acumulado = capital_inicial * (1 + interes/100) num_anios; Está PROHIBIDO utilizar la función “pow” en este ejercicio. Problema 7 Escribe la definición de tú versión de la función toupper ( ) que reciba un carácter en mayúscula o minúscula y lo devuelva en mayúsculas. Escribe también un programa de llamada para probarlo. Problema 8 Escribir un programa que solicite al usuario un numero entero mayor que 0 y menor que 32000 y muestre: a) la suma de sus divisores impares b) la suma de sus divisores pares. Problema 9 Escribir un programa en C que solicite del usuario un número n (entero positivo) y muestre por pantalla los siguientes mensajes 1 12 123 1234 .................. 1 2 3 4 .....................n Problema 10 El valor del número e se puede aproximar sumando n términos de la serie: e 1 1 1 1 ... 1! 2! 3! Escribir un programa que solicite n, llame a una función Exponencial() e informe del valor aproximado de e. Téngase en cuenta que el término i de la anterior serie se obtiene dividiendo el término anterior por (i-1). 1º Ingeniería Industrial – Grupo D Fundamentos de Informática Curso 2009-2010 Problema 11 El valor de seno(x) se puede aproximar sumando n términos de la serie: sin(x) x x3 x5 x7 ... 3! 5! 7! Escribir un programa que solicite n y un arco x, llame a la función Seno() e informe desde el programa principal del valor aproximado de su seno. Problema 12 El valor de coseno(x) se puede aproximar sumando n términos de la serie: cos(x) 1 x2 x4 x6 ... 2! 4! 6! Escribir un programa que solicite n y un arco x y produzca un informe de 4 columnas y n filas. En la primera columna aparecerán los números 1, 2, 3, .... n. En la segunda el valor aproximado del coseno sumando tantos términos de la serie anterior como indique la primera columna. En la tercera el valor del coseno obtenido mediante la función propia del C, y en la cuarta la diferencia entre estas dos últimas. Los valores de las tres últimas columnas se darán con 6 cifras decimales. Problema 13 Los números de Fibonacci forman una interesante secuencia en la que cada número es igual a la suma de los dos números anteriores. Fi = Fi-1 + Fi.-2 F1 = F2 = 1 Realizar dos funciones, FibonacciRec() (recursivo) y FibonacciIte() (iterativo) que reciban como argumento el número de Fibonacci que se quiere calcular y devuelvan dicho valor. Ejemplo: F0 = 0 F1 = 1 F2 = 1 F3 = F1 + F2 = 1 + 1 = 2 F4 = F3 + F2 = 2 + 1 = 3 F5 = F4 + F3 = 3 + 2 = 5 F6 = F5 + F4 = 5 + 3 = 8 ….. a) Realizar la función FibonacciRec() b) Realizar la función FibonacciIte() Problema 14 Los polinomios de Legendre se pueden calcular mediante las fórmulas: P0 = 1 P1 = x Pn = [ (2*n-1)/n] * x * Pn-1 – [(n-1)/n] * Pn-2 Donde n = 2, 3, 4, ... y x es un número real que se encuentra entre –1 y 1. Realizar una función principal que pida el valor n y el valor x (y realice una comprobación de ambos datos) y posteriormente llame a la función Polinomio_Legendre() que será la encargada de devolverle el valor del Pn. Posteriormente, la función principal se encargará de mostrarle al usuario el valor P n. NOTA: La función Polinomio_Legendre() debe ser una función recursiva. Ejercicio adicional: Realizar la función Polinomio_Legendre() de manera iterativa. 1º Ingeniería Industrial – Grupo D Fundamentos de Informática Curso 2009-2010 Problema 15 La siguiente ecuación permite calcular la presión de un gas real, tratado como un gas de Van der Waals, en función del volumen molar. p = R * T (vm-B) – A /( vm2)ESTIMACIÓN DE LA PRESIÓN p: atm presión del gas vm: dm3/mol volumen molar R= 0.0820575 dm3 atm / K mol constante de los gases T= 500 K temperatura en Kelvin B= 0.0391 dm3 / mol constante del gas nitrógeno A= 1.39 dm6 atm / mol2 constante del gas nitrógeno a) Implementar una función con nombre presion_van_der_waals() que permita estimar la presión (p) del gas nitrógeno, teniendo en cuenta la fórmula vista anteriormente. b) Implementar una función con nombre volumen_molar_van_der_waals() que permita calcular el volumen molar (vm) del gas nitrógeno a partir de una presión dada. Para el cálculo del volumen molar es necesario utilizar la función presion_van_der_waals() del apartado a) sin más que ir calculando la presión p para sucesivos valores de vm hasta encontrar una diferencia entre la presión dada y la presión calculada inferior a 1 atmósfera. Se debe partir de un valor inicial vm= 0.01 que se irá incrementando en pasos de 0.001 hasta dar con la presión que cumpla la condición citada (diferencia menor que 1 atmósfera). c) Implementar una función principal que muestre los valores obtenidos al llamar a las funciones creadas en los apartados anteriores con los siguientes parámetros: 1. La presión del gas real de nitrógeno para un volumen molar de 0.419 dm3/mol. 2. El volumen molar del gas real de nitrógeno para una presión de 200 atm. Problema 16 Como cooperante de la ONG Ingeniería Sin Fronteras, ha sido destinado a los campamentos de refugiados Saharauis situados en lo peor del desierto del Sáhara, “la Hamada” que está cerca de la ciudad argelina de Tindouf. Los campamentos están formados por 4 Wilayas entre las cuales ha de viajar para impartir una serie de cursos sobre energía solar fotovoltaica. Para realizar estos viajes dispone de un jeep que, dicho sea de paso, esta un poco destartalado. El jeep pierde agua por el radiador y esta pérdida aumenta obviamente según se calienta el motor. Por tanto, es necesario transportar una serie de garrafas de agua para ir rellenando el radiador. Se ha demostrado empíricamente que con n garrafas, la distancia l que es posible recorrer antes de que el motor se gripe viene dada por la siguiente expresión: 1 1 1 l 5001 ... 2 * n 1 3 5 que sólo es válida para distancias inferiores a 3000 kilómetros. Escribir un programa que presente un menú al usuario en el programa principal donde: a) A partir de un número de garrafas conocido se informe al cooperante de los kilómetros que puede recorrer el jeep. b) A partir de un número de kilómetros (distancia) que debe recorrer se informe al cooperante del número de garrafas que necesita llevar consigo en el jeep. En ambos casos, se llamará a una función distinta que devolverá el resultado al programa principal, donde se mostrará la respuesta. Nota: es posible que la función utilizada en el apartado (b) realice una llamada a la función utilizada en el apartado (a) para realizar los cálculos.