Example #1
0
def inicio():

    pila = Pila()

    m = input("ingreso en post-orden:").split(" ")
    k = len(m)

    for j in range(0, k):
        y = m[j]

        if y in ["+", "-", "*", "/"]:
            if (len(pila.items) >= 2):
                der = pila.desapilar()
                izq = pila.desapilar()
                nodo = Nodo(y, izq, der)

                x = evaluar(nodo)
                pila.apilar(x)
            else:
                print("estructura incorrecta")
        else:
            y = int(y)
            pila.apilar(y)

    print(pila.desapilar())
Example #2
0
def inicio():
    
    pila1=Pila()
    pila2=Pila()
    pila3=Pila()
    pila4=Pila()
    
    print("Bienvenido")
    while True:
        print ("1-Agregar Pelicula")
        print ("2-Buscar Pelicula")
        
        print ("3-Salir")
        x=input("Digite una opcion: ")
        x=int(x)
        if x==1:
            
            genero=input("Genero de la Pelicula? ")
            
            actor=input("Actor de la Pelicula? ")
            pelicula=Pelicula(genero,actor)            

            pila1.apilar(pelicula)
        elif x==2:
            g=input("Genero de la Pelicula? ")
            while len(pila1.items) != 0:
                pelicula=pila1.desapilar()
                
                if(g==pelicula.Genero):
                   pila3.apilar(pelicula)
                else
                   pila2.apilar(pelicula)
            a=input("Actor de la Pelicula? ")
            while len(pila3.items) != 0:
                pelicula=pila3.desapilar()
                
                if(a==pelicula.Actor):
                    print ("Pelicula encontrada")
                    pila4.apilar(pelicula)
                else 
                  pila2.apilar(pelicula)
                            
                    
                    

            while len(pila2.items)!= 0:
                pelicula=pila2.desapilar()
                pila1.apilar(pelicula)            
            while len(pila3.items)!= 0:
                pelicula=pila3.desapilar()
                pila1.apilar(pelicula)     
        elif x==3:
            
            break
        else:
            print ("ingrese una opcion valida")
Example #3
0
def reversa(lista):

    long = len(lista)

    if long > 1:
        pila = Pila()
        i = 0

        while i < long:
            pila.apilar(lista[i])
            i = i + 1

        j = 0
        while (not pila.vacia()):
            lista[j] = pila.tope()
            pila.desapilar()
            j = j + 1
Example #4
0
class Compilador:

    def __init__(self):
        self.pila = Pila()
        self.operadores = ['-','+','*','/']

    def posOrden(self,operacion):
        # Inicializa un nuevo objeto tipo Pila
        self.pila.__init__()
        for i in operacion:
            # Compara con un arreglo de operaciones definido
            if i in self.operadores:
                # Tienen que existir por lo menos dos numeros en la pila para una operación
                if self.pila.get_size() >= 2:
                    a = self.pila.desapilar()
                    b = self.pila.desapilar()
                    if i == '-':
                        self.pila.apilar(b-a)
                    elif i == '+':
                        self.pila.apilar(b+a)
                    elif i == '*':
                        self.pila.apilar(b*a)
                    else:
                        if a != 0:
                            self.pila.apilar(round((b/a),2))
                        else:
                            return "Error - Division por cero"
                else:
                    return "Error - Operacion incompleta faltan operandos o valores"
            # Todo lo que no se una operación lo apila
            # TODO: Faltaria un elif para comparar si es una variable ej: x,y,z
            else:
                try:
                    self.pila.apilar(float(i))
                except ValueError:
                    return "Error - Valor no valido: '" + i + "'"
        # Tiene que existir un unico valor en la pila al finalizar las operaciones
        if self.pila.get_size() == 1:
            return self.pila.desapilar()
        else:
            return "Error - Valores sin evaluar"
Example #5
0
def capicua(string) :
	# RV = False

	long = len(string)

	listaDer = []
	listaIzq = []

	pila = Pila()

	i = 0
	while i < long :
		pila.apilar(string[i])
		i = i + 1

	while pila.tope() != "#" :
		listaDer = listaDer + [pila.tope()]
		pila.desapilar()
	# print listaDer
	pila.desapilar()  # desapilo el #

	while not pila.vacia() :
		listaIzq = listaIzq + [pila.tope()]
		pila.desapilar()
	# print listaIzq

	reversa(listaDer)
	# print listaDer
	RV = (listaIzq == listaDer)

	# print RV

	return RV
