Ir para o conteúdo
progster

[Resolvido] Iniciante Java I

Mensagens Recomendadas

progster

Boa noite,

Venho mais uma vez solicitar a vossa ajuda. É o seguinte, num programa para calcular a formula resolvente está a dar-me o output "NaN".

Depois de uma pesquisa, sei agora que "NaN", quer dizer "Not a number". Até aqui tudo bem, continuei a pesquisar e salvo induzido em erro pela informação que encontrei, isto acontece porque o intervalo de valores da variável é limitado, ou então... (raizes negativas).

Como é que eu posso "contornar" isto, ou seja, como é que posso colocar o programa a dar-me um valor especifico?.

package fresolvente;
public class FResolvente {
public static void main(String[] args)
{
 double a,b,c=0;
 double num1,num2,num3;

 System.out.print ("Introduza o valor de a");
 a=Le.umDouble();
 System.out.print ("Introduza o valor de b");
 b=Le.umDouble();
 System.out.print ("Introduza o valor de c");
 c=Le.umDouble();

 num1=Math.sqrt((b*b)-(4*a*c));
 System.out.print("A raiz quadrda de (b*b)-(4*a*c) é:"+num1);
 num1=Le.umDouble();

 num2=(-b-num1)/(2*a);
 num2=Le.umDouble();

 num3=(-b+num1)/(2*a);
 num3=Le.umDouble();	

 System.out.print ("As raizes da equação são:"+num2+"e"+num3);
}
}

P.s.: Durante a pesquisa, encontrei alguns comentários onde se fala em conversão para BigDecimal etc,etc,etc, mas como ainda estou no inicio venho pedir a vossa ajuda para tentar compreender esta situação.

Agradeço desde já, qualquer ajuda que me possam dar.

Cumprimentos.

Editado por Rui Carlos

Não resolvo dúvidas por PM.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
KTachyon

Se b*b < 4*a*c, o que acontece? Ou se a == 0? ;)

(Bem, tecnicamente já te estou a dar a resolução para o teu problema)

Editado por KTachyon

“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
thoga31

Desde já eu não programo em Java. Contudo, posso apontar uns conselhos: tens de controlar o input e o output. Primeiro, se o factor A é não nulo, e depois se o discriminante é positivo ou nulo.

Aqui estou a supor que le.umDouble() está bem implementado (situação que desconheço).

Boa sorte ;)

Editado por thoga31

Knowledge is free!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
progster

Se b*b < 4*a*c, o que acontece? Ou se a == 0? ;)

(Bem, tecnicamente já te estou a dar a resolução para o teu problema)

Bem..., nem era uma questão de programação.

Já me dá um valor e não o "NaN".

Desde já eu não programo em Java. Contudo, posso apontar uns conselhos: tens de controlar o input e o output. Primeiro, se o factor A é não nulo, e depois se o discriminante é positivo ou nulo.

Aqui estou a supor que le.umDouble() está bem implementado (situação que desconheço).

Boa sorte ;)

Tens razão. Devia ter testado para valores diferentes.

Obrigado a ambos, pela ajuda e paciência :) dispensadas.

Peço desculpa pelas "barbaridades" que no futuro for aqui colocando, mas se não for assim..., não aprendo.


Não resolvo dúvidas por PM.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
thoga31

Não são barbaridades. São consequências saudáveis de um processo de aprendizagem ;)

Dispõe sempre que precisares.

Boa sorte.


Knowledge is free!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
KTachyon

Só mais um à parte. A formula resolvente foi feita para equações de segundo grau. Se a for zero, sabes logo à partida que não se trata de uma equação de segundo grau. Ou seja, podes filtrar imediatamente o input do utilizador e dizer-lhe que a equação não é de segundo grau, mal ele preencha o valor de a.

Para os restantes casos são sempre equações de segundo grau, mas algumas não têm solução Real. Mas podes tentar resolver o problema devolvendo uma solução Complexa. Não é assim tão difícil quanto isso:

Se b*b < 4*a*c fazes os cálculos para

X = -b / 2*a

Y = sqrt(4*a*c - b*b) / 2*a

e apresentas como solução X ± Yi.

Editado por KTachyon

“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
progster

E em vez do "NaN", já me dá um valor certo?

Podes explicar o que queres dizer com: "X ± Yi" ?


Não resolvo dúvidas por PM.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
thoga31

Podes explicar o que queres dizer com: "X ± Yi" ?

Isto é matemática. Procura por números complexos ou imaginários.

A base do conjunto imaginário é que i2 = -1. Como deves reparar, isto não é possível no conjunto real: não há nenhum número real que elevado ao quadrado dê um número negativo. i é, então, a base das bases dos números imaginários.

Pesquisa ;)


Knowledge is free!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.