miércoles, 13 de mayo de 2026

02o.- Programación II - Parcial Nro. 2 (Semestre 2026 - II) - Solución del Profesor

 


Solución



Programa Nro. 1 Por Iteració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;
      }
}

Éxitos 




02ñ.- Programación II - Ejercicio tipo Parcial Nro. 2 (3er Ejemplo) - Solución del Profesor

 Parcial Nro.2

El ejercito Ucraniano recurre a usted, su misión es programar un dron para bombardear un tren ruso. La inteligencia Ucraniana informó que el general mas sanguinario del ejercito ruso viajará en el tercer vagón del tren. Los espías ubicados en la ciudad de "Jersón" informarán el momento exacto en que el tren comience a moverse. Se desconoce la velocidad del tren, sin embargo sabemos que es constante a lo largo del recorrido. El conductor del tren fija la velocidad en un rango entre  80 y 150 km/hr. En el momento que inicie movimiento el tren usted arrancará un dron con explosivo C4. El dron vuela a velocidad constante de 15 mts/seg. Usted puede programar el dron para que vuele a una altura entre 20 y 80 mts. de forma de que no sea detectado por las defensas rusas. El dron dispone de un radar que detectará la punta del tren cuando se encuentre a 500 mts. de distancia horizontal del dron.


Usted deberá elaborar un programa que determine a partir del momento en que el dron detecta el tren:

1.- Distancia en metros para soltar el explosivo.
2.- Tiempo en segundos para soltar el explosivo.

Es importante que el programa considere que el general ruso viaja en el centro del tercer vagón y el vagón tiene una altura de 2.5 metros, cada vagón mide 10 metros. Se desea minimizar daños colaterales.



Los únicos datos de entrada del programa corresponderán a:

Altura del Dron en Metros.
Velocidad del Tren en Km/hr.

Nota: Utilice gravedad de 9.8 mts/seg2

Solución

Determinamos el tiempo de vuelo y el recorrido del C4 una vez es liberado, el movimiento del C4 en horizontal es un Movimiento Rectilíneo Uniforme (M.R.U), como es liberado el ángulo de elevación es 0 grados en horizontal y -90 grados en vertical. En consecuencia:

Xc4 = Vo cos 0 tc4  => como el cos 0 = 1, entonces el Xc4 = Vo tc4  (ecuación Nro. 1)

El movimiento en vertical es un Movimiento Uniformemente Acelerado (M.U.A) en consecuencia el desplazamiento vertical correspondería a:

2.5 mts = Yo + Vo sen 90 tc4 – g (tc4)/2, como seno 90 = 0, entonces la ecuación quedaría:

2.5 mts = yo – 9.8 mts/seg (tc4)/2 => 4.9 mts/seg (tc4)= (yo – 2.5) mts =>

Tc4 = √ [(yo – 2.5) mts / 4.9 mts/seg2] => Tc4 = √ [(yo – 2.5) / 4.9] seg

Como Yo es un dato conocido que opera entre 20 y 80 mts, podemos determinar tvc4 posteriormente conociendo ese dato podemos determinar Xc4, con la ecuación Nro 1.

Sabemos que el radar detecta la punta del tren a una distancia de 500 mts, la ubicación del general Chavenko es 25 mts más atrás ósea a 525 mts del Dron. El proyectil viaja a la velocidad del Dron y una vez soltado conserva esa velocidad en horizontal, el tren viaja a una velocidad conocida en km/hr que llamaremos Vtren, en consecuencia, llamemos Xdron al desplazamiento del Dron antes de soltar el C4. Podemos determinar el punto de impacto del tren y el c4 determinando el tiempo en el cual se encuentran ambos. Los movimientos horizontales del Dron, el C4 una vez soltado y el tren son Movimientos Rectilíneos Uniformes (M.R.U). Por lo tanto, podemos afirmar que el C4 y el Tren se encuentran en el mismo punto:

Xdron + Xc4 = (525mts – Xtren) =>

15 mts/seg x tdron + Xc4 = (525mts – Vtren ttren)

Pero el ttren = tdron + tc4, por lo tanto

15 mts/seg x tdron + Xc4= (525mts – Vtren (tdron + tc4))

El tc4 y Xc4 son datos que calculamos previamente y Vtren es un dato conocido detectado por el radar del Dron (mínimo 80 km/hr máximo 150 km/hr). En consecuencia, podemos determinar el tiempo del Dron (tdron), el cual sería el tiempo desde que se detecta el tren hasta que se libera la carga. Al conocer ese tiempo también podemos determinar la distancia precisa en donde el Dron libera la carga. Por lo tanto,

15 mts/seg x tdron + Xc4 = 525mts – Vtren tdron – Vtren tc4 =>