Example #6
0
def inicio():

    pila = Pila()
    pila2 = Pila()
    pila3 = Pila()

    print("ingrese vacio para Terminar")
    while True:
        m = raw_input("ingreso en post-orden:").split(" ")
        k = len(m)
        if m == '':
            break
            print("final")

        if k == 0:
            break
            print("final")

        for j in range(0, k):
            y = m[j]
            if (y == "="):
                while len(pila2.items) != 0:
                    variable = pila2.desapilar()
                    pila3.apilar(variable)
                    print(variable.Nombre, "=", variable.Valor)

            elif y in ["+", "-", "*", "/"]:
                if (len(pila.items) >= 2):
                    der = pila.desapilar()
                    izq = pila.desapilar()
                    nodo = Nodo(y, izq, der)

                    x = evaluar(nodo)
                    pila.apilar(x)
                else:
                    print("estructura incorrecta")
            else:
                try:
                    y = int(y)
                    pila.apilar(y)
                except:
                    if (m[j + 1] == "="):
                        variable = Variable(y, pila.desapilar())
                        pila2.apilar(variable)

                        print("variable correcta")
                    else:
                        while len(pila2.items) != 0:
                            variable = pila2.desapilar()
                            pila3.apilar(variable)
                            if (y == variable.Nombre):
                                pila.apilar(variable.Valor)

                        while len(pila3.items) != 0:
                            variable = pila3.desapilar()
                            pila2.apilar(variable)

    print(pila.desapilar())
Example #7
0
def capicua(string):

    long = len(string)
    RV = True

    # si len es 1 entonces string="#" y por lo tanto es capicúa.
    # la precondición es que el string sea no vacío.
    if long > 1:
        pila = Pila()
        i = 0

        while string[i] != "#":
            pila.apilar(string[i])
            i = i + 1

        i = i + 1  #para pasar el "#"

        while not pila.vacia() and i < long and string[i] == pila.tope():
            pila.desapilar()
            i = i + 1

        RV = (i == long and pila.vacia())

    return RV
Example #8
0
from Pila import *


class Libro:
    def __init__(self, nombre, cat, autor):
        self.nombre = nombre
        self.cat = cat
        self.autor = autor


pila = Pila()

pila.apilar(Libro("El Cartero de los Suenos", " Infantil", "Laura Gallego"))
pila.apilar(Libro("Un fantasma en apuros", " Infantil", "Laura Gallego"))
pila.apilar(Libro("Max ya no hace reir", " Infantil", "Laura Gallego"))
pila.apilar(Libro("Donde esta  Alba?", " Infantil", "Laura Gallego"))
pila.apilar(
    Libro("Alba tiene una amiga muy especial", " Infantil", "Laura Gallego"))
pila.apilar(Libro("Por una rosa", "Relatos", "Laura Gallego"))
pila.apilar(Libro("Manana todavia. ", "Relatos", "Laura Gallego"))

print("La pila tiene ", pila.tamano(), " libros \n")

while pila.es_vacia() == False:
    Libro = pila.desapilar()
    print(pila.tamano() + 1, ")", Libro.nombre)
    print("Categoria: ", Libro.cat)
    print("Autor: ", Libro.autor)
    print("\n")
