Trilhas
/
MoonScript
MoonScript
/
Exercícios
/
Números complexos
Números complexos

Números complexos

Médio

Instruções

Um número complexo é expresso na forma z = a + b * i, em que:

  • a é a parte real (um número real),

  • b é a parte imaginária (também um número real), e

  • i é a unidade imaginária, que satisfaz i^2 = -1.

Operações com números complexos

Conjugado

O conjugado do número complexo z = a + b * i é dado por:

zc = a - b * i

Valor absoluto

O valor absoluto (ou módulo) de z é definido como:

|z| = sqrt(a^2 + b^2)

O quadrado do valor absoluto é calculado como o produto de z pelo seu conjugado zc:

|z|^2 = z * zc = a^2 + b^2

Adição

A soma de dois números complexos z1 = a + b * i e z2 = c + d * i é calculada somando suas partes real e imaginária separadamente:

z1 + z2 = (a + b * i) + (c + d * i)
        = (a + c) + (b + d) * i

Subtração

A diferença de dois números complexos é obtida subtraindo as respectivas partes:

z1 - z2 = (a + b * i) - (c + d * i)
        = (a - c) + (b - d) * i

Multiplicação

O produto de dois números complexos é definido como:

z1 * z2 = (a + b * i) * (c + d * i)
        = (a * c - b * d) + (b * c + a * d) * i

Recíproco

O recíproco de um número complexo não nulo é dado por:

1 / z = 1 / (a + b * i)
      = a / (a^2 + b^2) - b / (a^2 + b^2) * i

Divisão

A divisão de um número complexo por outro é dada por:

z1 / z2 = z1 * (1 / z2)
        = (a + b * i) / (c + d * i)
        = (a * c + b * d) / (c^2 + d^2) + (b * c - a * d) / (c^2 + d^2) * i

Exponenciação

Elevar e (a base do logaritmo natural) a um expoente complexo pode ser expresso pela fórmula de Euler:

e^(a + b * i) = e^a * e^(b * i)
              = e^a * (cos(b) + i * sin(b))

Requisitos de implementação

Como você não deve usar suporte nativo a números complexos, implemente as seguintes operações:

  • adição de dois números complexos
  • subtração de dois números complexos
  • multiplicação de dois números complexos
  • divisão de dois números complexos
  • conjugado de um número complexo
  • valor absoluto de um número complexo
  • exponenciação de e (a base do logaritmo natural) a um número complexo

Instruções específicas do MoonScript

Este é um exercício de orientação a objetos: você vai implementar ComplexNumbers como uma classe.

Os testes vão comparar duas instâncias de números complexos para verificar a igualdade. Isso significa que sua classe vai precisar implementar o metamétodo __eq.

Os testes também fazem operações aritméticas com números complexos, então há metamétodos aritméticos a implementar.

Caution

Algumas das funções de números complexos vão fazer contas com números de ponto flutuante. Sua "igualdade" vai ter que lidar com números que são aproximadamente iguais.


Fonte

WikipediaO link abre em uma nova janela ou aba
Editar via GitHub O link abre em uma nova janela ou aba
MoonScript Exercism

Tudo pronto para começar Números complexos?

Crie sua conta no Exercism para aprender e dominar MoonScript com 126 exercícios e mentoria humana de verdade, tudo de graça.