Java - Realizar un programa donde solicite la fecha cualquiera, solicitándola por partes

 
Vista:

Realizar un programa donde solicite la fecha cualquiera, solicitándola por partes

Publicado por Joaquin (4 intervenciones) el 18/03/2021 02:35:08
Hola gente, mi maestra de programación en Java nos pidió esto:/*Realizar un programa donde solicite la fecha cualquiera, solicitándola por partes
* es decir día, mes y año. Y haciendo uso de la sentencia condicional
* if se deberá imprimir en pantalla los días transcurridos acorde a la
* fecha introducida por el usuario. E/P. 17 03 2021. El programa deberá
* hacer el calculo para imprimir que los días transcurridos son: 76 días transcurridos
* NOTA. Considerar el año cuando es bisiesto.*/

El tema es que no se muy bien que hacer, ya que acabamos de empezar a programar y nos pone algo así de bestia, algún consejo o una sugerencia de como pueda hacerle???
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Realizar un programa donde solicite la fecha cualquiera, solicitándola por partes

Publicado por Kabuto (1381 intervenciones) el 18/03/2021 11:54:36
Hola.

Es más fácil de lo que parece.

Una vez tienes los tres datos que hay que pedir por teclado, tienes que ir preguntando que mes te ha dado y así decidir cuantos días hay que calcular.

1
2
3
4
5
6
7
if (mes == 1)
    //Calcular cuando es Enero
else if (mes == 2)
    //Calcular cuando es Febrero
else if (mes == 3)
    //Calcular cuando es Marzo
etc...

Por ejemplo, si te dan:
dia = 13
mes = 01
año = 2021

Eso significa que estamos en Enero. ¿Cuántos días habrán transcurrido?
Pues solo lo que marque la variable dia, es decir, 13 días transcurridos

Si te dan:
dia = 13
mes = 02
año = 2021

Estaríamos en Febrero, ¿cuándos días han transcurrido?
Pues los 31 días de Enero + lo que indique la variable dia.
Es decir:
31 + dia = 44 dias transcurridos

Si te dan:
dia = 13
mes = 03
año = 2021

Estamos en Marzo, habrá que sumar los 31 dias de Enero, más los de Febrero, más el valor de dia.
Pero aquí hay un problema, los días de Febrero pueden variar entre 28 y 29, según si es bisiesto o no el año.
Hay que tenerlo en cuenta. De hecho, habrá que tener en cuenta el valor de Febrero también para los siguientes meses.

Así que para no estar calculando continuamente si es bisiesto o no, lo mejor es declarar previamente una variable llamada febrero y decidir su valor antes de empezar a comprobar en que mes estamos:

1
2
3
4
5
int febrero;
		if ((anio % 4 == 0) && ((anio % 100 != 0) || (anio % 400 == 0)))
			febrero = 29; //Es bisiesto
		else
			febrero = 28; //No es bisiesto

De este modo, para comprobar los dias transcurridos para Marzo:
dia = 13
mes = 03
año = 2021

Sumamos los 31 de Enero, más lo que valga Febrero, más el valor de dia
31 + febrero + dia = 72 dias transcurridos.

Si es Abril:
dia = 13
mes = 04
año = 2021
Se suma Enero, Febrero, Marzo y dia.

Como Enero y Marzo tienen valores fijos, para el cálculo ponemos directamente el valor de la suma de sus días.
62 + Febrero + dia = 103 dias transcurridos.


Y esta sería la mecánica a seguir con los siguientes meses.
El proceso sería más simple si se pudiera usar un switch o bucles, pero si acabas de empezar aún no habrás llegado a eso.

Bien, te he explicado aproximadamente la mecánica a seguir.
Intenta hacerlo tú, escribir tu propio código.
No te preocupes por equivocarte, atascarte o volverte loco...es imprescindible pasar por eso para aprender.

Lo ideal es que cuando te equivoques o atasques, publiques aquí lo que hayas escrito y te expliquemos en que fallas o indicarte como continuar para completarlo.

Aún así, abajo voy a poner un código que he escrito con una solución (puede haber otras quizás más ingeniosas).
Tú decides si quieres mirarlo o no, pero insisto, lo ideal si de verdad quieres aprender, es que lo intentes por tu cuenta y te equivoques mucho, que es como más se aprende.

Un saludo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
public class DiasTranscurridos {
 