Example #9
0
class Automata_impar:
    """automata_act=['p','p','p','q','q','q']
	automata_api=['#','a','b','#','a','b']
	automata_MH=['a','b','c','e']
	automata_Mt=[['p','p','q',' '],
				['p','p','q',' '],
				['p','p','q',' '],
				[' ',' ',' ','r'],
				['q',' ',' ',' '],
				[' ','q',' ',' ']]
	automata_Ma=[['#a','#b','#',' '],
				['aa','ab','a',' '],
				['ba','bb','b',' '],
				[' ',' ',' ','#'],
				['e',' ',' ',' '],
				[' ','e',' ',' ']]"""
    transicion_p = None
    transicion_q = None
    transicion_r = None
    arcos = []

    def __init__(self, cadena):
        self.pila = Pila()
        self.bandera = False
        self.i = -1
        self.transicion_p = True
        self.transicion_q = False
        self.transicion_r = False
        self.palabra = cadena
        self.verificar()
        self.definir()
        """self.arcos.append(Arco('p','p','#','a','#a'))
		self.arcos.append(Arco('p','p','#','b','#b'))
		self.arcos.append(Arco('p','q','#','c','#'))
		self.arcos.append(Arco('p','p','a','a','aa'))
		self.arcos.append(Arco('p','p','a','b','ab'))
		self.arcos.append(Arco('p','q','a','c','a'))
		self.arcos.append(Arco('p','p','b','a','ba'))
		self.arcos.append(Arco('p','p','b','b','bb'))
		self.arcos.append(Arco('p','q','b','c','b'))
		self.arcos.append(Arco('q','r','#','e','#'))
		self.arcos.append(Arco('q','q','a','a','e'))
		self.arcos.append(Arco('q','q','b','b','e'))"""

    def verificar(self):
        if (self.palabra.count("c") == 1):
            cad1, cad2 = self.palabra.split("c")
            if (cad1 == cad2[::-1]):
                self.bandera = True

    def definir(self):
        arco = Arco('p', 'p', '#', 'a', '#a')
        self.arcos.append(arco)
        arco = Arco('p', 'p', '#', 'b', '#b')
        self.arcos.append(arco)
        arco = Arco('p', 'q', '#', 'c', '#')
        self.arcos.append(arco)
        arco = Arco('p', 'p', 'a', 'a', 'aa')
        self.arcos.append(arco)
        arco = Arco('p', 'p', 'a', 'b', 'ab')
        self.arcos.append(arco)
        arco = Arco('p', 'q', 'a', 'c', 'a')
        self.arcos.append(arco)
        arco = Arco('p', 'p', 'b', 'a', 'ba')
        self.arcos.append(arco)
        arco = Arco('p', 'p', 'b', 'b', 'bb')
        self.arcos.append(arco)
        arco = Arco('p', 'q', 'b', 'c', 'b')
        self.arcos.append(arco)
        arco = Arco('q', 'r', '#', 'e', '#')
        self.arcos.append(arco)
        arco = Arco('q', 'q', 'a', 'a', 'e')
        self.arcos.append(arco)
        arco = Arco('q', 'q', 'b', 'b', 'e')
        self.arcos.append(arco)

    def ejecucion(self, caracter_palabra, verifica):
        if (self.transicion_p == True and verifica == 0):
            print("estoy en p")
            verifica = 1
            for arco in self.arcos:
                if (arco.estadoActual() == 'p' and arco.caracterTransicion()
                        == self.pila.elementos[-1]
                        and caracter_palabra == arco.nombreArco()):
                    print(caracter_palabra + "\n")
                    print(self.pila.elementos)
                    self.pila.desapilar()
                    print(self.pila.elementos)
                    self.pila.apilar(arco.caracterApilar())
                    print(self.pila.elementos)
                    if (arco.estadoSiguiente() == 'q'):
                        self.transicion_p = False
                        self.transicion_q = True
                        self.transicion_r = False
                    break

        if (self.transicion_q == True and verifica == 0):
            print("estoy en q")
            verifica = 1
            for arco in self.arcos:
                if (arco.estadoActual() == 'q' and arco.caracterTransicion()
                        == self.pila.elementos[-1]
                        and caracter_palabra == arco.nombreArco()):
                    print(self.pila.elementos)
                    self.pila.desapilar()
                    print(self.pila.elementos)
                    self.pila.apilar(arco.caracterApilar())
                    print(self.pila.elementos)
                    if (arco.estadoSiguiente() == 'r'):
                        self.transicion_p = False
                        self.transicion_q = False
                        self.transicion_r = True
                    break

        if (self.transicion_r == True):
            print("estoy en r")
            verifica = 1

    def programa(self):
        for letras in self.palabra:
            if (self.transicion_r == False):
                print("lee " + letras + "\n")
                self.ejecucion(letras, 0)
                #print(self.transicion_p)
                #print(self.transicion_q)
                #print(self.transicion_r)
                if (self.transicion_r == True):
                    break
                #self.i=self.i+1
            else:
                break

        if (self.pila.elementos[-1] == '#' and self.transicion_r == False
                and len(self.pila.elementos) == 1):
            print("toma e")
            self.ejecucion('e', 0)

        self.conclusion()

    def conclusion(self):
        #print(self.i)
        #print(len(self.palabra))
        if (self.transicion_r == True and self.bandera == True):
            print("es Palindromo")
        else:
            print("no es Palindromo")
