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.

miércoles, 2 de abril de 2025

01.- Programación II - Parcial Nro. 1 - Semestre 2025-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 mt=> Vol = 2XY 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 + 3Y + [X+2X/2] + [X+2X/2] + Y) mt=>

M = (XY + 4Y + 2X + 2X) mt2 =>

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

 

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

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

En consecuencia, el volumen correspondería a:

Vol = 2Y (M-4Y) / (Y+4) mt3

La ecuación también la podemos expresar como

Vol =(2MY – 8Y2) / (Y+4) 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 =>

[(2M – 16Y) (Y+4) – (2MY –8Y2)] / (Y+4)= 0

 

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

 

2MY + 8M – 16Y2 – 64Y – 2MY + 8Y2 = 0 =>

-8Y– 64Y + 8M = 0 => -8 (Y2+8Y-M) = 0 =>

El -8 pasa al otro lado dividiendo y la ecuación nos queda:

 

Y2+8Y-M = 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+4) mt

Y obtenemos X,

 

Ahora procedemos a elaborar el programa.


/* 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 2025-II)


Elaborado por Carlos Ferrer

fecha: 2 de Abril de 2025

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=(-8+sqrt(pow(8,2)-4*(-M)))/2;

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

litros=2*X*Y*1000;


//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 "<<2*X*Y<<" 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





martes, 1 de abril de 2025

01.- Programación II - Parcial Nro1 - Cálculo de dimensiones del material para construir un drenaje de Máximo volumen de aguas residuales - SOLUCIÓN DEL PROFESOR

Usted trabaja para la empresa constructora Paola González C.A. que recibió un contrato para la elaboración de un canal de recolección de aguas residuales al borde de la autopista regional del centro. (Ver gráfica).




Para soportar el vaciado del concreto se deben colocar cabillas en forma de trapecio, en consecuencia, se debe doblar la cabilla de manera de darle la forma requerida:


Se requiere doblar las cabillas en tres partes iguales como indica la figura:




El ministerio del ambiente establece que un drenaje de 100 metros de largo debe ser capaz de manejar como mínimo: 

 130 mts3 de aguas residuales

El dueño de la constructora quiere comprar cabillas cortadas con la longitud exacta para soportar este volumen de aguas residuales.

 Considere que el volumen del drenaje es:



1.- El único dato de entrada es la capacidad de volumen a manejar por cada 100 mts de longitud en un rango desde 130 a 200 mts3. Elabore un programa que determine: (15 Puntos)

  • El Angulo θ con el cual se obtiene la máxima área del trapecio que caracteriza a estos canales. 
  • A partir del Angulo θ establezca la longitud exacta de cada cabilla (X mts) de forma que el canal de drenaje esté en capacidad de manejar el volumen ingresado (de 130 a 200 mts3) de aguas residuales por cada 100 metros de longitud. 

2.- Es posible elaborar el programa sin el análisis matemático? ¿En caso de que su respuesta sea positiva explique cómo lo haría? (5 Puntos)

Dato: Para un volumen de 150 mts3 programa correcto debería reportar una cabilla de 3.22371 mts y el ángulo θ corresponde a 1.04719 Rad o 60 deg 




Solución


Programas

Programa Nro 1 
(Determinar el ángulo donde el área se hace Máxima)

// Programa elaborado por el Profesor Carlos Ferrer
// Universidad Santa María
// Programación II
// Solución Nro1 Parcial 1 2021-I
// Rutina para determinar el ángulo donde el área del trapecio se hace máxima
// elaborado 11-Nov-2020

#include <iostream>
#include <math.h>

using namespace std;

main() 

{

double area=0; //area del trapecio
double x; // representa la longitud de la cabilla
double Q; // angulo Q donde el area se hace maxima
double aux1=0,aux2=0;


x=10000; //valor inicial de la cabilla (si lo varias el ángulo debe ser el mismo)
Q=0.1; //Valor inicial de ángulo


// calculamos las áreas variando el ángulo ente 0.1 y 90
// registramos en aux2 el ángulo donde el área se hace máxima
while (Q<=90)
{
area = pow(x,2)*(sin(Q*M_PI/180)+sin(Q*M_PI/180)*cos(Q*M_PI/180))/9;

if (area>aux1)
{
aux1=area;
aux2=Q;
}

Q=Q+0.1;
}

// presentamos el valor del ángulo

cout <<endl<<endl<<"El angulo donde el area se hace maxima es = "<<aux2<<" grados"<<endl<<endl;
system("pause");
}


Programa Nro 2 
(Determina la longitud de la cabilla conociendo el volumen y ángulo=60)

// Programa elaborado por el Profesor Carlos Ferrer
// Universidad Santa Maria
// Programación II
// Solución Nro1 Pracial 1 2021-1
// Determinación de la longitud de la cabilla a partir de un Volumen conocido
// y del angulo de 60 grados determinado previamente


#include <iostream>
#include <math.h>

using namespace std;

main() 

{
double area=0; //area del trapecio
double x; // representa la longitud de la cabilla
double Q; // angulo Q donde el area se hace maxima
double vol; // volumen requerido del drenaje para 100 mts

cout <<"ingrese el volumen del drenaje (mts3) = ";
cin >>vol;

// vol= area*100

// Calculamos la longitud de la cabilla

x= sqrt(vol*9/(100*(sin(60*M_PI/180)+sin(60*M_PI/180)*cos(60*M_PI/180) )));

// Presentamos los resultados

cout <<endl<<endl<<"La longitud de la cabilla = "<<x<<" mts"<<endl<<endl;
system("pause");


}

01.- Programación II - Programa para hallar el recipiente de volumen específico con MÍNIMO material Nro 2 - (2024 - I) - SOLUCIÓN

 Usted trabaja para una empresa que construye tanques.


Una importante distribuidora de Diésel construirá una nueva planta en la zona de Maracay y le indicó que requerirá en principio tanques de: 5, 8 ,10 y 12 metros cúbicos (Primera Fase). Al cliente no le importa la forma del tanque.

El proyecto en su segunda fase requerirá tanques de capacidades distintas a los de lo de la primera fase (Por definir).

Usted desea suministrar los tanques, pero usando la menor superficie de material posible para ahorrar costos.

El jefe de departamento de ingeniería para la cual usted trabaja considera que la mejor opción es construir tanques cilíndricos de la forma similar a la figura siguiente (tipo salchicha):


El dueño de la empresa para la cual usted trabaja no esta seguro de que un tanque en forma de salchicha sea la opción que le permita gastar menos material. En consecuencia, dado que usted es ingeniero, él lo seleccionó para que elabore un programa que determine el radio y el largo del tanque a construir de manera de parametrizar la máquina moldeadora y así obtener los tanques con la menor superficie posible.

Determine:
(Los 10 primeros estudiantes que me envíen a CJFERRER14@HOTMAIL.COM lo indicado abajo antes de mañana a las 12m serán calificados positivamente)
a.- La solución matemática del problema,
b.- Elabore el programa correcto asociado
c.- Indique según los resultados cual es la forma final del tanque.

Solución Matemática


        Evaluemos si es un Mínimo o un Máximo usando un volumen de 12 metros cúbicos

 

Para un tanque de 12 Mts3 de volumen, el Radio corresponde a 1.420248085 mts. y el Largo a 0 mts. Estas  medidas  corresponden al volumen requerido de 12 Mts3 con un consumo de material (superficie) MÍNIMO.

Si usted elabora la tabla para un volumen de 5 Mts3 los valores serán:
Radio= 1.06078441794706 mts y Largo=0 mts. como habíamos estimado en el desarrollo previo.


Programa


/* programa se utiliza para determinar el radio y el largo
de un tanque esférico (Salchicha o esfera).

este programa es elaborado por Carlos Ferrer
Fecha 20 de Octubre 2023*/

