jueves, 29 de mayo de 2025

03.- Programación II - Proyecto Parcial Nro. 03

 A continuación el programa que se deberá desarrollar.


Esta mañana estaré aclarando cualquier duda asociada al mismo.


Usted ha sido contratado por Dupont, líder mundial en fabricación de pintura para el sector automotriz. Su Jefe, al revisar su curriculum, detecta que usted tiene conocimientos de programación en C++ y le solicita que programe el sistema de elaboración de las dos pinturas lideres para el mercado venezolano: Azul Marino (AzMarino) y Azul Celeste (AzCeleste).



El programa debe cumplir con las siguientes premisas:

1ro.- El proceso arranca por comando del tablero "Botón de arranque de mezcla" de Mezcla.

2do.- Cualquier bomba debe detenerse si: (1) el interruptor de flujo a la entrada de la válvula de descarga pasa a "Alarma" (2) si la presión a la descarga de la válvula pasa los 50 psi (3) La cantidad de pintura que debía bombear ya se encuentra en el mezclador.

3ro.- Cuando una bomba se encuentra trabajando con con la válvula de succión y descarga abierta su caudal de operación es de 100 lts/mi. 

4to.- La presión a su descarga debe ubicarse alrededor de 33 psi si las válvulas a la entrada y a la salida se encuentran abiertas. Si en ese instante se cierra la válvula de descarga, el caudal inmediatamente cae a 0 (no pasa ninguna cantidad de base de pintura al tanque de mezclado). adicionalmente, la presión comienza a aumentar y al pasar los 50 psi la bomba se apaga por por sobre presión. Si la válvula se abre la presión desciende hasta 20 psi en donde la bomba arranca nuevamente y se estabiliza en 33 psi, al re-arrancar la bomba vuelve a enviar los 100 lts/min.

5to.- Cuando una bomba se encuentra trabajando a su caudal máximo de 100 lts/min y se activa el Switch de bajo Flujo (Alarma) la bomba debe apagarse de inmediato. La presión a la descarga debe descender a 0 psi si la válvula se encuentra abierta, si se encuentra cerrada la presión se mantiene en el último valor. Al recuperar el Switch de bajo Flujo su condición de funcionamiento (Normal), la bomba re-arrancará cuando la presión a la descarga baje por debajo de 20 psi y durante ese tiempo la presión se incrementará la presión hasta su nivel normal de operación alrededor de 33 psi.

6to.- Cuando se desea mezclar un tipo de pintura se debe garantizar que el tanque de mezclado reciba la cantidad correcta de las bases necesarias para obtener el color requerido. Por ejemplo si deseamos obtener Azul Marino (AzMarino), según la tabla la relación 2 partes de negro por cada parte de Azul. Como el Tanque destino tiene capacidad de 200 lts  pero los lotes se fabrican de 150 lts, por lo tanto debo prender la bomba P203 (Negro) el tiempo necesario para bombear 100 lts de Negro (60 segundos) y la Bomba P202 (Azul) el tiempo necesario para bombear 50 lts (30 segundos) de Azul. En pantalla debe mostrarse la cantidad de segundos en los cuales cada bomba aporta base de pintura al mezclador. No presentar estos contadores descalifican al programa entregado.

7mo.- Una vez bombeada la cantidad de base necesaria, se apagan las bombas de base de pintura y se enciende el motor de mezclado por 30 segundos.

8vo.- Si durante el proceso de bombeo se detiene alguna bomba por algún inconveniente, las otras bombas deben completar su proceso de bombeo. Si después de un tiempo la bomba que falló se recupera ella debe completar el bombeo de la base de pintura faltante para asegurar la mezcla. Solo cuando se haya terminado de bombear los 150 litros y se hayan apagado las bombas de base de pintura (P201, P202 y P203) es que se arrancara el motor de mezclado M401 por los 30 segundos estipulados.

9no.- El programa debe impedir que se arranque un nuevo lote de mezclado de pintura si el lote en curso no se ha completado. En caso de intentar arrancar el proceso nuevamente sin que el lote de preparación actual este completado, el programa deberá presentar un mensaje en pantalla que informe que el ultimo proceso de mezclado no se ha completado y la solicitud no será aceptada. 

