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.
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.
c) Diseño de solución (Diagrama de flujo usando el programa DFD)
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”
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;
           }
}
    }
}

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.
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

Programa 8

  • 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 datosde 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 desolución (Diagrama de flujo usando el programa DFD)
  • 4.
    d) Prueba deescritorio. 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 desu 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