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");
}

miércoles, 23 de abril de 2025

02.- Programación II - Parcial Nro. 2 - Semestre 2025-I

 

Usted debe elaborar un programa que permita destruir la bomba enemiga considerando que las siguientes condiciones que reporta el radar pueden variar:

Datos de entrada al programa proveniente del radar de la base antiaérea.
  • Velocidad del avión (En el momento que suelta la bomba)
  • Altura de vuelo del avión (En el momento que se suelta la bomba -superior a los 2000 mts)
  • Distancia horizontal del avión al cañón antiaéreo (En el momento que se suelta la bomba).
Para todo cálculo que lo requiera utilice 9.8 mts/segcomo valor de la gravedad

El programa deberá reportar:

(1) Velocidad de disparo del cañón antiaéreo (mts/seg) 
(2) Angulo de disparo del Cañón (En Radianes y Grados)

La seguridad de la instalación depende de ustedes!!!



02.- Programación II - Actividad a presentar en Laboratorio 23 abril 2025 - Solución del Profesor

 Rápidos y Furiosos X


Un tanque perteneciente a Dante Reyes archienemigo de Dominic Toretto trata de impedir que Toretto haga llegar suministros: Comida, agua, armamento, medicinas, etc.  a sus compañeros que se encuentran atrapados en un refugio en la cordillera de los Alpes.

El tanque de Dante Reyes puede acercarse a la montaña hasta distancias superiores a los 1400 mts. Esto dado que Letty y Román (Novia y amigo de Dominic) colocaron minas explosivas en el área cercana a la montaña de forma de impedir que se acerque el  tanque de Reyes. En consecuencia, sistemáticamente el tanque se posiciona a distancias cercanas al área minada y bombardea la parte trasera de la montaña, la cual es la zona por donde Dominic piensa pasar para trasladar los suministros.

El tanque generalmente dispone de un radio de disparo comprendido entre los ángulos θ1 y θ2, cuando se posiciona el cañón entre esos dos ángulos todos los disparos caen en el lado de la montaña donde se reciben los suministros.

En la medida que el tanque se aleja de la montaña los ángulos θ1 y θ2 tienden a igualarse. Si el tanque se aleja mucho todos los disparos colisionaran en la montaña o terminaran cayendo antes de ella.

Recuerde lo máximo que puede acercarse el tanque al eje central de la montaña es a 1400 mts. El tanque se posiciona sistematicamente en ubicaciones distintas: 1450 mts, 1500 mts, etc.



Su programa deberá:

1.- Indicar en caso de existir el rango del ángulo con el cual el tanque bombardea el lado contrario. (mínimo θ1 - máximo θ2).

2.- Indicar el rango del área que puede ser bombardeada con el tanque (mínima X1 - máxima X2) según como aparece representado en dibujo.

3.- Indique cual mensaje que debe transmitirle el programa a Dominic, considere que el camión mide 5 mts de ancho x 5 mts de alto.

4.- El único dato de entrada al programa es la distancia X desde el eje central de la montaña hasta el tanque. Este dato es conocido gracias a un radar ubicado en el refugio.

Nota: Para cualquier cálculo considere la gravedad de 9.8 mts/s2. Considere para todo cálculo la altura del cañón del tanque en 2.2 mts.

Indique: θ1 en grados , θ2 en grados, X1 en mts, X2 en mts y recomendación del programa para Dominic Toretto para las siguientes ubicaciones del tanque: 4000 mts, 4200 mts y 4500 mts.


Programa en C++

/*Parcial Nro. 2 - Rápidos y Furiosos - semestre 2024-II

Programación II

Elaborado Por Carlos Ferrer

Rev. 23 de abril de 2025

*/


#include <iostream>

#include <math.h>

using namespace std;

int main() 

