Ejercicios resueltos en C# : Control de alcoholemia


La Dirección General de Tráfico necesita un programa que, dado el tipo de vehículo que conduce un conductor, su índice de alcohol y si ha sido medido en sangre o en aire, determine si da positivo en el control de alcoholemia o no. La tasa máxima de alcohol tanto en sangre como en aire según el tipo de vehículo se resume en la siguiente tabla:

Vehiculo Indicador Tasa maxima en sangre Tasa maxima en aire
Camión C 0.3 0.15
Autobús A 0.3 0.15
Turismo T 0.5 0.25
Motocicleta M 0.3 0.15


Como realizar este ejercicio en C#?


1ro. Crear un formulario con dos textboxes, el que contendra el Tipo de vehiculo se llamara txttipovehiculo y que contendra el indice de alcohol txtindicealcohol asi como dos radio buttons llamados rbtsangrerbtaire.

2do. El botón "Determinar" hará el trabajo, por lo que este es el codigo que hará que el mismo funcione:


try
            {
                double indecealcohol;
                indecealcohol = Convert.ToDouble(txtindicealcohol.Text);

                if (txttipovehiculo.Text != "C" && txttipovehiculo.Text != "A" && txttipovehiculo.Text != "T" && txttipovehiculo.Text != "M")
                {

                    MessageBox.Show("Indicador no válido!");

                    txttipovehiculo.SelectionStart = 0; //Sombrear el texto
                    txttipovehiculo.SelectionLength = txttipovehiculo.Text.Length; //Sombrear el texto
                    txttipovehiculo.Focus(); 

                } 
                else
                {

                    if (txttipovehiculo.Text == "C")
                    {

                        if (rbtsangre.Checked)
                        {
                            if (indecealcohol >= 0.3)
                            {
                                lblresultado.Text = "Positivo".ToString();
                            }
                            else
                            {
                                lblresultado.Text = "Negativo".ToString();
                            }
                        }
                        else
                        {

                            if (rbtaire.Checked == true)
                            {
                                if (indecealcohol >= 0.15)
                                {
                                    lblresultado.Text = "Positivo".ToString();
                                }
                                else
                                {
                                    lblresultado.Text = "Negativo".ToString();
                                }

                            }
                        }
                    }
                    else
                    {

                        if (txttipovehiculo.Text == "A")
                        {

                            if (rbtsangre.Checked)
                            {
                                if (indecealcohol >= 0.3)
                                {
                                    lblresultado.Text = "Positivo".ToString();
                                }
                                else
                                {
                                    lblresultado.Text = "Negativo".ToString();
                                }
                            }
                            else
                            {
                                if (rbtaire.Checked)
                                {
                                    if (indecealcohol >= 0.15)
                                    {
                                        lblresultado.Text = "Positivo".ToString();
                                    }
                                    else
                                    {
                                        lblresultado.Text = "Negativo".ToString();
                                    }

                                }
                            }

                        }
                        else
                        {
                            if (txttipovehiculo.Text == "T")
                            {

                                if (rbtsangre.Checked)
                                {
                                    if (indecealcohol >= 0.5)
                                    {
                                        lblresultado.Text = "Positivo".ToString();
                                    }
                                    else
                                    {
                                        lblresultado.Text = "Negativo".ToString();
                                    }
                                }
                                else
                                {
                                    if (rbtaire.Checked)
                                    {
                                        if (indecealcohol >= 0.25)
                                        {
                                            lblresultado.Text = "Positivo".ToString();
                                        }
                                        else
                                        {
                                            lblresultado.Text = "Negativo".ToString();
                                        }

                                    }
                                }

                            }
                            else
                            {
                                if (txttipovehiculo.Text == "M")
                                {

                                    if (rbtsangre.Checked)
                                    {
                                        if (indecealcohol >= 0.3)
                                        {
                                            lblresultado.Text = "Positivo".ToString();
                                        }
                                        else
                                        {
                                            lblresultado.Text = "Negativo".ToString();
                                        }
                                    }
                                    else
                                    {
                                        if (rbtaire.Checked)
                                        {
                                            if (indecealcohol >= 0.15)
                                            {
                                                lblresultado.Text = "Positivo".ToString();
                                            }
                                            else
                                            {
                                                lblresultado.Text = "Negativo".ToString();
                                            }

                                        }
                                    }
                                }
                            }
                        }
                    }
                }
                

            }
            catch (Exception msg)
            {

                MessageBox.Show(msg.Message);
            }


3ro. Adicionalmente el botón "Limpiar":

            txtindicealcohol.Clear();
            txttipovehiculo.Clear();
            lblresultado.Text = "";
            txttipovehiculo.Focus();


y el botón "Salir":

Close();

Ejercicios resueltos en C#: Precio de pasaje de ferrocarril

