tamaño: 84586B

Anuncio
1º Grado de IEM- ITL
Fundamentos de Informática
Hoja de Problemas 3 – Sentencias de Control y Funciones
Problema 1
Escribir un programa que solicite al usuario un número n (entero positivo), y llame a la función
TrianguloPares() para dibujar un triángulo de números pares tal y como aparece en el ejemplo.
El prototipo de la función es:
void TrianguloPares(int n);
2
2 4
2 4 6
2 4 6 8
..................
2 4 6 8 ....................2*n
Problema 2
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).
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 un programa 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
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 debe usar la función BuscarInteres() que devuelva el primer interés que encuentre que consiga, como
mínimo, duplicar el capital inicial en el número de años indicado.
El prototipo de BuscarInteres() va a ser:
float BuscarInteres(float capital_inicial, int num_anios);
Será de utilidad (para usarla dentro de BuscarInteres()) 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 5
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
1º Grado de IEM- ITL
Fundamentos de Informática
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 6 (Prueba 1 7/Oct/11)
Escribir un programa que:

Solicite al usuario la cantidad de números n que va a introducir, debiendo validar que n sea un valor
positivo.

A continuación, vaya solicitando tantos números enteros como haya indicado el usuario con n, y muestre por
pantalla los números que sean múltiplos de 3.

Finalmente, deberá mostrar al usuario la media de los valores que no son múltiplos de 3.
Problema 7
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
…..
a) Realizar la función FibonacciRec()
b) Realizar la función FibonacciIte()
Problema 8
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 Pn.
NOTA: La función Polinomio_Legendre() debe ser una función recursiva.
Ejercicio adicional: Realizar la función Polinomio_Legendre() de manera iterativa.
Problema 9 (Intersemestral Noviembre 10-11)
Escribe un programa completo que lea un número entero de teclado y llame a una función Invertir() que invierte el
número que recibe y lo devuelve. A continuación el programa muestra el resultado. Escribir también el código de la
función Invertir(), teniendo en cuenta que debe ser una función iterativa que no emplea vectores.
Ejemplo: si el entero inicial es 427, el resultado será 724
Nota: esta función no hace uso de vectores. El algoritmo implementa el uso del operador %.
Problema 10
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
1º Grado de IEM- ITL
Fundamentos de Informática
T= 500
B= 0.0391
A= 1.39
K
dm3 / mol
dm6 atm / mol2
temperatura en Kelvin
constante del gas nitrógeno
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 11 (Prueba 1 7/Oct/11)
Escribir un programa completo (cabecera, includes, ...) que calcule el punto de corte de dos rectas
y1 = ax + b
y2 = cx + d
El programa debe:

Leer de teclado los números reales: a, b, c, y d. 
Cuando las dos rectas se cortan, y1 e y2 son iguales. Por tanto, es necesario calcular el valor de x en la
expresión ax+b = cx+d. Ese valor de x es el que debe calcular el programa.
El programa debe distinguir los siguientes casos:
Rectas paralelas: dar un mensaje indicando que no hay punto de corte si a es igual a c.
Rectas coincidentes: dar un mensaje en este caso (a y c, y b y d son iguales).
En el resto de los casos calcular y mostrar el punto de corte.

Problema 12 (Intersemestral Marzo 10-11)
Escribe un programa completo (código completo en main) que pregunte al usuario cuántos números desea introducir
(n) y luego lea de teclado esos n números reales, calculando:
- El valor medio de los números positivos
- El valor medio de los números negativos
- La mínima diferencia entre los números positivos y los negativos
Finalmente mostrará por pantalla los tres resultados.
Nota: NO se puede hacer uso de vectores
Ejemplo: si los números introducidos son: 1.2 , 7.8 , -0.4 , 9.0 , -2.1
La mínima diferencia es la diferencia entre el menor número positivo y el mayor (teniendo en cuenta el signo)
número negativo: 1.2 – (-0.4) = 1.6
El valor medio de los números positivos es: (1.2 + 7.8 + 9.0)/3
El valor medio de los números negativos es: ( - 0.4 - 2.1 )/2
Problema 13
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.
1º Grado de IEM- ITL
Fundamentos de Informática
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.
Problema 14 (Intersemestral Marzo 10-11)
Una serie dada aproxima el valor de una función cuyo resultado exacto se conoce y es res.
Se desea saber el número de términos a sumar de la serie para que el error de la aproximación sea menor que un valor
dado error
Escribir el código de la función Serie(), que recibe el valor real x, el resultado exacto res (número real) y el error
(número real) que se debe cumplir y calcula y devuelve el número de términos a sumar en la serie para que el error
cometido sea menor que error.
El alumno debe pensar el prototipo correcto de la función Serie()
serie 
1
1
1
1

 5
 3
x 2· x
3· x
4· x 7
Problema 15
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 que le esté solicitando de manera continuada al usuario datos
de tipo carácter y que los transforme a minúscula la función. Cuando el usuario introduzca el carácter ‘*’ significará
que desea terminar.
Problema 16 (Prueba 1 Feb 14)
Escribir un programa completo que calcule el máximo número oblongo que hay entre dos números dados por el
usuario.
El programa principal debe pedir al usuario que introduzca dos números enteros positivos (lim_inf, lim_sup)
que van a marcar el valor inferior y superior del intervalo. Además de comprobar que ambos son positivos, va a ser
necesario comprobar que lim_sup es mayor que lim_inf.
El programa principal debe comprobar si cada uno de los valores que existen entre lim_inf y lim_sup (ambos
inclusive) es un número oblongo o no, y ha de buscar el máximo número oblongo entre ambos límites. Para
comprobar si un número es o no oblongo se ha de llamar a la función Oblongo(), que devolverá 1 si el número es
oblongo, y 0 si no lo es.
Finalmente, el programa principal debe mostrar el máximo número oblongo encontrado entre lim_inf y
lim_sup. En caso de no existir ningún número oblongo entre ambos límites, se dará un mensaje de “No existen
numeros oblongos”.
El prototipo de la función Oblongo() es:
int Oblongo(int num);
Un Número Oblongo es un número natural que es el producto de dos números naturales consecutivos. Por
ejemplo, 30 es un número oblongo porque es el producto de 5x6. Otros números oblongos son 42, 56, ...
Escribir el programa completo: ficha del programa, includes, prototipo, función principal main() y función
Oblongo().
Problema 17 (Prueba 1 Oct 13)
Un profesor de colegio necesita imprimir una tabla de los divisores de los números enteros para los alumnos de su
clase. Escribir un programa en C para ayudar al profesor crear esta tabla.
Para crear la tabla, inicialmente hay que pedir al usuario un número entero positivo n. A continuación el programa
llamará repetidamente a una función Escribir_Divisores() para obtener los divisores de cada número desde 1 hasta n.
Se pide:

escribir en el main la llamada a la función
 escribir la función Escribir_Divisores()
Un ejemplo de la ejecución de este programa puede ser lo siguiente:
Descargar