miércoles, 13 de mayo de 2026

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

  1.- En Venezuela el día de las madres corresponde al 2do domingo de mayo. La profesora Carmen De La Rosa cumple años el 9 de mayo. Elabore un programa que permita determinar en un rango de años a partir de 2022  hasta el año 2038 como máximo:

  • Los días de las madres que caen el 9 de mayo en Venezuela. 
  • Los años en que esto ocurre.
El uso de la biblioteca time.h es requerido, en caso de omitir el uso de la biblioteca su respuesta no será evaluado. (8 puntos)

2.- Usted ha sido contratado como mercenario por la OTAN (Organización del Tratado del Atlántico Norte) para dar apoyo al ejercito Ucraniano. Ellos desean que usted programe un lanzamisiles para que opere sin la presencia de personal, la idea es destruir un sistema ferroviario tomado por ejercito ruso que funciona entre la ciudad de Dnipró y Mariúpol. Esa vía ferroviaria es usada para mover: 
  • Abastecimientos
  • Armamento
  • Militares
La ruta dispone de dos (2) vías ferroviarias paralelas. El ejercito ruso dispone de (2) dos trenes que viajan simultáneamente entre las dos (2) ciudades y por razones logísticas un tren sale de Dnipró y otro de Mariúpol a la misma hora todos los días. 

Un satélite de la OTAN nos puede informar la velocidad de cada tren la cual es constante a lo largo del recorrido. La idea es que usted programe el posicionamiento y disparo de un lanzamisiles con velocidad inicial Vo=1700 mts/seg ubicado a 200km en línea perpendicular sobre la mitad de la línea ferroviaria.

Se requiere destruir ambos trenes en el preciso momento en que se cruzan, debido a que solo se dispone de un disparo dado que los satélites soviéticos reportaran rápidamente la ubicación del lanzamisiles y el mismo será destruido por las defensas rusas.

Usted debe elaborar un programa que determine basado en la velocidad de los trenes (Datos suministrados por el satélite de la OTAN):
  • El punto donde se cruzaran los trenes (tomando como referencia Dnipró) (3ptos)
  • Angulo de rotación del lanzamisiles, hacia Mariúpol o hacia Dnipró (3 ptos)
  • Angulo de elevación del lanzamisiles (3 ptos)
  • Momento exacto (Segundos) en que usted disparará el lanzamisiles a partir del instante en que salen los trenes. (3 ptos)
Recuerde el único dato de entrada serán las velocidades de los (2) dos trenes.



Use Gravedad de 9.81 mts/seg2

Para una velocidad del tren A de 40 mts/seg y del tren B de 30 mts/seg el programa debería reportar:

a.- Los trenes se cruzan a 228571.43 mts. de Dinipró.
b.- El ángulo de rotación del Lanzamisiles es de θ = 0.141897 radianes / 8.13 deg. hacia Mariúpol.
c.- El ángulo de elevación del lanzamisiles es de β =0.3778 rad / β =21.64 deg.
d.- Debemos disparar el misil a los 5586.43 seg. desde que los trenes salieron de las ciudades.

Programa Nro1

/*Programa que permite determinar la cantidad de 09 de mayo que caen en el día de 
las madres en Venezuela a partir del año 2022 hasta un año especificado por
el usuario.

Elaborado: Carlos Ferrer
28 de mayo de 2022*/


#include <time.h> // Biblioteca de manejo de tiempo
#include <locale.h> //Biblioteca de idiomas para escribir en español
#include <iostream> 
#include <iomanip> //Para ayudar a la impresión en pantalla

using namespace std;

int main()

