Solución
/* Programa de resolución del Parcial Nro. 2 "Game of Thrones"
aplicando la ecuación obtenida con el método de la iteración
rev. Mayo 2026
Elaborado por: Carlos Ferrer
*/
#include<iostream>
#include<math.h>
#include<locale.h>
using namespace std;
main ()
{
double vo, h, g=9.8;
double Q, x;
double x2; // x de iteración
setlocale(LC_ALL,"spanish");
//Ingresamos datos
do
{
cout <<"Ingrese altura de ubicación de la catapulta (100-900 mts) = "<<endl;
cin >>h;
if (h<100 or h>900)
{
cout <<endl<<"Valor ingresado de "<<h<<" mts"<<" fuera de rango" <<endl;
cout <<"El valor debe estar el rango de 100 a 900 mts! "<<endl<<endl;
}
}
while (h<100 or h>900);
do
{
cout <<"Ingrese la velocidad inicial de la catapulta (40-90 mts/seg) = "<<endl;
cin >>vo;
if (vo<40 or vo>90)
{
cout <<endl<<"Valor ingresado de "<<vo<<" mts/seg"<<" fuera de rango" <<endl;
cout <<"El valor debe estar el rango de 40 a 90 mts/seg! "<<endl<<endl;
}
}
while (vo<40 or vo>90);
// Iteramos Q hasta conseguir X(max)
Q=0;
x=vo*cos(Q)*(vo*sin(Q)+sqrt(pow(vo,2)*pow(sin(Q),2)+2*g*h))/g;
while(Q<90)
{
Q=Q+0.001;
x2=vo*cos(Q*M_PI/180)*(vo*sin(Q*M_PI/180)+sqrt(pow(vo,2)*pow(sin(Q*M_PI/180),2)+2*g*h))/g;
if (x2>x)
{
x=x2;
}
else
{
break;
}
}
// Presentamos resultados
cout <<endl<<"Q= "<<Q<<" grados"<<endl;
cout <<endl<<"X(max)= "<<x<<" mts"<<endl;
if (x<1100 or x>1200 )
{
cout <<endl<<"Favor no proceda a liberar la catapulta dado que"<<endl;
cout <<"la carga caerá fuera del rango establecido de 1100 a 1200 mts"<<endl;
}
else
{
cout <<endl<<"Favor proceda a liberar la catapulta dado que"<<endl;
cout <<"la carga caerá dentro del rango establecido de 1100 a 1200 mts"<<endl;
cout <<"exactamente a "<<x<<" mts."<<endl;
}
}
Programa Nro. 2 Por Derivación (Optimización)
/* Programa de resolución del Parcial Nro. 2 "Game of Thrones"
aplicando la ecuación obtenida con el método de la optimización
(La derivada)
rev. Mayo 2026
Elaborado por: Carlos Ferrer
*/
#include<iostream>
#include<math.h>
#include<locale.h>
using namespace std;
main ()
{
double vo, h, g=9.8;
double Q, x;
setlocale(LC_ALL,"spanish");
//Ingresamos datos
do
{
cout <<"Ingrese altura de ubicación de la catapulta (100-900 mts) = "<<endl;
cin >>h;
if (h<100 or h>900)
{
cout <<endl<<"Valor ingresado de "<<h<<" mts"<<" fuera de rango" <<endl;
cout <<"El valor debe estar el rango de 100 a 900 mts! "<<endl<<endl;
}
}
while (h<100 or h>900);
do
{
cout <<"Ingrese la velocidad inicial de la catapulta (40-90 mts/seg) = "<<endl;
cin >>vo;
if (vo<40 or vo>90)
{
cout <<endl<<"Valor ingresado de "<<vo<<" mts/seg"<<" fuera de rango" <<endl;
cout <<"El valor debe estar el rango de 40 a 90 mts/seg! "<<endl<<endl;
}
}
while (vo<40 or vo>90);
//Calculamos Q en radianes
Q=asin(vo*sqrt(2*(g*h+pow(vo,2)))/(2*(g*h+pow(vo,2))));
// Calculamos x máxima
x=vo*cos(Q)*(vo*sin(Q)+sqrt(pow(vo,2)*pow(sin(Q),2)+2*g*h))/g;
// Presentamos resultados
cout <<endl<<"Q= "<<Q*180/M_PI<<" grados"<<endl;
cout <<endl<<"X(max)= "<<x<<" mts"<<endl;
if (x<1100 or x>1200 )
{
cout <<endl<<"Favor NO proceda a liberar la catapulta dado que"<<endl;
cout <<"la carga caerá fuera del rango establecido de 1100 a 1200 mts"<<endl;
}
else
{
cout <<endl<<"Favor proceda a liberar la catapulta dado que"<<endl;
cout <<"la carga caerá dentro del rango establecido de 1100 a 1200 mts"<<endl;
cout <<"exactamente a "<<x<<" mts."<<endl;
}
}
No hay comentarios.:
Publicar un comentario