La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Tipos compuestos Práctica 1: Ejercicios simples Algoritmos y Estructuras de Datos 1 31 de marzo de 2008.

Presentaciones similares


Presentación del tema: "Tipos compuestos Práctica 1: Ejercicios simples Algoritmos y Estructuras de Datos 1 31 de marzo de 2008."— Transcripción de la presentación:

1 Tipos compuestos Práctica 1: Ejercicios simples Algoritmos y Estructuras de Datos 1 31 de marzo de 2008

2 Tipo Racional Sea el tipo de datos Racional que representa a los números racionales. tipo Racional { observador numerador(r: Racional) :  observador denominador(r: Racional) :  invariante denominador(r)  0 }

3 Tipo Racional Especifiquemos la igualdad para el tipo Racional. ¿Cuándo dos racionales son iguales? 2/3 y 5/4 7/5 y 7/5 12/8 y 6/4 Por lo tanto: es correcta la siguiente definición? problema iguales(r1,r2: Racional) = res : Bool { asegura res == (numerador( r1 ) = numerador(r2)  denominador(r1) = denominador(r2)); }

4 Tipo Racional ¿Cuál sería la definición correcta? problema iguales(r1,r2: Racional) = res : Bool { asegura res == (numerador( r1 ) * denominador(r2) == denominador(r1) * numerador(r2)); }

5 Tipo Racional problema iguales(r1,r2: Racional) = res : Bool { asegura res == (numerador(r1) / mcd_r1 == numerador(r2) / mcd_r2  denominador(r1) / mcd_r1 == denominador(r2) / mcd_r2); aux mcd_r1 = mcd(numerador(r1), denominador(r1)); aux mcd_r2 = mcd(numerador(r2), denominador(r2)); } O también: aux mcd(a,b :  ) :  = max[x | x  divisores(a), y  divisores(b), x=y]

6 Tipo Tablero Un tablero de juegos tipo juego de la Oca o la vida o Monopoly, consta de una secuencia de casillas ordenadas e identificadas con números enteros positivos, las cuales pueden poseer o no prendas. Además todos los tableros poseen una casilla inicial de la cual parten los jugadores, y una longitud determinada. No puede haber dos casillas con la misma identificación. Podemos pensar el tablero como una secuencia de casillas. Las casillas deberán poseer la identificación y la prenda que corresponda.

7 Tipo Tablero Modelando casillas. tipo Casilla { observador identificacion(c: Casilla) :  observador prenda(c: Casilla) : [char] } problema crearCasilla(id: ,p:[char] ) = res : Casillaproblema crearCasilla(id: ,p:[char] ) = res : Casilla{ requiere id > 0; asegura identificacion(res) == id; asegura prenda(res) == p; }

8 Tipo Tablero Modelando el tablero tipo Tablero { observador casillas(t: Tablero) : [Casilla] observador longitud(t: Tablero) : 

9 Tipo Tablero Modelando el tablero tipo Tablero { observador casillas(t: Tablero) : [Casilla] observador longitud(t: Tablero) :  invariante longitud(t) > 0 invariante estaOrdena(filtrarId(casillas(t))) invariante cantidadDeCasillasCorrecta invariante noHayCasillasRepetidas tipo Tablero { observador casillas(t: Tablero) : [Casilla] observador longitud(t: Tablero) :  invariante longitud(t) > 0 invariante estaOrdena(filtrarId(casillas(t))) invariante cantidadDeCasillasCorrecta invariante noHayCasillasRepetidas aux cantidadDeCasillasCorrecta : Bool = |casillas(t)|  ≤ longitud(t)

10 Tipo Tablero Modelando el tablero tipo Tablero { observador casillas(t: Tablero) : [Casilla] observador longitud(t: Tablero) :  invariante longitud(t) > 0 invariante estaOrdena(filtrarId(casillas(t))) invariante cantidadDeCasillasCorrecta invariante noHayCasillasRepetidas aux cantidadDeCasillasCorrecta : Bool = |casillas(t)|  ≤ longitud(t) aux noHayCasillasRepetidas : Bool = (  i  casillas(t)) cuenta(identificacion(i), filtraId(casillas(t)))==1

11 tipo Tablero { observador casillas(t: Tablero) : [Casilla] observador longitud(t: Tablero) :  invariante longitud(t) > 0 invariante estaOrdena(filtrarId(casillas(t))) invariante cantidadDeCasillasCorrecta invariante noHayCasillasRepetidas aux cantidadDeCasillasCorrecta : Bool = |casillas(t)|  ≤ longitud(t) aux noHayCasillasRepetidas : Bool = (  i  casillas(t)) cuenta(identificacion(i), filtraId(casillas(t)))==1 aux filtrarId(cs:[Casilla]) : [  ] = [identificacion(c) | c  cs ] Tipo Tablero Modelando el tablero

12 tipo Tablero { observador casillas(t: Tablero) : [Casilla] observador longitud(t: Tablero) :  invariante longitud(t) > 0 invariante estaOrdena(filtrarId(casillas(t))) invariante cantidadDeCasillasCorrecta invariante noHayCasillasRepetidas aux cantidadDeCasillasCorrecta : Bool = |casillas(t)|  ≤ longitud(t) aux noHayCasillasRepetidas : Bool = (  i  casillas(t)) cuenta(i, filtraId(casillas(t))) == 1 aux filtrarId(cs:[Casilla]) : [  ] = [identificacion(c) | c  cs ] aux estaOrdena(ids: [  ]) : Bool = (  i  [0..|ids|-1)) (ids i ≤ ids i+1 ) } Tipo Tablero Modelando el tablero

13 problema agregarCasilla(Casilla c, Tablero t ) { requiere cuenta(identificacion(c),filtrarId(casillas(t))) == 0; requiere |casillas(t)|<longitud(t); problema agregarCasilla(Casilla c, Tablero t ) { requiere cuenta(identificacion(c),filtrarId(casillas(t))) == 0; requiere |casillas(t)|<longitud(t); modifica t; problema agregarCasilla(Casilla c, Tablero t ) { requiere cuenta(identificacion(c),filtrarId(casillas(t))) == 0; requiere |casillas(t)|<longitud(t); modifica t; asegura longitud(t) = longitud(pre(t)); asegura mismosElementos(casillas(t),c:casillas(pre(t)); } problema agregarCasilla(Casilla c, Tablero t ) { problema crearTablero(l:  ) = res : Tablero{ requiere l > 0; asegura longitud(res) = l; Tipo Tablero Modelando el tablero problema crearTablero(l:  ) = res : Tablero{ requiere l > 0; asegura longitud(res) = l; asegura casillas(res) = [nuevaCasilla(1,”Comienzo”)]; }


Descargar ppt "Tipos compuestos Práctica 1: Ejercicios simples Algoritmos y Estructuras de Datos 1 31 de marzo de 2008."

Presentaciones similares


Anuncios Google