15 mts/seg x tdron + Vtren tdron = 525mts – Vtren tc4 - Xc4 =>

tdron (15 mts/seg + Vtren) = 525mts– Vtren tc4 - Xc4 =>

tdron = (525mts– Vtren tc4 - Xc4) / (15 mts/seg + Vtren)

 

Con el tdron calculamos Xdron = 15 mts/seg tdron, ambos datos corresponden a lo solicitado.

Por ejemplo, determinemos tdron y Xdron, si la altura del Dron es 50 mts y la velocidad del tren es 100 km/hr.

Respuesta:

Determinemos tc4 y Xc4

Tc4 = √ [(50 – 2.5) mts / 4.9 mts/seg2] => Tc4 = √ [(50 – 2.5) / 4.9] seg

Tc4 = 3.11349925 seg

Xc4 = 3.11349925 seg x 15 mts/seg => Xc4 = 46.7024887 mts

Ahora determinamos lo solicitado Tdron y Xdron

Vtren = 100 km/hr => Vtren = 27.7777778 mts/seg

tdron = (525mts – 540 mts/seg 3.11349925 seg - 46.7024887 mts) / (15 mts/seg + 27.7777778 mts/seg)

tdron = 9.15923 seg

Xdron = 9.15923 seg x 15 mts/seg => Xdron = 137.388 mts


Programa

/*Programa Parcial Nro. 2: Determine el tiempo que transcurre y la distancia recorrida del Dron de forma de eliminar al General Chavenko, ubicado en la mitad del 3er vagón con destino a Jersón. (Ver texto del parcial)
  
  Elaborado por: Carlos Ferrer
  Revisión: May 2025
  */

#include <iostream>
#include <math.h>
#include <windows.h>
using namespace std;

main()
{
float yo=0; //Altura del Dron en mts
float vtren=0; // Velocidad del tren en Km/hr
/* tiempo de vuelo del C4 una vez es liberado / Distancia recorrida en horizontal por
   el C4 una vez es liberado*/
float tc4,xc4; 
/* tiempo de vuelo del Dron desde que detecta el tren hasta que libera el C4 / Distancia recorrida 
   en horizontal por el Dron desde que detecta el tren hasta que libera el C4*/
float tdron,xdron;
// ingresamos la altura de vuelo del Dron
while (yo<20 or yo>80)
{
cout <<"Ingrese la altura de vuelo del Dron (minimo 20 - maximo 80 mts) = ";
cin >>yo;
if (yo<20 or yo>80)
{
cout <<"Altura de vuelo del Dron ("<<yo<<" mts) Invalida!! ";
Beep(250,125);
Sleep (1000);
system ("cls");
}
    }
    //ingresamos la velocidad del tren detectada por el radar del Dron
    
     while (vtren<80 or vtren>150)
{
cout <<"Ingrese la velocidad del tren detectada por el radar (minimo 80 - maximo 150 km/hr) = ";
cin >>vtren;
if (vtren<80 or vtren>150)
{
cout <<"Velocidad del tren ("<<vtren<<" km/hr) Invalida!! ";
Beep(250,125);
Sleep (1000);
system ("cls");
}
    }
system ("cls");
cout <<"Altura del tren = "<<yo<<" mts"<<endl;
cout <<"Velocidad del tren ("<<vtren<<" km/hr)"<<endl;
//Calculamos los resultados
vtren=vtren*1000/3600;
tc4 = sqrt ((yo - 2.5) / 4.9);
xc4 = tc4*15;
tdron = (525 - vtren* tc4 - xc4) / (15  + vtren);
xdron = tdron*15;
//Presentamos los resultados


        cout <<endl<<"El dron debe liberar el C4 a los "<<tdron<<" seg despues de haber detectado el tren."<<endl; cout <<"Desde que detecta el tren hasta que libera la carga el dron recorrera "<<xdron<<"mts"<<endl<<endl; if (tdron<0) { cout <<endl<<"El Dron no debe liberar la carga,"<<endl; cout <<"NO EXISTE POSIBILIDAD DE DESTRUIR EL PUNTO EXACTO DONDE VIAJA EL GENERAL CHAVENKO"<<endl<<endl; }
system ("pause");
}

02n.- Programación II - Ejercicio tipo Parcial Nro. 2 (2do Ejemplo) - Solución delProfesor

 Usted trabaja para constructora Sambil. La semana pasada el capataz y los obreros rompieron la guaya de la torre grúa, ellos informan que colocaron una carga de 1500 kg y que la información técnica de la guaya anterior indicaba que la guaya soportaba 1700 kg en equilibrio, sin embargo, la guaya se rompió en el preciso instante que levantaban la carga. Ellos no se explican cuál fue el motivo de este accidente.

