jueves, 13 de marzo de 2025

01.- Programación II - Programa de Manejo de Costos - Calculo de Cables de Fibra Óptica + SOLUCION DEL PROFESOR (2025 - II)


Escenario Nro 1



Escenario Nro 2


Escenario Nro 3



Solución 



Se desecha la respuesta de 30.5 km porque no esta en el rango de 1 a 20 km.

En consecuencia para los costos de:

3000$ en Cable Terrestre
5000$ en Cable Marino

debemos comprar 9.5 km de Cable Terrestre y 17.5 km cable marino.

Para el cálculo de X en nuestro programa debemos usar la formula de X1 dado que nos presentaría valores entre 0 y 20Km.

NOTA1: RECUERDE, SI EL CABLE MARITIMO CUESTA LO MISMO O ES MAS BARATO QUE EL CABLE TERRESTRE LA OPCIÓN MAS ECONOMICA ES LANZAR UN CABLE MARITIMO DIRECTAMENTE ENTRE A Y B 

Programa Nro1 en C++

// Programa Nro1  para la estimación del cable de Fibra óptica (Terrestre y Marítimo)
// La idea es determinar el punto intermedio entre A y C en donde finaliza
// el tendido del cable terrestre y comienza el tendido del cable marítimo

// Elaborado por CARLOS FERRER 

// Rev Septiembre 2024

// Librerías requeridas


#include<iostream>

#include<math.h>

using namespace std;

main()


{

 double CM=-1,CT=-1,W=0; //CM=Costo Cable Marítimo CT=Costo Cable terrestre W=CM*CM/(CT*CT)
 double a,b,c; // elemento de la ecuación de 2do grado
 double X; //Cantidad de Metros de Cable Terrestre
 double BD;//Cantidad de Cable Marítimo
 double Costo; //Costo minino del tendido del cableado
 double distancia_directa; //distancia directa entre a y b


 // Ingresamos los costos de los cables terrestres y marítimos

while (CM<0)
 {
 cout<<"Ingrese el costo en ($) del tendido de (KM) de Cable maritimo = ";
 cin>>CM;
 }

while (CT<0)
 {
 cout<<"Ingrese el costo en ($) del tendido de (KM) de Cable Terrestre = ";
 cin>>CT;
 }


 // Evaluamos el escenario en el cual no conviene hacer ningún calculo
 if (CM<=CT)
 {
 distancia_directa= sqrt(pow(14,2)+pow(20,2));
 cout <<endl<<"Cuando el costo del cable Maritimo ("<<CM<<"$) es menor "<<endl;
 cout <<"o igual al costo del cable Terrestre ("<<CT<<"$)"<<endl;
 cout <<"La mejor opcion es solo usar UNICAMENTE cable Maritimo desde A a B"<<endl<<endl;
 cout <<"En este caso solo se requiere 24.4131112314674 km de Cable Maritimo"<<endl;
  cout <<"y 0 km de Cable Terrestre"<<endl<<endl;
 cout <<"El costo optimo en este caso seria = "<< CM*distancia_directa<<" $"<<endl;
 cout <<"CON ESTAS CANTIDADES SE OBTIENE EL MINIMO COSTO POSIBLE!!!"<<endl<<endl;
goto fin; 
 }



 // Se determina la distancia X en donde el costo del cableado se hace mínimo

W=pow(CT,2)/pow(CM,2);
a=1-W;
b=40*(W-1);
c=400-596*W;

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


// Determinamos la cantidad de cable maritimo
BD=sqrt(596-40*X+pow(X,2));

//Determinamos el costo del tendido del cable

Costo=X*CT+BD*CM;


// presentamos los resultados
 cout<<endl<<"La cantidad de cable Marítimo requerido es (KM) ="<<BD<<endl;
 cout<<"La cantidad de cable Terrestre requerido es (KM) ="<<X<<endl;
 cout<<"El Costo del tendido es ="<<Costo<<" $"<<endl;
 cout<<"CON ESTAS CANTIDADES SE OBTIENE EL MINIMO COSTO POSIBLE!!!"<<endl;

fin:
  system("pause");

}


Programa Nro1 en Python


# Programa Nro1  para la estimación del cable de Fibra óptica (Terrestre y Marítimo)
# La idea es determinar el punto intermedio entre A y C en donde finaliza
# el tendido del cable terrestre y comienza el tendido del cable marítimo

# Elaborado por CARLOS FERRER

# Rev Septiembre 2024

# Biblioteca requerida
import math
import os

os.system("cls")

# Costo Cable Maritimo
CM = -1
# Costo Cable Terrestre
CT = -1
# W=CM^2/CT^2
W = 0

 # Ingresamos los costos de los cables terrestres y marítimos

while CM < 0:
    CM = float(input("Ingrese el costo del cable maritimo ($/km) = "))

while CT < 0:
    CT = float(input("Ingrese el costo del cable Terrestre ($/km) = "))
 
 # Evaluamos el escenario en el cual no conviene hacer ningún calculo
if CM <= CT:
    distance_direct = math.sqrt(14**2 + 20**2)
# Presentamos resultados de este escenario  
    print(f"\nCuando el costo del camble maritimo (${CM}) es menor o igual que el costo del cable terestre (${CT})")
    print("La mejor opción es usar solamente cable maritimo de A a B")
    print(f"En este caso, solamente 24.4131112314674 km de cable maritimo es requerido")
    print("and 0 km of Terrestrial cable")
    print(f"El costo optimo en este caso correspondería = {CM*distance_direct} $")
    print("CON ESTAS CANTIDADES, OBTENDRIAMOS EL MÍNIMO COSTO!!!")
