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
No hay comentarios.:
Publicar un comentario