Enunciado Un libro de registro mensual consiste en una serie de entradas, una para cada día del mes, que pueden representa...
Especificación algebraica del TAD (I) Especificación sintáctica Nombre del tipo: LIBROREGISTRO Tipos auxiliares: NATURAL, ...
Especificación algebraica del TAD (II) Especificación sintáctica (Cont,) MES: LIBROREGISTRO  NATURAL {MES(l): Devuelve el...
Especificación algebraica del TAD (III) Especificación semántica CONJUNTO DE GENERADORAS NO LIBRE Axiomas de EQUIVALENCIA:...
Axiomas de ACCESO: (OB1) OBTENERENTRADA(CREARLIBRO(M,A),D)=Error (OB2) OBTENERENTRADA(REGISTRAR(L,D,V),D’)= V, si D=D’ OBT...
Implementación Java (I) public class libroRegistro { private int mesRegistro; private int añoRegistro; private int[] entra...
Implementación Java (II) public void registrar(int día, int valor){ if (día<1 || día>díasMes()) System.out.println(&quot;D...
Implementación Java (III) public int díasMes(){ int diasmes=0; switch ( mesRegistro) { case 4: case 6: case 9: case 11:{Ab...
Implementación en Java (IV) private boolean esBisiesto(int año){ if ( ( (año % 4 == 0) && ! (año % 100 == 0)) || ( (año % ...
Uso del TAD (I) public class Horas { private static  Scanner teclado=new Scanner(System.in); public static void main(Strin...
Uso del TAD (II) private static void mostrarOpciones(){ System.out.println(&quot;1.  Anotar entrada&quot;); System.out.pri...
Uso del TAD (y III) private static void procesarOpcion(libroRegistro horas, int opcion) throws IOException{ switch(opcion)...
Upcoming SlideShare
Loading in …5
×

Libro registro

550 views
470 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
550
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
6
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Libro registro

  1. 2. Enunciado Un libro de registro mensual consiste en una serie de entradas, una para cada día del mes, que pueden representar cualquier cosa: número de horas en clase, número de correos recibidos, número de cafés consumidos, etc. Realizar la especificación algebraica del TAD libro de registro mensual, incluyendo, entre otras, las operaciones de creación del libro para un mes determinado, registrar una entrada para un día determinado, consultar el registro de cierto día, proporcionar el mes del registro, el número de días del mes y el año correspondiente. Realizar la implementación de dicho TAD en JAVA
  2. 3. Especificación algebraica del TAD (I) Especificación sintáctica Nombre del tipo: LIBROREGISTRO Tipos auxiliares: NATURAL, VALOR Operaciones: CREARLIBRO: NATURALxNATURAL  LIBROREGISTRO {CREALIBRO(m, a) : Crea un libro de registro correspondiente al mes m del año a} REGISTRAR: LIBROREGISTROx NATURALxVALOR  LIBROREGISTRO {REGISTRAR(l, d, v): Registra en el día d del libro l el valor v} OBTENERENTRADA: LIBROREGISTROxNATURAL  VALOR {OBTENERENTRADA(l, d): Devuelve el valor anotado en el día d del libro l } MES: LIBROREGISTRO  NATURAL {MES(l): Devuelve el mes correspondiente al libro l}
  3. 4. Especificación algebraica del TAD (II) Especificación sintáctica (Cont,) MES: LIBROREGISTRO  NATURAL {MES(l): Devuelve el mes correspondiente al libro l} AÑO: LIBROREGISTRO  NATURAL {AÑO(l): Devuelve el año correspondiente al libro l} DÍASMES:LIBROREGISTRO  NATURAL {DÍASMES(l): Devuelve el número de días del mes correspondiente al libro l} Término canónico:  L  LIBROREGISTRO,  M, A  NATURAL,, L=CREALIBRO(M,A) v  L’  LIBROREGISTRO   V  VALOR,,L=REGISTRAR(L’,D,V)
  4. 5. Especificación algebraica del TAD (III) Especificación semántica CONJUNTO DE GENERADORAS NO LIBRE Axiomas de EQUIVALENCIA: (EQ1) REGISTRAR(REGISTRAR(L,D,V),D’,V’)= REGISTRAR(L,D,V’), si D=D’ REGISTRAR(REGISTRAR(L,D’,V’),D,V), c.c. (EQ2) REGISTRAR(L,D,V)=Error, si D  [1,DIASMES(L)]
  5. 6. Axiomas de ACCESO: (OB1) OBTENERENTRADA(CREARLIBRO(M,A),D)=Error (OB2) OBTENERENTRADA(REGISTRAR(L,D,V),D’)= V, si D=D’ OBTENERENTRADA(L,D’), c.c. (M1) MES(CREALIBRO(M,A))=M (M2) MES(REGISTRAR(L,D,V))=MES(L) (A1) AÑO(CREALIBRO(M,A))=A (A2) AÑO(REGISTRAR(L,D,V))=AÑO(L) (D1) DIASMES(CREALIBRO(M,A))=DÍAS(M) (D2) DIASMES(REGISTRAR(L,D,V))=DÍASMES(L) operación auxiliar que nos devuelve el número de días del mes que representa el número natural M, siempre y cuando M  [1,12] Especificación algebraica del TAD (IV)
  6. 7. Implementación Java (I) public class libroRegistro { private int mesRegistro; private int añoRegistro; private int[] entradas; public libroRegistro(int mes, int año) { mesRegistro=mes; añoRegistro=año; entradas=new int[díasMes()]; } Representación de los valores del TAD en memoria Constructor ≡ Op. Generadora
  7. 8. Implementación Java (II) public void registrar(int día, int valor){ if (día<1 || día>díasMes()) System.out.println(&quot;Día incorrecto&quot;); else entradas[día]=valor; } public int obtenerEntrada(int día){ if (día<1 || día>díasMes()){ System.out.println(&quot;Día incorrecto&quot;); return -1; } else return entradas[día]; } Op. Generadora Constructor ≡ Op. Generadora
  8. 9. Implementación Java (III) public int díasMes(){ int diasmes=0; switch ( mesRegistro) { case 4: case 6: case 9: case 11:{Abr, Jun, Sept y Nov} diasmes=30; break; case 2: {Febrero}if (esBisiesto(añoRegistro)) d iasmes= 29; else diasmes= 28; break; case 1: case 3: case 5: case 7: case 8: case 10: case 12: {resto de meses} diasmes= 31; break; } // fin switch return diasmes; }
  9. 10. Implementación en Java (IV) private boolean esBisiesto(int año){ if ( ( (año % 4 == 0) && ! (año % 100 == 0)) || ( (año % 400 == 0) && ! (año % 4000 == 0))) return true; else return false; } public int mes(){ return mesRegistro; } public int año(){ return añoRegistro; } }//fin de la clase libroRegistro Op. Auxiliar
  10. 11. Uso del TAD (I) public class Horas { private static Scanner teclado=new Scanner(System.in); public static void main(String[] args) throws IOException{ System.out.println(&quot;Elige año para crear el libro de registros&quot;); int año=Integer.parseInt(teclado.readLine()); System.out.println(&quot;Elige mes para anotar las horas de estudio&quot;); int mes=Integer.parseInt(teclado.readLine()); libroRegistro horas=new libroRegistro(mes, año); boolean fin=false; while (!fin){ mostrarOpciones(); int o=leerOpcion(); if (o!=5) procesarOpcion(horas, o); else fin=true; } }
  11. 12. Uso del TAD (II) private static void mostrarOpciones(){ System.out.println(&quot;1. Anotar entrada&quot;); System.out.println(&quot;2. Obtener registro&quot;); System.out.println(&quot;3. Mes y Año&quot;); System.out.println(&quot;4. Días del mes&quot;); System.out.println(&quot;5. Acabar&quot;); } private static int leerOpcion() throws IOException{ System.out.print(&quot;Elige opción ....&quot;); return Integer.parseInt(teclado.readLine()); }
  12. 13. Uso del TAD (y III) private static void procesarOpcion(libroRegistro horas, int opcion) throws IOException{ switch(opcion){ case 1: System.out.println(&quot;Elige día&quot;); int día=Integer.parseInt(teclado.readLine()); System.out.println(&quot;¿Cuántas horas has estudiado el dia &quot;+día+ &quot;?&quot;); horas.registrar(día, Integer.parseInt(teclado.readLine())); break; case 2: System.out.print(&quot;Elige día&quot;); día=Integer.parseInt(teclado.readLine()); System.out.println(horas.obtenerEntrada(día)); break; case 3: System.out.println(&quot;Mes/Año : &quot;+horas.mes()+ &quot;/&quot;+horas.año()); break; case 4: System.out.println(&quot;Dias del mes &quot;+horas.mes()+&quot; &quot;+horas.díasMes()); } } }

×