Título: Horas, hora, minutos y minuto.
Publicado por: Meta en 26 Noviembre 2023, 13:48 pm
Buenas campeones: Quiero lograr de alguna forma posible cuando se me presenta el tiempo en horas y minutos en hacer las cosas bien desde el principio. Por ejemplo, introduzco el valor 80 en la consola. Que en realidad son 80 minutos y equivale a una hora y 20 minutos. Si aparece 2 minutos, que lo diga en plural, y si es un minuto que lo siga en singular, lo mismo para las horas, si dice 7 horas, que sea horassssss, con la s, y si es una hora, que ponga sin la s, es decir, hora, en singular. Si introduzco 80, me tiene que responder: > 1 hora y 20 minutos.Introduzco: 1 > 0 Horas y 1 minuto. Aquí solo debe aparecer esto: > 1 minuto, sin usar la palabra hora porque ya es cero horas. Introduzco: 61 > 1 hora y 1 minuto. Como se puede ver, hora y minuto en singular. Introduzco: 121 > 2 horas y 1 minuto. Si se fijan, la hora en horas con la s porque son más de una hora y un minuto sin s al final porque es solo un minuto. ¿Se entiende lo que quiero lograr? Me he machacado mucho la cabeza y no me sale como quiero. Uso el lenguaje C#. Código hecho hasta ahora gracias a los compañeros de este foro. using System; namespace Minutos_Horas_Consola_04 { internal class Program { static void Main(string[] args) { while (true) { int totalMinutos; Console.Write("Ingresa el valor de minutos: "); totalMinutos = int.Parse(Console.ReadLine()); // ¿Es igual a 1 minuto? if ((totalMinutos % 60) == 1) { Console.WriteLine("> " + totalMinutos / 60 + " hora y " + totalMinutos % 60 + " minuto.\n"); Console.WriteLine("Estoy en el IF 1."); Console.WriteLine("-------------------------"); } // ¿Es mayor a 60 segundos o 1 minuto? if ((totalMinutos % 60) > 1) { Console.WriteLine("> " + totalMinutos / 60 + " hora y " + totalMinutos % 60 + " minutos.\n"); Console.WriteLine("Estoy en el IF 2."); Console.WriteLine("-------------------------"); } // ¿Es igual a 60 segundos o 1 minuto? if ((totalMinutos % 60) == 0) { Console.WriteLine("> " + totalMinutos / 60 + " hora y " + totalMinutos % 60 + " minutos.\n"); Console.WriteLine("Estoy en el IF 3."); Console.WriteLine("-------------------------"); } } } } }
¿Se me escapa algo? Saludos.
Título: Re: Horas, hora, minutos y minuto.
Publicado por: EdePC en 26 Noviembre 2023, 19:44 pm
Quizá algo así: using System; public class Program { static void Main() { while (true) { Console.Write("Ingresa el valor de minutos: "); int totalMinutos = int.Parse(Console.ReadLine()); int h = totalMinutos / 60; int m = totalMinutos % 60; string hs = (h == 1) ? "hora" : "horas"; string ms = (m == 1) ? "minuto" : "minutos"; Console.WriteLine("> {0} {1} y {2} {3}", h, hs, m, ms); } } }
(https://i.ibb.co/9Y88Rfm/2023-11-26-133347.png) Hacer los cálculos antes en sus propias variables o hacerlas en el Console.WriteLine pero podría quedar muy largo. Usar el operador ternario para condiciones sencillas como las de determinar el poner horas/minutos o minuto/minutos Usar String formateada en el Console.Write para mejor legibilidad y menor tamaño Todo lo probé compilando con el viejo .Net2.0 y también con el .Net4.8 para descartar alguna incompatibilidad con esas instrucciones, como ves todo funciona bien
Título: Re: Horas, hora, minutos y minuto.
Publicado por: Meta en 26 Noviembre 2023, 20:30 pm
Muy buen código rápido. ;-) ;-) ;-) ;-) Hay una cosa que se te escapa. En vez de poner: > 0 horas y 1 minuto Debe solo aparecer esto: > 1 minuto. Ya que el 0 horas no pinta nada. Otra cosa que sea al revés como esto: > 1 Hora y 0 minutos. Así me da igual. O simplemente se pone a > 1 Hora. Todo parece perfecto menos la parte 0 horas. Por cierto, la forma nueva de mostrar en consola es esta. Console.WriteLine($"> {h} {hs} y {m} {ms}");
Tu código es elegante. ;D
Título: Re: Horas, hora, minutos y minuto.
Publicado por: Meta en 27 Noviembre 2023, 19:44 pm
Buenas de nuevo. Ahora si lo quiero el funcionamiento tal cual como debe ser. (https://i.postimg.cc/JndF88tZ/Horas-y-minutos.jpg) No digo que sea el mejor código pero funciona de maravilla. using System; namespace Minutos_Horas_Consola_04 { internal class Program { static void Main(string[] args) { #region Configuración ventana. // Título de la ventana. Console.Title = "De solo a Minutos a Horas y Minutos"; // Tamaño de la ventana, x, y, o ancho y alto. const byte ANCHO_X = 70, ALTO_Y = 25; Console.SetWindowSize(ANCHO_X, ALTO_Y); // Color de fondo. Console.BackgroundColor = ConsoleColor.Green; // Color de las letras. Console.ForegroundColor = ConsoleColor.Black; // Limpiar pantalla y dejarlo todo en color de fondo. Console.Clear(); // Visible el cursor. Console.CursorVisible = true; #endregion while (true) { int totalMinutos; Console.Write("Ingresa el valor de minutos: "); totalMinutos = int.Parse(Console.ReadLine()); // Cálculos. int horas = totalMinutos / 60; int minutos = totalMinutos % 60; // ¿0 horas y 1 minuto? if ((horas == 0) && (minutos == 1)) { Console.WriteLine($"> {minutos} minuto."); } // ¿0 horas y 0 minuto? if ((horas == 0) && (minutos == 0)) { Console.WriteLine($"> {minutos} minutos."); } // ¿0 horas y más de 1 minuto? if ((horas == 0) && (minutos > 1)) { Console.WriteLine($"> {minutos} minutos."); } // ¿1 hora y 0 minutos? if ((horas == 1) && (minutos == 0)) { Console.WriteLine($"> {horas} hora."); } // ¿Más de una hora y 0 minutos? if ((horas > 1) && (minutos == 0)) { Console.WriteLine($"> {horas} horas."); } // ¿1 hora y 1 minuto? if ((horas == 1) && (minutos == 1)) { Console.WriteLine($"> {horas} hora y {minutos} minuto."); } // ¿1 hora y más de 1 minuto? if ((horas == 1) && (minutos > 1)) { Console.WriteLine($"> {horas} hora y {minutos} minutos."); } // ¿Más de 1 hora y 1 minuto? if ((horas > 1) && (minutos == 1)) { Console.WriteLine($"> {horas} horas y {minutos} minuto."); } // ¿Más de 1 horas y más de 1 minuto? if ((horas > 1) && (minutos > 1)) { Console.WriteLine($"> {horas} horas y {minutos} minutos."); } } } } }
Son solo nueve combinaciones. Saludos.
Título: Re: Horas, hora, minutos y minuto.
Publicado por: EdePC en 27 Noviembre 2023, 23:47 pm
Podrías ir construyendo la String a imprimir poco a poco y al final imprimirla ya hecha para evitarse tantos Console.WriteLine, también veo que se pueden reducir tus IF, en especial los que muestran exactamente lo mismo, pero así como lo has hecho y comentado tiene la lógica y solo le faltaría reducirla evitando redundancia. Haciendo unos retoques al código que puse anteriormente puede quedar así: using System; public class Program { static void Main() { while (true) { Console.Write("Ingresa el valor de minutos: "); int totalMinutos = int.Parse(Console.ReadLine()); int h = totalMinutos / 60; int m = totalMinutos % 60; string hs = (h == 1) ? "hora" : "horas"; string ms = (m == 1) ? "minuto" : "minutos"; string ss = "> "; if (h != 0) ss+= h + " " + hs; if (h != 0 && m != 0) ss+= " y "; if (m != 0 || h == 0) ss+= m + " " + ms; Console.WriteLine(ss); } } }
(https://i.ibb.co/8sxsMqm/num.png)
Título: Re: Horas, hora, minutos y minuto.
Publicado por: Meta en 28 Noviembre 2023, 00:09 am
Eres un crack. ;-) ;-) ;-) ;-)
|