{

int i,j=0,aux1=0,cantidad=0,dia_semana; // variables enteras

time_t fecha3; // Variable de tiempo en segundos desde 1ro de Enero de 1970

struct tm fecha_nac; //Variable de fecha estructurada a ser asignada por el usuario

int dia_n=0,mes_n=0,ano_n=2022;

// Establecemos el idioma a español (dev c++ 5.9.2)

setlocale(LC_ALL, "Spanish");

dia_n=9;
mes_n=5;

while (ano_n<=2022)

    {
     cout <<endl<<"Ingrese año final a revisar (2022 - YYYY)="<<endl;
     cin >>ano_n;
    }
i=2022;

//hacemos un arreglo para comprobar todos los años en el rango
for (i=2022;i<=ano_n;i=i+1)
    {
    //metemos los datos en la estructura fecha_nac
    fecha_nac.tm_mday = dia_n;
    fecha_nac.tm_mon = mes_n-1;
    fecha_nac.tm_year = i-1900;
    fecha_nac.tm_hour = 0;
    fecha_nac.tm_min = 0;
    fecha_nac.tm_sec = 0;
    fecha_nac.tm_wday = 0;
    fecha_nac.tm_yday = 0;
    fecha3=mktime(&fecha_nac);

/*Con la función mktime pasamos el dato a una segunda estructura que nos 
devolvera el día de la semana*/

    struct tm* fecha4 = localtime(&fecha3);

//extraemos el día de la semana
    dia_semana=fecha4->tm_wday;

//Verificamos si es domingo
    if (j==0)
        {
        cout <<endl<<endl<<"Días de las madres que caen el 09 de Mayo en Venezuela a partir del año 2022 hasta el "<<ano_n<<endl<<endl;
        j=1;
        }

//imprimimos
    if (dia_semana==0)
        {
cantidad=cantidad+1;
cout <<setfill('0')<<setw(3)<<cantidad<<".- "<<"09 de mayo de "<<i<<"  ";
aux1=aux1+1;
if (aux1==4)
    {
    cout<<endl;
    aux1=0;
    }
        }

}

//totalizamos
cout <<endl<<endl<<"La cantidad de 09 de mayos que caen el día de las madres entre los años 2022 y "<<ano_n<<" son = "<<cantidad<<endl;
system("pause");
system("cls");

}





Programa Nro2

/*
Programa elaborado por: Carlos Ferrer
28 de mayo de 2022
Programa para determinar el posicionamiento (Rotación y Elevación) y tiempo de disparo
de un lazamisiles de forma de destruir un sistema ferroviario tomado por el ejercito
Ruso a control remoto basado en la información de los satélites ucranianos
*/
#include<iostream>
#include<math.h>
#include<windows.h>
#include<locale.h>

using namespace std;

double V_tren_A=-1, V_tren_B=-1; //Datos suministrados por el satélite
double x; //distancia desde Dnipró al punto donde se cruzan los trenes
double z; //distancia del lanzamisiles al punto de cruce de los trenes
double Q; //Angulo de rotación del lanzamisiles
double B; //Angulo de elevación del lanzamisiles
double tv; //Tiempo de vuelo del lanzamisiles
double t; //tiempo que tardan los trenes en encontrarse desde que comienzan a moverse




main()
{
setlocale(LC_ALL,"spanish");
cout<<"*** CALCULO DE LANZAMIENTO MISIL PARA DESTRUCCIÓN DEL SISTEMA FERROVIARIO ***"<<endl<<endl;
//solicitud de datos
while (V_tren_A<0)
{
cout <<"Velocidad del tren 'A' (mts/seg): ";
cin >>V_tren_A;
if (V_tren_A<0)
{
Beep(250,250);
cout <<"Datos invalido!!!";
system ("cls");
Sleep(2500);
}
}
while (V_tren_B<0)
{
cout <<"Velocidad del tren 'B' (mts/seg): ";
cin >>V_tren_B;
if (V_tren_B<0)
{
Beep(250,250);
cout <<"Datos invalido!!!";
system ("cls");
Sleep(2500);
}
}

//calculamos el punto de cruze de los trenes
x=400000/((V_tren_B/V_tren_A)+1);

//Calculamos la distancia entre el lanzamisiles y el punto de cruce de los trenes
z=sqrt(pow(200000,2)+pow(x-200000,2));

// Calculamos el ángulo de rotación del lanzamisiles
Q=atan((x-200000)/200000);

// Calculamos el ángulo de elevación del lanzamisiles
B=(asin(z*9.81/pow(1700,2)))/2;

//Calculamos el tiempo de vuelo del misil

tv=z/(1700*cos(B));

//Calculamos el tiempo en el cual los trenes se cruzan
t=x/V_tren_A;

//Presentamos los resultados
system("cls");
cout <<"Para velocidad del tren A = "<<V_tren_A<<" mts/seg y del tren B = "<<V_tren_B<<" mts/seg"<<endl<<endl;
if (Q>0)
{
cout <<"Se debe rotar el lanzamisiles = "<<Q*180/M_PI<<" deg hacia Mariúpol"<<endl;
}
if (Q<0)
{
cout <<"Se debe rotar el lanzamisiles = "<<-Q*180/M_PI<<" deg hacia Dnipró"<<endl;
}
if (Q==0)
{
cout <<"No rote el arma manténgala apuntada al centro de la vía entre Dnipró y Mariúpol (0 deg)"<<endl;
}

cout <<"Se debe elevar el lanzamisiles = "<<B*180/M_PI<<" deg"<<endl;
cout <<"El lanzamisiles debe disparase a los = "<<t-tv<<" seg (desde el inicio de movimiento de los trenes)"<<endl<<endl;
system ("pause");
}












No hay comentarios.:

Publicar un comentario