예제 #1
0
 def testDividir(self):
     numero1 = NumeroComplejo("3","4")
     numero2 = NumeroComplejo("2","1")
     app = QtWidgets.QApplication(sys.argv)
     main = NCom()
     resultado = main.operacionDividir(numero1,numero2)
     self.assertEqual(resultado.getFormaOrdenada(),"(2.00,1.00)")
예제 #2
0
 def testMultiplicar(self):
     numero1 = NumeroComplejo("4","5")
     numero2 = NumeroComplejo("3","-5")
     app = QtWidgets.QApplication(sys.argv)
     main = NCom()
     resultado = main.operacionMultiplicar(numero1,numero2)
     self.assertEqual(resultado.getFormaOrdenada(),"(37.00,-5.00)")
예제 #3
0
 def operacionRaiz(self, numero, raiz):
     nuevoModulo = math.pow(Decimal(numero.getModulo()),
                            (1 / Decimal(raiz)))
     nuevoAngulo = Decimal(numero.getAngulo()) / Decimal(raiz)
     numeroResultado = NumeroComplejo('0', '0')
     numeroResultado.setEnPolar(str(round(nuevoModulo, 2)),
                                str(round(nuevoAngulo, 2)))
     return numeroResultado
예제 #4
0
 def testRaiz(self):
     numero = NumeroComplejo("0","0")
     numero.setEnPolar("9","10")
     exponente = "2"
     app = QtWidgets.QApplication(sys.argv)
     main = NCom()
     resultado = main.operacionRaiz(numero,exponente)
     self.assertEqual(resultado.getFormaPolar(),"[3.00;5.00]")
예제 #5
0
 def testPotencia(self):
     numero = NumeroComplejo("0","0")
     numero.setEnPolar("4","5")
     exponente = "4"
     app = QtWidgets.QApplication(sys.argv)
     main = NCom()
     resultado = main.operacionPotencia(numero,exponente)
     self.assertEqual(resultado.getFormaPolar(),"[256.00;20.00]")
예제 #6
0
    def nesimas(self):
        numero = NumeroComplejo('0', '0')
        numeroComplejo, okPressed = QInputDialog.getText(
            self, "Raiz", "Complejo:", QLineEdit.Normal, "")
        if okPressed and numeroComplejo != '':
            numero = self.setNumeroComplejo(numeroComplejo)
            raiz, okPressed = QInputDialog.getText(self, "Raiz", "Raiz:",
                                                   QLineEdit.Normal, "")

            if okPressed and raiz != '':
                try:
                    nuevoModulo = math.pow(Decimal(numero.getModulo()),
                                           (1 / Decimal(raiz)))

                    raices = []

                    for k in range(0, int(raiz)):
                        nuevoAngulo = (Decimal(numero.getAngulo()) + 2 * k *
                                       Decimal(math.pi)) / Decimal(raiz)
                        nuevaRaiz = "[" + str(
                            round(nuevoModulo, 2)) + ";" + str(
                                round(nuevoAngulo, 2)) + "]"

                        #if k != (int(raiz)-1):
                        #    nuevaRaiz += " - "

                        raices.append(nuevaRaiz)

                    raicesEnTexto = ""

                    for i in range(len(raices)):
                        raicesEnTexto += "W" + str(i) + " = " + raices[i]
                        if (self.esPrimitiva(i, Decimal(raiz)) == 1):
                            raicesEnTexto += "(Prim)"
                        raicesEnTexto += "\n"

                    msgBox = QMessageBox()

                    msgBox.setWindowTitle("MessageBox demo")
                    msgBox.setText(raicesEnTexto)

                    msgBox.exec()

                except:
                    msgBox = QMessageBox.critical(self, "Datos incorrectos",
                                                  "Vuelva a intentarlo")
예제 #7
0
 def operacionMultiplicar(self, numero1, numero2):
     real = Decimal(numero1.getReal()) * Decimal(
         numero2.getReal()) + (-1) * Decimal(
             numero1.getImaginario()) * Decimal(numero2.getImaginario())
     imaginario = Decimal(numero1.getReal()) * Decimal(
         numero2.getImaginario()) + Decimal(
             numero1.getImaginario()) * Decimal(numero2.getReal())
     numeroResultado = NumeroComplejo(str(real), str(imaginario))
     return numeroResultado
예제 #8
0
 def operacionDividir(self, numero1, numero2):
     conjugadoDivisor = self.getConjugado(numero2)
     divisorResultado = math.pow(Decimal(numero2.getReal()), 2) + math.pow(
         Decimal(numero2.getImaginario()), 2)
     dividendo = self.operacionMultiplicar(numero1, conjugadoDivisor)
     parteReal = Decimal(dividendo.getReal()) / Decimal(divisorResultado)
     parteImaginaria = Decimal(
         dividendo.getImaginario()) / Decimal(divisorResultado)
     numeroResultado = NumeroComplejo(str(round(parteReal, 2)),
                                      str(round(parteImaginaria, 2)))
     return numeroResultado
