Foro de elhacker.net

Programación => Java => Mensaje iniciado por: KaRaLLo en 30 Noviembre 2011, 10:09 am



Título: Problema Ecuaciones De Segundo Grado
Publicado por: KaRaLLo en 30 Noviembre 2011, 10:09 am

Hola, tengo una dudilla con un programa para resolver un ejercicio que consiste en crear un programa que resuelva una ecuacion de segundo grado :

Al poner valores como A= 1 B= -5  C = 6  en el método getVariables obj1.getVariables(1,-5,6), el programa actúa bien y me da como soluciones 3 y 2, perfecto

El problema está que cuando pongo por ejmplo valores como (6,-5,1) debería darme como resultado x1=1/2 y x2 1/3. Pero en cambio me da x1 = 18 y 12.

Quiero decir, que algunas ecuaciones me las resuelve bien y otras no.



MainEcuacion :



package boletin8_11;

public class MainEcuacion {


    public static void main(String[] args) {


       Ecuacion ec1 = new Ecuacion();
       
       ec1.getVariables(4, -6, 2);

        System.out.println(ec1.getPrimeraSolucion()+"\t"+ec1.getSegundaSolucion());

    }

}



Clase ecuaciones :



package boletin8_11;

public class Ecuacion {

    //variables
    float a;
    float b;
    float c;

    //constructor
    public Ecuacion() {

        a = 0;
        b = 0;
        c = 0;

    }

    public void getVariables(float var1, float var2, float var3) {

        a = var1;
        b = var2;
        c = var3;
    }

    public float getPrimeraSolucion() {

        float discriminante = (float) (Math.pow(b, 2) - (4 * a * c));
        float temp1 = (float) Math.sqrt(discriminante);

        //esta linea la operacion para la primera solucion
        float temp2 = -b + temp1;
        float primeraSolucion = temp2 / 2 * a;

        if (discriminante < 0) {
            System.out.println("La ecuacion no tiene solucion dentro de los numeros reales");
        } else if (discriminante == 0) {
            System.out.println("La ecuacion solo tiene una solucion");
        } else if (discriminante > 0) {
            System.out.println("La ecacion tiene 2 soluciones");
        }

        return primeraSolucion;
    }

    public float getSegundaSolucion() {

        float discriminante = (float) (Math.pow(b, 2) - (4 * a * c));
        float temp1 = (float) Math.sqrt(discriminante);

        float temp3 = -b - temp1;
        float segundaSolucion = temp3 / 2 * a;


        return segundaSolucion;
    }
}



por si sirve de algo estoy con netbeans 6,9 en ubuntu


Título: Re: Problema Ecuaciones De Segundo Grado
Publicado por: fenomeno92 en 30 Noviembre 2011, 13:11 pm
 Creo que te estas complicando mucho y poniendo mucha tonteria para hacer 4 cuentas de nada. Haciendo un codigo rapido aplicando la formula para resolver las ecuaciones


public double raizReal1(double a, double b, double c) {
        double r1;
       
        r1= ((-b + Math.sqrt(b*b - 4*a*c))/(2*a));

        if ((b*b - 4*a*c)>=0) {

            return r1;

        } else {
            
            System.out.println("esta raiz no es real");
            return Double.NaN;
        }

    }


ni lo e compilado ni nada, asique seguro que da algun fallo en algun lado, pero para resolver una ecuacion solo te hace falta un metodo como ese y otro igual pero con el signo cambiado (-b - Math.sqrt(b*b - 4*a*c))/(2*a)). ya se que todo el tocho de la formula se puede poner mejor y mas claro pero como e dicho lo e echo rapido y con poca gana  :silbar:


Título: Re: Problema Ecuaciones De Segundo Grado
Publicado por: KaRaLLo en 30 Noviembre 2011, 14:37 pm

         else {
           
            System.out.println("esta raiz no es real");
            return Double.NaN;
        }

     

Me podias explicar que lo que hace " Double.NaN" ?

graciñas ^^


Título: Re: Problema Ecuaciones De Segundo Grado
Publicado por: fenomeno92 en 30 Noviembre 2011, 15:15 pm
Cuando hay pongo el Double.NaN es porque tengo que retornar un double en el metodo(ya que asi lo puse en su declaracion) y por tanto, al no poderse calcular, porque el discriminante es negativo, el Double.NaN es un "numero" double que significa error al calcular, por ejemplo,cuando una cuenta da infinito tengo entendido que java te pone por defecto Double.NaN