Open Siuuuuuuu07 opened 2 years ago
- numBits(int): numero de bits de la expresion booleana. Ejemplo: ABC || BC'D -> numBits es 4
- listaInicial(list): una lista de listas de mintérminos.
Ejemplo: [[1],[3],[4],[5],[7],[9],[10],[11],[15]]
- listaPrimos(list): aquí almacena los implicantes primos que encuentra. Comienza vacía
Ejemplo: []
- (list) la lista de implicantes primos.
Ejemplo: [[4, 5], [10, 11], [1, 3, 5, 7], [1, 3, 9, 11], [3, 7, 11, 15]]
def hallarPrimos( numBits, listaInicial, listaPrimos, primerCorrida):
paresAgrupados = list()
implicantesUtilizados = list()
huboCombinacion = False
for i in range(0, len(listaInicial)):
if len(listaInicial[i]) == 0: # si la lista esta vacía no tiene que comparar
pass
else:
for j in range(0, len(listaInicial)):
if len(listaInicial[j]) == 0: # si la lista esta vacía no tiene que comparar
pass
else:
# la comparación 'j > i' compara dos elementos una sola vez.
# 'primerCorrida = True' porque la primera combinacion es diferente del resto
if j > i and primerCorrida == True:
if difierenUnaCifra(numBits, combinarMinTerDecBin(numBits, listaInicial[i][0]),
combinarMinTerDecBin(numBits, listaInicial[j][0])) == True:
paresAgrupados.append([listaInicial[i][0], listaInicial[j][0]])
huboCombinacion = True
if implicantesUtilizados.count(listaInicial[i]) == 0:
implicantesUtilizados.append(listaInicial[i])
if implicantesUtilizados.count(listaInicial[j]) == 0:
implicantesUtilizados.append(listaInicial[j])
elif j > i:
if difierenUnaCifra(numBits, combinarMin(numBits, listaInicial[i]),
combinarMin(numBits, listaInicial[j])) == True:
paresAgrupados.append(listaInicial[i] + listaInicial[j])
huboCombinacion = True
if implicantesUtilizados.count(listaInicial[i]) == 0:
implicantesUtilizados.append(listaInicial[i])
if implicantesUtilizados.count(listaInicial[j]) == 0:
implicantesUtilizados.append(listaInicial[j])
for k in listaInicial:
if implicantesUtilizados.count(k) == 0:
if primerCorrida == False and implicanteRepetido(numBits, k ,listaPrimos) == False:
listaPrimos.append(k)
if primerCorrida == True:
listaPrimos.append(k)
if huboCombinacion == False: #No hubo combinaciones, no repita más
return listaPrimos
else:
primerCorrida = False
#Con los elementos que mezclo vuelva a hacer el mismo procedimiento hasta que no se puedan mezclar más
return hallarPrimos(numBits, paresAgrupados, listaPrimos, primerCorrida)
La función recursiva combina los mintérminos y finalmente halla los primos.