none
Duda de programa RRS feed

  • Question

  • 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.

    Sunday, April 5, 2020 5:50 PM

All replies

  • 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

    Sunday, April 5, 2020 7:32 PM
  • 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]);



    • Edited by Marti Llam Sunday, April 5, 2020 8:32 PM
    • Proposed as answer by Tigre Pablito Sunday, April 5, 2020 10:23 PM
    Sunday, April 5, 2020 8:26 PM
  • Muy bueno, Marti! Me superaste ... Yo como un boludo poniendo el if dentro del for cuando ni hacía falta.
    Sunday, April 5, 2020 10:25 PM
  • 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


    Monday, April 6, 2020 3:01 AM
  • Muy bueno, Leandro! Nos superaste a todos. El que más sabe de programación de todos los pibes!
    Monday, April 6, 2020 3:40 AM
  • 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

    Monday, April 6, 2020 11:33 AM
  • 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. 

    Monday, April 6, 2020 4:53 PM
    Moderator