Logo Passei Direto

finalprogramacion

User badge image
kary Gómez

en

Material

Esta es una vista previa del archivo. Inicie sesión para ver el archivo original

class MulticonjuntoOrdenado():
	 
	#Inicializacion del Multiconjunto Ordenado
	 def __init__(self	 lista: list): 
	 MulticonjuntoOrdenado._ordenamientoporinsercion(lista) 
	 self.lista = lista 
	 
	 
	#Agregar un elemento al multiconjunto recuerde que debe quedar en orden 
	 def agregar(self	 elemento): 
	 self.lista.append(elemento) 
	 MulticonjuntoOrdenado._ordenamientoporinsercion(self.lista) 
	
	
	#Borra una ocurrencia del elemento en el multiconjunto 
	 def borrar(self	 elemento): 
	 listanueva = [] 
	 primerborrado=True 
	 
	 for i in self.lista: 
	 listanueva.append(i)
	 if elemento == i and primerborrado: 
	 listanueva.pop()
	 primerborrado= False 
	 
	 self.lista = listanueva
	
	
	# Verifica que exista el elemento en el multiconjunto 
	 def existe(self	elemento)->bool:
	 for i in self.lista:
	 if i == elemento:
	 return True
	 return False
	# Verifica que exista el elemento en el multiconjunto(con Metodo busquedasecuencial )
	
	 def existe_busquedasecuencial(self	 elemento):
		 pos = 0
		 encontrado = False 
		
		 while pos < len(self.lista) and not encontrado: 
		 if self.lista[pos] == elemento:
		 encontrado = True
		 else:
		 pos = pos+1
		
		 return encontrado 
		
	
	
	
	
	#Cantidad de veces repetidas que aparece el elemento e en el multiconjunto 
	 def repeticiones_e(self	 elemento) -> int:
	 contador = 0
	 for i in self.lista:
	 if i == elemento:
	 contador += 1
	 return contador
	 
	 
	#Devuelve el primer elemento del multiconjunto 
	 def primero(self):
	 return self.lista[0]
	 
	
	#Devuelve el ultimo elemento del multiconjunto
	 def ultimo(self):
	 return self.lista[-1] 
	
	
	#Devuelve en que orden del multiconjunto se encuentra e 
	
	 def devolver_indice(self	 elemento): 
	 
	 listasinrepetidos = MulticonjuntoOrdenado._listasinrepetidos(self)
	 
	 for i in range(len(listasinrepetidos)):
	 if elemento == listasinrepetidos[i]:
	 break 
	 return i
	 
	
	#Devolveme el elemento que esta en el lugar i 
	
	 def devolver_elemento(self	 indice: int):
	
	 listasinrepetidos = MulticonjuntoOrdenado._listasinrepetidos(self)
	 
	 return listasinrepetidos[indice]
	
	
	#Devuelve si el multiconjunto es el vacio
	 def es_vacia(self)->bool: 
	 return self.lista == [] 
	
	 
	
	#Devuelve la cantidad de elementos diferentes del multiconjunto
	 def tamanio(self)->int:
	 listasinrepetidos = MulticonjuntoOrdenado._listasinrepetidos(self) 
	 
	 contador =0
	 
	 for i in listasinrepetidos:
	 contador+=1 
	 
	 return contador
	
	
	#Devuelve la cantidad de elementos del multiconjunto contando repeticiones
	 def tamanio_rep(self)->int: 
	 contador =0
	 
	 for i in self.lista:
	 contador+=1
	 
	 return contador
	 
	 
	 
	#Muestra el multiconjunto (hace el print del multiconjunto) (traduccion a string)
	 def __str__(self):
	 return str(self.lista)
	
	
	 
	#https://runestone.academy/runestone/static/pythoned/SortSearch/ElOrdenamientoPorInsercion.html
	 
	 
	 def _listasinrepetidos(self) ->list:
	
	 listanueva =[self.lista[0]]
	 
	 for i in self.lista[1:]:
	 if i != listanueva[-1]:
	 listanueva.append(i)
	 return listanueva
	 
	 
	 
	 
	 def _ordenamientoporinsercion(unaLista):
	 for indice in range(1	 len(unaLista)):
	
	 valoractual = unaLista[indice]
	 posicion = indice
	
	 while posicion > 0 and unaLista[posicion - 1] > valoractual: 
	 unaLista[posicion] = unaLista[posicion - 1] 
	 posicion = posicion - 1 
	
	 unaLista[posicion] = valoractual 
	
	#tests
	 
	m = MulticonjuntoOrdenado([]) # m = {}
	
	
	assert True == m.es_vacia()	 "Multiconjunto es vacio"
	m.agregar(1) # m = {1}
	assert False == m.es_vacia()	 "Multiconjunto no es vacio"
	assert 1 == m.tamanio()	 "Tamanio del multiconjunto es 1"
	assert True == m.existe(1)	El elemento 1 existe en el multiconjunto
	assert False == m.existe(-1)	 "El elemento -1 existe en el multiconjunto"
	m.agregar(1) # m = {1	1}
	m.agregar(1) # m = {1	1	1}
	assert m.tamanio() == 1	 "El multiconjunto tiene un elemento"
	assert m.tamanio_rep() == 3	 "El multiconjunto tiene un elemento"
	assert 3 == m.repeticiones_e(1)	 "Cantidad de repeticiones del elemento 1 es 3"
	assert 0 == m.repeticiones_e(20)	 "Cantidad de repeticiones del elemento 20 es 0"
	m.agregar(2) # m = {1	1	1	2}
	m.agregar(3) # m = {1	1	1	2	3}
	m.agregar(2) # m = {1	1	1	2	2	3}
	assert 2 == m.repeticiones_e(2)	 "Cantidad de repeticiones del elemento 2 es 2"
	m.agregar(5) # m = {1	1	1	2	2	3	5}
	assert 5 == m.ultimo()#	 "El ultimo elemento del multiconjunto es 5"
	assert 1 == m.primero()#	 "El primer elemento del multiconjunto es 1"
	m.agregar(3) # m = {1	1	1	2	2	3	3	5}
	m.borrar(3) # m = {1	1	1	2	2	3	5}
	assert True == m.existe(3)#	 "Borramos solo una ocurrenicia de 3"
	assert True == m.existe_busquedasecuencial(2)#	 "Borramos solo una ocurrenicia de 3"
	assert 1 == m.repeticiones_e(3)#	 "Cantidad de repeticiones del elemento 3 es 1"
	m.borrar(3) # m = {1	1	1	2	2	5}
	assert False == m.existe(3)#	 "No existe el elemento 3"
	m.agregar(1) # m = {1	1	1	1	2	2	5}
	m.agregar(15) # m = {1	1	1	1	2	2	5	15}
	m.agregar(3) # m = {1	1	1	1	2	2	3	5	15}
	m.agregar(20) # m = {1	1	1	1	2	2	3	5	15	20}
	m.agregar(18) # m = {1	1	1	1	2	2	3	5	15	18	20}
	m.agregar(11) # m = {1	1	1	1	2	2	3	5	11	15	18	20}
	m.agregar(0) # m = {0	1	1	1	1	2	2	3	5	11	15	18	20}
	m.agregar(10) # m = {0	1	1	1	1	2	2	3	5	10	11	 15	18	20}
	assert 10 == m.tamanio()	 "El multiconjunto tiene 10 elementos distintos"
	assert 14 == m.tamanio_rep()	 "El multiconjunto tiene 14 elementos contando repeticiones"
	assert 5 == m.devolver_indice(10)#	 "El 10 esta en el indice 5"
	assert 11 == m.devolver_elemento(6)#	 "El elemento del indice 6 es el 11"
	m.agregar(-1) # m = {-1	0	1	1	1	1	2	2	3	5	10	11	 15	18	20}
	m.agregar(-20) # m = {-20	-1	0	1	1	1	1	2	2	3	5	10	11	 15	18	20}
	m.agregar(-3) # m = {-20	-3	-1	0	1	1	1	1	2	2	3	5	10	11	 15	18	20}
	m.agregar(-3) # m = {-20	-3	-3	-1	0	1	1	1	1	2	2	3	5	10	11	 15	18	20}
	assert False == m.existe(22)# 	 "No existe el elemento 22"
	assert 4 == m.repeticiones_e(1)#	 "Cantidad de repeticiones del 1 es 4"
	assert -20 == m.primero()#	 "El primer elemento del multiconjunto es -20"
	assert 20 == m.ultimo()#	 "El ultimo elemento del multiconjunto es 20"