"Determinar el precio de un pasaje de ida y vuelta en ferrocarril, conociendo la distancia a recorrer y el número de días de estancia en el destino. Si este es mayor que 7 y la distancia superior a 800km, el pasaje tiene una reducción del 30%. El precio por km es $0.80."

Como realizar este ejercicio en C#?

1ro. Crear un formulario con tres textboxes, el que contendra La distancia recorrer se llamara txtdistancia, el de los dias de estancia txtdiasestancia y el que contendra lel precio del pasaje txtprecio_pasaje.

2do. El botón "Calcular" hará el trabajo, por lo que este es el codigo que hará que el mismo funcione:

    try
            {
                double distancia, dias_estancia, precioxkm, precio_pasaje;

                distancia = Convert.ToInt16(txtdistancia.Text);
                dias_estancia = Convert.ToInt16(txtdiasestancia.Text);
                precioxkm = 0.80;
                if (dias_estancia > 7 && distancia > 800)
                {
                    precio_pasaje = precioxkm * distancia - (precioxkm * distancia * 0.30);
                    txtprecio_pasaje.Text = "$" + precio_pasaje.ToString();
                }
                else
                {
                    precio_pasaje = precioxkm * distancia;
                    txtprecio_pasaje.Text = "$" + precio_pasaje.ToString();
                }

            }
            catch (Exception msg)
            {

                MessageBox.Show(msg.Message);
            }


          

3ro. Adicionalmente el botón "Limpiar":


            txtdiasestancia.Clear();
            txtdistancia.Clear();
            txtprecio_pasaje.Clear();

          

C#: Convertir de decimal a binario

El siguiente programa va a convertir un numero decimal (base 10) en su representacion binaria (base 2).

Para ello necesitamos crear un form con:
2 textbox llamados txt_entrada y txt_salida
1 button llamado btn_calcular

En el botón btn_calcular digitar el siguiente codigo:


             
                int dec, bin;
                string sal = "";
                dec = Convert.ToInt16(txt_entrada.Text);
   

                while (dec > 0)
                {

                    bin = dec % 2;
                    dec = dec / 2;
                    Convert.ToString(bin);
                    sal = bin + sal;
                    txt_salida.Text = Convert.ToString(sal);

                }

                txt_entrada.Focus();



Explicacion del código:

int dec, bin: Declaramos las variables dec y bin tipo entero.

string sal = "": Declaramos la variable sal tipo cadena igualada a 'nada'.

dec = Convert.ToInt16(txt_entrada.Text): Asignamos a la variable dec el valor del textbox txt_entrada al mismo tiempo convertimos el textbox en entero.

while (dec > 0): Mientras la variable dec sea mayor que 0 entonces ...

bin = dec % 2: La variable bin sera igual al valor de la variable dec % 2. (% es la representacion del MOD en C#). El mod se utiliza para obtener el residuo de una division. La division sera entre el numero que le indiquemos al lado, en este caso el numero 2, por ser 2 la base de los numeros binarios.

dec = dec / 2: Luego de obtener el primer residuo la variable dec tendra el valor de ella misma entre 2.

Convert.ToString(bin): convertimos la variable "bin" en tipo string para poder proceder con la conatenacion.

sal = bin + sal: La variable "sal" sera igual al valor de la variable bin (que contiene el residuo de la division) concatenada con la misma variabe "sal" para ir acumulando el valor de los demas residuos que se generen mientras se ejecuta el WHILE.

txt_salida.Text = Convert.ToString(sal): Finalmente se asigna a el textbox txt_salida el valor de "sal".

Ejercicios resueltos en C# : Categoría de un empleado

1. En una empresa cada empleado debe teclear un código identificador de 3 cifras en la entrada. Escribir un algoritmo que muestre por pantalla la categoría del empleado teniendo en cuenta que:
• Si el código es divisible por 2, por 3 y por 5, la categoría del empleado es “Director general”.
• Si el código es divisible por 3 y por 5 pero no por 2, la categoría del empleado es “Directivo”.
• Si el código es divisible por 2, pero no por 3 ni por 5, la categoría del empleado es “Staff”.
• Si el código no es divisible por 2, ni por 3 ni por 5, la categoría del empleado es “Seguridad”.


Como realizar este ejercicio en C#?


1ro. Crear un formulario con dos textboxes, el que contendra el Codigo identificador se llamara txtcodide y que contendra la categoria del empleado txtcatemp.

2do. El botón "Generar" hará el trabajo, por lo que este es el codigo que hará que el mismo funcione:


  if (txtcodide.TextLength < 3)
                {
                    MessageBox.Show("El codigo no debe contener menos de 3 caracteres");
                    txtcodide.Clear();
                    txtcodide.Focus();
                }
                else
                {

                    int ci;

                    ci = Convert.ToInt16(txtcodide.Text);

                    if (ci % 2 == 0 && ci % 3 == 0 && ci % 5 == 0)
                    {

                        txtcatemp.Text = "Director General";

                    }
                    else
                    {

                        if (ci % 3 == 0 && ci % 5 == 0 && ci % 2 != 0)
                        {

                            txtcatemp.Text = "Directivo";

                        }
                        else
                        {

                            if (ci % 2 == 0 && ci % 3 != 0 && ci % 5 != 0)
                            {

                                txtcatemp.Text = "Staff";

                            }
                            else
                            {

                                if (ci % 2 != 0 && ci % 3 != 0 && ci % 5 != 0)
                                {

                                    txtcatemp.Text = "Seguridad";

                                }
                             }
                        }
                   }
             }




3ro. Adicionalmente el botón "Limpiar":

txtcodide.Clear();
txtcatemp.Clear();
txtcodide.Focus();




y el botón "Salir":

Close();


Explicación del código


if (txtcodide.TextLength < 3): Pregunta si la longitud del texto del codigo identificador es menor que 3.


MessageBox.Show("El codigo no debe contener menos de 3 caracteres"): Muestra un mensaje en la pantalla.

txtcodide.Clear(): Limpia el contenido del referido textbox.

txtcodide.Focus(): Lleva el cursor al textbox referido.



int ci: Declara una variable tipo entero.

ci = Convert.ToInt16(txtcodide.Text): la variable que declaramos tomara el valor de el txtcodide, al mismo tiempo que se convierte ese textbox en tipo entero.


if (ci % 2 == 0 && ci % 3 == 0 && ci % 5 == 0) { txtcatemp.Text = "Director General"; }: Pregunta que si la variable ci al dividirla entre 2 es igual a 0 y si la variable ci dividida entre 3 es igual a cero y el mismo proceso entre 5 es igual a 0 entonces el textbox que mostrara la categoria del empleado sera igual a Director General en este caso. Asi consecutivamente el mismo proceso para saber las demas categorias.


Nota: El caracter "%" representa el mod en C Sharp. El mod devuelve el residuo de una division.






C Sharp: Factorial de un número

El siguiente programa calculará el factorial de un número al pulsar la tecla Enter. Para crear el mismo se necesitarán dos textbox, con sus nombres por defecto textbox1 y textbox2.

Para que funcione cuando se presione la tecla Enter, es necesario escribir el código en el evento Keydown (del textbox1) al cual se puede acceder desde Propiedades > Eventos. (El botón eventos tiene la forma de un rayo).

 Luego de dar doble click en el evento aparecerá el siguiente código:

private void textBox1_KeyDown(object sender, KeyEventArgs e)
        { 

         }











Dentro del mismo escribimos lo siguiente:

  if (e.KeyCode == Keys.Enter)
            {
                    if (textBox1.Text.Trim() == "")
                {
                    textBox2.Text = "";
                    MessageBox.Show("Debe digitar un numero");

                }
                else
                {
                    int n = int.Parse(textBox1.Text);

                    int x = 1;
                    for (int i = x; i <= n; i++)
                    {
                        x = x * i;
                        textBox2.Text = i + "! = " + x.ToString();
                    }

                }
            }


Explicación del código:

-if (e.KeyCode == Keys.Enter): Pregunta si la tecla que se ha pulsado es la tecla Enter.
-if (textBox1.Text.Trim() == "")
                {
                    textBox2.Text = "";
                    MessageBox.Show("Debe digitar un numero");

                }: Se utiliza para validar el textbox1, preguntado si esta vacio, entonces muestra un mensaje.

-int n = int.Parse(textBox1.Text): Se le asigna a la variable n el valor del textbox1, convirtiendo el valor de este en entero.
-int x = 1: Se declara la variable que almacenara el valor entero 1.

-for (int i = x; i <= n; i++): Ciclo For, que dice:

int i = x: La variable i sera igual a la variable x.
i <= n: mientras i sea menor o igual que n (el valor del textbox1).
i++: entonces se incrementara la variable i.

Mientras se de el caso de arriba entonces:

-x = x * i: Se asigna a la variable x el resultado de la multiplicación de x por i;
-textBox2.Text = n + "! = " + x.ToString(): Finalmente el valor del textbox2 sera igual a el valor de la variable x que almacena el resultado final. Se concatena la variable n que almacena el valor digitado en el textbox1 con la cadena !, que se utiliza para representar el factorial, el símbolo de igual y la variable x. El símbolo + se utiliza para la concatenación, los caracteres deben ir entre comillas. Se debe especificar al final la función ToString() para convertir los valores a presentar en el textbox en cadenas. 


DESCARGAR el Ejemplo