Aritmética com números complexos

Olá pessoal,

Eu estou com um exercício em mãos e não consigo resolve-lo, alguém pode me ajudar? É o seguinte:

(Números complexos) Crie uma classe chamada Complex para realizar aritmética com números complexos. Os números complexos têm a forma: parteReal + parteImaginaria * i

onde i é raiz quadrada de -1

Escreva um programa para testar sua classe. Utilize variáveis de ponto flutuantes para representar os dados private da classe. Forneça um construtor que permita um objeto dessa classe seja inicializado quando ele for declarado. Forneça um construtor sem argumento com valores-padrão caso nenhum inicializador seja fornecido. Forneça métodos public que realizam as seguintes operações:

a) Somar dois números Complex: as partes reais somadas de um lado e as partes imaginárias são somadas de outro.
b) Subtrair dois números Complex: A parte real do operando direito é subtraida da parte real do operando esquerdo e a parte imaginaria do operando direito é subtraida da parte imaginaria do operendo esquerdo.
c) Imprimir números Complex na forma (a,b), onde a é a parte real e b a parte imaginaria.

você sabe fazer essas contas com papel e caneta?? Cardano nunca teve um computador…

Tente fazer, poste o que tentou.

Aí é que mora o problema, eu não entendi muito bem o enunciado do exercicio.

Caso complexo o seu heim rsrs… Desculpe não resisti… :wink:

Você deve ter um material de apoio que o professor passou, comece estudando ele.

Caso complexo o seu heim rsrs… Desculpe não resisti… :wink:

Você deve ter um material de apoio que o professor passou, comece estudando ele.[/quote]

Esse exercicio é do livro Java Como Programar, do Deitel.

O problema é entender a matemática do exercicio e no livro não tem nada de matematica, ele ja deve partir do pressuposto que vc sabe matematica.

[quote=fernando.rj021]
Esse exercicio é do livro Java Como Programar, do Deitel.

O problema é entender a matemática do exercicio e no livro não tem nada de matematica, ele ja deve partir do pressuposto que vc sabe matematica.[/quote]

Percebeu que de uma forma ou outra vai ter que estudar… Se o problema é matemática… http://www.brasilescola.com/matematica/numeros-complexos.htm

[quote=Anime][quote=fernando.rj021]
Esse exercicio é do livro Java Como Programar, do Deitel.

O problema é entender a matemática do exercicio e no livro não tem nada de matematica, ele ja deve partir do pressuposto que vc sabe matematica.[/quote]

Percebeu que de uma forma ou outra vai ter que estudar… Se o problema é matemática… http://www.brasilescola.com/matematica/numeros-complexos.htm[/quote]

É percebi sim, mas ja dei uma olhada no site http://revisaovirtual.com/site/Artigos_195_introducao_aos_numeros_complexos_c.htm

Apesar do ‘complexo’, consegui entender e vou tentar implementar agora.

Valeu;

Olá pessoal,

Consegui resolver, segue o código caso alguém um dia passe pelo mesmo problema.

[code]public class Complex {

private double parteReal, parteReal1, parteReal2;
private double parteImaginaria, parteImaginaria1, parteImaginaria2;

public Complex(double parteReal1, double parteImaginaria1, 
        double parteReal2, double parteImaginaria2) {
    
    this.parteReal1 = parteReal1;
    this.parteImaginaria1 = parteImaginaria1;
    this.parteReal2 = parteReal2;
    this.parteImaginaria2 = parteImaginaria2;        
    
}

public Complex() {
    
    parteReal1 = 5;
    parteImaginaria1 = 10;
    parteReal2 = 3;
    parteImaginaria2 = 2;
    
}

public void adicao() {
    
    parteReal = parteReal1 + parteReal2;
    parteImaginaria = parteImaginaria1 + parteImaginaria2;
    
    System.out.printf("(%.1f + %.1fi) + (%.1f + %.1fi) = (%.1f + %.1fi)\n",
            parteReal1, parteImaginaria1, parteReal2, parteImaginaria2,
            parteReal, parteImaginaria);
    
}

public void subtracao() {
    
    parteReal = parteReal1 - parteReal2;
    parteImaginaria = parteImaginaria1 - parteImaginaria2;
    
    System.out.printf("(%.1f + %.1fi) - (%.1f + %.1fi) = (%.1f + %.1fi)\n",
            parteReal1, parteImaginaria1, parteReal2, parteImaginaria2,
            parteReal, parteImaginaria);
    
}

}[/code]

[code]public class ComplexTeste {

public static void main(String args[]) {

Complex complex = new Complex(2.0, 3.0, 3.0, 4.0);
Complex complex1 = new Complex();

complex.adicao();
complex1.subtracao();    

}    

}[/code]

