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 =>
- x/√(L2+x2) + (R-x)/√(A2+(R-x)2)=0 =>
(R-x)/√(A2+(R-x)2) = x/√(L2+x2) =>
(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
# 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
import math
import os
print("--- Cálculo de Cableado Mínimo ---")
# Validación de Largo (L)
while True:
l = float(input("Favor ingrese el largo del Almacén (5 - 10 mts) = "))
if 5 <= l <= 10:
break
print("¡Valor erróneo!\n")
print("Por favor, ingrese un número válido.")
# Validación de Ancho (A)
while True:
a = float(input("Favor ingrese el ancho del Almacén (4 - 6 mts) = "))
if 4 <= a <= 6:
break
print("¡Valor erróneo!\n")
print("Por favor, ingrese un número válido.")
# Validación de Alto (H)
while True:
h = float(input("Favor ingrese el alto del Almacén (3 - 5 mts) = "))
if 3 <= h <= 5:
break
print("¡Valor erróneo!\n")
print("Por favor, ingrese un número válido.")
# Hallamos X
a1=l**2-a**2
b=-2*l**2*(h-0.8)
c=(h-0.8)**2*l**2
x=(-b-math.sqrt(b**2-4*a1*c))/(2*a1)
d1=math.sqrt(l**2+x**2);
d2=math.sqrt(a**2+(h-0.8-x)**2);
d=d1+d2
# Presentación de resultados
print(f"\nLa distancia X en donde el cableado es mínimo corresponde a X = {x:.4f} mts !!!!")
print(f"\nLa distancia d1 (mts) = {d1:.4f}")
print(f"\nLa distancia d2 (mts) = {d2:.4f}")
print(f"\nLa distancia d mínima (mts) = {d:.4f}")
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
# Programa para determinar el cableado mínimo
# para ayudar al transportador a colocar una bomba usando el mínimo de
# cableado. APLICANDO ITERACIÓN
# Elaborador: Carlos Ferrer
# Rev.: marzo de 2026
import math
import os
print("--- Cálculo de Cableado Mínimo ---")
# Validación de Largo (L)
while True:
l = float(input("Favor ingrese el largo del Almacén (5 - 10 mts) = "))
if 5 <= l <= 10:
break
print("¡Valor erróneo!\n")
print("Por favor, ingrese un número válido.")
# Validación de Ancho (A)
while True:
a = float(input("Favor ingrese el ancho del Almacén (4 - 6 mts) = "))
if 4 <= a <= 6:
break
print("¡Valor erróneo!\n")
print("Por favor, ingrese un número válido.")
# Validación de Alto (H)
while True:
h = float(input("Favor ingrese el alto del Almacén (3 - 5 mts) = "))
if 3 <= h <= 5:
break
print("¡Valor erróneo!\n")
print("Por favor, ingrese un número válido.")
# Inicialización de variables para la optimización
x = 0.0
limite_superior = h - 0.8
# d_previa inicial con x = 0
d_previa = math.sqrt(l**2 + x**2) + math.sqrt(a**2 + (limite_superior - x)**2)
# Iteración para hallar el mínimo (paso de 0.0001)
paso = 0.0001
while x <= limite_superior:
x = x+paso
d = math.sqrt(l**2 + x**2) + math.sqrt(a**2 + (limite_superior - x)**2)
# Si la distancia empieza a aumentar, encontramos el mínimo previo
if d > d_previa:
x= x-paso
d1 = math.sqrt(l**2 + x**2)
d2 = math.sqrt(a**2 + (limite_superior - x)**2)
d = d1 + d2
break
d_previa = d
# Presentación de resultados
print(f"\nLa distancia X en donde el cableado es mínimo corresponde a X = {x:.4f} mts !!!!")
print(f"\nLa distancia d1 (mts) = {d1:.4f}")
print(f"\nLa distancia d2 (mts) = {d2:.4f}")
print(f"\nLa distancia d mínima (mts) = {d:.4f}")