martes, 1 de abril de 2025

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 

No hay comentarios.:

Publicar un comentario