Example #1
0
 def __init__(self, nombre, contraseña):
     self.__nombre = nombre
     self.__contraseña = contraseña
     self.__cola = Cola()
     self.__pila = Pila()
     #self.__matriz = Matriz()
     #self.__matrizTranspuesta =
     self.__validacionXML = False
Example #2
0
def infixToSufix(regexInfijo):
    #alfabeto = "abcdefghijklmnopqrstuvxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    #operadores = "+|*."
    #agrupadores = "()[]}{"
    pila = Pila()
    salida = ""
    for char in regexInfijo:
        #print("pila antes Iter con:", char)
        #pila.print()
        #print("Salida antes de Iter:", salida)
        if char in alfabeto:
            salida += char
        elif char in operadores or char in agrupadores:
            if pila.isEmpty() or pila.getTop() == '(':
                pila.push(char)
            elif char == '(':
                pila.push(char)
            elif char == ')':
                while not pila.isEmpty() and pila.getTop() != '(':
                    salida += pila.pop()
                if pila.getTop() == '(':
                    pila.pop()
            elif pila.getTop() not in agrupadores and getPrecedence(
                    char) > getPrecedence(pila.getTop()):
                pila.push(char)
            elif pila.getTop() not in agrupadores and getPrecedence(
                    char) == getPrecedence(pila.getTop()):
                if not pila.isEmpty():
                    if pila.getTop() in '+*':  #Asociacion R -> L
                        pila.push(char)
                    elif pila.getTop() in ".|":  #Asociacion L -> R
                        salida += pila.pop()
                        pila.push(char)
            elif pila.getTop() not in agrupadores and getPrecedence(
                    char) < getPrecedence(pila.getTop()):
                salida += pila.pop()
                while not pila.isEmpty() and \
                   pila.getTop() not in agrupadores and \
                   getPrecedence(char) < getPrecedence(pila.getTop()):
                    salida += pila.pop()
                if not pila.isEmpty() and \
                  pila.getTop() not in agrupadores and \
                  getPrecedence( pila.getTop() ) == getPrecedence(char): #Desempate
                    if pila.getTop() in '+*':  #Asociacion R -> L
                        pila.push(char)
                    elif pila.getTop() in ".|":  #Asociacion L -> R
                        salida += pila.pop()
                        pila.push(char)
                        continue
                pila.push(
                    char
                )  #Si no se cumple el if anterior, quiere decir que la precedencia del tope de la pila será mayor al del char en cuestion
        else:
            return "Caracter no soportado: '" + char + "'"
        #print("pila despues de iter: ")
        #pila.print()
        #print("Salida despues de Iter:", salida)
        #print("................................................")

    while not pila.isEmpty():
        salida += pila.pop()

    return salida
 def operar(self):
     operacion = self.post
     aux = ""
     self.pasos = ""
     pila = Pila()
     if operacion != None:
         for caracter in operacion:
             #------------------------------------contatedo numero
             if caracter >= '0' and caracter <= '9':
                 aux = aux + caracter
             #-------------------------------apilar numero
             elif caracter == " ":
                 if aux != "":
                     self.pasos = self.pasos + "push(" + aux + "),"
                     pila.push(int(aux))
                 aux = ""
             #-------------------------------- sumo numeros
             elif caracter == "+":
                 numero2 = pila.pop()
                 numero1 = pila.pop()
                 self.pasos = self.pasos + "pop(),pop(),"
                 if numero1 != None and numero2 != None:
                     resultado = numero1 + numero2
                     self.pasos = self.pasos + str(numero1) + " + " + str(
                         numero2) + " = " + str(resultado) + ","
                     pila.push(resultado)
                     self.pasos = self.pasos + "push(" + str(
                         resultado) + "),"
                 else:
                     self.pasos = self.pasos + "Error de syntaxis :("
                     return "false"
             #-------------------- resto numeros
             elif caracter == "-":
                 numero2 = pila.pop()
                 numero1 = pila.pop()
                 if numero1 != None and numero2 != None:
                     resultado = numero1 - numero2
                     self.pasos = self.pasos + str(numero1) + " - " + str(
                         numero2) + " = " + str(resultado) + ","
                     pila.push(resultado)
                     self.pasos = self.pasos + "push(" + str(
                         resultado) + "),"
                 else:
                     self.pasos = self.pasos + "Error de syntaxis :("
                     return "false"
             #---------------------------- multiplico numeros
             elif caracter == "*":
                 numero2 = pila.pop()
                 numero1 = pila.pop()
                 self.pasos = self.pasos + "pop(),pop(),"
                 if numero1 != None and numero2 != None:
                     resultado = numero1 * numero2
                     self.pasos = self.pasos + str(numero1) + " + " + str(
                         numero2) + " = " + str(resultado) + ","
                     pila.push(resultado)
                     self.pasos = self.pasos + "push(" + str(
                         resultado) + "),"
                 else:
                     self.pasos = self.pasos + "Error de syntaxis :("
                     return "false"
             #---------------------------- multiplico numeros
             elif caracter == "/":
                 numero2 = pila.pop()
                 numero1 = pila.pop()
                 self.pasos = self.pasos + "pop(),pop(),"
                 if numero1 != None and numero2 != None:
                     resultado = numero1 / numero2
                     self.pasos = self.pasos + str(numero1) + " / " + str(
                         numero2) + " = " + str(resultado) + ","
                     pila.push(resultado)
                     self.pasos = self.pasos + "push(" + str(
                         resultado) + "),"
                 else:
                     self.pasos = self.pasos + "Error de syntaxis :("
                     return "false"
             #------------------------------ cacater raro
             elif caracter == "\t" or caracter == "\n":
                 pass
             else:
                 pass
         self.resultado = pila.pop()
         if pila.vacio() == False:
             self.pasos = self.pasos + "Error de syntaxis :("
             return "false"
         else:
             self.pasos = self.pasos + "Resultado = " + str(resultado)
             return "true"
             #print("Respuesta:",self.resultado)
     else:
         self.pasos = self.pasos + "Error de syntaxis :("
         return "false"