Esse problema com números complexos era mais simples do que eu imaginava!

Concordo que é simples, mas você não obedeceu ao espírito do enunciado, e provavelmente teria a nota reduzida se o seu professor fosse muito rigoroso. Usualmente você resolveria esse problema assim:

a) A classe Complex tem apenas e tão somente 2 variáveis de instância, não 4. Em matemática, quem teria 4 variáveis de instância são os “quatérnions”.
b) Um exemplo muito, muito simplificado da resolução do seu problema:

/**
 * Representa um numero complexo e as operações de soma e sub
 */
public class Complex {
    // utilize variaveis de ponto flutuante para representar os dados private da classe
    private double a;
	private double b;
	// forneca um construtor que permita que um objeto seja inicializado quando for declarado
	public Complex (double a, double b) {
	    this.a = a; this.b = b;
	}
	// forneca um construtor sem argumentos com valores padrao caso nenhum inicializador seja fornecido
	public Complex () {
	    this.a = 0.0; this.b = 0.0;
	}
	// forneca um metodo para somar 2 numeros Complex
	public static Complex somar (Complex x, Complex y) {
	    return new Complex (x.a + y.a, x.b + y.b);
	}
	// forneca um metodo para subtrair 2 numeros Complex
	public static Complex subtrair (Complex x, Complex y) {
	    return new Complex (x.a - y.a, x.b - y.b);
	}
	// forneca um metodo para imprimir numeros Complex na forma (a,b)
    public String toString() {
	    return "(" + a + ", " + b + ")";
	}
}

class TesteComplex {
    public static void main (String[] args) {
	    Complex abc = new Complex (4.5, 6.7);
		Complex def = new Complex (7.8, -9.1);
	    Complex zero = new Complex();
		System.out.println (abc); // imprime o numero (4.5, 6.7)
		System.out.println (def); // imprime o numero (7.8, -9.1)
		System.out.println (Complex.somar (abc, def)); // imprime a soma, que eh (12.3, -2.4)
		System.out.println (Complex.subtrair (abc, def)); // imprime a soma, que eh (-3.3, 15.8)
	}
}

Desde o começo eu nao tinha entendido bem o enunciado, só consegui fazer pois fiz pesquisas na internet. Esse foi o primeiro esboço do programa, claro que ele pode ser melhorado ainda mais com a sua versao.

Muito obrigado.

[quote=entanglement]Concordo que é simples, mas você não obedeceu ao espírito do enunciado, e provavelmente teria a nota reduzida se o seu professor fosse muito rigoroso. Usualmente você resolveria esse problema assim:

a) A classe Complex tem apenas e tão somente 2 variáveis de instância, não 4. Em matemática, quem teria 4 variáveis de instância são os “quatérnions”.
b) Um exemplo muito, muito simplificado da resolução do seu problema:

[code]
/**

  • Representa um numero complexo e as operações de soma e sub
    */
    public class Complex {
    // utilize variaveis de ponto flutuante para representar os dados private da classe
    private double a;
    private double b;
    // forneca um construtor que permita que um objeto seja inicializado quando for declarado
    public Complex (double a, double b) {
    this.a = a; this.b = b;
    }
    // forneca um construtor sem argumentos com valores padrao caso nenhum inicializador seja fornecido
    public Complex () {
    this.a = 0.0; this.b = 0.0;
    }
    // forneca um metodo para somar 2 numeros Complex
    public static Complex somar (Complex x, Complex y) {
    return new Complex (x.a + y.a, x.b + y.b);
    }
    // forneca um metodo para subtrair 2 numeros Complex
    public static Complex subtrair (Complex x, Complex y) {
    return new Complex (x.a - y.a, x.b - y.b);
    }
    // forneca um metodo para imprimir numeros Complex na forma (a,b)
    public String toString() {
    return “(” + a + ", " + b + “)”;
    }
    }

class TesteComplex {
public static void main (String[] args) {
Complex abc = new Complex (4.5, 6.7);
Complex def = new Complex (7.8, -9.1);
Complex zero = new Complex();
System.out.println (abc); // imprime o numero (4.5, 6.7)
System.out.println (def); // imprime o numero (7.8, -9.1)
System.out.println (Complex.somar (abc, def)); // imprime a soma, que eh (12.3, -2.4)
System.out.println (Complex.subtrair (abc, def)); // imprime a soma, que eh (-3.3, 15.8)
}
}

[/code][/quote]

Putz, valeu muito aí por essa explicação entanglement, você tornou esse exercício simples, obrigado mesmo!