Subido por kezonaxozo

AFND

Anuncio
AFND
November 22, 2017
# ================================================================
#
NOMBRE:
CALLASACA ACUN~A FERNANDO
#
CODIGO:
140989
#
ALGORITMO:
AFND
# ================================================================
# 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
Qo = int(input("Ingresa el estado Inicial del AFND: "))
# 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)
# 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 = []
1
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)
print(E)
# Leemos la Palabra
Palabra = str(input("Ingresa la Palabra para realizar la Funcion Extendida: "))
### ==================== ###
# Modulo par hallar La Funcion Extendida de una Palabra
# Metodo para buscar el Indice de la Letra que se encuentra en una lista de listas
def BuscarIndiceLetra(L,Letra):
Indice = -1
for k in range(len(L)):
if(L[k]==Letra):
Indice = k
break;
return Indice
# Metodo para buscar un elemento en una lista
def BuscarElementoLista(L,Elemento):
E = False
for k in range(len(L)):
if(L[k]==Elemento):
E = True
break;
return E
# Metodo para buscar si llego al final uno de los caminos
def CaminosFinales(F,Lista):
Llego = False
for k in range(len(Lista)):
for j in range(len(F)):
if(Lista[k]==F[j]):
Llego = True
break
return Llego
2
# Metodo para hallar si una palabra pertenece en el AFND
def AFND(Palabra,Qo,E,A,Fin):
# Hacemos un FOr para recorrer todas la palabras
for k in range(len(Palabra)):
# Sacamos todas los estados de transiciones
Es = E[Qo][BuscarIndiceLetra(A,Palabra[k])]
# Si es que solamente tiene una transicion
if(len(Es)==1):
# Siempre Agregamos para ver si llego al estado final
Fin.append(Es[0])
AFND(Palabra[k+1:],Es[0],E,A,Fin)
# SI es que tiene dos transiciones
elif(len(Es)==2):
Fin.append(Es[0])
AFND(Palabra[k+1:],Es[0],E,A,Fin)
Fin.append(Es[1])
AFND(Palabra[k+1:],Es[1],E,A,Fin)
# Igualmente para tres estados
else:
Fin.append(Es[0])
AFND(Palabra[k+1:],Es[0],E,A,Fin)
Fin.append(Es[1])
AFND(Palabra[k+1:],Es[1],E,A,Fin)
Fin.append(Es[2])
AFND(Palabra[k+1:],Es[2],E,A,Fin)
Fin = []
#Qo = 0
#A = ["x","y","z"]
#E = [[[1, 3], [1], [2]], [[4], [4], [2]], [[3], [1, 4], [3]], [[4], [3], [4]], [[], [4], [3
#F = [4]
#Palabra = "xzy"
#Respuesta es = SI
#En esta variable guardamos el estado en que se convirtio la funcion extendida
AFND(Palabra,Qo,E,A,Fin)
# Aca Buscamos si el estado final Q llego a uno de los estados Finales
# Imprimimos
if(CaminosFinales(F,Fin)):
print("Si Pertenece al Lenguaje del AFND")
else:
print("No Pertenece al Lenguaje de AFND")
3 minutes ago
189.993 seconds
Ingrese la cantidad de estados:
5
Ingrese la cantidad de elementos del Alfabeto:
3
3
Ingrese
x
Ingrese
y
Ingrese
z
Ingresa
0
Ingrese
1
Ingrese
4
Cuantos
1
Ingrese
1
Cuantos
3
Ingrese
1
Ingrese
1
Ingrese
1
Cuantos
2
Ingrese
1
Ingrese
4
Cuantos
1
Ingrese
4
Cuantos
1
Ingrese
2
Cuantos
1
Ingrese
3
Cuantos
2
Ingrese
al Alfabeto 1 :
al Alfabeto 2 :
al Alfabeto 3 :
el estado Inicial del AFND:
la cantidad de Estados Finales:
el Estado Final 1 ( q(?) ):
Estados hay la TransFormacion del estado q(0) mediante (x):
la 1° Transformacion del estado q(0) mediante (x):
Estados hay la TransFormacion del estado q(0) mediante (y):
la 1° Transformacion del estado q(0) mediante (y):
la 2° Transformacion del estado q(0) mediante (y):
la 3° Transformacion del estado q(0) mediante (y):
Estados hay la TransFormacion del estado q(0) mediante (z):
la 1° Transformacion del estado q(0) mediante (z):
la 2° Transformacion del estado q(0) mediante (z):
Estados hay la TransFormacion del estado q(1) mediante (x):
la 1° Transformacion del estado q(1) mediante (x):
Estados hay la TransFormacion del estado q(1) mediante (y):
la 1° Transformacion del estado q(1) mediante (y):
Estados hay la TransFormacion del estado q(1) mediante (z):
la 1° Transformacion del estado q(1) mediante (z):
Estados hay la TransFormacion del estado q(2) mediante (x):
la 1° Transformacion del estado q(2) mediante (x):
4
1
Ingrese la 2° Transformacion del estado q(2) mediante (x):
4
Cuantos Estados hay la TransFormacion del estado q(2) mediante (y):
1
Ingrese la 1° Transformacion del estado q(2) mediante (y):
2
Cuantos Estados hay la TransFormacion del estado q(2) mediante (z):
1
Ingrese la 1° Transformacion del estado q(2) mediante (z):
4
Cuantos Estados hay la TransFormacion del estado q(3) mediante (x):
1
Ingrese la 1° Transformacion del estado q(3) mediante (x):
3
Cuantos Estados hay la TransFormacion del estado q(3) mediante (y):
1
Ingrese la 1° Transformacion del estado q(3) mediante (y):
4
Cuantos Estados hay la TransFormacion del estado q(3) mediante (z):
0
Cuantos Estados hay la TransFormacion del estado q(4) mediante (x):
1
Ingrese la 1° Transformacion del estado q(4) mediante (x):
1
Cuantos Estados hay la TransFormacion del estado q(4) mediante (y):
1
Ingrese la 1° Transformacion del estado q(4) mediante (y):
4
Cuantos Estados hay la TransFormacion del estado q(4) mediante (z):
1
Ingrese la 1° Transformacion del estado q(4) mediante (z):
3
[[[1], [1, 1, 1], [1, 4]], [[4], [2], [3]], [[1, 4], [2], [4]], [[3], [4], []], [[1], [4], [
Ingresa la Palabra para realizar la Funcion Extendida:
xzy
Si Pertenece al Lenguaje del AFND
5
Descargar