Example #4
0
class Usuario:
    def __init__(self, nombre, contraseña):
        self.__nombre = nombre
        self.__contraseña = contraseña
        self.__cola = Cola()
        self.__pila = Pila()
        #self.__matriz = Matriz()
        #self.__matrizTranspuesta =
        self.__validacionXML = False

    def get_nombre(self):
        return self.__nombre

    def get_contraseña(self):
        return self.__contraseña

    def agregar_operacion(self, dato):
        self.__cola.enqueue(dato)

    def extraer_operacion(self):
        return self.__cola.dequeue()

    def mostrar_operacion(self):
        self.__cola.mostrar()

    def crear_matriz(self, x, y):
        pass

    def get_validacionXML(self):
        return self.__validacionXML

    def set_validacionXML(self, validar):
        self.__validacionXML = validar

    def operar(self):
        operacion = self.__cola.dequeue()
        aux = ""
        self.__pila.vaciar_pila()
        if operacion != None:
            for caracter in operacion:
                #------------------------------------contatedo numero
                if caracter >= '0' and caracter <= '9':
                    aux = aux + caracter
                #-------------------------------apilar numero
                elif caracter == " ":
                    if aux != "":
                        print("Apilando:", aux)
                        self.__pila.push(int(aux))
                    aux = ""
                #-------------------------------- sumo numeros
                elif caracter == "+":
                    numero2 = self.__pila.pop()
                    numero1 = self.__pila.pop()
                    if numero1 != None and numero2 != None:
                        resultado = numero1 + numero2
                        print("Sumo: ", numero1, "+", numero2)
                        self.__pila.push(resultado)
                        print("Apilo:", resultado)
                    else:
                        print("Error de syntaxis :(")

                #-------------------- resto numeros
                elif caracter == "-":
                    numero2 = self.__pila.pop()
                    numero1 = self.__pila.pop()
                    if numero1 != None and numero2 != None:
                        resultado = numero1 - numero2
                        print("Resto: ", numero1, "-", numero2)
                        self.__pila.push(resultado)
                        print("Apilo:", resultado)
                    else:
                        print("Error de syntaxis :(")

                #---------------------------- multiplico numeros
                elif caracter == "*":
                    numero2 = self.__pila.pop()
                    numero1 = self.__pila.pop()
                    if numero1 != None and numero2 != None:
                        resultado = numero1 * numero2
                        print("Multiplico: ", numero1, "*", numero2)
                        self.__pila.push(resultado)
                        print("Apilo:", resultado)
                    else:
                        print("Error de syntaxis :(")
                #------------------------------ cacater raro
                elif caracter == "\t" or caracter == "\n":
                    pass
                else:
                    print('Caracter no reconocido:', caracter)
            print("Respuesta:", self.__pila.pop())
        else:
            print("Ya no hay operaciones! :(")
 def postorden(self):
     numero = Pila()
     signo = Pila()
     num = ""
     result = ""
     if self.mensaje == "":
         return "false"
     for caracter in self.mensaje:
         if caracter == "(" or caracter == " " or caracter == "\t" or caracter == "\n" or caracter == "":
             pass
         elif caracter >= "0" and caracter <= "9":
             num = num + caracter
         elif caracter == "+" or caracter == "-" or caracter == "*" or caracter == "/":
             if num != "":
                 numero.push(num)
                 num = ""
             signo.push(caracter)
         elif caracter == ")":
             if num != "":
                 numero.push(num)
                 num = ""
             valSigno = signo.pop()
             if valSigno != None:
                 numero.push(valSigno)
             else:
                 return "false"
     if signo.vacio() == False:
         return "false"
     for cadena in numero.mostrar():
         if cadena != None:
             result = cadena + " " + result
             self.post = result.strip()
     return "true"