예제 #9
0
    def setNumeroComplejo(self, numero):
        true = 1
        false = 0

        numeroComplejo = NumeroComplejo('0', '0')

        if re.match('-?([0-9]+|[0-9]+\.[0-9]+)\+-?([0-9]+|[0-9]+\.[0-9]+)j',
                    numero):
            real = numero[0:numero.find('+')]
            imaginario = numero[numero.find('+') + 1:len(numero) - 1]
            numeroComplejo = NumeroComplejo(real, imaginario)
        else:
            if re.match(
                    '\[([0-9]+|[0-9]+\.[0-9]+);-?([0-9]+|[0-9]+\.[0-9]+)\]',
                    numero):
                P = numero[1:numero.find(';')]
                Q = numero[numero.find(';') + 1:len(numero) - 1]
                numeroComplejo.setEnPolar(P, Q)
            else:
                if re.match(
                        '\(-?([0-9]+|[0-9]+\.[0-9]+),-?([0-9]+|[0-9]+\.[0-9]+)\)',
                        numero):
                    real = numero[1:numero.find(',')]
                    imaginario = numero[numero.find(',') + 1:len(numero) - 1]
                    numeroComplejo = NumeroComplejo(real, imaginario)
                else:
                    if re.match(
                            '([0-9]+|[0-9]+\.[0-9]+)?cos\(([0-9]+|[0-9]+\.[0-9]+)t((\+|-)([0-9]+|[0-9]+\.[0-9]+))?\)',
                            numero):
                        P = numero[0:numero.find('cos')]
                        if P == '':
                            P = '1'
                        W = numero[numero.find('(') + 1:numero.find('t')]
                        Q = numero[numero.find('t') + 1:numero.find(')')]
                        if Q == '':
                            Q = '0'
                        numeroComplejo.setEnTrigonometrica(P, Q, W, 1)
                    else:
                        if re.match(
                                '([0-9]+|[0-9]+\.[0-9]+)?sen\(([0-9]+|[0-9]+\.[0-9]+)t((\+|-)([0-9]+|[0-9]+\.[0-9]+))?\)',
                                numero):
                            P = numero[0:numero.find('sen')]
                            if P == '':
                                P = '1'
                            W = numero[numero.find('(') + 1:numero.find('t')]
                            Q = numero[numero.find('t') + 1:numero.find(')')]
                            if Q == '':
                                Q = '0'
                            numeroComplejo.setEnTrigonometrica(P, Q, W, 0)
                        else:
                            numeroComplejo = ''
        return numeroComplejo
예제 #10
0
    def sumaFasores(self):
        numero1 = NumeroComplejo('0', '0')
        numero2 = NumeroComplejo('0', '0')
        numeroComplejo1, okPressed = QInputDialog.getText(
            self, "Suma de fasores", "Numero 1:", QLineEdit.Normal, "")
        if okPressed and numeroComplejo1 != '':
            numero1 = self.setNumeroComplejo(numeroComplejo1)
            numeroComplejo2, okPressed = QInputDialog.getText(
                self, "Suma de fasores", "Numero 2:", QLineEdit.Normal, "")

            if okPressed and numeroComplejo2 != '':
                numero2 = self.setNumeroComplejo(numeroComplejo2)
                try:
                    if numero1.getFrecuencia() == numero2.getFrecuencia():
                        real = numero1.getReal() + numero2.getReal()
                        imaginario = numero1.getImaginario(
                        ) + numero2.getImaginario()
                        numeroFinal = NumeroComplejo(str(real),
                                                     str(imaginario))
                        numeroFinal.setFrecuencia(numero1.getFrecuencia())

                        msgBox = QMessageBox(self)
                        msgBox.setWindowTitle("Suma")
                        msgBox.setText(numeroFinal.getFormaTrigonometrica())
                        msgBox.exec()
                    else:
                        msgBox = QMessageBox.critical(
                            self, "Datos incorrectos",
                            "Frecuencias distintas, no se puede realizar la suma"
                        )
                except:
                    msgBox = QMessageBox.critical(self, "Datos incorrectos",
                                                  "Vuelva a intentarlo")
예제 #11
0
 def operacionPotencia(self, numero, exponente):
     nuevoModulo = math.pow(Decimal(numero.getModulo()), Decimal(exponente))
     nuevoAngulo = Decimal(numero.getAngulo()) * Decimal(exponente)
     numeroResultado = NumeroComplejo('0', '0')
     numeroResultado.setEnPolar(str(nuevoModulo), str(nuevoAngulo))
     return numeroResultado
예제 #12
0
 def getConjugado(self, numero):
     real = numero.getReal()
     imaginario = Decimal(numero.getImaginario()) * (-1)
     conjugado = NumeroComplejo(str(real), str(imaginario))
     return conjugado
예제 #13
0
 def testBinomicaAPolarPositivoPositivo(self):
     numero = NumeroComplejo("3","5")
     self.assertEqual(numero.getFormaPolar(),"[5.83;1.03]")
예제 #14
0
 def testBinomicaAPolarNegativoNegativo(self):
     numero = NumeroComplejo("-3","-5")
     self.assertEqual(numero.getFormaPolar(),"[5.83;4.17]")
예제 #15
0
 def testBinomicaAPolarNegativoPositivo(self):
     numero = NumeroComplejo("-3","5")
     self.assertEqual(numero.getFormaPolar(),"[5.83;2.11]")
예제 #16
0
 def testBinomicaAPolarPositivoNegativo(self):
     numero = NumeroComplejo("3","-5")
     self.assertEqual(numero.getFormaPolar(),"[5.83;5.25]")