10mo.- Para que el proceso de mezcla pueda arrancar el interruptor de bajo nivel del mezclador debe estar en alarma, de lo contrario el sistema no aceptara el comando de arranque.

11vo.- Para que arranque la preparación de un nuevo lote de pintura es necesario que el interruptor de bajo nivel del mezclador este activado y que el botón de arranque se encuentre en OFF y pase a ON. Esta condición será verificada. Los procesos de elaboración de lotes no puede arrancar de forma automática. 

Condiciones del Profesor:
  • El Archivo de texto contendrá las Válvulas V201, V202, V203, V401, V402, V403,  el Color a mezclar (AzMarino / AzCeleste) y el comando de arranque de fabricación (ON/OFF); si este comando pasa a ON y el mezclador esta vacío se procederá a fabricar el lote de pintura definida según el Color a mezclar. Si durante el proceso de fabricación de un lote se coloca en OFF el comando de arranque, el proceso de fabricación en curso deberá completarse.
  • Se debe indicar tiempo de funcionamiento de cada bomba en segundos y los transmisores de niveles de los tanques bases y el mezclador, de forma de verificar el funcionamiento del programa.
  • Usted debe simular todos los elementos del esquema y su funcionamiento.
  • Se debe monitorear todos los elementos  en pantalla.
  • una vez finalice el ciclo de mezclado el mezclador debe vaciarse a razón de 4% cada segundo (25 seg totales)
Condiciones Iniciales
  • Los niveles de los tanques bases son de 25% el nivel del mezclador en 0%
  • Los interruptores de Flujo en Normal.
  • Todas las válvulas abiertas.
  • Las bombas apagadas.
  • Los transmisores de presión en 0 psi.
  • El comando de arranque de fabricación en OFF.
  • El selector de tipo de pintura en AzCeleste


martes, 20 de mayo de 2025

03.- Programación II - Esquema de Bombeo - Simulación Clase Nro 3 - Actividad propuesta miércoles 22 de May

Para mejorar el funcionamiento del sistema de bombeo industrial, en la clase del Miércoles 06 de Nov se estableció una modificación del esquema trabajado por el profesor, la modificación consiste en incorporar un "Switch de Alto Nivel"y "Una válvula de desvió de seguridad", el esquema quedaría de la siguiente forma:




El espíritu de este cambio es impedir que el tanque se desborde, el Switch de Alto Nivel informará al PLC cuando el nivel es demasiado alto (Alarma), entonces el PLC  a arrancará la bomba y procederá a abrir La válvula de desvió, el agua será desviada a las comunidades cercanas al tanque y a un sistema de riego de áreas verdes. La válvula de desvió se cerrará cuando el tanque presente bajo nivel o sea cuando se active el Switch de Bajo Nivel (Alarma).

El Switch de Alto Nivel se deberá simular en el archivo de texto Prueba.txt y La válvula de desvió será una variable interna del programa.

En consecuencia se requiere modificar las tablas de la verdad de la bomba y de la presión incorporando las variables nuevas, en la tabla de la verdad de la bomba se debe incorporar el nuevo Switch de Alto nivel y en  la tabla de la verdad de la presión se deberá agregar La nueva válvula de desvió. Tal como se detalla a continuación:





Basado en esto el el archivo de texto Prueba. TXT  quedaría de esta forma:




ARCHIVO PRUEBA.TXT 

          ON                                       ON                                   ABIERTA                               REMOTO

  Switch de Alto Nivel        Switch de Bajo Nivel            Válvula a la descarga                 Modo Bomba

(ON= Agua, Off=Alarma) (ON= Agua, Off=Alarma)   (ABIERTA / CERRADA)  (LOCAL /REMOTO)
Alarma= Por desbordarse        (Alarma=Por vaciarse)
                                              

Nota: En modo REMOTO el control de la bomba es del programa  en modo LOCAL el programa pierde el control de la   bomba 



