El transportador
La dimensión de la bodega en donde se reunirán los Albaneses le será informado por un espía media hora antes de la reunión.
El plan del transportador es instalar un interruptor en una esquina a 80 cm de alto del piso y luego colocar una bomba en el techo justo en la esquina opuesta, ¿El transportador debe cargar todo el material para montar la trampa y requiere transportar la menor cantidad de cable posible, por lo tanto, recurre a usted para elabore un programa que determine la trayectoria sobre las paredes de la bodega que se debe seguir para ahorrar la mayor cantidad de cable eléctrico.
Por lo tanto, en función de las medidas de la bodega su programa deberá determinar:
- La cantidad de cable requerido.
- La distancia X en metros.
A usted no le conviene tener problemas con el transportador.
Solución de referencia: Para un largo de 5 mts, un ancho de 4 mts y un alto de 3 mts, la distancia X corresponde a 11/9 mts y la cantidad de cable requerido es de 9.2649 mts aproximadamente.
SOLUCIONES
Existen varias soluciones para este ejercicio yo voy a plantear dos
1ra Solución aplicando la derivada (Dificultad alta)
Sea P el punto en la esquina que forman los lados de longitud L m y A m. Denotemos por x la altura en metros, a partir de los 0.8 m.
Sea d1 la distancia del contacto al punto P y sea d2 la distancia del punto P a la bomba. La distancia que nos interesa minimizar es
d=d1+d2
Usando el Teorema de
Pitágoras en los triángulos rectángulos apropiados tenemos que
d1=√(L2+x2) y d2= √(A2+(H-0.8-x)2)
para simplificar la
nomenclatura llamemos R=H-0.8, por lo tanto
d2= √(A2+(R-x)2)
Puesto que la altura de la
bodega es de H m, entonces 0 ≤ x ≤ H-0.8. Así, la función a minimizar está
dada por:
d = √(L2+x2)+ √(A2+(R-x)2)
recuerden L y A son datos de entrada al programa, la única variable es x, por lo tanto, si derivamos la función y la igualamos a cero, para posteriormente despejar x, ese valor sería donde la ecuación original se hace mínima, procedemos
d(d)/dx = 0 =>
2x(-1)/(2√(L2+x2)) + (2)(R-x)(-1)(-1)/(2√(A2+(R-x)2)) = 0 =>
(R-x)√( L2+x2) = x √(A2+(R-x)2)
Elevamos al
cuadrado en ambos lados:
(R-x)2( L2+x2)=
x2 (A2+(R-x)2) =>
(R2-2Rx+x2)( L2+x2)= x2 (A2 +
R2-2Rx+x2) =>
R2L2+R2x2-2L2Rx-2Rx3+L2x2+x4= A2x2+R2x2-2Rx3+x4 =>
(L2-A2)x2 - 2L2Rx +R2L2 = 0
Bastaría resolver la ecuación de 2do grado donde
a = L2-A2
b= -2L2(H-0.8)
c= (H-0.8)2L2
Veamos el ejemplo L=5, A=4 y H=3
a= 25-16 => a = 9
b=-50 (2.2)=> b= -110
c= -(2.2)2 25 => c= 121
Aplicando la resolvente quedaría:
x1= [110+ √((110)2-4(9)(121))]/(2(9))
x2= [110- √((110)2-4(9)(121))]/(2(9))
por lo tanto
x1=11 y x2=1,22 por lo tanto el
resultando correcto es
x=1,22 dado que el otro es un valor
fuera del rango de (0,2.2)
Veamos el programa.
Programa Nro.1 en C++
/*Programa para determinar el cableado mínimo
para ayudar al transportador a colocar una bomba usando el mínimo de
cableado. APLICANDO DERIVADAS
Elaborador: Carlos Ferrer
Rev.: marzo de 2026
*/
#include <math.h>
#include <iostream>
#include <locale.h>
using namespace std;
main()
{
setlocale(LC_ALL,"spanish");
/* L=Largo, H=Alto, A=Ancho, d=distancia mínima,
X,d1 y d2 distancias según gráfica*/
double L,H,A,d,x,d1,d2;
//Coeficientes de la resolvente de 2do grado
double a,b,c;
//Ingresamos datos
do
{
cout <<"Favor ingrese el largo del Almacen (5 - 10 mts) = ";
cin >>L;
if(L<5 or L>10)
{
system("cls");
cout <<"Valor erroneo!!!"<<endl<<endl;
}
}
while (L<5 or L>10);
do
{
cout <<"Favor ingrese el ancho del Almacen (4 - 6 mts) = ";
cin >>A;
if(A<4 or A>6)
{
system("cls");
cout <<"Valor erroneo!!!"<<endl<<endl;
}
}
while (A<4 or A>6);
do
{
cout <<"Favor ingrese el alto del Almacen (3 - 5 mts) = ";
cin >>H;
if(H<3 or H>5)
{
system("cls");
cout <<"Valor erroneo!!!"<<endl<<endl;
}
}
while (H<3 or H>5);
// Hallamos X
a=pow(L,2)-pow(A,2);
b=-2*pow(L,2)*(H-0.8);
c=pow((H-0.8),2)*pow(L,2);
x=(-b-sqrt(pow(b,2)-4*a*c))/(2*a);
d1=sqrt(pow(L,2)+pow(x,2));
d2=sqrt(pow(A,2)+pow((H-0.8-x),2));
//Presentamos Resultados
cout <<endl<<"La distancia X en donde el cableado"<<endl;
cout <<"es mínimo, corresponde a X = "<<x<<" mts !!!!"<<endl<<endl;
cout <<endl<<"La distancia d1 (mts) = "<<d1<<endl;
cout <<endl<<"La distancia d2 (mts) = "<<d2<<endl;
cout <<endl<<"La distancia d mínima (mts) = "<<d1+d2<<endl;
}
Programa Nro.1 en Python
2da Solución aplicando Iteración (Dificultad baja)
En este caso vamos a partir de la ecuación de distancia que determinamos arriba:
d = √(L2+x2)+ √(A2+(H-0.8-x)2)
Vamos a hacer un programa que itere el valor de x desde x=0 hasta x=H-0.8, utilizaremos un incremento pequeño de 0.0001, en el momento que detectemos un cambio de sentido de la variable d, o sea, que cambie de decrecimiento a crecimiento habremos conseguido el mínimo y procedemos a presentar los resultados.
Veamos el programa.
Programa Nro.2 en C++
/*Programa para determinar el cableado mínimo
para ayudar al transportador a colocar una bomba usando el mínimo de
cableado. APLICANDO ITERACION.
Elaborador: Carlos Ferrer
Rev.: marzo de 2026
*/
#include <math.h>
#include <iostream>
#include <locale.h>
using namespace std;
main()
{
setlocale(LC_ALL,"spanish");
/* L=Largo, H=Alto, A=Ancho, d=distancia mínima,
X,d1 y d2 distancias según gráfica*/
double L,H,A,d,x,d1,d2;
//Coeficientes de la resolvente de 2do grado
double a,b,c;
//Distancia d para el valor de x anterior
double d_previa;
//Ingresamos datos
do
{
cout <<"Favor ingrese el largo del Almacen (5 - 10 mts) = ";
cin >>L;
if(L<5 or L>10)
{
system("cls");
cout <<"Valor erroneo!!!"<<endl<<endl;
}
}
while (L<5 or L>10);
do
{
cout <<"Favor ingrese el ancho del Almacen (4 - 6 mts) = ";
cin >>A;
if(A<4 or A>6)
{
system("cls");
cout <<"Valor erroneo!!!"<<endl<<endl;
}
}
while (A<4 or A>6);
do
{
cout <<"Favor ingrese el alto del Almacen (3 - 5 mts) = ";
cin >>H;
if(H<3 or H>5)
{
system("cls");
cout <<"Valor erroneo!!!"<<endl<<endl;
}
}
while (H<3 or H>5);
// Hallamos X
x=0;
d_previa=sqrt(pow(L,2)+pow(x,2))+sqrt(pow(A,2)+pow((H-0.8-x),2));
//iteramos
while(x<=H-0.8)
{
x=x+0.0001;
d=sqrt(pow(L,2)+pow(x,2))+sqrt(pow(A,2)+pow((H-0.8-x),2));
if(d>d_previa)
{
x=x-0.0001;
d1=sqrt(pow(L,2)+pow(x,2));
d2=sqrt(pow(A,2)+pow((H-0.8-x),2));
d=d1+d2;
break;
}
d_previa=d;
}
//Presentamos Resultados
cout <<endl<<"La distancia X en donde el cableado"<<endl;
cout <<"es mínimo, corresponde a X = "<<x<<" mts !!!!"<<endl<<endl;
cout <<endl<<"La distancia d1 (mts) = "<<d1<<endl;
cout <<endl<<"La distancia d2 (mts) = "<<d2<<endl;
cout <<endl<<"La distancia d mínima (mts) = "<<d1+d2<<endl;
}
Programa Nro.2 en Python
# para ayudar al transportador a colocar una bomba usando el mínimo de # cableado. APLICANDO ITERACIÓN # Elaborador: Carlos Ferrer # Rev.: marzo de 2026





