Jump to content

Recommended Posts

Posted

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.

Não resolvo dúvidas por PM.

Posted (edited)

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)

Edited by 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

Posted (edited)

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 😉

Edited by thoga31

Knowledge is free!

Posted

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.

Posted (edited)

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.

Edited by 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

Posted

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!

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.