	public static void main(String[] args) {
 
		Scanner teclado = new Scanner(System.in);
 
		System.out.print("Dia[1-31]: ");
		int dia = teclado.nextInt();
		System.out.print("Mes[1-12]: ");
		int mes = teclado.nextInt();
		System.out.print("Año: ");
		int anio = teclado.nextInt();
 
		/*
		 * Ahora hay que hacer una suma de dias transcurridos
		 * según el mes indicado.
		 * Cada mes tiene unos valores fijos: Enero es 31, Abril es 30, etc..
		 * El único mes con un valor variable es Febrero, que va a depender
		 * de si es año bisiesto o no.
		 * Así que lo primero que vamos a determinar es el valor para Febrero
		 * antes de empezar a sumar dias.
		 */
 
		int febrero;
		if ((anio % 4 == 0) && ((anio % 100 != 0) || (anio % 400 == 0)))
			febrero = 29; //Es bisiesto
		else
			febrero = 28; //No es bisiesto
 
		int diasTranscurridos = 0;
		//Sumamos los dias correspondientes a los meses
		if (mes == 1)
			//Si el mes es 1, es que estamos en Enero sin terminar, solo cuenta el valor de dia
			diasTranscurridos = dia;
		else if (mes == 2)
			//Estamos en Febrero sin terminar, hay que sumar los 31 dias de Enero mas el valor de dia
			diasTranscurridos = 31 + dia;
		else if (mes == 3)
			//Marzo sin terminar,sumamos los 31 dias de Enero,más lo que valga Febrero,mas valor de dia
			diasTranscurridos = 31 + febrero + dia;
		else if (mes == 4)
			//Abril sin terminar, sumamos Enero, Febrero, Marzo y valor de dia
			diasTranscurridos = 62 + febrero + dia;
		else if (mes == 5)
			//Mayo sin terminar..
			diasTranscurridos = 92 + febrero + dia;
		else if (mes == 6)
			//Junio...
			diasTranscurridos = 123 + febrero + dia;
		else if (mes == 7)
			//Julio...
			diasTranscurridos = 153 + febrero + dia;
		else if (mes == 8)
			//Agosto...
			diasTranscurridos = 184 + febrero + dia;
		else if (mes == 9)
			//Septiembre...
			diasTranscurridos = 215 + febrero + dia;
		else if (mes == 10)
			//Octubre...
			diasTranscurridos = 245 + febrero + dia;
		else if (mes == 11)
			//Noviembre...
			diasTranscurridos = 276 + febrero + dia;
		else if (mes == 12)
			//Diciembre...
			diasTranscurridos = 306 + febrero + dia;
 
		//Resultado
		System.out.println("Dias transcurridos: " + diasTranscurridos);
		teclado.close();
 
	}
 
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Realizar un programa donde solicite la fecha cualquiera, solicitándola por partes

Publicado por Joaquin (4 intervenciones) el 18/03/2021 15:29:11
Hola muchas gracias, tu respuesta me resolvió muchas dudas, solo tengo una última, entendí todo lo demás pero no el calculo en la parte de si es bisiesto o no,

esta linea:

1
2
3
4
5
int febrero;
if ((anio % 4 == 0) && ((anio % 100 != 0) || (anio % 400 == 0)))
    febrero = 29; //Es bisiesto
else
    febrero = 28; //No es bisiesto
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Realizar un programa donde solicite la fecha cualquiera, solicitándola por partes

Publicado por Kabuto (1381 intervenciones) el 19/03/2021 00:41:48
Sí, explico.
Por algún motivo matemático, cósmico o capricho de los dioses xD....
resulta que hay una fórmula matemática para determinar si un año es bisiesto o no.

Si un año,
es múltiplo de 4 y no de 100...
1
(anio % 4 == 0) && ((anio % 100 != 0)

o, si es múltiplo de 400
1
(anio % 400 == 0)

entonces, es un año bisiesto.

Para saber si un número es múltiplo de otro, hay que dividirlos y comprobar si el "resto" (también llamado "residuo") es igual a 0.
El resultado de la división da igual, lo que importa es el resto.

Para obtener el resto de una división, se usa el operador "módulo", que en muchos lenguajes como Java, C, etc... se representa con el símbolo % (lo cuál por cierto genera una lógica confusión en aprendices de programación)
En otros lenguajes, o en las calculadora científicas, a este operador se le llama simplemente MOD

Entonces, esta expresión:
1
anio % 4 == 0
Lo que hace es dividir el año entre 4 y obtener el resto (módulo) y lo comparo con el valor 0.
Si esta comparación devuelve TRUE, significa que el año es múltiplo de 4, porque si lo divido entre 4 el resto es igual a 0

Pues en este código, hago la comprobación completa para determinar si un año es bisiesto y por tanto febrero tiene 29 días.
1
2
3
4
5
int febrero;
if ((anio % 4 == 0) && ((anio % 100 != 0) || (anio % 400 == 0)))
    febrero = 29; //Es bisiesto
else
    febrero = 28; //No es bisiesto
Hay pregunto "si el año es múltiplo de 4 AND NOT mútltiplo de 100 OR año es múltiplo de 400"
Si la respuesta es TRUE, febrero tiene 29 dias,
Si es FALSE, febrero tendrá 28 días.

Guarda esta fórmula porque seguramente te encontrarás con más ejercicios en los que tengas que determinar si un año es bisiesto o no.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar