Documentos de Académico
Documentos de Profesional
Documentos de Cultura
P14 - Demostracion Tipos Compuestos
P14 - Demostracion Tipos Compuestos
19 de mayo de 2014
TAD TConjunto
tipo TConjunto {
observador elementos (c : TConjunto) : [Nat] ;
invariante sinRepetidos(elementos(c)) ;
}
Clase Conjunto
c l a s s Conjunto {
public :
void i n s e r t a r ( int e ) {
i n s e r c i o n e s . push_back ( e ) ;
}
private :
s t d : : l i s t <i n t > i n s e r c i o n e s ;
// i n v R e p : True
// a b s ( t h i s : Conjunto , c : TConjunto ) :
// mismos (
// sacarRepetidos ( this . inserciones1) ,
// elementos ( c ))
};
1
La clase std::list<int> es una implementación correcta de secuencias.
Algoritmos y Estructuras de Datos I
Menú
Ejemplo de TAD en imperativo
Ejercicio: Carrito de compras
Para tener en cuenta
Observadores e invariantes
Carrito de compras
tipo TCarroDeCompras2 {
observador productos (c : TCarroDeCompras) : [String] ;
observador cantidadVentas (s : String, c :
TCarroDeCompras) : Int ;
requiere s ∈ productos(c) ;
invariante (∀s ← productos(c)) 0 ≤ cantidadVentas(s, c) ;
invariante sinRepetidos(productos(c)) ;
invariante |productos(c)| == 40 ;
}
2
Vamos a subir a la página una solución posible.
Algoritmos y Estructuras de Datos I
Menú
Ejemplo de TAD en imperativo
Ejercicio: Carrito de compras
Para tener en cuenta
class ClaseCarro {
public :
ClaseCarro ( s t r i n g catalogo [ 4 0 ] ) ;
v o i d comprar ( s t r i n g p r o d u c t o ) ;
private :
s t r i n g productos [ 4 0 ] ;
int cantidadVentas [ 4 0 ] ;
s t r i n g masComprado ;
int ventasBestSeller ;
[...]
}
class ClaseCarro {
[...]
// a b s ( imp : C l a s e C a r r o , e s p : TCarroDeCompras ) :
class ClaseCarro {
[...]
// a b s ( imp : C l a s e C a r r o , e s p : TCarroDeCompras ) :
// mismos ( imp . p r o d u c t o s , p r o d u c t o s ( e s p ) )
class ClaseCarro {
[...]
// a b s ( imp : C l a s e C a r r o , e s p : TCarroDeCompras ) :
// mismos ( imp . p r o d u c t o s , p r o d u c t o s ( e s p ) ) &&
// ( p a r a t o d o i <− [ 0 . . 4 0 ) )
// c a n t i d a d V e n t a s ( imp . p r o d u c t o s [ i ] , e s p ) ==
// imp . c a n t i d a d V e n t a s [ i ] ;
[...]
};
class ClaseCarro { [ . . . ]
// I n v R e p ( imp : C l a s e C a r r o ) :
class ClaseCarro { [ . . . ]
// I n v R e p ( imp : C l a s e C a r r o ) :
// | imp . p r o d u c t o s | == 40
class ClaseCarro { [ . . . ]
// I n v R e p ( imp : C l a s e C a r r o ) :
// | imp . p r o d u c t o s | == 40 &&
// | imp . c a n t i d a d V e n t a s | == 40
class ClaseCarro { [ . . . ]
// I n v R e p ( imp : C l a s e C a r r o ) :
// | imp . p r o d u c t o s | == 40 &&
// | imp . c a n t i d a d V e n t a s | == 40 &&
// en ( imp . masComprado , imp . p r o d u c t o s )
class ClaseCarro { [ . . . ]
// I n v R e p ( imp : C l a s e C a r r o ) :
// | imp . p r o d u c t o s | == 40 &&
// | imp . c a n t i d a d V e n t a s | == 40 &&
// en ( imp . masComprado , imp . p r o d u c t o s ) &&
// ( p a r a t o d o x <− imp . c a n t i d a d V e n t a s ) x >= 0
class ClaseCarro { [ . . . ]
// I n v R e p ( imp : C l a s e C a r r o ) :
// | imp . p r o d u c t o s | == 40 &&
// | imp . c a n t i d a d V e n t a s | == 40 &&
// en ( imp . masComprado , imp . p r o d u c t o s ) &&
// ( p a r a t o d o x <− imp . c a n t i d a d V e n t a s ) x >= 0 &&
// s i n R e p e t i d o s ( imp . p r o d u c t o s )
class ClaseCarro { [ . . . ]
// I n v R e p ( imp : C l a s e C a r r o ) :
// | imp . p r o d u c t o s | == 40 &&
// | imp . c a n t i d a d V e n t a s | == 40 &&
// en ( imp . masComprado , imp . p r o d u c t o s ) &&
// ( p a r a t o d o x <− imp . c a n t i d a d V e n t a s ) x >= 0 &&
// s i n R e p e t i d o s ( imp . p r o d u c t o s ) &&
// ( p a r a t o d o c , m <− [ 0 . . 4 0 ) )
// ( imp . p r o d u c t o s [m] == masComprado &&
// c != m) => imp . c a n t i d a d V e n t a s [m] >=
// imp . c a n t i d a d V e n t a s [ c ]
class ClaseCarro { [ . . . ]
// I n v R e p ( imp : C l a s e C a r r o ) :
// | imp . p r o d u c t o s | == 40 &&
// | imp . c a n t i d a d V e n t a s | == 40 &&
// en ( imp . masComprado , imp . p r o d u c t o s ) &&
// ( p a r a t o d o x <− imp . c a n t i d a d V e n t a s ) x >= 0 &&
// s i n R e p e t i d o s ( imp . p r o d u c t o s ) &&
// ( p a r a t o d o c , m <− [ 0 . . 4 0 ) )
// ( imp . p r o d u c t o s [m] == masComprado &&
// c != m) => imp . c a n t i d a d V e n t a s [m] >=
// imp . c a n t i d a d V e n t a s [ c ] &&
// ( p a r a t o d o m <− [ 0 . . 4 0 ) ,
// imp . p r o d u c t o s [m] == imp . masComprado )
// imp . c a n t i d a d V e n t a s [m] ==
// imp . v e n t a s B e s t S e l l e r ;
};
Algoritmos y Estructuras de Datos I
Menú
Ejemplo de TAD en imperativo
Ejercicio: Carrito de compras
Para tener en cuenta
Helpers?
Helpers?
Varios TADs en los parámetros?
Buen finde!
¿Preguntas?