sábado, 10 de mayo de 2008

Ejercicios para aprender a programar -ejemplo 2: Reynolds

Otro ejemplo muy recurrente en la universidad son los problemas físicos y matemáticos, estos ofrecen un aprendizaje rápido sobre la precedencia de operadores y en algunos casos la comprensión de la lógica boleana. Debo mencionar que soy un asco en física, pero cuando uno se gana el pan con el oficio de programador se debe tener la capacidad de resolver problemas abstrayendo lo que necesite de la totalidad del problema

Objetivo:

Calcula el numero de Reynolds usando la formula (D*v*rho)/mu donde D = Diámetro, V= Velocidad, rho = Densidad mu = Viscosidad.

Escribe un programa que acepte todos los valores en unidades apropiadas sin preocuparse por conversión de unidades (ahora, si quieres…).

Si el numero es menor a 2100, Muestra “Flujo Laminar”, si está entre 2100 y 4000 muestra “Flujo Transicional” y si es mayor a 4000, muestra “Flujo Turbulento”.

Solución propuesta:

Fácil, sólo hay que seguir la fórmula mediante código.

Lo primero es hacer una pequeña clase que haga las veces de objeto de negocio de nuestro problema, es aquí donde se modela un escenario dado usando un diseño basado en objetos.

using System;
namespace Reynolds
{
    class Reynolds
    {
        //Las propiedades necesarias para calcular el número de Reynolds
        public float Diametro { get; set; }
        public float Velocidad { get; set; }
        public float Densidad { get; set; }
        public float Viscocidad { get; set; }
        //El solitario método que hace el trabajo
        public string MostrarResultado()
        {
            //Tan fácil como seguir la fórmula, hay que notar que la multiplicación está entre parentesis,
            //esto le indica al compilador que primero debe realizar las operaciones que esten dentro y el resultado
            //se dividirá entre la viscocidad
            float resultado = (Diametro * Velocidad * Densidad) / Viscocidad;
            if (resultado < 2100)
                return "Flujo Laminal";
            else if (resultado >= 2100 && resultado < 4000)
                return "Flujo Transicional";
            else if (resultado >= 4000)
                return "Flujo turbulento";
            else
                return "Error al calcular";
        }
    }

Y este sería el método main que sería quien solicitara los datos e invocaría el método de la clase "Reynolds" que hace la chamba.

using System;
namespace Reynolds
{
    class Program
    {

        static void Main(string[] args)
        {
            //Obtener todos los datos requeridos
            Reynolds reynolds = new Reynolds();
            Console.Write("Introduzca el valor del diamentro: ");
            reynolds.Diametro=float.Parse(Console.ReadLine());
            Console.WriteLine("Introduzca la velocidad: ");
            reynolds.Velocidad = float.Parse(Console.ReadLine());
            Console.WriteLine("Introduzca la densidad: ");
            reynolds.Densidad = float.Parse(Console.ReadLine());
            Console.WriteLine("Introduzca la viscocidad: ");
            reynolds.Viscocidad = float.Parse(Console.ReadLine());

            //Imprimir el resultado
            Console.WriteLine("Según los valores introducidos el tipo de flujo es " + reynolds.MostrarResultado());
        }
    }
}

Hasta la próxima!

Les dejo un pequeño reto.

Modifica el programa anterior para que pregunte si “desea calcular de nuevo? (s/n) con “si” para pedir nuevos parámetros y “no” para salir. Intenta prevenir errores como que el usuario entregase mu = 0 usando Manejo de Excepciones.

No hay comentarios.: