none
Duda de programa RRS feed

  • Pregunta

  • Buenas he realizado un ejercicio  con arrays escribir un mes y decir cuantos dias tiene, soy amateur total, no trabajo de esto y es una aficción como puede ser leer (es puro interes por programar) con el fin de programar videojuegos en Unity.

    Una vez dicho esto procedo a escribir el código:

    using System;

    public class Ej_4_1_2_1
    {
    public static void Main()
    {
    int[] dias = {31,28,30,31,30,31,30,31,30,31,30,31};
    int mes;

    Console.Write(" Escribe el mes del año del que quieres saber los dias (1=enero 12=Diciembre):  ");
    mes = Convert.ToInt32(Console.ReadLine());

    if (mes == 1)
    Console.WriteLine(dias[0]);
    if (mes == 2)
    Console.WriteLine(dias[1]);
    if (mes == 3)
    Console.WriteLine(dias[2]);
    if (mes == 4)
    Console.WriteLine(dias[3]);
    if (mes == 5)
    Console.WriteLine(dias[4]);
    if (mes == 6)
    Console.WriteLine(dias[5]);
    if (mes == 7)
    Console.WriteLine(dias[6]);
    if (mes == 8)
    Console.WriteLine(dias[7]);
    if (mes == 9)
    Console.WriteLine(dias[8]);
    if (mes == 10)
    Console.WriteLine(dias[9]);
    if (mes == 11)
    Console.WriteLine(dias[10]);
    if (mes == 12)
    Console.WriteLine(dias[11]);

    }
    }

    Me gustaría saber si hay una forma sencilla de mejorar este codigo. Me parece harto tedioso.

    Con todo un saludo. Muchas gracias.

    domingo, 5 de abril de 2020 17:50

Todas las respuestas

  • Hola Wcrich

    En lugar de escribir todos los if, podes escribir lo siguiente

    int a;
    for (a = 1; a <= 12; a++)
        if (mes == a)
        {
            Console.WriteLine(dias[a - 1]);
            break;
        }

    y los dias es

    int[] dias = new int[] { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

    Estaba mal tu declaración y algunos números

    Saludos

    Pablo

    domingo, 5 de abril de 2020 19:32
  • Hola

    no ocupas if

    porque al capturar el mes es un entero de 1 a 12

    tu array dias tiene 12 plasas de  0 a 11

    si alguin escoje Julio osea 7

    el valor lo tienes en tu array en el numero 6

    por consiguinte solo se le resta uno al mes y lo imprimes en pantalla

    intenta con esto

    int[] dias = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    int mes;
    
    Console.Write(" Escribe el mes del año del que quieres saber los dias (1=enero 12=Diciembre):  ");
    mes = Convert.ToInt32(Console.ReadLine());
    Console.WriteLine(dias[mes-1]);



    • Editado Marti Llam domingo, 5 de abril de 2020 20:32
    • Propuesto como respuesta Tigre Pablito domingo, 5 de abril de 2020 22:23
    domingo, 5 de abril de 2020 20:26
  • Muy bueno, Marti! Me superaste ... Yo como un boludo poniendo el if dentro del for cuando ni hacía falta.
    domingo, 5 de abril de 2020 22:25
  • hola

    Pero no se necesita nada de todos eso ya que DateTime tiene la funcionalidad

    DateTime.DaysInMonth(Int32, Int32) Method

    tienes que conocer el año para saber cuantos dias tendra el mes

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    lunes, 6 de abril de 2020 3:01
  • Muy bueno, Leandro! Nos superaste a todos. El que más sabe de programación de todos los pibes!
    lunes, 6 de abril de 2020 3:40
  • Buenos días,

    Creo que la mejor solución para lo que planteas es la de Marti Llam y luego la de Leandro Tuttini, pero creo que tú pregunta va dirigida no ha resolver el problema, si no a conocer otras formas, creo que sin ser lo óptimo se podría usar operadores lógicos en los if , que en c# son || para O y && para Y. Por ejemplo

    int[] dias = { 31, 30, 28 };
                int mes;
                Console.Clear();
                    Console.Write(" Escribe el mes del año del que quieres saber los días (1=enero 12=Diciembre):  ");
                    mes = Convert.ToInt32(Console.ReadLine());
                    // Meses con 31 días
                    if (mes == 1 || mes == 3 || mes == 5 || mes == 7 || mes == 8 || mes == 10 || mes == 12)
                    {
                        Console.WriteLine(dias[0]);
                    }
                    // Meses con 30 días
                    else if (mes == 4 || mes == 6 || mes == 9 || mes == 11)
                    {
                        Console.WriteLine(dias[1]);
                    }
                    // Resto de meses, vamos Febrero
                    else
                    {
                        Console.WriteLine(dias[2]);
                    }


    otra forma seria usar switch por ejemplo.

    int[] dias = { 31, 30, 28 };
                int mes;
                Console.Clear();
                    Console.Write(" Escribe el mes del año del que quieres saber los días (1=enero 12=Diciembre):  ");
                    mes = Convert.ToInt32(Console.ReadLine());
                    switch(mes)
                    {
                        // Meses con 31 días
                        case 1: case 3: case 5: case 7:case 8: case 10: case 12:
                            Console.WriteLine(dias[0]);
                            break;
                        // Meses con 30 días
                        case 4: case 6: case 9: case 11:
                            Console.WriteLine(dias[1]);
                            break;
                        // Resto de meses, vamos Febrero
                        default:
                            Console.WriteLine(dias[2]);
                            break;
                    }

    Otra solución podría ser crearte una clase mes, si quieres que te explique como dimelo, hoy no tengo tiempo.

    Un saludo.



    Es de buena educación dar las gracias cuando te ayudan, si alguna respuesta te ha sido de utilidad agradécelo marcándola como útil.
    Blog

    lunes, 6 de abril de 2020 11:33
  • Hola , 

      

    ¿Alguna novedad sobre la consulta realizada? ¿Han sido útiles las  respuestas proporcionadas?  

     

    Espero su respuesta. 

      

    Cualquier duda referente a productos Microsoft, puedes consultarnos. Es un gusto informarte. 

    Gracias por usar los foros de MSDN. 

      

    Oscar Navarro

      

     ____ 

      

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.   

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.    

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft. 

    lunes, 6 de abril de 2020 16:53
    Moderador