domingo, 1 de noviembre de 2026

02i.- Programación II - Ejercicio a trabajar en clase 29 de octubre de 2026 (Semestre 2027 - I) - SOLUCIÓN DEL PROFESOR

 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++

/*Rápidos y Furiosos - semestre 2027-I

Programación II

Elaborado Por Carlos Ferrer

Rev. 31 de octubre de 2027

*/


#include <iostream>

#include <math.h>

#include <locale.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;

// Ángulos en grados

double Q1;

double Q2;

// 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;

double Q3_Rad; //Angulo en radianes con el que se destruye el tanque

double Q3; //Angulo en grados con el que se destruye el tanque


setlocale (LC_ALL,"spanish");

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);

Q1=Q1_Rad*180/M_PI;

Q2=Q2_Rad*180/M_PI;


//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 mínimo con el cual un disparo pasa la montaña ";

cout <<"es = "<<Q2<<" deg"<<endl;

cout <<"El angulo máximo con el cual un disparo pasa la montaña "; 

cout <<"es = "<<Q1<<" deg"<<endl;

cout <<"El tanque puede Bombardear el area entre ";

cout <<x1<<" y "<<x2<<" mts posterior a la montaña"<<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;

    

// ************** REQUERIMIENTO ADICIONAL **************

// Determinamos el angulo en el que se destruye el tanque

    a= -9.8*pow((x+1802.5),2)/(2*pow(250,2));

    b= x+1802.5;

    c= -2.8+a;

    

    Q3_Rad=atan((-b+sqrt(pow(b,2)-4*a*c))/(2*a));

    Q3=Q3_Rad*180/M_PI;

    if (Q3<Q1 or Q3>Q2)

    {

    Q3_Rad=atan((-b-sqrt(pow(b,2)-4*a*c))/(2*a));

    Q3=Q3_Rad*180/M_PI;

}

cout <<"El angulo con el cual destruirían el camión ";

cout <<"de Dominic correspondería a (entre "<<Q2<<" - "<<Q1;

cout <<")= "<<Q3_Rad*180/M_PI;

cout <<" Deg"<<endl<<endl;

}

else

{

cout <<"Comuniquense urgente con Dominic e indiquenle que traiga el camión de inmediato"<<endl<<endl;

}

system ("pause");

}


Resultados




nan: significa "Not a number" o sea los cálculos no pueden encontrar un numero posible para superar la montaña.