Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: Eva en 03 de Noviembre 2012, 17:37
-
Les tengo un problema con ecuaciones
La idea es crear varias clases que derivan de una interfaz Ecuacion, en primer lugar una clase denominada EcuacionLineal que se debe comportar como tal de manera que se resuelva pasandole dos valores.
Recien la empece y lo que tengo es lo siguiente:
public class EcuacionLineal implements Ecuacion {
//Representa una ecuación lineal del tipo f(x) = m × x + b
public EcuacionLineal(Double m, Double b) {
throw new RuntimeException("No implementado");
}
public Double resolver(Double x) {
throw new RuntimeException("No implementado");
//aca es donde deberia devolver el resultado de evaluar f(x)
}
}
Mi problema es que no se me ocurre como trabajar con esos valores de manera que resuelva la ecuacion..Lo habia empezado pero cada vez me desviaba mas..si alguno puede ayudarme para hacerlo en pocas lineas se los agradezco...
-
Hola Eva, una ecuación lineal del tipo f(x) = m*x + b es lo que entiendo yo.
¿Qué ocurre? Que la interfaz será quien defina los métodos a implementar, ya que según indicas la clase debe implementar la interfaz y la interfaz te especifica el contrato que debe de cumplir la clase. Por eso creo que deberías poner aquí el contenido de esa interface para que podamos responder algo.
Suponiendo que debemos seguir el código que has puesto tú, lo plantearía así:
public class EcuacionLineal implements Ecuacion {
//Representa una ecuacion lineal del tipo f(x) = m * x + b
private int m; //Representa el valor de la pendiente en la ecuacion
private int b; //Representa el valor de b corte con eje de ordenadas de la recta
public EcuacionLineal(Double m, Double b) {
this.m = m; // Establecemos el valor del atributo
this.b = b; //Establecemos el valor del atributo
}
public Double resolver(Double x) {
int resultado = 0;
resultado = m*x +b;
return resultado;
}
Si era esto lo que había que hacer me resulta muy simple, el único problema que le podría ver es que no se tenga claro el concepto de ecuación. La ecuación viene definida por dos valores, m y b que son valores fijos. Por ejemplo una ecuación puede ser 3x + 2 y otra ser 8x - 1. La ecuación se resuelve introduciendo un valor concreto de x. Por ejemplo la primera ecuación para x = 1 se resuelve como 3+2=5, para x = 2 se resuelve como 6+2 = 8 y así sucesivamente. Se puede invocar el método para resolver la ecuación pasándole cualquier valor.
Si no era esto, pues a ver si aportas algo más de información.
-
Si se que no fui muy especifica y pido disculpas..La interface ecuacion es por el momento una clase abstracta a la cual me permite agrupar las diferentes clases de ecuaciones que debo desarrollar(Lineal, Cuadratica y Polinomica). En esta primera parte me dijeron que debia resolver el comportamiento de mi clase permitiendo que esta reciba dos valores (m y b) atraves de tests y que los metodos que utilice me permitan obtener el valor de x, por lo que si no resuelvo como se comporta mi clase no puedo probar los tests..
de todos modos gracias por responder
-
¿Pero el código que te he puesto no resuelve el comportamiento de tu clase?
-
Implemente el codigo que me pasaste y ahora estoy probando con Test pero me dìo rojo (estoy usando eclipse) tal vez porque pase mal los valores.
Hice esto:
@Test
public void testQueLLamaAlMetodo(){
EcuacionLineal ecuLineal = new EcuacionLineal(1.0,1.0);
ecuLineal.resolver(2.0);
Assert.assertEquals(4,ecuLineal.resolver(4.0));
}
-
Hola, yo creo que hay un error en los tipos en el código propuesto y que el problema puede venir por ahí.
public class EcuacionLineal implements Ecuacion {
//Representa una ecuacion lineal del tipo f(x) = m * x + b
private double m; //Representa el valor de la pendiente en la ecuacion
private double b; //Representa el valor de b corte con eje de ordenadas de la recta
public EcuacionLineal(double m, double b) {
this.m = m; // Establecemos el valor del atributo
this.b = b; //Establecemos el valor del atributo
}
public double resolver(double x) {
double resultado = 0;
resultado = m*x +b;
return resultado;
}
Te señalo en color los cambios. No podemos mezclar int con double y Double. Hay que diferenciar entre tipos primitivos como int o double, frente a tipos objeto como Integer o Double.
Por otro lado si construyéramos la ecuación con m=1, b=1, la ecuación sería f(x) = 1*x+1, y entonces:
ecuLineal.resolver(4.0) sería igual a 1*4 + 1 = 5
Luego la línea de la aserción quedaría:
Assert.assertEquals(5,ecuLineal.resolver(4.0));
Es decir, el valor esperado de la ecuación para x=4 sería f(x) = 5
La línea ecuLineal.resolver(2.0); no sé muy bien para qué la metes.
-
Ah si me di cuenta que pasaba mal los valores ya lo resolvì, gracias... ¿Como implemetaria en una ecuacion cuadratica y en una polinomica? Hice lo mismo que en la lineal, tengo la estructura pero no estoy segura de como se va a comportar el metodo.
clase EcuacionCuadratica{
public class EcuacionCuadratica implements Ecuacion {
private double a;
private double b;
private double c;
public EcuacionCuadratica(Double a, Double b, Double c) {
throw new RuntimeException("No implementado");
}
/**
* Devuelve el resultado de evaluar f(x)
*
* @param x la variable
*
*/
public Double resolver(Double x) {
double valordeEquis = 0;
valordeEquis = (a*x).(a*x)+(b.x)+c
//throw new RuntimeException("No implementado");
}
}
Si este codigo esta bien encaminado me pongo a hacer la ecuacion polonomica.. :D!
-
Yo insistiría en que no es lo mismo double que Double, y parece que aparece indistintamente. En realidad deberías ponerlo tal como defina la interface.
La función cuadrática es f(x) = a*x*x + b*x + c , yo escribiría:
public double resolver(double x) {
double valordeFuncion = 0;
valordeFuncion = (a*x*x)+(b*x)+c
return valordeFuncion;
//throw new RuntimeException("No implementado");
}