Su jefe quiere adquirir una nueva guaya, los suplidores le indican que disponen de guayas que soportan como máximo desde: 1530 kg hasta 2550 kg. Los suplidores indican que ellos prueban un pedazo de la guaya a suministrar en sus almacenes, fijando la guaya al techo y colocándole carga hasta que se rompe.


La grúa puede movilizar la carga en rangos de aceleración desde 1 mts/seghasta los 2.5 mts/seg2.

Su jefe no quiere volver a invertir en otra guaya, en consecuencia, él le solicita a usted que elabore un programa que determine, la cantidad máxima de material que puede subir la grúa y la cantidad máxima de material que puede bajar.

Pista: Recuerde cuando la carga asciende en aceleración constante, la carga se hace más pesada y cuando desciende en el mismo escenario es menos pesada.

Los únicos datos que se ingresarán al programa corresponderán a

a.- La cantidad de masa en Kg. que soporta la guaya adquirida según lo indicado por el fabricante.

b.- Aceleración de subida/bajada de la grúa.

El programa deberá indicar:

a.- Cantidad máxima de material que puede subir la grúa (kg)

b.- Cantidad máxima de material que puede bajar la grúa (kg)

Nota: para todo cálculo requerido use gravedad de 9.8 mts/seg2.


SOLUCIÓN


El fabricante nos indica con cuanta masa se rompe la guaya en equilibrio, por lo tanto, recordemos que: en equilibrio la aceleración es cero (No hay movimiento).

Recordemos que la sumatoria de fuerzas = masa x aceleración (∑ fuerza =ma)

En el caso del fabricante la ecuación donde el chequea la guaya sería:

∑ fuerzas = m x 0 => Tensión - Peso= 0

Si establecemos el diagrama de cuerpo libre del sistema, no queda:

 

por lo tanto, T=mg, o sea que la masa que nos indica el fabricante es m=T/g y este es el valor en donde se rompe la guaya. Lo que hace el fabricante es un error, el no debe indicar con cuanta masa se rompe la guaya en equilibrio, el debería indicar con cuanto peso (vector de fuerza - Tensión)

Veamos el caso que generó el estudio, el fabricante indico que ese valor era 1700 kg. En pocas palabras la guaya se rompe cuando se le aplica un peso (vector de fuerza - Tensión) de 1700 kg x 9.8 mts/seg2 o sea un peso de 16660 newtons. La etiqueta del fabricante no debería indicar que el limite de su guaya es de 1700 kg de masa en equilibrio, debería indicar que el límite es de 16660 newtons (Para cualquier escenario).

Como la guaya no trabaja en equilibrio sino en movimiento, la aceleración afecta a la guaya de dos maneras:

(1)  En subida le aumenta el peso (vector de fuerza - Tensión) que sostiene la guaya durante la aceleración.

(2)  En bajada le disminuye el peso (vector de fuerza - Tensión) que sostiene la guaya durante la aceleración.

Nota: Recuerde el fabricante indica masa lo cual es un error debería indicar tensión limite, para el caso original (16660 Newtons).

Estudiemos el caso de la subida de material, entendiendo que la guaya está a punto de romperse, o sea, trabajando en su tensión limite previamente determinada en el equilibrio.

Tlimite - mg = ma  (Como está en subida se considera la aceleración positiva)

Por lo tanto, si trabajamos la ecuación nos queda lo siguiente.

Tlimite = ma + mg => Tlimite = m(a + g) => m = Tlimite / (a + g)

Ahora estudiemos el caso de la bajada de material, entendiendo que la guaya está a punto de romperse, o sea, trabajando en su tensión limite previamente determinada en el equilibrio.

Tlimite - mg = -ma  (Como está en bajada se considera la aceleración negativa)

Por lo tanto, si trabajamos la ecuación nos queda lo siguiente.

Tlimite = -ma + mg => Tlimite = m(g - a) => m = Tlimite / (g-a).

Volvamos nuevamente el caso de estudio, esto pudo suceder subiendo carga o bajando carga, analicemos si el incidente ocurrió en el descenso de la carga:

1500 kg = 16660 newtons / (9.8 – a) mts/seg, para que esto suceda la aceleración debió ser: a = 9.8 mts/seg– 16660 newtons/1500 kg => a= - 1.31 mts/seg(aprox). Como se aprecia el resultado es negativo, como se aprecia en el estudio el resultado negativo nos indica que la guaya se fracturo en subida, no en descenso.

Confirmemos la conclusión anterior evaluando el caso cuando estamos levantando 1500 kg material:

