
Tabla de días de la semana por mes
Publicado por Javier (18 intervenciones) el 15/12/2022 01:42:05
Buenas noches compañeros. Estamos en el tema de los arrays.
En este ejercicio nos piden que construyamos una tabla en la que por cada mes pongamos el número de los días que fueron lunes, martes , miércoles, etc.
Os pongo el enunciado y un ejemplo. A ver si me podéis echar una mano.
Gracias
vamos a construir ahora una tabla o array de tres dimensiones donde las dos primeras (filas y columnas) sean las mismas (doce meses/filas y siete días de la semana/columnas). Sin embargo, ahora en cada coordenada de fila y columna (mes y día), en lugar de almacenar un entero (cantidad de días) se enlazará con un array de enteros (la tercera dimensión), que contendrá la lista de días del mes que coinciden con ese día de semana.
Por ejemplo, para el año 2022, los días de enero que caen en lunes son 3, 10, 17, 24, 31, mientras que los días de enero que caen en martes son 4, 11, 18, 25, o los días de febrero que caen en lunes son 7, 14, 21, 28. Puedes observar que la tercera dimensión es "irregular", pues no siempre los elementos tienen el mismo tamaño (unas veces serán subarrays de cinco elementos y otras veces de cuatro).
Aquí tienes un ejemplo completo para el año 2022:
L M X J V S D
Mes 1 [3, 10, 17, 24, 31] [4, 11, 18, 25] [5, 12, 19, 26] [6, 13, 20, 27] [7, 14, 21, 28] [1, 8, 15, 22, 29] [2, 9, 16, 23, 30]
Mes 2 [7, 14, 21, 28] [1, 8, 15, 22] [2, 9, 16, 23] [3, 10, 17, 24] [4, 11, 18, 25] [5, 12, 19, 26] [6, 13, 20, 27]
Mes 3 [7, 14, 21, 28] [1, 8, 15, 22, 29] [2, 9, 16, 23, 30] [3, 10, 17, 24, 31] [4, 11, 18, 25] [5, 12, 19, 26] [6, 13, 20, 27]
Mes 4 [4, 11, 18, 25] [5, 12, 19, 26] [6, 13, 20, 27] [7, 14, 21, 28] [1, 8, 15, 22, 29] [2, 9, 16, 23, 30] [3, 10, 17, 24]
Mes 5 [2, 9, 16, 23, 30] [3, 10, 17, 24, 31] [4, 11, 18, 25] [5, 12, 19, 26] [6, 13, 20, 27] [7, 14, 21, 28] [1, 8, 15, 22, 29]
Mes 6 [6, 13, 20, 27] [7, 14, 21, 28] [1, 8, 15, 22, 29] [2, 9, 16, 23, 30] [3, 10, 17, 24] [4, 11, 18, 25] [5, 12, 19, 26]
Mes 7 [4, 11, 18, 25] [5, 12, 19, 26] [6, 13, 20, 27] [7, 14, 21, 28] [1, 8, 15, 22, 29] [2, 9, 16, 23, 30] [3, 10, 17, 24, 31]
Mes 8 [1, 8, 15, 22, 29] [2, 9, 16, 23, 30] [3, 10, 17, 24, 31] [4, 11, 18, 25] [5, 12, 19, 26] [6, 13, 20, 27] [7, 14, 21, 28]
Mes 9 [5, 12, 19, 26] [6, 13, 20, 27] [7, 14, 21, 28] [1, 8, 15, 22, 29] [2, 9, 16, 23, 30] [3, 10, 17, 24] [4, 11, 18, 25]
Mes 10 [3, 10, 17, 24, 31] [4, 11, 18, 25] [5, 12, 19, 26] [6, 13, 20, 27] [7, 14, 21, 28] [1, 8, 15, 22, 29] [2, 9, 16, 23, 30]
Mes 11 [7, 14, 21, 28] [1, 8, 15, 22, 29] [2, 9, 16, 23, 30] [3, 10, 17, 24] [4, 11, 18, 25] [5, 12, 19, 26] [6, 13, 20, 27]
Mes 12 [5, 12, 19, 26] [6, 13, 20, 27] [7, 14, 21, 28] [1, 8, 15, 22, 29] [2, 9, 16, 23, 30] [3, 10, 17, 24, 31] [4, 11, 18, 25]
Para implementar este programa en Java tendrás que:
Reservar espacio en memoria para la tabla. Se trata de un array tridimensional donde conocemos el tamaño de las dos primeras dimensiones (12x7) pero no de la tercera porque a veces será cuatro y otras veces será cinco. No vamos a reservar espacio 12x7x5 con new porque malgastaríamos espacio, así que reservaremos inicialmente para las dos primeras dimensiones (doce meses y siete días de la semana), y dejaremos la tercera dimensión (lista de días) sin indicar tamaño. Más tarde, iremos reservando espacio de manera específica para el subarray que representa cada día de la semana de cada mes.
Solicitar por teclado el año para el cual se quiere calcular la tabla. Debe ser un año entre 1900 y 2100, ambos incluidos. Si no se introduce un año correcto, deberá volverse a pedir hasta que sea correcto. Igual que en el ejercicio anterior.
Una vez conocido el año, podemos calcular cuántos días de la semana hay en cada mes, es decir, cuántos lunes hay en enero, cuántos en febrero, etc. De hecho, es exactamente lo que hiciste en el ejercicio anterior: una tabla bidimensional de contadores. Si repites aquí ese cálculo, ya tendrás para cada coordenada (mes, día) la información que necesitas para hacer los new de la tercera dimensión.
Una vez conocido el dato anterior, podrás reservar espacio para la tercera dimensión para cada par de coordenadas. A cada día de la semana de cada mes le corresponderá un subarray (tercera dimensión) de cuatro o cinco elementos.
A partir de ahí, habrá que idear un mecanismo para recorrer cada día del año y, en función del mes y del día de la semana que se trate, incluir ese día en el subarray (tercera dimensión) correspondiente en la posición apropiada.
Una vez la tabla esté completamente rellena (se han recorrido todos los días del año), habrá que mostrarla por pantalla con un formato apropiadamente tabulado y con una cabecera para las filas (número de mes) y otra para las columnas (una letra para cada día de la semana) de manera similar al ejemplo que hemos mostrado anteriormente.
Resultado del ejercicio
Aquí tienes algunos posibles ejemplos de ejecución del programa.
Para el año 1900.
LISTA DE DÍAS DE LA SEMANA POR MES
----------------------------------
Introduzca año (1900-2100): x
Error de lectura: no es un número entero válido.
Introduzca año (1900-2100): 1899
Introduzca año (1900-2100): 2101
Introduzca año (1900-2100): 1900
RESULTADO: AÑO 1900
L M X J V S D
Mes 1 [1, 8, 15, 22, 29] [2, 9, 16, 23, 30] [3, 10, 17, 24, 31] [4, 11, 18, 25] [5, 12, 19, 26] [6, 13, 20, 27] [7, 14, 21, 28]
Mes 2 [5, 12, 19, 26] [6, 13, 20, 27] [7, 14, 21, 28] [1, 8, 15, 22] [2, 9, 16, 23] [3, 10, 17, 24] [4, 11, 18, 25]
Mes 3 [5, 12, 19, 26] [6, 13, 20, 27] [7, 14, 21, 28] [1, 8, 15, 22, 29] [2, 9, 16, 23, 30] [3, 10, 17, 24, 31] [4, 11, 18, 25]
Mes 4 [2, 9, 16, 23, 30] [3, 10, 17, 24] [4, 11, 18, 25] [5, 12, 19, 26] [6, 13, 20, 27] [7, 14, 21, 28] [1, 8, 15, 22, 29]
Mes 5 [7, 14, 21, 28] [1, 8, 15, 22, 29] [2, 9, 16, 23, 30] [3, 10, 17, 24, 31] [4, 11, 18, 25] [5, 12, 19, 26] [6, 13, 20, 27]
Mes 6 [4, 11, 18, 25] [5, 12, 19, 26] [6, 13, 20, 27] [7, 14, 21, 28] [1, 8, 15, 22, 29] [2, 9, 16, 23, 30] [3, 10, 17, 24]
Mes 7 [2, 9, 16, 23, 30] [3, 10, 17, 24, 31] [4, 11, 18, 25] [5, 12, 19, 26] [6, 13, 20, 27] [7, 14, 21, 28] [1, 8, 15, 22, 29]
Mes 8 [6, 13, 20, 27] [7, 14, 21, 28] [1, 8, 15, 22, 29] [2, 9, 16, 23, 30] [3, 10, 17, 24, 31] [4, 11, 18, 25] [5, 12, 19, 26]
Mes 9 [3, 10, 17, 24] [4, 11, 18, 25] [5, 12, 19, 26] [6, 13, 20, 27] [7, 14, 21, 28] [1, 8, 15, 22, 29] [2, 9, 16, 23, 30]
Mes 10 [1, 8, 15, 22, 29] [2, 9, 16, 23, 30] [3, 10, 17, 24, 31] [4, 11, 18, 25] [5, 12, 19, 26] [6, 13, 20, 27] [7, 14, 21, 28]
Mes 11 [5, 12, 19, 26] [6, 13, 20, 27] [7, 14, 21, 28] [1, 8, 15, 22, 29] [2, 9, 16, 23, 30] [3, 10, 17, 24] [4, 11, 18, 25]
Mes 12 [3, 10, 17, 24, 31] [4, 11, 18, 25] [5, 12, 19, 26] [6, 13, 20, 27] [7, 14, 21, 28] [1, 8, 15, 22, 29] [2, 9, 16, 23, 30]
En este ejercicio nos piden que construyamos una tabla en la que por cada mes pongamos el número de los días que fueron lunes, martes , miércoles, etc.
Os pongo el enunciado y un ejemplo. A ver si me podéis echar una mano.
Gracias
vamos a construir ahora una tabla o array de tres dimensiones donde las dos primeras (filas y columnas) sean las mismas (doce meses/filas y siete días de la semana/columnas). Sin embargo, ahora en cada coordenada de fila y columna (mes y día), en lugar de almacenar un entero (cantidad de días) se enlazará con un array de enteros (la tercera dimensión), que contendrá la lista de días del mes que coinciden con ese día de semana.
Por ejemplo, para el año 2022, los días de enero que caen en lunes son 3, 10, 17, 24, 31, mientras que los días de enero que caen en martes son 4, 11, 18, 25, o los días de febrero que caen en lunes son 7, 14, 21, 28. Puedes observar que la tercera dimensión es "irregular", pues no siempre los elementos tienen el mismo tamaño (unas veces serán subarrays de cinco elementos y otras veces de cuatro).
Aquí tienes un ejemplo completo para el año 2022:
L M X J V S D
Mes 1 [3, 10, 17, 24, 31] [4, 11, 18, 25] [5, 12, 19, 26] [6, 13, 20, 27] [7, 14, 21, 28] [1, 8, 15, 22, 29] [2, 9, 16, 23, 30]
Mes 2 [7, 14, 21, 28] [1, 8, 15, 22] [2, 9, 16, 23] [3, 10, 17, 24] [4, 11, 18, 25] [5, 12, 19, 26] [6, 13, 20, 27]
Mes 3 [7, 14, 21, 28] [1, 8, 15, 22, 29] [2, 9, 16, 23, 30] [3, 10, 17, 24, 31] [4, 11, 18, 25] [5, 12, 19, 26] [6, 13, 20, 27]
Mes 4 [4, 11, 18, 25] [5, 12, 19, 26] [6, 13, 20, 27] [7, 14, 21, 28] [1, 8, 15, 22, 29] [2, 9, 16, 23, 30] [3, 10, 17, 24]
Mes 5 [2, 9, 16, 23, 30] [3, 10, 17, 24, 31] [4, 11, 18, 25] [5, 12, 19, 26] [6, 13, 20, 27] [7, 14, 21, 28] [1, 8, 15, 22, 29]
Mes 6 [6, 13, 20, 27] [7, 14, 21, 28] [1, 8, 15, 22, 29] [2, 9, 16, 23, 30] [3, 10, 17, 24] [4, 11, 18, 25] [5, 12, 19, 26]
Mes 7 [4, 11, 18, 25] [5, 12, 19, 26] [6, 13, 20, 27] [7, 14, 21, 28] [1, 8, 15, 22, 29] [2, 9, 16, 23, 30] [3, 10, 17, 24, 31]
Mes 8 [1, 8, 15, 22, 29] [2, 9, 16, 23, 30] [3, 10, 17, 24, 31] [4, 11, 18, 25] [5, 12, 19, 26] [6, 13, 20, 27] [7, 14, 21, 28]
Mes 9 [5, 12, 19, 26] [6, 13, 20, 27] [7, 14, 21, 28] [1, 8, 15, 22, 29] [2, 9, 16, 23, 30] [3, 10, 17, 24] [4, 11, 18, 25]
Mes 10 [3, 10, 17, 24, 31] [4, 11, 18, 25] [5, 12, 19, 26] [6, 13, 20, 27] [7, 14, 21, 28] [1, 8, 15, 22, 29] [2, 9, 16, 23, 30]
Mes 11 [7, 14, 21, 28] [1, 8, 15, 22, 29] [2, 9, 16, 23, 30] [3, 10, 17, 24] [4, 11, 18, 25] [5, 12, 19, 26] [6, 13, 20, 27]
Mes 12 [5, 12, 19, 26] [6, 13, 20, 27] [7, 14, 21, 28] [1, 8, 15, 22, 29] [2, 9, 16, 23, 30] [3, 10, 17, 24, 31] [4, 11, 18, 25]
Para implementar este programa en Java tendrás que:
Reservar espacio en memoria para la tabla. Se trata de un array tridimensional donde conocemos el tamaño de las dos primeras dimensiones (12x7) pero no de la tercera porque a veces será cuatro y otras veces será cinco. No vamos a reservar espacio 12x7x5 con new porque malgastaríamos espacio, así que reservaremos inicialmente para las dos primeras dimensiones (doce meses y siete días de la semana), y dejaremos la tercera dimensión (lista de días) sin indicar tamaño. Más tarde, iremos reservando espacio de manera específica para el subarray que representa cada día de la semana de cada mes.
Solicitar por teclado el año para el cual se quiere calcular la tabla. Debe ser un año entre 1900 y 2100, ambos incluidos. Si no se introduce un año correcto, deberá volverse a pedir hasta que sea correcto. Igual que en el ejercicio anterior.
Una vez conocido el año, podemos calcular cuántos días de la semana hay en cada mes, es decir, cuántos lunes hay en enero, cuántos en febrero, etc. De hecho, es exactamente lo que hiciste en el ejercicio anterior: una tabla bidimensional de contadores. Si repites aquí ese cálculo, ya tendrás para cada coordenada (mes, día) la información que necesitas para hacer los new de la tercera dimensión.
Una vez conocido el dato anterior, podrás reservar espacio para la tercera dimensión para cada par de coordenadas. A cada día de la semana de cada mes le corresponderá un subarray (tercera dimensión) de cuatro o cinco elementos.
A partir de ahí, habrá que idear un mecanismo para recorrer cada día del año y, en función del mes y del día de la semana que se trate, incluir ese día en el subarray (tercera dimensión) correspondiente en la posición apropiada.
Una vez la tabla esté completamente rellena (se han recorrido todos los días del año), habrá que mostrarla por pantalla con un formato apropiadamente tabulado y con una cabecera para las filas (número de mes) y otra para las columnas (una letra para cada día de la semana) de manera similar al ejemplo que hemos mostrado anteriormente.
Resultado del ejercicio
Aquí tienes algunos posibles ejemplos de ejecución del programa.
Para el año 1900.
LISTA DE DÍAS DE LA SEMANA POR MES
----------------------------------
Introduzca año (1900-2100): x
Error de lectura: no es un número entero válido.
Introduzca año (1900-2100): 1899
Introduzca año (1900-2100): 2101
Introduzca año (1900-2100): 1900
RESULTADO: AÑO 1900
L M X J V S D
Mes 1 [1, 8, 15, 22, 29] [2, 9, 16, 23, 30] [3, 10, 17, 24, 31] [4, 11, 18, 25] [5, 12, 19, 26] [6, 13, 20, 27] [7, 14, 21, 28]
Mes 2 [5, 12, 19, 26] [6, 13, 20, 27] [7, 14, 21, 28] [1, 8, 15, 22] [2, 9, 16, 23] [3, 10, 17, 24] [4, 11, 18, 25]
Mes 3 [5, 12, 19, 26] [6, 13, 20, 27] [7, 14, 21, 28] [1, 8, 15, 22, 29] [2, 9, 16, 23, 30] [3, 10, 17, 24, 31] [4, 11, 18, 25]
Mes 4 [2, 9, 16, 23, 30] [3, 10, 17, 24] [4, 11, 18, 25] [5, 12, 19, 26] [6, 13, 20, 27] [7, 14, 21, 28] [1, 8, 15, 22, 29]
Mes 5 [7, 14, 21, 28] [1, 8, 15, 22, 29] [2, 9, 16, 23, 30] [3, 10, 17, 24, 31] [4, 11, 18, 25] [5, 12, 19, 26] [6, 13, 20, 27]
Mes 6 [4, 11, 18, 25] [5, 12, 19, 26] [6, 13, 20, 27] [7, 14, 21, 28] [1, 8, 15, 22, 29] [2, 9, 16, 23, 30] [3, 10, 17, 24]
Mes 7 [2, 9, 16, 23, 30] [3, 10, 17, 24, 31] [4, 11, 18, 25] [5, 12, 19, 26] [6, 13, 20, 27] [7, 14, 21, 28] [1, 8, 15, 22, 29]
Mes 8 [6, 13, 20, 27] [7, 14, 21, 28] [1, 8, 15, 22, 29] [2, 9, 16, 23, 30] [3, 10, 17, 24, 31] [4, 11, 18, 25] [5, 12, 19, 26]
Mes 9 [3, 10, 17, 24] [4, 11, 18, 25] [5, 12, 19, 26] [6, 13, 20, 27] [7, 14, 21, 28] [1, 8, 15, 22, 29] [2, 9, 16, 23, 30]
Mes 10 [1, 8, 15, 22, 29] [2, 9, 16, 23, 30] [3, 10, 17, 24, 31] [4, 11, 18, 25] [5, 12, 19, 26] [6, 13, 20, 27] [7, 14, 21, 28]
Mes 11 [5, 12, 19, 26] [6, 13, 20, 27] [7, 14, 21, 28] [1, 8, 15, 22, 29] [2, 9, 16, 23, 30] [3, 10, 17, 24] [4, 11, 18, 25]
Mes 12 [3, 10, 17, 24, 31] [4, 11, 18, 25] [5, 12, 19, 26] [6, 13, 20, 27] [7, 14, 21, 28] [1, 8, 15, 22, 29] [2, 9, 16, 23, 30]
Valora esta pregunta


0