jueves, 30 de octubre de 2025

02f.- Programación II - Ejercicio a desarrollar 30 de Octubre de 2025 (Semestre 2026 - I) - Solución del Profesor

 Nuestro ejército se encuentra diezmado por la acción de un tanque enemigo, nuestro capitán en una acción desesperada planea arrojar un vehículo cargado de explosivos desde una rampa ubicada en la cima de una montaña de 600 mts de alto.






El enemigo no espera un ataque aéreo, nuestra base dispone de un radar lo suficientemente preciso para indicarnos la distancia existente entre la montaña y el tanque enemigo.

El vehículo se modificará para que trabaje a una velocidad de 180 km/hr o lo que es lo mismo 50 m/s. La modificación consiste en trabar la dirección y el acelerador para no requerir ningún conductor abordo.

El capitán conoce sus habilidades en programación y lo ha asignado a usted para que elabore un programa que permita determinar el ángulo (θ) de forma de que el carro bomba impacte al tanque.

La supervivencia del batallón depende de usted. Solo  contamos con un vehículo con explosivos. La base informará el momento en que el tanque se detiene a disparar, esto dura alrededor de 25 seg... por lo tanto es necesario que actuemos de la forma lo mas rápida y precisa que nos sea posible.

El vehículo  tarda 10 seg en salir de la rampa. Ese tiempo sumado al tiempo de vuelo debe ser menor a los 25 seg que permanece inmóvil el tanque, de lo contrario fallaremos en el intento de destruirlo.

La vida de los soldados en combate dependen de usted!!



Respuesta.
Para una distancia d=378 mts el ángulo (θ) = 30



Solución






                                         Programa


// Programa elaborado por Carlos Ferrer
// Abril - 2022
// Aplicaciones de la física Ejercicio Carro Bomba


#include <iostream>
#include <math.h>
using namespace std;
int main()

{

double  Q1=0,Q2=0,X; 
// Q1 y Q2 = los dos ángulos que permiten el mismo alcance horizontal 
// X = posición del tanque en momento que detiene su marcha (información del radar) 

 
double tv1=0, tv2=0, tvf=0;
 
    // tv1= tiempo de vuelo para Q1
    // tv2= tiempo de vuelo para Q2
    // tvf= tiempo de vuelo final (el menor de los dos)

double g=9.8, Yo=600, Vo=50; 
 
//g=gravedad Yo=altura de la montaña Vo= Velocidad inicial carro bomba
    
double a=0,b=0,c=0; 
//a,b,c = términos de la ecuación de 2do grado        
double t1=0,t2=0; 
//Resultados de la resolvente       

system("cls");
//para limpiar la pantalla negra (Consola)
 
cout<<"Ingrese distancia del tanque segun radar (mts) = ";
cin>>X;
cout <<endl;

a= -g*pow(X,2)/(2*pow(Vo,2)); 
b= X;
c= Yo-g*pow(X,2)/(2*pow(Vo,2));
    
t1=(-b+sqrt(pow(b,2)-4*a*c))/(2*a);
t2=(-b-sqrt(pow(b,2)-4*a*c))/(2*a);
 
Q1=atan(t1);
Q2=atan(t2);
 
 
tv1= X/(50*cos(Q1));
tv2= X/(50*cos(Q2));
 
Q1=Q1*180/M_PI;
Q2=Q2*180/M_PI;
 
/*Evaluamos el resultado e informamos al soldado que posicionara la rampa y soltara el carro. La función isnan chequea que el dato sea del tipo nan en ese caso el carro esta fuera de alcance*/

if ((isnan(Q1)) or (isnan(Q2))) 
{
tvf=100;
goto final;
}
else
{
cout <<"Para la distancia de "<<X<<" mts. existen dos angulos que nos permiten impactar el tanque"<<endl;
cout <<"cada uno de los angulos genera un tiempo de vuelo diferente:"<<endl<<endl;
cout <<"Angulo Nro1 = "<<Q1<<" deg => Tiempo de vuelo Nro1 = "<<tv1<<" seg"<<endl;
cout <<"Angulo Nro2 = "<<Q2<<" deg => Tiempo de vuelo Nro2 = "<<tv2<<" seg"<<endl<<endl;
cout <<"En consecuencia debemos posicionar la rampa en un angulo de ";
}

if (tv1<=tv2)
  {
   cout<<Q1<<" deg"<<endl;
  cout<<"con lo cual impactariamos el tanque a los "<<tv1+10<<" seg ("<<tv1<<" seg + 10 seg)"<<endl<<endl;
  tvf=tv1;
  }
else
    {
   cout<<Q2<<" deg"<<endl;
  cout<<"con lo cual impactariamos el tanque a los "<<tv2+10<<" seg ("<<tv2<<" seg + 10 seg)"<<endl<<endl;
  tvf=tv2;
  }
cout<<"Este angulo nos permite atacar el tanque lo mas rapido posible antes de que cambie de posicion"<<endl<<endl;

// posicionar la rampa y soltar el carro tarda 10 seg y el tanque solo queda fijo por 25 seg
final:
 if (tvf+10<25)
  {
  cout<<"Posicione rampa y suelte el carro de inmediato!!!"<<endl; 
  }
else
  {
  cout <<endl<<"Espere tanque en movimiento o fuera de nuestro alcance (Alcance maximo de 609.2614 mts)"<<endl; 
  }
 
cout<<""<<endl<<endl;
system("pause");

}

No hay comentarios.:

Publicar un comentario