Test1 - Enunciados - Anteriores UVA
Test1 - Enunciados - Anteriores UVA
Test1 - Enunciados - Anteriores UVA
Existe una forma de aproximar el factorial de un número entero mediante una función continua
utilizando la llamada fórmula de Stirling:
double factorial(int);
Ejemplo:
Valor de n ln(n!) n*ln(n)-n Error absoluto Error relativo
10 15.1044 13.01259 2.07856 0.137613
100 363.739 360.517 3.22236 0.00885897
𝑇𝑛 = ∑ 𝑖
𝑖=1
El programa deberá:
1. Solicitar un número entero 𝑁.
2. Si 𝑁 > 0:
Determinar si es triangular, 𝑁 = 𝑇𝑛 . Nótese que 𝑛 ≤ 𝑇𝑛 .
Si es triangular, se mostrará por pantalla el mensaje 𝑁 𝑒𝑠 𝑡𝑟𝑖𝑎𝑛𝑔𝑢𝑙𝑎𝑟 y se incrementará
un contador que reflejará la cantidad de números triangulares introducidos hasta el
momento.
Volver al punto 1.
3. Si 𝑁 ≤ 0 mostrar por pantalla la cantidad de números triangulares introducidos y dar por
finalizado el programa.
Para resolver el problema deberá utilizarse una función int triangular(int n); que
devuelva el valor 𝑇𝑛 .
En la tienda de los hermanos Roque es tradicion presentar las latas de conserva apiladas triangularmente: en el
último piso una lata, en el siguiente piso debajo dos latas y asi sucesivamente. Por ejemplo, seis latas se ponen
asi:
*
**
***
Los hermanos tienen grandes problemas para realizar los pedidos de latas, ya que no todo número de latas se
puede apilar triangularmente. Por ejemplo, 8 latas no se pueden apilar.
Realice un programa en C++ en el que dado un número natural introducido por el usuario (en este caso el
número de latas), se comprueba y se informa a través de un mensaje si es adecuado para apilar. Si es posible
hágalo, también se pide que se dibuje un triangulo rectangulo por medio de asteriscos para visualizar la
colocación de las latas, indicando la altura correspondiente.
La parte del programa asociada al dibujo del triángulo debe utilizar una función con prototipo
void imprime_linea (int n) que se encarga de imprimir una linea de asteriscos de una determinada
longitud n.
Ejemplo 1:
*
**
***
****
Ejemplo 2:
En la tienda de los hermanos Roque es tradicion presentar las latas de conserva apiladas triangularmente: en el
último piso una lata, en el siguiente piso debajo dos latas y asi sucesivamente. Por ejemplo, seis latas se ponen
asi:
*
**
***
Los hermanos tienen grandes problemas para realizar los pedidos de latas, ya que no todo número de latas se
puede apilar triangularmente. Por ejemplo, 8 latas no se pueden apilar.
Realizar un programa en C++ en el que dado un número natural introducido por el usuario (en este caso el
número de latas), se comprueba y se informa a través de un mensaje si es adecuado para apilar. Si es posible
hacerlo, también se pide que se dibuje un triangulo rectangulo por medio de asteriscos para visualizar la
colocación de las latas, indicando la altura correspondiente.
La parte del programa asociada al dibujo del triángulo debe utilizar una función con prototipo
void imprime_linea (int n) que se encarga de imprimir una linea de asteriscos de una determinada
longitud n.
Ejemplo 1:
*
**
***
****
Ejemplo 2:
Realizar un programa en C++ que lea la longitud de tres lados (de tipo entero) y determine si
pueden formar un triángulo (un lado de longitud mayor que la suma de los otros dos lados) o
no. Si pueden formar triángulo se debe determinar si el triángulo puede ser equilátero (tres
lados iguales), isósceles (2 lados iguales) o escaleno (tres lados distintos). Además deberá
determinar si el triángulo puede ser rectángulo (cuadrado de un cateto es igual a la suma de
los otros dos). Una vez mostrado el resultado el programa preguntará si se quiere ejecutar de
nuevo el programa con tres nuevos lados y en caso contrario el programa finalizará. Se
realizará el control necesario para que las longitudes introducidas sean positivas.
El programa deberá:
1. Solicitar al usuario las longitudes de tres lados (tipo entero). Si alguno de las longitudes es
menor que cero volverá a solicitar las tres longitudes.
2. Determinará si los lados pueden formar triángulo o no mostrándolo por pantalla. Para que
puedan formar triángulo un lado debe tener una longitud mayor que la suma de los otros
dos lados.
3. Si pueden formar triángulo determinará mostrándolo por pantalla si el triángulo puede ser
equilátero, isósceles o escaleno. Además mostrará por pantalla si el triángulo es
rectángulo o no. Para el cálculo de si el triángulo es rectángulo se deberá utilizar la
función int es_rectangulo(int,int,int) que devolevera 1 si el triángulo es
rectángulo y 0 si no lo es.
4. Se preguntará al usuario si quiere repetir el programa en cuyo caso se volverá al 1. Para
volver a solicitar las longitudes.
Ejemplo de ejecución:
Pág. 1 de 2
www.eii.uva.es - www.uva.es/eii
Departamento de
Ingeniería de Sistemas y Automática
Se trata de realizar un programa en C++ que calcule el valor del número PI mediante dos aproximaciones
distintas (Wallis y Madhava-Leibniz).
Para ello debe usar una función de prototipo double introduza_precision (void).
-x
Dicha función debe devolver el valor de la precisión (10. ). Para ello solicitará al usuario el valor del
exponente (x), asegurándose que dicho valor esté comprendido entre 1 y 7. Use la función pow para calcular
la precisión a partir del valor del exponente.
2. Calcular y mostrar el valor del número PI con la precisión indicada para ambas aproximaciones, indicando el
número de términos usado en cada caso. Recuerde que puede calcular el valor exacto de PI usando el arco
coseno de -1, acos(-1.).
Independientemente de la precisón elegida, debe mostrar los valores de PI con 7 cifras decimales, para ello
recuerde escribir la sentencia cout.precision(8), al principio de la función main.
3. Preguntar al usuario si desea repetir los cálculos. Si desea repetir, vuelva al punto 1, si no, finalice la
ejecución del programa.
Wallis:
Madhava-Leibniz:
Pág. 1 de 4
Pág. 2 de 4
1 1 1 1 1 1
+ + + + + +⋯=2
1 3 6 10 15 21
𝑛(𝑛 + 1)
𝑇𝑛 =
2
Precision deseada: -2
Error. Debe ser positiva
Precision deseada: 1e-3
Se sabe que la serie an br
n 0
n
converge si la razón r es tal que |r|<1.
an br
b ar
En tal caso se tiene que
n
(Valor exacto )
n 0 1 r 1 r 2
Se pide comprobar que la suma de un número finito de términos aproxima con un error el valor de la serie.
Para ello se realizará un programa en C++ que calcule el valor de la serie con un error proporcionado por el usuario.
El programa debe:
1. Solicitar los valores de a, b (números reales).
2. Solicitar el valor de r. Su valor absoluto debe ser menor que 1. En caso contrario lo volverá a pedir.
3. Solicitar el valor del error_admisible. Su valor absoluto debe ser menor que 0.01. En caso contrario lo
volverá a pedir.
4. Calcular el valor de la serie de manera que el error_cometido sea menor que el error_admisible.
error_cometido=|Valor exacto – Valor calculado|
5. Presentar por pantalla el valor calculado, el valor exacto, el número de términos empleado y el error
cometido.
Se precisa el uso de las funciones matemática pow(x,y) (xy) y abs(x) (|x|). Para ello se incluirá #include<cmath>.
Para alcanzar la máxima puntuación en el test, se debe emplear una función con prototipo
double pide_valor(double) en los puntos 2 y 3.
constante a? 2 constante a? 2
constante b? 3 constante b? 3
razon r?. Valor absoluto menor que 1 0.4 razon r?. Valor absoluto menor que 1 2
el valor absoluto de r debe ser menor que 1
error admisible. Valor absoluto menor que 0.01 0.00001
razon r?. Valor absoluto menor que 1 0.4
valor aproximado 7.22222
valor exacto 7.22222 error admisible. Valor absoluto menor que 0.01 3
usando 18 el valor del error debe ser menor que menor que 0.01
error 4.61948e-006
error admisible. Valor absoluto menor que 0.01 0.000001
Realizar un programa en C++ que calcule el valor de la serie convergente: suma de los recíprocos de las
potencias de 2 con signos alternados:
1 1 1 1 1 1 2
− + − + − +⋯ =
1 2 4 8 16 32 3
Precision deseada: -2
Error. Debe ser positiva
Precision deseada: 1e-3
El método de Arquímedes es una aproximación clásica (siglo III a. C.) al valor del número π por
defecto y por exceso a partir de polígonos regulares de n-lados inscritos y circunscritos
respectivamente en la circunferencia de radio unidad calculando sus perímetros 𝑏𝑖 y 𝑎𝑖 .
El método comienza con hexágonos, siendo por tanto 𝑏6 = 6 y demostrándose que 𝑎6 = 4√3, de modo
que se establece una primera aproximación: 6 < 2𝜋 < 6.92820324
Recursivamente se doblan el número de lados de los polígonos según las expresiones:
2𝑎 𝑏
𝑎2𝑛 = 𝑛 𝑛 ; 𝑏2𝑛 = √𝑎2𝑛 𝑏𝑛
𝑎𝑛 +𝑏𝑛
con lo que las aproximaciones por exceso y por defecto van convergiendo y siendo más precisas.
El programa deberá:
1. Establecer condiciones iniciales y presentarlas por consola.
2. Iterar y sacar por consola en líneas sucesivas la nueva aproximación de cada iteración, hasta que
la diferencia entre el perímetro de los polígonos circunscrito e inscrito sea menor que 1e-5.
3. Finalizar indicando el número de iteraciones que se han necesitado (considerando la primera la de
las condiciones iniciales) y el número de lados del polígono final.
Se utilizará para la salida por consola la función con argumentos 𝑏𝑖 y 𝑎𝑖 y con declaración:
void defectopiexceso(double, double);
que presentará las condiciones iniciales como: 3.00000 < pi < 3.46410
y en cada iteración presentará los nuevos valores por defecto y por exceso en ese mismo formato.