Example #10
0
    def procesar(self):
		text = "Error en los datos ingresados, deben ser 1, 2, 3 o B y no repetirlos"
		k = 0;
		C=Pila();
		cont = 0;
		final=[0]*4;
		pilaf=[0]*4;
		Found=Pila();
		pilaf[0]=str(_fromUtf8(self.lineEdit.text()))
		pilaf[1]=str(_fromUtf8(self.lineEdit_2.text()))
		pilaf[2]=str(_fromUtf8(self.lineEdit_3.text()))
		pilaf[3]=str(_fromUtf8(self.lineEdit_4.text()))
		for i in range(len(pilaf)):
			try:
				pilaf[i]=int(pilaf[i])
			except(ValueError,TypeError):
				if pilaf[i] == 'b' or pilaf[i] == 'B':
					pilaf[i] = 'B'
					pass
				else:
					QMessageBox.information(self.iface.mainWindow(),"test", "%s" % (text), QMessageBox.Ok)
		final[0]=str(_fromUtf8(self.lineEdit_5.text()))
		final[1]=str(_fromUtf8(self.lineEdit_6.text()))
		final[2]=str(_fromUtf8(self.lineEdit_7.text()))
		final[3]=str(_fromUtf8(self.lineEdit_8.text()))
		for i in range(len(final)):
			try:
				final[i]=int(final[i])
			except(ValueError,TypeError):
				if final[i] == 'b' or final[i] == 'B':
					final[i] = 'B'
					pass
				else:
					QMessageBox.information(self.iface.mainWindow(),"test", "%s" % (text), QMessageBox.Ok)
		C.apilar(pilaf)	
		while(pilaf != final or k < 20):
			C.desapilar()       
			derecha, sux = Resolv(final, pilaf, 'R')
			
			if C.vacia():
				C.apilar(derecha)
			else:
				for i in range(len(C.items)):
					if sonListasIguales(C.items[i], derecha) == False:
						cont += 1
				if cont == len(C.items):
					C.apilar(derecha)
				cont = 0
						
			izq, sux1 = Resolv(final, pilaf, 'I')
			
			if C.vacia():
				C.apilar(izq)
			else:
				for i in range(len(C.items)):
					if sonListasIguales(C.items[i], izq) == False:
						cont += 1
				if cont == len(C.items):
					C.apilar(izq)
				cont = 0
						
			for i in range(len(pilaf)):
				pilaf[i] = derecha[i]
			self.textBrowser.append("%s" % C.items)
			k += 1