Ustedes deberán modificar el programa anterior y el archivo de texto del profesor (re-ingeniería) o crear un programa nuevo (ingeniería) que simule y controle el esquema propuesto.

Éxito!!!!

jueves, 15 de mayo de 2025

03.- Programación II - Esquema de Bombeo - Simulación Clase Nro 2

Basado en el siguientes esquema de Control



En la clase de hoy se elaboró un programa que simula el apagado y encendido de la bomba y el comportamiento de la presión a la descarga de la bomba.

Adicionalmente se elaboró un archivo de texto que simula: el Switch de Nivel (Interruptor de Bajo nivel),  la Válvula de servicios y Modo de Operación de la bomba (Local / Remoto).




Se indicó que tanto la Válvula como el Switch  lo manipularía el estudiante desde el archivo de texto y que el programa respondería basado en las tablas de la verdad para la Presión y la Bomba:






PROGRAMA 


/* PROGRAMA ELABORADO POR: CARLOS FERRER 
Control de nivel simple
Elaborado: Carlos Ferrer
Rev May 2025*/

#include<iostream> // Mostrar datos en pantalla
#include<fstream> // Leer y escribir en un archivo de texto
#include<windows.h> // Control de ejecución (tiempo de refrescamiento de pantalla)
using namespace std;

