Skip to content
Snippets Groups Projects
Commit 0acf3681 authored by LABOUREL Arnaud's avatar LABOUREL Arnaud
Browse files

Correction des formules

parent d11de138
No related branches found
No related tags found
No related merge requests found
Pipeline #1341 passed
Showing
with 234 additions and 12 deletions
package formula;
public class Addition extends BinaryOperation {
public Addition(Formula leftMember, Formula rightMember) {
super(leftMember, rightMember, "+");
}
@Override
protected double compute(double leftValue, double rightValue) {
return leftValue + rightValue;
}
@Override
public Formula derivative() {
return new Addition(leftMember.derivative(), rightMember.derivative());
}
}
package formula;
public abstract class BinaryOperation implements Formula {
final Formula leftMember;
final Formula rightMember;
final String operatorSymbol;
public BinaryOperation(Formula leftMember, Formula rightMember, String operatorSymbol) {
this.leftMember = leftMember;
this.rightMember = rightMember;
this.operatorSymbol = operatorSymbol;
}
@Override
public String toString() {
return "(" + leftMember + " " + operatorSymbol + " " + rightMember + ")";
}
@Override
public double eval(double xValue) {
return compute(leftMember.eval(xValue), rightMember.eval(xValue));
}
protected abstract double compute(double leftValue, double rightValue);
}
......@@ -4,10 +4,10 @@ import java.util.HashMap;
public class Constant implements Formula {
private double value;
private final double value;
public Constant(double value) {
// TODO : change the code.
this.value = value;
}
/**
......@@ -18,8 +18,7 @@ public class Constant implements Formula {
*/
@Override
public double eval(double xValue) {
// TODO : change the code.
return 0;
return value;
}
/**
......@@ -29,8 +28,7 @@ public class Constant implements Formula {
*/
@Override
public Formula derivative() {
// TODO : change the code.
return this;
return new Constant(0);
}
/**
......@@ -40,8 +38,7 @@ public class Constant implements Formula {
*/
@Override
public String toString() {
// TODO : change the code.
return "toto";
return Double.toString(value);
}
/**
......
package formula;
public class Cosine extends UnaryOperation {
public Cosine(Formula member) {
super(member, "cos");
}
@Override
protected double compute(double value) {
return Math.cos(value);
}
@Override
public Formula derivative() {
return new Opposite(new Multiplication(member.derivative(), new Sine(member)));
}
}
package formula;
public class Division extends BinaryOperation {
public Division(Formula dividend, Formula divisor) {
super(dividend, divisor, "/");
}
@Override
protected double compute(double leftValue, double rightValue) {
return leftValue/rightValue;
}
@Override
public Formula derivative() {
return new Division(new Subtraction(new Multiplication(leftMember.derivative(), rightMember),
new Multiplication(leftMember, rightMember.derivative())),
new Multiplication(rightMember, rightMember));
}
}
package formula;
public class Exponential extends UnaryOperation {
public Exponential(Formula member) {
super(member, "e^");
}
@Override
protected double compute(double value) {
return Math.exp(value);
}
@Override
public Formula derivative() {
return new Multiplication(member.derivative(), new Exponential(member));
}
}
package formula;
public class Logarithm extends UnaryOperation {
public Logarithm(Formula member) {
super(member, "log");
}
@Override
protected double compute(double value) {
return Math.log(value);
}
@Override
public Formula derivative() {
return new Division(member.derivative(), member);
}
}
package formula;
public class Multiplication extends BinaryOperation {
public Multiplication(Formula leftMember, Formula rightMember) {
super(leftMember, rightMember, "*");
}
@Override
protected double compute(double leftValue, double rightValue) {
return leftValue * rightValue;
}
@Override
public Formula derivative() {
return new Addition(new Multiplication(leftMember.derivative(), rightMember),
new Multiplication(leftMember, rightMember.derivative()));
}
}
package formula;
public class Opposite extends UnaryOperation{
public Opposite(Formula member) {
super(member, "-");
}
@Override
public Formula derivative() {
return new Opposite(member.derivative());
}
@Override
protected double compute(double value) {
return -value;
}
}
package formula;
public class Sine extends UnaryOperation {
public Sine(Formula member) {
super(member, "sin");
}
@Override
protected double compute(double value) {
return Math.sin(value);
}
@Override
public Formula derivative() {
return new Multiplication(member.derivative(), new Cosine(member));
}
}
package formula;
public class Subtraction extends BinaryOperation {
public Subtraction(Formula subtrahend, Formula minuend) {
super(subtrahend, minuend, "-");
}
@Override
protected double compute(double leftValue, double rightValue) {
return leftValue - rightValue;
}
@Override
public Formula derivative() {
return new Subtraction(leftMember.derivative(), rightMember.derivative());
}
}
package formula;
public abstract class UnaryOperation implements Formula {
protected final Formula member;
private final String symbol;
public UnaryOperation(Formula member, String symbol) {
this.member = member;
this.symbol = symbol;
}
@Override
public double eval(double xValue) {
return compute(member.eval(xValue));
}
protected abstract double compute(double value);
@Override
public String toString() {
return symbol + "(" + member + ")";
}
}
package formula;
public class VariableX implements Formula {
@Override
public double eval(double xValue) {
return xValue;
}
@Override
public String toString() {
return "x";
}
@Override
public Formula derivative() {
return new Constant(1);
}
}
package viewer;
import formula.Constant;
import formula.*;
import javafx.scene.chart.XYChart;
import java.util.ArrayList;
......@@ -19,8 +19,12 @@ class FunctionList {
this.lowerBound = functionChart.getLowerBound();
this.upperBound = functionChart.getUpperBound();
PlottableFunction function = new PlottableFunction(new Constant(1), "f");
addFunctionAndItsDerivative(function);
List<PlottableFunction> functions = List.of(new PlottableFunction(new Logarithm(new VariableX()),"f"),
new PlottableFunction(new Multiplication(new VariableX(), new Constant(3)), "g"),
new PlottableFunction(new Division(new Constant(1), new VariableX()), "h"),
new PlottableFunction(new Cosine(new Multiplication(new Constant(2), new VariableX())), "a"),
new PlottableFunction(new Exponential(new Multiplication(new Constant(2), new VariableX())), "a"));
addFunctionsAndTheirDerivative(functions);
}
void toggleFunction(PlottableFunction function) {
......
......@@ -45,7 +45,6 @@ public class MainAppController implements Initializable {
Button button = new Button(function.toString());
addButton(button);
button.setOnAction(event -> toggleFunction(function));
toggleFunction(function);
}
private void toggleFunction(PlottableFunction function){
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment