Rápidos y Furiosos X
Un tanque perteneciente a Dante Reyes archienemigo de Dominic Toretto trata de impedir que Toretto haga llegar suministros: Comida, agua, armamento, medicinas, etc. a sus compañeros que se encuentran atrapados en un refugio en la cordillera de los Alpes.
El tanque de Dante Reyes puede acercarse a la montaña hasta distancias superiores a los 1400 mts. Esto dado que Letty y Román (Novia y amigo de Dominic) colocaron minas explosivas en el área cercana a la montaña de forma de impedir que se acerque el tanque de Reyes. En consecuencia, sistemáticamente el tanque se posiciona a distancias cercanas al área minada y bombardea la parte trasera de la montaña, la cual es la zona por donde Dominic piensa pasar para trasladar los suministros.
El tanque generalmente dispone de un radio de disparo comprendido entre los ángulos θ1 y θ2, cuando se posiciona el cañón entre esos dos ángulos todos los disparos caen en el lado de la montaña donde se reciben los suministros.
En la medida que el tanque se aleja de la montaña los ángulos θ1 y θ2 tienden a igualarse. Si el tanque se aleja mucho todos los disparos colisionaran en la montaña o terminaran cayendo antes de ella.
Recuerde lo máximo que puede acercarse el tanque al eje central de la montaña es a 1400 mts. El tanque se posiciona sistematicamente en ubicaciones distintas: 1450 mts, 1500 mts, etc.
Su programa deberá:
1.- Indicar en caso de existir el rango del ángulo con el cual el tanque bombardea el lado contrario. (mínimo θ1 - máximo θ2).
2.- Indicar el rango del área que puede ser bombardeada con el tanque (mínima X1 - máxima X2) según como aparece representado en dibujo.
3.- Indique cual mensaje que debe transmitirle el programa a Dominic, considere que el camión mide 5 mts de ancho x 5 mts de alto.
4.- El único dato de entrada al programa es la distancia X desde el eje central de la montaña hasta el tanque. Este dato es conocido gracias a un radar ubicado en el refugio.
Nota: Para cualquier cálculo considere la gravedad de 9.8 mts/s2. Considere para todo cálculo la altura del cañón del tanque en 2.2 mts.
Indique: θ1 en grados , θ2 en grados, X1 en mts, X2 en mts y recomendación del programa para Dominic Toretto para las siguientes ubicaciones del tanque: 4000 mts, 4200 mts y 4500 mts.
Programa en C++
/*Parcial Nro. 2 - Rápidos y Furiosos - semestre 2024-II
Programación II
Elaborado Por Carlos Ferrer
Rev. 23 de abril de 2025
*/
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
// Distancia del tanque a la parte alta de la montaña en horizontal
double x;
// Elementos de la resolvente
double a,b,c;
// Tangente de los ángulos
double tQ1;
double tQ2;
// Ángulos en radianes
double Q1_Rad;
double Q2_Rad;
// Velocidad Inicial
double vo=250;
//Tiempo de vuelo de alcance máximo conociendo el ángulo
double tv1a, tv1b, tv2a, tv2b, tv1, tv2;
// Distancias de cobertura de ataque del tanque
double x1,x2;
do
{
cout <<"Ingrese la distancia del tanque (Mayor de 1400 mts)= ";
cin >>x;
}
while (x<1400);
// Determinamos los ángulos
a=4.9*pow(x,2)/pow(vo,2);
b=-x;
c=1800-2.2+4.9*pow(x,2)/pow(vo,2);
tQ1=(-b+sqrt(pow(b,2)-4*a*c))/(2*a);
tQ2=(-b-sqrt(pow(b,2)-4*a*c))/(2*a);
Q1_Rad=atan(tQ1);
Q2_Rad=atan(tQ2);
//Determinamos el tiempo de vuelo del recorrido completo para el primer ángulo y X1
a=-4.9;
b= vo*sin(Q1_Rad);
c=2.2;
tv1a=(-b+sqrt(pow(b,2)-4*a*c))/(2*a);
tv1b=(-b-sqrt(pow(b,2)-4*a*c))/(2*a);
if (tv1a>0)
{
tv1=tv1a;
}
else
{
tv1=tv1b;
}
x1=vo * cos(Q1_Rad)*tv1-x;
//Determinamos el tiempo de vuelo del recorrido completo para el 2do ángulo y X2
a=-4.9;
b= vo*sin(Q2_Rad);
c=2.2;
tv2a=(-b+sqrt(pow(b,2)-4*a*c))/(2*a);
tv2b=(-b-sqrt(pow(b,2)-4*a*c))/(2*a);
if (tv2a>0)
{
tv2=tv2a;
}
else
{
tv2=tv2b;
}
x2=vo * cos(Q2_Rad)*tv2-x;
// Presentamos los resultados
cout <<"El angulo menor para pasar el cerro es = "<<Q2_Rad*180/M_PI<<endl;
cout <<"El angulo mayor para pasar el cerro es = "<<Q1_Rad*180/M_PI<<endl;
cout <<"El tanque puede Bombardear el area entre "<<x1<<" y "<<x2<<" mts"<<endl<<endl;
if (x1<1805 and x2>1805)
{
cout <<"Comuniquense urgente con Dominic e indiquenle que no se acerque dado que corre peligro"<<endl<<endl;
}
else
{
cout <<"Comuniquense urgente con Dominic e indiquenle que traiga el camión de inmediato"<<endl<<endl;
}
system ("pause");
}
Programa en Python
# Parcial Nro. 2 - Rápidos y Furiosos - semestre 2024-II
# Programación II
# Elaborado Por Carlos Ferrer
# Rev. 23 de abril de 2025
import math
import os
os.system("cls")
# Distancia del tanque a la parte alta de la montaña
# en horizontal
x1=0
x2=0
x = float(input("Ingrese la distancia del tanque (Mayor de 1400 mts)= "))
while x < 1400:
x = float(input("Ingrese la distancia del tanque (Mayor de 1400 mts)= "))
# Velocidad Inicial
vo = 250
# Elementos de la resolvente
a = 4.9 * x**2 / vo**2
b = -x
c = 1800 - 2.2 + 4.9 * x**2 / vo**2
# Tangentes de los angulos
if ((b**2 - 4*a*c)<0):
no_pasa=True
else:
no_pasa=False
tQ1 = (-b + math.sqrt(b**2 - 4*a*c)) / (2*a)
tQ2 = (-b - math.sqrt(b**2 - 4*a*c)) / (2*a)
# Angulos
Q1_Rad = math.atan(tQ1)
Q2_Rad = math.atan(tQ2)
# Calculos de X1 y X2
a = -4.9
b = vo * math.sin(Q1_Rad)
c = 2.2
tv1a = (-b + math.sqrt(b**2 - 4*a*c)) / (2*a)
tv1b = (-b - math.sqrt(b**2 - 4*a*c)) / (2*a)
if tv1a > 0:
tv1 = tv1a
else:
tv1 = tv1b
x1 = vo * math.cos(Q1_Rad) * tv1 - x
a = -4.9
b = vo * math.sin(Q2_Rad)
c = 2.2
tv2a = (-b + math.sqrt(b**2 - 4*a*c)) / (2*a)
tv2b = (-b - math.sqrt(b**2 - 4*a*c)) / (2*a)
if tv2a > 0:
tv2 = tv2a
else:
tv2 = tv2b
x2 = vo * math.cos(Q2_Rad) * tv2 - x
# Presentación de resultados
print("\n")
print("El angulo menor para pasar el cerro es =", Q2_Rad*180/math.pi)
print("El angulo mayor para pasar el cerro es =", Q1_Rad*180/math.pi)
print("El tanque puede Bombardear el área entre", x1, "y", x2, "mts")
if ((x1 < 1805 and x2 > 1805) and (no_pasa==False)):
print("\n")
print("Comuníquense urgente con Dominic e indíquenle que no se acerque dado que corre peligro","\n")
else:
print("\n")
print("Comuníquense urgente con Dominic e indíquenle que traiga el camión de inmediato","\n")