Subido por kezonaxozo

AFD equivalente a AFND

Anuncio
Funcion Extendida AFD
November 22, 2017
# ================================================================
#
NOMBRE:
CALLASACA ACUN~A FERNANDO
#
CODIGO:
140989
#
ALGORITMO:
AFD equivalente a AFND
# ================================================================
#
Leemos Datos
# Leemos los estados
NE = int(input("Ingrese la cantidad de estados: "))
S = []
for k in range(NE):
S.append(k)
# Leemos le Alfabeto
NA = int(input("Ingrese la cantidad de elementos del Alfabeto: "))
A = []
for k in range(NA):
Elemento = str(input("Ingrese al Alfabeto "+str(k+1)+" : "))
A.append(Elemento)
# Leemos el Estado Inicial
NQo = int(input("Ingresa la cantidad de estados inciales que tiene el AFND: "))
Qo = []
for k in range(NQo):
o = str(input("Ingrese el estado Inicial "+str(k+1)+" ( q(?) ): "))
Qo.append(o)
# Leemos la cantidad de estados finales
NF = int(input("Ingrese la cantidad de Estados Finales: "))
F = []
for k in range(NF):
Elemento = int(input("Ingrese el Estado Final "+str(k+1)+" ( q(?) ): "))
F.append(Elemento)
ConcaF = ""
for k in range(len(F)):
ConcaF+=str(F[k])
1
F = ConcaF
# Leemos la tabla de estados
# Creamos una Lista E para que ahy esten una lista de listas de listas de estados
E = []
for k in range(NE):
# Creamos una lista L para guardar los elementos de cada estado con sus transformaciones
L = []
for j in range(NA):
# Pedimos cuantos estados estan mediante una transformacion mediante un alfabeto
NumeroEstados = int(input("Cuantos Estados hay la TransFormacion del estado q("+str(
# Creamos una Lista NumEs para guardar la cantidad de estados que van de un estado a
NumEs = []
for i in range(NumeroEstados):
# Leemos los estados individuales
EleNu = int(input("Ingrese la "+str(i+1)+"° Transformacion del estado q("+str(k)
NumEs.append(EleNu)
L.append(NumEs)
E.append(L)
# Modulo para darle un estado grande y buscarlo en el conjunto de estados
def BuscarEstado(E,Estado):
Encontrado = False
for k in range(len(E)):
if(E[k]==Estado):
Encontrado=True
break
return Encontrado
###################
PROGRAMA PRINCIPAL ###########################
# ---------- MODULO PRINCIPAL ----------# Modulo para hallar todos los estados del AFD
# Dandole como parametros:
#
1.- Tabla de Transiciones del AFND en lista de listas
#
2.- El estado Inicial en String
#
3.- El Alfabeto
def ConseguirEstadosAFD(E,Qo,A,EE,Transiciones):
PrimerEstadoAFD = ""
for k in range(len(Qo)):
PrimerEstadoAFD+=str(Qo[k])
EE.append(PrimerEstadoAFD)
# h = contador infinito
h=0
# L = lista donde guardaremos los estados
2
#
#
#
#
# que no se repiten para trabajar solo con ellos
L = []
# El While lo PUSE un NUMERO GRANDE
# asi me aseguro que siempre hallara todos los estados
# teniendo en cuenta el ((BREAK)) cuando ya no necesite el ((h))
while(h<100000000000000000000):
for k in range(len(Qo)):
Aux = Qo[k]
if(len(Aux)==1):
Aux = int(Aux)
for j in range(len(A)):
P = E[Aux][j]
Es = ""
for i in range(len(P)):
Es+=str(P[i])
Transiciones.append(Es)
if(BuscarEstado(EE,Es)==False):
EE.append(Es)
L.append(Es)
else:
for m in range(len(A)):
Con = []
for j in range(len(Aux)):
AuxQ = int(Aux[j])
P = E[AuxQ][m]
for i in range(len(P)):
Con.append(P[i])
Con = set(Con)
Con.union({})
Con = list(Con)
Es = ""
for n in range(len(Con)):
Es+=str(Con[n])
Transiciones.append(Es)
if(BuscarEstado(EE,Es)==False):
EE.append(Es)
L.append(Es)
h+=1
if(len(L)==0):
break
Qo = L
L = []
DATOS FINALES
E = estados del AFND en lista de listas
Qo = estados iniciales
A = alfabeto (sigma)
3
#
#
#
#
#
#
F = estados finales del AFND
Datos cuaderno
E = [[[1,3],[2]],[[4],[1]],[[1],[4]],[[2,4],[3]],[[4],[2]]]
A = ["x","y"]
Qo = ["0"]
F = "4"
EE = []
Transiciones = []
#######################
#######################
EJECUCION DEL PROGRAMA
OBTENGO EL (((EE)))) ESTADOS AFD
ConseguirEstadosAFD(E,Qo,A,EE,Transiciones)
############ MODULO PARA IMPRIMIR EL EQUIVALENTE AFD
def ImprimirEquivalenteAFD(EE,A,F,Transiciones):
print()
print("============================================")
print("********** AFD EQUIVALENTE A AFND **********")
print("============================================")
print()
print(" Alfabeto ")
AA = A
A = set(A)
print(A)
print()
print(" Estados AFD ")
print(EE)
print()
print(" Estado Inicial AFD ")
print(EE[0])
print(" Estados Finales AFD ")
Est = []
for k in range(len(EE)):
Estado = EE[k]
for j in range(len(Estado)):
for i in range(len(F)):
if(Estado[j]==F[i]):
Est.append(Estado)
break
print(set(Est))
print(" Transiciones AFD ")
Alfa = ""
for j in range(len(AA)):
4
Alfa+=" "*(7)+str(AA[j])
print(Alfa)
for k in range(len(EE)):
Linea = "Q"+str(EE[k])+" "*(5-len(EE[k]))
for j in range(len(A)):
Linea += "
Q"+Transiciones[k+k+j]
print(Linea)
ImprimirEquivalenteAFD(EE,A,F,Transiciones)
2 minutes ago
76.953 seconds
Ingrese la cantidad de estados:
5
Ingrese la cantidad de elementos del Alfabeto:
2
Ingrese al Alfabeto 1 :
x
Ingrese al Alfabeto 2 :
y
Ingresa la cantidad de estados inciales que tiene el AFND:
1
Ingrese el estado Inicial 1 ( q(?) ):
0
Ingrese la cantidad de Estados Finales:
1
Ingrese el Estado Final 1 ( q(?) ):
4
Cuantos Estados hay la TransFormacion del estado q(0) mediante
2
Ingrese la 1° Transformacion del estado q(0) mediante (x):
1
Ingrese la 2° Transformacion del estado q(0) mediante (x):
3
Cuantos Estados hay la TransFormacion del estado q(0) mediante
1
Ingrese la 1° Transformacion del estado q(0) mediante (y):
2
Cuantos Estados hay la TransFormacion del estado q(1) mediante
1
Ingrese la 1° Transformacion del estado q(1) mediante (x):
4
Cuantos Estados hay la TransFormacion del estado q(1) mediante
1
Ingrese la 1° Transformacion del estado q(1) mediante (y):
1
Cuantos Estados hay la TransFormacion del estado q(2) mediante
5
(x):
(y):
(x):
(y):
(x):
1
Ingrese
1
Cuantos
1
Ingrese
4
Cuantos
2
Ingrese
2
Ingrese
4
Cuantos
1
Ingrese
3
Cuantos
1
Ingrese
4
Cuantos
1
Ingrese
2
la 1° Transformacion del estado q(2) mediante (x):
Estados hay la TransFormacion del estado q(2) mediante (y):
la 1° Transformacion del estado q(2) mediante (y):
Estados hay la TransFormacion del estado q(3) mediante (x):
la 1° Transformacion del estado q(3) mediante (x):
la 2° Transformacion del estado q(3) mediante (x):
Estados hay la TransFormacion del estado q(3) mediante (y):
la 1° Transformacion del estado q(3) mediante (y):
Estados hay la TransFormacion del estado q(4) mediante (x):
la 1° Transformacion del estado q(4) mediante (x):
Estados hay la TransFormacion del estado q(4) mediante (y):
la 1° Transformacion del estado q(4) mediante (y):
============================================
********** AFD EQUIVALENTE A AFND **********
============================================
Alfabeto
{'x', 'y'}
Estados AFD
['0', '13', '2', '24', '1', '4', '14', '12']
Estado Inicial AFD
0
Estados Finales AFD
{'4', '24', '14'}
Transiciones AFD
x
y
Q0
Q13
Q2
Q13
Q24
Q13
Q2
Q1
Q4
Q24
Q14
Q24
6
Q1
Q4
Q14
Q12
Q4
Q4
Q4
Q14
Q1
Q2
Q12
Q14
7
Descargar