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