Hoja_3

Anuncio
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  5001    ... 
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.
Documentos relacionados
Descargar