1500 kg = 16660 newtons / (9.8 + a) mts/seg2, para que esto suceda la aceleración debió ser: a = 16660 newtons/1500 kg - 9.8 mts/seg2 => a= 1.31 mts/seg2En pocas palabras la guaya se rompió al subir la carga con una aceleración superior a los 1.31 mts/seg2. Como se trabajó por encima del peso máximo permitido 16600 newtons la guaya se fracturó, era necesario que el operador de la grúa trabajara con aceleraciones bajas lo cual es muy difícil de controlar con un acelerador manual.

PARA DETERMINAR EL LIMITE SEGURO DE MATERIAL QUE PODEMOS TRANSPORTAR DEBEMOS HACER LOS CÁLCULOS CON LA MAXIMA ACELERACIÓN POSIBLE. NO PODEMOS CONFIAR EN LA PRECISIÓN DEL OPERADOR DE LA TORRE GRUA A LA HORA DE FIJAR UNA ACELERACIÓN, RECUERDE QUE ESTO SE HACE CON UN ACELERADOR MANUAL.

la máxima carga que podíamos levantar, para la guaya anterior de 1700kg, basta con calcular m = Tlimite / (a + g) con el peor escenario de aceleración 2.5 mts/seg2, en consecuencia m= 16660 newtons/(9.8+2.5)  mts/seg=> m= 1354.47 kg (Aproximadamente).

Si queremos saber cuál es la máxima carga que podemos bajar, para la guaya anterior de 1700kg, necesitaríamos calcular la masa m = Tlimite / (g - a) con el peor escenario de aceleración 2.5 mts/seg2, en consecuencia m= 16660 newtons/(9.8-2.5)  mts/seg=> m= 2282.19 kg (Aproximadamente).

Si trabajamos con aceleración inferior a 2.5 mts/segla cantidad de masa que se puede transportar aumenta, pero dependemos de la precisión del operador de la torre grúa, lo cual es muy riesgoso,  sin embargo, como para bajar carga primero debemos levantarla se recomienda trabajar con valores de masa inferior al límite de subida. 


PROGRAMA


/* Programa para determinar la carga máxima

que puede subir y bajar una torre grúa basado en

el peso máximo que soporta la guaya según las

pruebas en estado de equilibrio del fabricante

(1530 a 2550 kg) y el rango de aceleración de la

grúa (1 a 2.5 mts/seg2)

 

Elaborado: Por Carlos Ferrer

Rev. mayo 2023

*/

 

#include <iostream>

#include <windows.h>

#include <locale.h>

using namespace std;

 

main()

{

       double ms; //máxima carga en subida sin riesgo de romper la guaya

       double mb; //máxima carga en subida sin riesgo de romper la guaya

       double m; //máxima masa determinada por el fabricante en estado de equilibrio

       double a; //valor máximo de aceleración de la torre grúa

 

setlocale(LC_ALL,"spanish");

//Ingresamos los datos  

       do

       {

             cout <<"Ingrese máxima masa determinada por el ";

             cout <<"fabricante en estado de equilibrio (1530 a 2550 kg) = ";

             cin >>m;

             if (m<1530 or m>2550)

             {

             cout <<endl<<"Valor ingresado invalido!! "<<endl;

             Sleep(250);

             Beep(250,250);

             system("cls");     

             }

            

       }

       while (m<1530 or m>2550);

      

       do

       {

             cout <<"Ingrese valor máximo de aceleración de la grua ";

             cout <<"cable (mts/seg2) = ";

             cin >>a;

             if (a<0)

             {

             cout <<endl<<"Valor ingresado invalido!! "<<endl;

             Sleep(250);

             Beep(250,250);

             system("cls");     

             }

            

       }

       while (a<0);

//Calculamos la data requerida

       ms=m*9.8/(9.8+a);

//Presentamos los resultados   

       system("cls");

       cout <<"Para una capacidad máxima en equilibrio de "<<m<<" kg ";

       cout <<"y una aceleración máxima de "<<a<<" mts/seg2, la grúa"<<endl;

       cout <<"podrá levantar una carga máxima de "<<ms<<" kg y podrá ";

       cout <<"descender una carga máxima de "<<ms<<" kg."<<endl;

       cout <<"Dado que para descender primero debes levantarla."<<endl<<endl;

       cout <<"¡¡¡¡TODO ESTO SIN RIESGO DE ROMPER LA GUAYA!!! "<<endl<<endl;

      

       system("pause");

}

La guaya anterior se rompió debido a que levantaron una carga de 1500 kg, basado en el análisis previo lo recomendable era no colocar cargas superiores a 1354.47 kg dado que al operar la grúa cerca del limite máximo de aceleración  (2.5 mts/seg2) generaría la ruptura de la guaya. 

Para este caso el operador de la grúa aceleró la misma por encima de 1.31 mts/seglo cual generó una tensión de mas de 16660 newtons en la guaya generando el incidente