int main()
{
 string bomba="APAGADA";
 double presion=0;
 string pantalla="ON",texto_aux;
 int aux=1;
 
 
 
 /*Leemos los datos del archivo de texto prueba a través de la función
 conticinio (Puede ser cualquier nombre coloque conticinio porque me gusto la palabra)*/
 
 inicio:
 
 ifstream conticinio("C:\\Prueba\\prueba.txt"); 
  
 string sw_bajo_nivel;
 string valvula;
 string modobomba; 
  
 conticinio >>sw_bajo_nivel>>valvula>>modobomba; 
 
 //Verifico el modo de operación de la bomba
 
 if(modobomba=="Remoto" or modobomba=="remoto" or modobomba=="REMOTO")
  {
modobomba="REMOTO";
}
else
{
modobomba="LOCAL";
}
 
 //Verifico el estado del Switch de bajo nivel
 
 if(sw_bajo_nivel=="ON" or sw_bajo_nivel=="on" or sw_bajo_nivel=="On")
  {
sw_bajo_nivel="ON";
}

 else if(sw_bajo_nivel=="OFF" or sw_bajo_nivel=="off" or sw_bajo_nivel=="Off")
  {
sw_bajo_nivel="OFF";
}
 else 
  {
  modobomba="LOCAL";
  }
 //Verifico el estado de la válvula de servicio
 
 if(valvula=="ABIERTA" or valvula=="abierta" or valvula=="Abierta")
  {
valvula="ABIERTA";
}

 else if(valvula=="CERRADA" or valvula=="cerrada" or valvula=="Cerrada")
  {
valvula="CERRADA";
}
 else 
  {
  modobomba="LOCAL";
  }

 
 //CHEQUEO EL MODO DE OPERACIÓN DE LA BOMBA
 
 if (modobomba=="REMOTO" )
  {
  aux=0;
  }
 if (modobomba=="LOCAL" )
  {
  aux=1;
  }
 
 
 
 // HACEMOS TODOS LOS CÁLCULOS PARA EL MODO REMOTO AUTOMÁTICO
  
 if (aux==0)
  {
  
 // imprimimos los valores en pantalla para el modo Remoto
 
 
  if(pantalla=="ON")
  {
  system("cls");
  cout <<"La Presion= "<<presion<<endl;
  cout <<"Tu bomba esta= "<<bomba<<endl; 
  if(sw_bajo_nivel=="OFF")
  {
  texto_aux="ALARMA";
  }
else
  {
  texto_aux="NORMAL";
  }
  cout <<"El Switch de nivel= "<<texto_aux<<endl;
  cout <<"La valvula esta= "<<valvula<<endl<<endl;  
    cout <<"                               **** MODO AUTOMATICO REMOTO *****";
  pantalla ="OFF"; 
    }

//  Establecemos un tiempo de 1 de segundo para ver los cambios en la presión

    Sleep (1000);
    
    
// Simulamos la Presión    
    
    if (valvula=="CERRADA" and bomba=="ENCENDIDA")
    {
      presion=presion+3;
        pantalla ="ON";
    }
 
  if (valvula=="ABIERTA" and bomba=="APAGADA")
    {
      presion=presion-3;
        pantalla ="ON";
    }
 
     if (valvula=="ABIERTA" and bomba=="ENCENDIDA" and presion<32)
    {
      presion=presion+1;
        pantalla ="ON";
      }
 
      if (valvula=="ABIERTA" and bomba=="ENCENDIDA" and presion>32)
    {
      presion=presion-1;
        pantalla ="ON";
        }
 
 //impedimos que la presión de negativo
  
      if (presion<0)
    {
      presion=0;
        pantalla ="ON";
      }

    // Controlamos el encendido y apagado de la bomba
    
      if (sw_bajo_nivel=="OFF" and bomba=="ENCENDIDA")
    {
      bomba="APAGADA";
        pantalla ="ON";
     
  
      if (sw_bajo_nivel=="ON" and presion<20 and bomba=="APAGADA")
    {
      bomba="ENCENDIDA";
        pantalla ="ON";
      }  
      if (sw_bajo_nivel=="ON" and presion>40 and bomba=="ENCENDIDA")
    {
      bomba="APAGADA";
        pantalla ="ON";
     
  
   
  }
 
  // PRESENTAMOS LOS DATOS DEL MODO LOCAL
  
 if (aux==1)
  {
  
 // imprimimos los valores en pantalla para el modo Local
  
  if(pantalla=="ON")
  {
  system("cls");
    cout <<" **** MODO LOCAL - EL PROGRAMA NO CONTROLA LA BOMBA "<<endl; 
cout <<"O NO HAY COMUNICACIÓN CON EL ARCHIVO .TXT *****";
  pantalla ="OFF"; 
    }  
 
   }
 
 goto inicio;
 
}

PROGRAMA EN PYTHON



# PROGRAMA ELABORADO POR: CARLOS FERRER
# Control de nivel simple
# Elaborado: Carlos Ferrer
# Rev Nov 2024*/


import time # Biblioteca para dormir el programa 1 seg
import os # Biblioteca para limpiar pantalla

# Establecemos valores iniciales
os.system("cls")

bomba = "APAGADA" # Status Bomba
presion = 0    # Presión de descarga en psi
pantalla = "ON" # Actualización de Pantalla
texto_aux = "" # Variable de texto de la alarma del switch de bajo nivel
aux = 1      # Variable aux modo bomba

while True:
   
    with open("C:\\Prueba\\prueba.txt", "r") as conticinio:   # abrimos archivo
        linea=conticinio.readline() # leemos la 1ra linea
        datos = linea.split() # separamos las palabras en un arreglo
       
        # vaciamos los datos
        sw_bajo_nivel = datos[0]
        valvula = datos[1]
        modobomba = datos[2]
       
    # Verifico el modo de operación de la bomba
    if (modobomba == "remoto" or modobomba=="Remoto" or modobomba=="REMOTO"):
        modobomba = "REMOTO"
    else:
        modobomba = "LOCAL"

    # Verifico el estado del Switch de bajo nivel
    if (sw_bajo_nivel == "on" or sw_bajo_nivel == "On" or sw_bajo_nivel == "ON"):
        sw_bajo_nivel = "ON"
    elif (sw_bajo_nivel== "off" or sw_bajo_nivel== "Off" or sw_bajo_nivel== "OFF"):
        sw_bajo_nivel = "OFF"
    else:
        modobomba = "LOCAL"

    # Verifico el estado de la válvula de servicio
    if (valvula == "abierta" or valvula == "Abierta" or valvula == "ABIERTA"):
        valvula = "ABIERTA"
    elif (valvula == "cerrada" or valvula == "Cerrada" or valvula == "CERRADA"):
        valvula = "CERRADA"
    else:
        modobomba = "LOCAL"

    # CHEQUEO EL MODO DE OPERACIÓN DE LA BOMBA
    if modobomba == "REMOTO":
        aux = 0
    elif modobomba == "LOCAL":
        aux = 1
       
    # HACEMOS TODOS LOS CÁLCULOS PARA EL MODO REMOTO AUTOMÁTICO
    if aux == 0:
        # imprimimos los valores en pantalla para el modo Remoto
        if pantalla == "ON":
            os.system("cls")
            print(f"La Presion= {presion}")
            print(f"Tu bomba esta= {bomba}")
            texto_aux = "ALARMA" if sw_bajo_nivel == "OFF" else "NORMAL"
            print(f"El Switch de nivel= {texto_aux}")
            print(f"La valvula esta= {valvula}\n")
            print("**** MODO AUTOMATICO REMOTO *****")
            pantalla = "OFF"

        # Establecemos un tiempo de 1 de segundo para ver los cambios en la presión
        time.sleep(1)

        # Simulamos la Presión
        if valvula == "CERRADA" and bomba == "ENCENDIDA":
            presion += 3
            pantalla = "ON"

        if valvula == "ABIERTA" and bomba == "APAGADA":
            presion -= 3
            pantalla = "ON"

        if valvula == "ABIERTA" and bomba == "ENCENDIDA" and presion < 32:
            presion += 1
            pantalla = "ON"

        if valvula == "ABIERTA" and bomba == "ENCENDIDA" and presion > 32:
            presion -= 1
            pantalla = "ON"

        # impedimos que la presión sea negativa
        if presion < 0:
            presion = 0
            pantalla = "ON"

        # Controlamos el encendido y apagado de la bomba
        if sw_bajo_nivel == "OFF" and bomba == "ENCENDIDA":
            bomba = "APAGADA"
            pantalla = "ON"

        if sw_bajo_nivel == "ON" and presion < 20 and bomba == "APAGADA":
            bomba = "ENCENDIDA"
            pantalla = "ON"

        if sw_bajo_nivel == "ON" and presion > 40 and bomba == "ENCENDIDA":
            bomba = "APAGADA"
            pantalla = "ON"

    # PRESENTAMOS LOS DATOS DEL MODO LOCAL
    if aux == 1:
        # imprimimos los valores en pantalla para el modo Local
        if pantalla == "ON":
            print("**** MODO LOCAL - EL PROGRAMA NO CONTROLA LA BOMBA")
            print("O NO HAY COMUNICACIÓN CON EL ARCHIVO .TXT *****")
            pantalla = "OFF"




ARCHIVO PRUEBA.TXT

  OFF                                       ABIERTA                               REMOTO

 Switch de Nivel            Válvula a la descarga                 Modo Bomba

(ON= Agua, Off=Vacio)   (ABIERTA / CERRADA)  (LOCAL /REMOTO)

                                              

Nota: En modo REMOTO el control de la bomba es del programa  en modo LOCAL el programa pierde el control de la bomba


El Archivo de texto debe presentar la data en la primera línea de lo contrario no será leído por el programa.

Verifique que la ruta donde colocó el archivo de texto sea la indicada en el programa de lo contrario la data no será leída.

Para C++ Recuerde cambiar "\" por "\\" cuando declare la ruta dentro del programa.

Éxito 

miércoles, 14 de mayo de 2025

03.- Programación II - Esquema de Bombeo - Simulación Clase Nro 1

Basado en el siguientes esquema de Control




En la clase de hoy se elaboró tablas de la verdad que simulan el apagado y encendido de la bomba y el comportamiento de la presión a la descarga de la bomba.

Adicionalmente se elaboró un archivo de texto que simula: el Switch de Nivel (Interruptor de Bajo nivel),  la Válvula de servicios y Modo de Operación de la bomba (Local / Remoto).




Se indicó que tanto la Válvula como el Switch  lo manipularía el estudiante desde el archivo de texto y que el programa respondería basado en las tablas de la verdad para la Presion y la Bomba:





miércoles, 7 de mayo de 2025

02.- Programación II - Parcial Nro. 2 (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");
}