1. Programa 8
a) Planteamiento del problema
Escribe un programa que lea tres números dia, mes y anno que representan
una fecha (día, mes y año) y calcule el día de la semana correspondiente
usando la congruencia de Zeller:
diasem= (700 + (26mes - 2) DIV 10 + dia + a + a DIV 4 + b DIV 4 – 2b) MOD
7
Donde los valores son:
Si mes<=2 Si mes>=3
mes mes+10
anno-1
mes-2
a anno mod 100 anno mod 100
b anno div 100 anno div 100
El valor de la variable diaseman estará entre 0 y 6 (0 =domingo,1= lunes,
3=martes, 4=miércoles, 5=jueves, 6= viernes), imprima la fecha de entrada
de datos y sustituya el valor ordinal obtenido por el dia en letras.
Verifique el siguiente código y complemente su ejercicio, realice pruebas
para asegurarse que su solución es correcta.
public static void main(String[] args) {
int dia=Integer.parseInt(JOptionPane.showInputDialog(null, "dia en
numero"));
int mes=Integer.parseInt(JOptionPane.showInputDialog(null, "mes en
numero"));
int anno=Integer.parseInt(JOptionPane.showInputDialog(null, "año en
numero"));
if (mes <= 2)
{
mes = mes + 10;
anno = anno - 1;
}
else
{
mes = mes - 2;
}
int a= anno % 100;
int b= anno / 100;
int diaordinal =(700 +((26 * mes -2) / 10) + dia + a+ a/ 4 + b/ 4 - 2 * b) % 7;
JOptionPane.showMessageDialog(null,"dia ordinal obtenido"+diaordinal);
}
Recordatorio: mod en java es %, y el div en java es cociente entero.
Verifique que sucede cuando el año no fue bisiesto, como soluciona este
caso.
2. Nota los datos de entrada no pueden ser negativos ni tampoco sobrepasar
el
limite establecido de su representación.
b) Análisis de datos (datos de: entrada / salida, condiciones y diccionario de
Datos).
Datos:
Día
Mes
Año(Anio)
A
B
Día Ordinal
Condiciones:
Si mes<=2 = mes = mes+10
Si mes<=2 = año = año-1
No mes<=2 = mes - mes-2
A = (año) mod 100
B = (año-A)/100
Día ordinal = (700+((26*mes-2)/10)+dia+A+A/4+B/4-2*B) mod 7
Diccionario de Datos:
Día=Valor numérico introducido del día que se quiere conocer.
Mes=Valor numérico introducido del mes que se quiere conocer.
Año= Valor numérico Introducido del año que se quiere conocer.
A=Residuo del Año introducido entre 100 necesario para poder calcular usando la
congruencia de Zeller
B=La división entre el Año introducido entre 100 necesario para poder calcular
usando la congruencia de Zeller
Día Ordinal= El Día de la semana que se quiere conocer.
3. c) Diseño de solución (Diagrama de flujo usando el programa DFD)
4. d) Prueba de escritorio.
Día Introducido = 18
Mes Introducido = 4
Año Introducido = 2012
SI (mes <= 2)
mes = mes + 10;
año = añoo - 1;
else
mes = mes – 2
diaordinal =(700 +((26 * mes -2) / 10) + dia + a+ a/ 4 + b/ 4 - 2 * b) % 7 = 3
switch (diaordinal)
case 1: “Lunes”
break;
case 2: “Martes”
break
case 3: “Miercoles”
break;
case 4: "jueves"
break
case 5: "viernes"
break
case 6: "sabado"
break
case 7: “domingo"
break
diaordinal = 3: “Miercoles”
5. e) Programa fuente (codificación en java)
package días;
import javax.swing.*;
public class Días {
public static void main(String[] args) {
int dia, mes, anio, a, b, diaordinal ;
dia = Integer.parseInt(JOptionPane.showInputDialog(null, "dia en numero"));
mes = Integer.parseInt(JOptionPane.showInputDialog(null, "mes en numero"));
anio = Integer.parseInt(JOptionPane.showInputDialog(null, "año en numero"));
if (mes <= 2) {
mes = mes + 10;
anio = anio - 1;
} else {
mes = mes - 2;
}
a= anio % 100;
b= anio / 100;
diaordinal =(700 +((26 * mes -2) / 10) + dia + a+ a/ 4 + b/ 4 - 2 * b) % 7;
JOptionPane.showMessageDialog(null,diaordinal);
switch (diaordinal){
case 1: {
JOptionPane.showMessageDialog(null,"Lunes");
break;
}
case 2: {
JOptionPane.showMessageDialog(null,"Martes");
break;
}
case 3: {
JOptionPane.showMessageDialog(null,"Miercoles");
break;
}
case 4: {
JOptionPane.showMessageDialog(null,"jueves");
break;
}
case 5: {
JOptionPane.showMessageDialog(null,"viernes");
break;
}
case 6: {
JOptionPane.showMessageDialog(null,"sabado");
break;
}
case 7: {
JOptionPane.showMessageDialog(null,"domingo");
break;
}
6. }
}
}
f) Depuración.- La forma de comprobar que su programa es funcional será
imprimiendo sus pantallas de salida, las cuales deberán estar previamente
diseñadas con presentación en su JOptionPane ver material de clases.
7. f) Conclusión de su práctica.
Algoritmo de Feller para calcular un día de la semana
Usar SWITCH y CASE
Hacer un diagrama en el DFD
Crear un Programa en Java Netbeans