#include<iostream>
#include<math.h>
#include<locale.h>
using namespace std;
double volumen=0,radio=0,largo=0,material=0;

// El volumen del tanque es un dato fijo y suministrado por el usuario

/* según el análisis matemático con un largo=0 mts se obtiene el volumen requerido
con el mínimo material (superficie). 
En consecuencia el problema se reduce a calcular el radio y presentar la cantidad de 
material a emplear*/


main()
{
setlocale(LC_ALL,"spanish");
cout <<"Favor ingrese el volumen del tanque (mts3)= ";
cin >>volumen;

radio= cbrt(3*volumen/(M_PI/4)); // Calculamos el radio aplicando raíz cubica
material = 4*M_PI*pow(radio,2)+2*M_PI*radio*largo;

//Presentamos los resultados

cout <<endl<<endl<<"El radio donde se obtiene un tanque de volumen= "<<volumen<<" mt3 con el mínimo material corresponde a ="<<radio<<" mts";
cout <<endl<<"El largo para obtener ese tanque es de = "<<largo<<" mts";
cout <<endl<<"La cantidad de material requerido (mínimo) corresponde a ="<<material<<" mts2";
cout <<endl<<endl<<"LA FORMA DEL TANQUE CORRESPONDE A UNA ESFERA!!! ESTA FORMA GARANTIZA EL MINIMO DE MATERIAL!!"<<endl<<endl;

system("pause");
}



