Your SlideShare is downloading. ×
Programa 8
Programa 8
Programa 8
Programa 8
Programa 8
Programa 8
Programa 8
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
870
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
8
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Programa 8 a) Planteamiento del problemaEscribe un programa que lea tres números dia, mes y anno que representanuna fecha (día, mes y año) y calcule el día de la semana correspondienteusando la congruencia de Zeller:diasem= (700 + (26mes - 2) DIV 10 + dia + a + a DIV 4 + b DIV 4 – 2b) MOD7Donde los valores son:Si mes<=2 Si mes>=3mes mes+10anno-1mes-2a anno mod 100 anno mod 100b anno div 100 anno div 100El 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 entradade datos y sustituya el valor ordinal obtenido por el dia en letras.Verifique el siguiente código y complemente su ejercicio, realice pruebaspara asegurarse que su solución es correcta.public static void main(String[] args) {int dia=Integer.parseInt(JOptionPane.showInputDialog(null, "dia ennumero"));int mes=Integer.parseInt(JOptionPane.showInputDialog(null, "mes ennumero"));int anno=Integer.parseInt(JOptionPane.showInputDialog(null, "año ennumero"));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 estecaso.
  • 2. Nota los datos de entrada no pueden ser negativos ni tampoco sobrepasarel limite establecido de su representación.b) Análisis de datos (datos de: entrada / salida, condiciones y diccionario deDatos).Datos:DíaMesAño(Anio)ABDía OrdinalCondiciones:Si mes<=2 = mes = mes+10Si mes<=2 = año = año-1No mes<=2 = mes - mes-2A = (año) mod 100B = (año-A)/100Día ordinal = (700+((26*mes-2)/10)+dia+A+A/4+B/4-2*B) mod 7Diccionario 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 lacongruencia de ZellerB=La división entre el Año introducido entre 100 necesario para poder calcularusando la congruencia de ZellerDí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 previamentediseñ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

×