else:
    W = (CT/CM)**2
    a = 1 - W
    b = 40 * (W - 1)
    c = 400 - 596 * W
    X = (-b - math.sqrt(b**2 - 4*a*c)) / (2*a)
    BD = math.sqrt(596 - 40*X + X**2)
    cost = X*CT + BD*CM
 
 # Presentamos resultados de este escenario
    print(f"\nLa cantidad de cable maritimo requerido es (KM) = {BD}")
    print(f"La cantidad de cable maritimo requerido es (KM) = {X}")
    print(f"El costo correspondería = {cost} $")
    print("CON ESTAS CANTIDADES, OBTENDRIAMOS EL MÍNIMO COSTO!!!")



NOTA2: Existe otra forma de resolver este problema usando mínima matemática. 


Basta con barrer tota la longitud de la distancia terrestre (0-20km), en pocas palabras ir moviendo X por ejemplo de 0.01 en 0.01, calculando de forma simultanea todas las distancias de X a B, para que con esos datos se evaluaran todos los costos posibles y así determinar la opción más económica. Para esto la única ecuación que hacia falta era la distancia de X a B en función de X y eso ya lo sabíamos por el teorema de Pitágoras (distancia de X a B = [(20-x) 2 + 142] )


Programa Nro2 en C++

// Programa Nro2 para la estimación del cable de Fibra óptica (Terrestre y Marítimo)
// La idea es determinar el punto intermedio entre A y C en donde finaliza
// el tendido del cable terrestre y comienza el tendido del cable marítimo

// Elaborado por CARLOS FERRER - Septiembre 2024

// Librerías requeridas


#include<iostream>

#include<math.h>

using namespace std;

main()


{

 double CM=-1,CT=-1; //CM=Costo Cable Marítimo CT=Costo Cable terrestre W=CM*CM/(CT*CT)
 double X,X_aux; //Cantidad de Metros de Cable Terrestre
 double BD, BD_aux;//Cantidad de Cable Marítimo
 double Costo,Costo_aux; //Costo minino del tendido del cableado
 

 // Ingresamos los costos de los cables terrestres y marítimos


while (CM<0)
 {
 cout<<"Ingrese el costo en ($) del tendido de (KM) de Cable maritimo = ";
 cin>>CM;
 }

while (CT<0)
 {
 cout<<"Ingrese el costo en ($) del tendido de (KM) de Cable Terrestre = ";
 cin>>CT;
 }


 // Determinamos el costo de irnos directo de A a B
  
 X=0;
 BD=sqrt(pow(20,2)+pow(14,2));
 Costo=CT*X+CM*BD;

/* Revisamos todas las posibilidades de la distancia terreste de forma de 
determinar si hay un costo menor*/
 X_aux=0.01;
 while  (X_aux<20)
  {
  BD_aux=sqrt(pow(20-X_aux,2)+pow(14,2));
  Costo_aux=CT*X_aux+CM*BD_aux;
  if(Costo_aux<Costo)
  {
  Costo=Costo_aux;
  X=X_aux;
  BD=BD_aux;
}
X_aux=X_aux+0.01;  
  }
 
 // Determinamos el costo de irnos directo de A a C y luego a B

Costo_aux=CT*20+CM*14;
if(Costo_aux<Costo)
  {
  Costo=Costo_aux;
  X=20;
  BD=14;
 
// Presentamos los resultados
 cout<<endl<<"La cantidad de cable Marítimo requerido es (KM) ="<<BD<<endl;
 cout<<"La cantidad de cable Terrestre requerido es (KM) = "<<X<<endl;
 cout<<"El Costo del tendido es = "<<Costo<<" $"<<endl;
 cout<<"CON ESTAS CANTIDADES SE OBTIENE EL MINIMO COSTO POSIBLE!!!"<<endl;


  system("pause");

}


Programa Nro2 en Python


#Programa Nro2 para la estimación del cable de Fibra óptica (Terrestre y Marítimo)
# La idea es determinar el punto intermedio entre A y C en donde finaliza
# el tendido del cable terrestre y comienza el tendido del cable marítimo

# Elaborado por CARLOS FERRER - Septiembre 2024

# Librerías requeridas

import math
import os

os.system("cls")

CM = -1  # Costo del cable marítimo
CT = -1 # Costo del cable terrestre
X = 0 # Distancia X que vamos a ir verificando
X_aux = 0.01

 # Ingresamos los costos de los cables terrestres y marítimos
while CM < 0:
    CM = float(input("Ingrese el costo en ($) del tendido de (KM) de Cable maritimo = "))

while CT < 0:
    CT = float(input("Ingrese el costo en ($) del tendido de (KM) de Cable Terrestre = "))


# Calculamos el costo para x=0.01
BD = math.sqrt(20**2 + 14**2)
BD_aux = 0
Costo = CT*X + CM*BD
Costo_aux = 0


# Iteramos hasta conseguir costo mínimo

while X_aux < 20:
    BD_aux = math.sqrt((20-X_aux)**2 + 14**2)
    Costo_aux = CT*X_aux + CM*BD_aux
    if Costo_aux < Costo:
        Costo = Costo_aux
        X = X_aux
        BD = BD_aux
    X_aux = X_aux + 0.01

Costo_aux = CT*20 + CM*14
if Costo_aux < Costo:
    Costo = Costo_aux
    X = 20
    BD = 14


# Presentamos Resultados

print(f"\nLa cantidad de cable Marítimo requerido es (KM) = {BD:.2f}")
print(f"La cantidad de cable Terrestre requerido es (KM) = {X:.2f}")
print(f"El Costo del tendido es = {Costo:.2f} $")
print("CON ESTAS CANTIDADES SE OBTIENE EL MINIMO COSTO POSIBLE!!!")


No hay comentarios.:

Publicar un comentario