Descargar la presentación
La descarga está en progreso. Por favor, espere
Publicada porJosé Carlos del Río Tebar Modificado hace 10 años
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”)]; }
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.