Efetuando calculo errado

Java

19/10/2013

//nesse código a var XV exibe sempre resultado errado no teste, tipo se o resultado real for 0.5 vai aparecer 0.0. segue o código abaixo

import java.util.Scanner;
public class equacao
{
public static void main (String Arg[])
{
Scanner input = new Scanner (System.in);
int a,b,c;
double x1,x2,xv,yv;
double rDelta,delta;
System.out.println ("!!!Calculo de equacao de 2º grau!!!");
System.out.print ("Valor de a:");
a = input.nextInt();
System.out.print ("Valor de b:");
b = input.nextInt();
System.out.print ("Valor de c:");
c = input.nextInt();
delta = Math.pow(b, 2) - (4*a*c); //math.pow is potencia
if (delta >= 0 && a != 0)
{
x1 = ((b*-1) + Math.sqrt(delta))/(2*a);
x2 = ((b*-1) - Math.sqrt(delta))/(2*a);//math.sqrt is raiz
xv = (-1)*b/(2*a); // problema no resultado aqui
yv = (delta*-1)/(4*a);
System.out.print ("Valor de x1:");
System.out.println (x1);
System.out.print ("Valor de x2:");
System.out.println (x2);
System.out.print ("Valor de xv:");
System.out.println (xv);
System.out.print ("Valor de yv:");
System.out.println (yv);
}
else
{
System.out.print ("A raiz não possui solução");
}
}
}
Eliseu Mendes

Eliseu Mendes

Curtidas 0

Respostas

Flávio Henr4ique

Flávio Henr4ique

19/10/2013

Amigo, Ana;isei seu código e não achei nada de errado. Executei o código e os resultados estão todos corretos. Qual foram os dados de entrada que você está colocando ?
GOSTEI 0
Eliseu Mendes

Eliseu Mendes

19/10/2013

a = 1
b = -1
c = -20

em XV deveria resultar = 0.5

mas aqui no meu resulta sempre em = 0.0
GOSTEI 0
Flávio Henr4ique

Flávio Henr4ique

19/10/2013

Ok Amigo Descobri o Erro. É um problema bem simples. O Erro é o seguinte, o tipo de dados das variáveis de entrada você tinha colocado com inteiro e o compilador do java se comporta assim:

-1 x -1 = 1
2 x 1 = 2
1/2 = 0

depois de terminar o calculo ele vai jogar para double ficando 0.0

para solucionar esse problema coloquei todas as variaveis para double. O compilador se comporta assim :
-1.0 x -1.0 = 1.0
2.0 x 1.0 = 2.0
1.0/2.0 = 0.5

Assim o resultado sai correto já que ele trata toda a conta como doble.

O Código fica assim.


package br.exemplo.devmedia;

import java.util.Scanner;

public class SegundoGrau 
{

    public static void main(String[] args)
    {
        Scanner input = new Scanner (System.in);
        double x1,x2,xv,yv,a,b,c;
        double rDelta,delta;
        System.out.println ("!!!Calculo de equacao de 2º grau!!!");
        System.out.print ("Valor de a:");
        a = input.nextDouble();
        System.out.print ("Valor de b:");
        b = input.nextDouble();
        System.out.print ("Valor de c:");
        c = input.nextDouble();
        delta = Math.pow(b, 2) - (4*a*c); //math.pow is potencia
        if (delta >= 0 && a != 0)
        {
            x1 = ((b*-1) + Math.sqrt(delta))/(2*a);
            x2 = ((b*-1) - Math.sqrt(delta))/(2*a);//math.sqrt is raiz
            xv = (-1*b)/(2*a); // problema no resultado aqui 
            yv = (delta*-1)/(4*a);
            System.out.print ("Valor de x1:");
            System.out.println (x1);
            System.out.print ("Valor de x2:");
            System.out.println (x2);
            System.out.print ("Valor de xv:");
            System.out.println (xv);
            System.out.print ("Valor de yv:");
            System.out.println (yv);
        }
        else
        {
            System.out.print ("A raiz não possui solução");
        }
    }
}
GOSTEI 0
Flávio Henr4ique

Flávio Henr4ique

19/10/2013

Ou Se você quiser manter os dados de entrada como int e o resultado com double você pode fazer uma conversão. É simples, basta no calculo forçar ele para double. O Seu Código ficaria assim .

package br.exemplo.devmedia;

import java.util.Scanner;

public class SegundoGrau 
{

    public static void main(String[] args)
    {
        Scanner input = new Scanner (System.in);
        int a,b,c;
        double x1,x2,xv,yv;
        double rDelta,delta;
        System.out.println ("!!!Calculo de equacao de 2º grau!!!");
        System.out.print ("Valor de a:");
        a = input.nextInt();
        System.out.print ("Valor de b:");
        b = input.nextInt();
        System.out.print ("Valor de c:");
        c = input.nextInt();
        delta = Math.pow(b, 2) - (4*a*c); //math.pow is potencia
        if (delta >= 0 && a != 0)
        {
            x1 = ((b*-1) + Math.sqrt(delta))/(2*a);
            x2 = ((b*-1) - Math.sqrt(delta))/(2*a);//math.sqrt is raiz
            xv = (double) (-1*b)/(2*a) ; // Assim força a conta para double. Basta Colocar (double) e a conta é forçada para double. Assim os dados de entrada continual Int . 
            yv = (delta*-1)/(4*a);
            System.out.print ("Valor de x1:");
            System.out.println (x1);
            System.out.print ("Valor de x2:");
            System.out.println (x2);
            System.out.print ("Valor de xv:");
            System.out.println (xv);
            System.out.print ("Valor de yv:");
            System.out.println (yv);
        }
        else
        {
            System.out.print ("A raiz não possui solução");
        }
    }
}
GOSTEI 0
Eliseu Mendes

Eliseu Mendes

19/10/2013

VALEW .KARA... TUDO OK AGORA!!
GOSTEI 0
POSTAR