{

// Distancia del tanque a la parte alta de la montaña en horizontal

double x;

// Elementos de la resolvente

double a,b,c; 

// Tangente de los ángulos

double tQ1;

double tQ2;

// Ángulos en radianes

double Q1_Rad;

double Q2_Rad;

// Velocidad Inicial

double vo=250;

//Tiempo de vuelo de alcance máximo conociendo el ángulo

double tv1a, tv1b, tv2a, tv2b, tv1, tv2;

// Distancias de cobertura de ataque del tanque

double x1,x2;


do 

   { 

   cout <<"Ingrese la distancia del tanque (Mayor de 1400 mts)= ";

   cin >>x;

    }

while (x<1400);

// Determinamos los ángulos

a=4.9*pow(x,2)/pow(vo,2);

b=-x;

c=1800-2.2+4.9*pow(x,2)/pow(vo,2);

tQ1=(-b+sqrt(pow(b,2)-4*a*c))/(2*a);

tQ2=(-b-sqrt(pow(b,2)-4*a*c))/(2*a);    

Q1_Rad=atan(tQ1);

Q2_Rad=atan(tQ2);


//Determinamos el tiempo de vuelo del recorrido completo para el primer ángulo y X1

a=-4.9;

b= vo*sin(Q1_Rad);

c=2.2;

tv1a=(-b+sqrt(pow(b,2)-4*a*c))/(2*a);

tv1b=(-b-sqrt(pow(b,2)-4*a*c))/(2*a);

if (tv1a>0)

{

tv1=tv1a;

}

else

{

tv1=tv1b;

}

x1=vo * cos(Q1_Rad)*tv1-x;

//Determinamos el tiempo de vuelo del recorrido completo para el 2do ángulo y X2

a=-4.9;

b= vo*sin(Q2_Rad);

c=2.2;

tv2a=(-b+sqrt(pow(b,2)-4*a*c))/(2*a);

tv2b=(-b-sqrt(pow(b,2)-4*a*c))/(2*a);

if (tv2a>0)

{

tv2=tv2a;

}

else

{

tv2=tv2b;

}

x2=vo * cos(Q2_Rad)*tv2-x;

// Presentamos los resultados

cout <<"El angulo menor para pasar el cerro es = "<<Q2_Rad*180/M_PI<<endl;

cout <<"El angulo mayor para pasar el cerro es = "<<Q1_Rad*180/M_PI<<endl;

cout <<"El tanque puede Bombardear el area entre "<<x1<<" y "<<x2<<" mts"<<endl<<endl;


if (x1<1805 and x2>1805)

{

cout <<"Comuniquense urgente con Dominic e indiquenle que no se acerque dado que corre peligro"<<endl<<endl;

}

else

{

cout <<"Comuniquense urgente con Dominic e indiquenle que traiga el camión de inmediato"<<endl<<endl;

}

system ("pause");

}

Programa en Python



# Parcial Nro. 2 - Rápidos y Furiosos - semestre 2024-II
# Programación II
# Elaborado Por Carlos Ferrer
# Rev. 23 de abril de 2025

import math
import os

os.system("cls")

# Distancia del tanque a la parte alta de la montaña
# en horizontal
x1=0
x2=0
x = float(input("Ingrese la distancia del tanque (Mayor de 1400 mts)= "))
while x < 1400:
    x = float(input("Ingrese la distancia del tanque (Mayor de 1400 mts)= "))

# Velocidad Inicial

vo = 250

# Elementos de la resolvente

a = 4.9 * x**2 / vo**2
b = -x
c = 1800 - 2.2 + 4.9 * x**2 / vo**2

# Tangentes de los angulos

if ((b**2 - 4*a*c)<0):
    no_pasa=True
else:
    no_pasa=False  
    tQ1 = (-b + math.sqrt(b**2 - 4*a*c)) / (2*a)
    tQ2 = (-b - math.sqrt(b**2 - 4*a*c)) / (2*a)
    # Angulos
    Q1_Rad = math.atan(tQ1)
    Q2_Rad = math.atan(tQ2)
    # Calculos de X1 y X2
    a = -4.9
    b = vo * math.sin(Q1_Rad)
    c = 2.2
    tv1a = (-b + math.sqrt(b**2 - 4*a*c)) / (2*a)
    tv1b = (-b - math.sqrt(b**2 - 4*a*c)) / (2*a)
    if tv1a > 0:
        tv1 = tv1a
    else:
        tv1 = tv1b
    x1 = vo * math.cos(Q1_Rad) * tv1 - x
    a = -4.9
    b = vo * math.sin(Q2_Rad)
    c = 2.2
    tv2a = (-b + math.sqrt(b**2 - 4*a*c)) / (2*a)
    tv2b = (-b - math.sqrt(b**2 - 4*a*c)) / (2*a)
    if tv2a > 0:
        tv2 = tv2a
    else:
        tv2 = tv2b
    x2 = vo * math.cos(Q2_Rad) * tv2 - x

