Autor
|
Tema: Horas, hora, minutos y minuto. (Leído 3,478 veces)
|
Meta
|
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.
|
|
|
En línea
|
|
|
|
EdePC
|
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); } } }
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
|
|
|
En línea
|
|
|
|
Meta
|
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.
|
|
« Última modificación: 26 Noviembre 2023, 20:33 pm por Meta »
|
En línea
|
|
|
|
Meta
|
Buenas de nuevo. Ahora si lo quiero el funcionamiento tal cual como debe ser. 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.
|
|
|
En línea
|
|
|
|
EdePC
|
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); } } }
|
|
« Última modificación: 27 Noviembre 2023, 23:52 pm por EdePC »
|
En línea
|
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Ayuda convertir minutos a horas y minutos !
Java
|
xbyxrorroh
|
5
|
13,037
|
27 Junio 2013, 01:53 am
por Debci
|
|
|
Poner timer en horas o minutos?
Programación Visual Basic
|
TheJucas21
|
1
|
2,106
|
28 Julio 2014, 03:55 am
por MCKSys Argentina
|
|
|
Como Registrar hora y minuto
Java
|
soy_nicanor
|
1
|
1,613
|
28 Abril 2015, 05:47 am
por nolasco281
|
|
|
calcular horas + minutos en c
Programación C/C++
|
martha71404
|
0
|
2,901
|
24 Octubre 2015, 01:29 am
por martha71404
|
|
|
Minutos y minuto
.NET (C#, VB.NET, ASP)
|
Meta
|
6
|
6,787
|
28 Noviembre 2023, 21:19 pm
por Meta
|
|