class Automata_par:
    transicion_p = None
    transicion_q = None
    transicion_r = None
    arcos = []

    def __init__(self, cadena):
        self.pila = Pila()
        self.bandera = False
        self.i = -1
        self.transicion_p = True
        self.transicion_q = False
        self.transicion_r = False
        self.palabra = cadena
        self.verificar()
        self.definir()

    def verificar(self):
        mitad = int(len(self.palabra) / 2)
        if (len(self.palabra) % 2 == 0):
            cad1 = self.palabra[:mitad]
            cad2 = self.palabra[mitad:]
            if (cad1 == cad2[::-1]):
                self.bandera = True

    def definir(self):
        arco = Arco('p', 'p', '#', 'a', '#a')
        self.arcos.append(arco)
        arco = Arco('p', 'p', '#', 'b', '#b')
        self.arcos.append(arco)
        #arco=Arco('p','p','a','a','aa')
        #self.arcos.append(arco)
        arco = Arco('p', 'q', 'a', 'a', 'e')
        self.arcos.append(arco)
        arco = Arco('p', 'p', 'a', 'b', 'ab')
        self.arcos.append(arco)
        arco = Arco('p', 'p', 'b', 'a', 'ba')
        self.arcos.append(arco)
        #arco=Arco('p','p','b','b','bb')
        #self.arcos.append(arco)
        arco = Arco('p', 'q', 'b', 'b', 'e')
        self.arcos.append(arco)
        arco = Arco('q', 'r', '#', 'e', '#')
        self.arcos.append(arco)
        arco = Arco('q', 'q', 'a', 'a', 'e')
        self.arcos.append(arco)
        arco = Arco('q', 'q', 'b', 'b', 'e')
        self.arcos.append(arco)

    def ejecucion(self, caracter_palabra, verifica):
        if (self.transicion_p == True and verifica == 0):
            print("estoy en p")
            verifica = 1
            for arco in self.arcos:
                if (arco.estadoActual() == 'p' and arco.caracterTransicion()
                        == self.pila.elementos[-1]
                        and caracter_palabra == arco.nombreArco()):
                    print(caracter_palabra + "\n")
                    print(self.pila.elementos)
                    self.pila.desapilar()
                    print(self.pila.elementos)
                    self.pila.apilar(arco.caracterApilar())
                    print(self.pila.elementos)
                    if (arco.estadoSiguiente() == 'q'):
                        self.transicion_p = False
                        self.transicion_q = True
                        self.transicion_r = False
                    break

        if (self.transicion_q == True and verifica == 0):
            print("estoy en q")
            verifica = 1
            for arco in self.arcos:
                if (arco.estadoActual() == 'q' and arco.caracterTransicion()
                        == self.pila.elementos[-1]
                        and caracter_palabra == arco.nombreArco()):
                    print(self.pila.elementos)
                    self.pila.desapilar()
                    print(self.pila.elementos)
                    self.pila.apilar(arco.caracterApilar())
                    print(self.pila.elementos)
                    if (arco.estadoSiguiente() == 'r'):
                        self.transicion_p = False
                        self.transicion_q = False
                        self.transicion_r = True
                    break

        if (self.transicion_r == True):
            print("estoy en r")
            verifica = 1

    def programa(self):
        for letras in self.palabra:
            if (self.transicion_r == False):
                print("lee " + letras + "\n")
                self.ejecucion(letras, 0)
                print(self.transicion_p)
                print(self.transicion_q)
                print(self.transicion_r)
                if (self.transicion_r == True):
                    break
            else:
                break

        if (self.pila.elementos[-1] == '#' and self.transicion_r == False
                and len(self.pila.elementos) == 1):
            print("toma e")
            self.ejecucion('e', 0)

        self.conclusion()

    def conclusion(self):
        if (self.transicion_r == True and self.bandera == True):
            print("es Palindromo")
        else:
            print("no es Palindromo")
Example #12
0
def inicio():

    pila = Pila()
    pila2 = Pila()
    pila3 = Pila()
    token = Lex()

    exp_valor = re.compile('[0-9]+$')
    exp_operador = re.compile('[\+\*\-/=]{1,1}$')
    exp_variable = re.compile('([a-z]+)([A-Z0-9_]*)$')

    print("ingrese vacio para Terminar")
    while True:
        m = input("ingreso en post-orden:").split(" ")
        k = len(m)
        if (k < 2):
            break

        for j in range(0, k):
            y = m[j]

            if (token.operador(y)):
                if (y == "="):
                    while len(pila2.items) != 0:
                        variable = pila2.desapilar()
                        pila3.apilar(variable)
                        print(variable.Nombre, "=", variable.Valor)
                    while len(pila3.items) != 0:
                        variable = pila3.desapilar()
                        pila2.apilar(variable)

                else:
                    if (len(pila.items) >= 2):
                        der = pila.desapilar()
                        izq = pila.desapilar()
                        nodo = Nodo(y, izq, der)
                        x = evaluar(nodo)
                        pila.apilar(x)
                    else:
                        print("estructura incorrecta")

            elif (token.valor(y)):
                y = int(y)
                pila.apilar(y)

            elif (token.variable(y)):
                if (m[j + 1] == "="):
                    variable = Variable(y, pila.desapilar())
                    pila2.apilar(variable)
                else:
                    while len(pila2.items) != 0:
                        variable = pila2.desapilar()
                        if (y == variable.Nombre):
                            pila.apilar(variable.Valor)
                        pila3.apilar(variable)

                    while len(pila3.items) != 0:
                        variable = pila3.desapilar()
                        pila2.apilar(variable)
            else:
                print("entrada incorrecta para: ", y)

    print(pila.desapilar())
    token.tabla()