# Presentación de resultados
    print("\n")
    print("El angulo menor para pasar el cerro es =", Q2_Rad*180/math.pi)
    print("El angulo mayor para pasar el cerro es =", Q1_Rad*180/math.pi)
    print("El tanque puede Bombardear el área entre", x1, "y", x2, "mts")

if ((x1 < 1805 and x2 > 1805) and (no_pasa==False)):
    print("\n")
    print("Comuníquense urgente con Dominic e indíquenle que no se acerque dado que corre peligro","\n")
else:
    print("\n")
    print("Comuníquense urgente con Dominic e indíquenle que traiga el camión de inmediato","\n")



02.- Programación II - Actividad a presentar en Laboratorio 23 abril 2025

 Rápidos y Furiosos X

Un tanque perteneciente a Dante Reyes archienemigo de Dominic Toretto trata de impedir que Toretto haga llegar suministros: Comida, agua, armamento, medicinas, etc.  a sus compañeros que se encuentran atrapados en un refugio en la cordillera de los Alpes.

El tanque de Dante Reyes puede acercarse a la montaña hasta distancias superiores a los 1400 mts. Esto dado que Letty y Román (Novia y amigo de Dominic) colocaron minas explosivas en el área cercana a la montaña de forma de impedir que se acerque el  tanque de Reyes. En consecuencia, sistemáticamente el tanque se posiciona a distancias cercanas al área minada y bombardea la parte trasera de la montaña, la cual es la zona por donde Dominic piensa pasar para trasladar los suministros.

El tanque generalmente dispone de un radio de disparo comprendido entre los ángulos θ1 y θ2, cuando se posiciona el cañón entre esos dos ángulos todos los disparos caen en el lado de la montaña donde se reciben los suministros.

En la medida que el tanque se aleja de la montaña los ángulos θ1 y θ2 tienden a igualarse. Si el tanque se aleja mucho todos los disparos colisionaran en la montaña o terminaran cayendo antes de ella.

Recuerde lo máximo que puede acercarse el tanque al eje central de la montaña es a 1400 mts. El tanque se posiciona sistematicamente en ubicaciones distintas: 1450 mts, 1500 mts, etc.



Su programa deberá:

1.- Indicar en caso de existir el rango del ángulo con el cual el tanque bombardea el lado contrario. (mínimo θ1 - máximo θ2).

2.- Indicar el rango del área que puede ser bombardeada con el tanque (mínima X1 - máxima X2) según como aparece representado en dibujo.

3.- Indique cual mensaje que debe transmitirle el programa a Dominic, considere que el camión mide 5 mts de ancho x 5 mts de alto.

4.- El único dato de entrada al programa es la distancia X desde el eje central de la montaña hasta el tanque. Este dato es conocido gracias a un radar ubicado en el refugio.

Nota: Para cualquier cálculo considere la gravedad de 9.8 mts/s2. Considere para todo cálculo la altura del cañón del tanque en 2.2 mts.

Indique: θ1 en grados , θ2 en grados, X1 en mts, X2 en mts y recomendación del programa para Dominic Toretto para las siguientes ubicaciones del tanque: 4000 mts, 4200 mts y 4500 mts.


jueves, 10 de abril de 2025

02.- Programación II - Actividad a desarrollar clase 10 de abril

La Gobernación de Miranda desea instalar semáforos dentro de los túneles del edo. Miranda de forma de alertar accidentes o trabajos dentro de los mismo, los semáforos tienen una masa 12.2 kg aproximadamente. Estos semáforos se fijaran al techo de la entrada de los túneles con un sistema de soporte como se muestra en la figura:



Para fijar la estructura al techo se empleara dos segmentos independiente de guaya sobrante de otros proyectos. Cada segmento de guaya solo soporta 10 kg de masa. Elabore un programa que determine cual rango puedo reducir o aumentar el segmento X sin que las guayas terminen rompiéndose. Adicionalmente informe los valores de los ángulos Alfa y Beta para esas longitudes límites. 

Nota la cadena soporta masas de hasta 50 kg.