sábado, 11 de abril de 2026

01u.- Programación II - Parcial Nro. 1 - Semestre 2026-II - Solución del Profesor

 


Solución

El primer paso es definir la fórmula de volumen de la piscina que corresponde a lo que queremos maximizar:

para eso descomponemos las figuras en dos: un paralelepípedo y una cuña,




En consecuencia, el volumen de la piscina corresponde a:

Vol = XY mt + XY/2 mt=> Vol = 3XY/2 mt3


La ecuación de Volumen quedó en función de dos variables, necesitamos que quede en función de una sola.

 

Como conocemos la cantidad de material que tendremos para construir el fondo y las paredes de la piscina podemos establecer lo siguiente:

 

M = Material para construir



M = Área del fondo + Área de las 4 paredes =>

M = (XY + 2Y + [X+X/2] + [X+X/2] + Y) mt=>

M = (XY + 3Y + 3X/2 + 3X/2) mt2 =>

M = (XY + 3Y + 3X) mt2

 

Conociendo esto podemos expresar una variable en función de la otra:

X = (M - 3Y) / (Y+3) mt

En consecuencia, el volumen correspondería a:

Vol = 3 [(M-3Y)  / (Y+3)] Y/2 mt3   

La ecuación también la podemos expresar como

Vol =(3/2) (MY – 3Y2) / (Y+3) mt3

 

Para hallar el valor de Y en donde el Volumen se hace máximo derivamos el volumen con respecto a Y y lo igualamos a cero dvol/dy=0, luego despejamos Y. 

 

dvol/dy=0 =>

[(M – 6Y) (Y+3) – (MY –3Y2)] / (Y+3)= 0

 

El denominador del lado izquierdo pasa al otro lado multiplicando y se cancela, en consecuencia, la ecuación quedaría:

 

MY + 3M – 6Y2 – 24Y – MY + 4Y2 = 0 =>

-4Y– 24Y + 3M = 0 => 4Y2+24Y-3M = 0 =>

al resolver la ecuación de 2do grado y dado que los valores de M están entre 2000 y 2500 mt2 se puede apreciar que una de las raíces nos quedará positiva y la otra negativa por lo que descartamos la repuesta negativa dado que no hay distancias negativas.

 

Al tener Y, sustituimos este valor en

 

X = (M - 4Y) / (Y+3) mt

Y obtenemos X,

 

Ahora procedemos a elaborar el programa.


PROGRAMA NRO. 1

MÉTODO DE LA DERIVADA


/* Este programa calcula las dimensiones de ancho y largo de la piscina de forma de obtener el máximo volumen posible con el material suministrado (parcial 1 semestre 2026-II)


************ Método de la derivación ********************


Elaborado por Carlos Ferrer

fecha: 11 de Abril de 2026

Rev. : 1

*/


#include<iostream>

#include<math.h>

#include<iomanip> //Biblioteca para imprimir sin notación científica

#include<locale.h>

using namespace std;


main()

{

double X,Y=0; //Largo y Ancho a calcular

double M; //Cantidad de material donado

float litros; //Capacidad en litros de la piscina

setlocale(LC_ALL, "spanish");

do

{

cout <<"Favor ingrese la cantidad de material donado en mts2 (2000-2500) = ";

cin >>M;

if (M<2000 or M>2500)

{

cout <<"dato incorrecto = "<<M<<endl;

system("pause");

system("cls");

}

}

while(M<2000 or M>2500);


//Calculamos Y y X

Y=(-18+sqrt(pow(18,2)-4*3*(-3*M)))/(2*3);

X=(M-3*Y)/(Y+3);

litros=(3*X*Y*1000)/2;


//Presentamos los resultados


cout <<endl<<"El largo de la piscina es de "<<Y<<" mts y"<<endl;

cout <<"el ancho de la piscina es de "<<X<<" mts."<<endl<<endl;

cout <<"El volumen es de "<<3*X*Y/2<<" mts3 (";

cout <<setprecision(2) << fixed <<litros<<" Litros)"<<endl<<endl;

cout <<"Para que la piscina tenga máximo volumen el fondo debe ser cuadrado!!!"<<endl<<endl;

system("pause");

}


Resultados



PROGRAMA NRO. 2
Método del tanteo (Iteración)


/* Este programa calcula las dimensiones de ancho y largo de
la piscina de forma de obtener el máximo volumen posible con el
material suministrado (parcial 1 semestre 2026-II)

*************** Método del tanteo ***************

Elaborado por Carlos Ferrer

fecha: 11 de Abril de 2026

Rev : 1

*/



#include<iostream>
#include<math.h>
#include<iomanip> //Biblioteca para imprimir sin notación científica
#include<locale.h>
using namespace std;


main()

{

double X,Y=0; //Largo y Ancho a calcular
double M; //Cantidad de material donado
double vol,aux,litros; //Capacidad en litros de la piscina
setlocale(LC_ALL, "spanish");

do

{
cout <<"Favor ingrese la cantidad de material donado en mts2 (2000-2500) = ";
cin >>M;
if (M<2000 or M>2500)
{
cout <<"dato incorrecto = "<<M<<endl;
system("pause");
system("cls");
}
}

while(M<2000 or M>2500);

//Calculamos Y y X

Y=0.0001;
X=(M-3*Y)/(Y+3);
vol=3*X*Y/2;
aux=0;

while (vol>aux)
{
aux=vol;
Y=Y+0.0001;
X=(M-3*Y)/(Y+3);
vol=3*X*Y/2;
}

Y-0.0001;
X=(M-3*Y)/(Y+3);
vol=3*X*Y/2;
litros=(3*X*Y*1000)/2;


//Presentamos los resultados

cout <<endl<<"El largo de la piscina es de "<<Y<<" mts y"<<endl;
cout <<"el ancho de la piscina es de "<<X<<" mts."<<endl<<endl;
cout <<"El volumen es de "<<3*X*Y/2<<" mts3 (";
cout <<setprecision(2) << fixed <<litros<<" Litros)"<<endl<<endl;
cout <<"Para que la piscina tenga máximo volumen el fondo debe ser cuadrado!!!"<<endl<<endl;
system("pause");
}

jueves, 26 de marzo de 2026

01t.- Programación II - Prueba Corta 2026 - II (Solución del Profesor)

 El transportador



El transportador desea colocar bombas en una bodega de almacenamiento de vino donde se reunirá una banda de narcotraficantes Albaneses, las bodegas varían en sus tamaños: 5 a 10 m de largo, 4 a 6 m de ancho y 3 a 5 m de alto.

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 =>

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