El PROFESOR SOLICITÓ EN LA CLASE DE AYER UN PROGRAMA ALTERNO QUE PERMITA OBTENER LOS MISMOS RESULTADOS SIN APLICAR LAS ECUACIONES ARROJADAS POR LA TECNICA DE OPTIMIZACIÓN (LA DERIVACIÓN). 

Versión del Profesor

 /* programa se utiliza para determinar el radio y el largo
de un tanque esférico (Salchicha o esfera).

este programa es elaborado por Carlos Ferrer
Fecha 21 de Sep 2023*/

#include<iostream>
#include<math.h>
#include<locale.h>
using namespace std;
double volumen=0,radio=0,largo=0,material=0,mat_anterior;

// El volumen del tanque es un dato fijo y suministrado por el usuario

/* según el análisis matemático con un largo=0 mts se obtiene el volumen requerido
con el mínimo material (superficie). 
En consecuencia el problema se reduce a calcular el radio y presentar la cantidad de 
material a emplear*/


main()
{
setlocale(LC_ALL,"spanish");
cout <<"Favor ingrese el volumen del tanque (mts3)= ";
cin >>volumen;

radio=0.01;
material=4*M_PI*pow(radio,2)/3+2*volumen/radio;
mat_anterior=material;
while (mat_anterior>=material)
{
mat_anterior=material;
radio=radio+0.0000001;
material=4*M_PI*pow(radio,2)/3+2*volumen/radio;
}

//Presentamos los resultados

cout <<endl<<endl<<"El radio donde se obtiene un tanque de volumen= "<<volumen<<" mt3 con el mínimo material corresponde a ="<<radio<<" mts";
cout <<endl<<"El largo para obtener obtener ese tanque es de = "<<largo<<" mts";
cout <<endl<<"La cantidad de material requerido (mínimo) corresponde a ="<<material<<" mts2";
cout <<endl<<endl<<"LA FORMA DEL TANQUE CORRESPONDE A UNA ESFERA!!! ESTA FORMA GARANTIZA EL MINIMO DE MATERIAL!!"<<endl<<endl;

system("pause");
}

Versión de los estudiantes Gustavo Alviarez y Cristian Hernández

/*
Este programa calcula los valores del radio y longitud para gastar la menor cantidad de material en la construcción de un tanque en forma de salchicha dado un determinado volumen que debe almacenar.
El radio es mostrado con precisión de 3 decimales, Último decimal sin redondear.

Autores: 
    Cristian Hernández 28481734, 
    Gustavo Alviarez 28484121
Fecha: 20/09/23
Rev: 0
*/

#include <iostream>
#include <cmath>
using namespace std;

double calcCylinderLenght(double volumen_tank, double sphere_radius) {
    return (volumen_tank) / (M_PI * sphere_radius * sphere_radius) - (4.0/3.0) * (sphere_radius);
}

double calcUsedMaterial(double cylinder_lenght, double sphere_radius) {
        return (2.0 * M_PI * sphere_radius * cylinder_lenght) + (4.0 * M_PI * sphere_radius * sphere_radius);
}

int main () {
    double sphere_radius = 0.001;
    double cylinder_lenght = 0.0;
    double volumen_tank = 0.0;
    double used_material = 0.0;
    bool optimizing_proccess = true; 
    
    cout << "El volumen del tanque sera de: ";
    cin >> volumen_tank;
    
    // initial state
    cylinder_lenght = calcCylinderLenght(volumen_tank, sphere_radius);
    used_material = calcUsedMaterial(cylinder_lenght, sphere_radius);
    
    
    while(optimizing_proccess) {   
        double new_sphere_radius = sphere_radius + 0.001;
        double new_cylinder_lenght = calcCylinderLenght(volumen_tank, new_sphere_radius); 
        double new_used_material = calcUsedMaterial(new_cylinder_lenght, new_sphere_radius);
        
        if(new_used_material < used_material) {
            sphere_radius = new_sphere_radius;
            cylinder_lenght = new_cylinder_lenght;
            used_material = new_used_material;
        }
        else {
            optimizing_proccess = false;
        }
    }
    
    cout << "Radio: " << sphere_radius << "\n";
    cout << "Longitud: " << cylinder_lenght << "\n";
    cout << "Material Usado: " << used_material << "\n";
    
    return 0;
}



Éxito