Exemple #1
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
Exemple #2
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())
Exemple #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
Exemple #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"
Exemple #5
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
Exemple #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())
Exemple #7
0
    def procesar(self):
		text = "Error en los datos ingresados, deben ser 1, 2, 3 o B y no repetirlos"
		Fin=[1,2,3,'B'];
		C=Pila();
		X=[3,2,1,'B'];
		Found=Pila();
		X[0]=str(_fromUtf8(self.lineEdit.text()))
		X[1]=str(_fromUtf8(self.lineEdit_2.text()))
		X[2]=str(_fromUtf8(self.lineEdit_3.text()))
		X[3]=str(_fromUtf8(self.lineEdit_4.text()))
		
		for i in range(len(X)):
			try:
				X[i]=int(X[i])
			except(ValueError,TypeError):
				if X[i] == 'b' or X[i] == 'B':
					X[i] = 'B'
					pass
				else:
					QMessageBox.information(self.iface.mainWindow(),"test", "%s" % (text), QMessageBox.Ok)
					#self.lineEdit.clear
					#self.lineEdit_2.clear
					#self.lineEdit_3.clear
					#self.lineEdit_4.clear
					#self.label.clear
					#self.treeView.reset
					#break
		print X
		C.apilar(X);
		Found.apilar(False)
		An, Con = Resolv(Fin, X, 'R')
		C.apilar(An);
		Found.apilar(Con)
		Bn, Con = Resolv(Fin, X, 'I')
		C.apilar(Bn);
		Found.apilar(Con)
		Cn, Con = Resolv(Fin, An, 'R')
		C.apilar(Cn);
		Found.apilar(Con)
		Dn, Con = Resolv(Fin, An, 'I')
		C.apilar(Dn);
		Found.apilar(Con)
		En, Con = Resolv(Fin, Bn, 'R')
		C.apilar(En);
		Found.apilar(Con)
		Fn, Con = Resolv(Fin, Bn, 'I')
		C.apilar(Fn);
		Found.apilar(Con)
		print C.items
		print Found.items
		print Found.items.index(True);
Exemple #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")
Exemple #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")
Exemple #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")
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()
Exemple #13
0
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys

from Pila import *

class Libro:

    def __init__(self,nombre,genero,autor):
        self.nombre=nombre
        self.genero=genero
        self.autor=autor

pila = Pila()

pila.apilar(Libro("El Cartero de los Sueños","cuentos infantiles","Laura Gallego"))
pila.apilar(Libro("Un fantasma en apuros","cuentos infantiles","Laura Gallego"))
pila.apilar(Libro("Max ya no hace re¡r","cuentos infantiles","Laura Gallego"))
pila.apilar(Libro("Donde est  Alba?","cuentos infantiles","Laura Gallego"))
pila.apilar(Libro("Alba tiene una amiga muy especial","cuentos infantiles","Laura Gallego"))
pila.apilar(Libro("Por una rosa","relatos","Laura Gallego"))
pila.apilar(Libro("Mañana todavia. ","relatos","Laura Gallego"))
pila.apilar(Libro("El viaje del polizón","relatos","Laura Gallego"))
pila.apilar(Libro("Relatos insólitos","relatos","Laura Gallego"))
pila.apilar(Libro("Relatos de hoy II","relatos","Laura Gallego"))
pila.apilar(Libro("Atlántico. 30 historias de los dos mundos","relatos","Laura Gallego"))
pila.apilar(Libro("Historias para girar","relatos","Laura Gallego"))
pila.apilar(Libro("Topito Terremoto","cuentos ilustrados","Anna Llenas"))
pila.apilar(Libro("El Monstruo de Colores","cuentos ilustrados","Anna Llenas"))
pila.apilar(Libro("El buit","cuentos ilustrados","Anna Llenas"))
pila.apilar(Libro("Diario de las emociones","cuentos ilustrados","Anna Llenas"))
Exemple #14
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")