Skip to content
Snippets Groups Projects
Commit 86820cfd authored by Parnet-cyril's avatar Parnet-cyril
Browse files

Init Commit - Fin exo 4 TP 1

parent 3080bdc3
No related branches found
No related tags found
No related merge requests found
Pipeline #18417 failed
...@@ -5,6 +5,6 @@ import formula.Variable; ...@@ -5,6 +5,6 @@ import formula.Variable;
public class Function { public class Function {
public Function(Formula formula, Variable variable) { public Function(Formula formula, Variable variable) {
}
} }
}
package formula;
public class AbsoluteValue implements Formula {
private final double value;
public AbsoluteValue(double value) {
this.value = value;
}
@Override
public Double asValue() {
if (value < 0.0) { return -this.value; }
else { return value; }
}
@Override
public String asString() {
return "|" + value + "|";
}
}
package formula; package formula;
public interface Formula { public interface Formula {
Double asValue();
String asString();
} }
package formula;
public class Main {
public static void main(String[] args) {
Variable x = new Variable("x", 2.5);
Variable y = new Variable("y", 4);
Formula formula =
new Sum(x, new Product(y, new Sum(x, y)));
System.out.println(formula.asString()); // "(x+(y*(x+y))"
System.out.println(formula.asValue()); // "28.5"
x.setValue(5);
System.out.println(formula.asValue()); // "41.0"
}
}
package formula;
public class Maximum implements Formula {
private Formula[] operands;
public Maximum(Formula[] operands) {
this.operands = operands;
}
@Override
public String asString() {
StringBuilder stringBuilder = new StringBuilder("max(");
for (Formula operand : operands) {
stringBuilder.append(operand.asString()).append(",");
}
stringBuilder.deleteCharAt(stringBuilder.length() - 1); // Remove the last ','
stringBuilder.append(")");
return stringBuilder.toString();
}
@Override
public Double asValue() {
if (operands.length == 0) {
throw new IllegalArgumentException("Maximum operation requires at least one operand.");
}
double max = operands[0].asValue();
for (int i = 1; i < operands.length; i++) {
max = Math.max(max, operands[i].asValue());
}
return max;
}
}
package formula;
public class Minimum implements Formula {
private Formula[] operands;
public Minimum(Formula[] operands) {
this.operands = operands;
}
@Override
public String asString() {
StringBuilder stringBuilder = new StringBuilder("min(");
for (Formula operand : operands) {
stringBuilder.append(operand.asString()).append(",");
}
stringBuilder.deleteCharAt(stringBuilder.length() - 1); // Remove the last ','
stringBuilder.append(")");
return stringBuilder.toString();
}
@Override
public Double asValue() {
if (operands.length == 0) {
throw new IllegalArgumentException("Minimum operation requires at least one operand.");
}
double min = operands[0].asValue();
for (int i = 1; i < operands.length; i++) {
min = Math.min(min, operands[i].asValue());
}
return min;
}
}
package formula;
public class Power implements Formula{
private final double value;
private final int n;
public Power(double value, int n) {
this.value = value;
this.n = n;
}
@Override
public Double asValue() {
double result = 1;
for (int index = 0; index < this.n; index++) {
result = result * value;
}
return result;
}
@Override
public String asString() {
return value + "*" + value;
}
}
package formula;
public class Product implements Formula{
private final Formula left;
private final Formula right;
private final Formula[] operands;
public Product(Formula[] operands) {
this.operands = operands;
this.left = null;
this.right = null;
}
public Product(Formula left, Formula right) {
this.operands = null;
this.left = left;
this.right = right;
}
@Override
public String asString() {
if (operands != null) {
StringBuilder stringBuilder = new StringBuilder("(");
for (Formula operand : operands) {
stringBuilder.append(operand.asString()).append("*");
}
stringBuilder.deleteCharAt(stringBuilder.length() - 1); // Remove the last '*'
stringBuilder.append(")");
return stringBuilder.toString();
} else {
return "(" + left.asString() + "*" + right.asString() + ")";
}
}
@Override
public Double asValue() {
if (operands != null) {
double product = 1;
for (Formula operand : operands) {
product *= operand.asValue();
}
return product;
} else {
return left.asValue() * right.asValue();
}
}
}
package formula; package formula;
public class Square implements Formula { public class Square implements Formula {
public Square(Formula formula) {
private final double value;
public Square(Variable value) {
this.value = value.getValue();
}
public Square(double value) {
this.value = value;
}
@Override
public Double asValue() {
return value * value;
}
@Override
public String asString() {
return value + "*" + value;
} }
} }
package formula;
public class SquareRoot implements Formula{
private final double value;
public SquareRoot(double value) {
this.value = value;
}
@Override
public Double asValue() {
return Math.sqrt(value);
}
@Override
public String asString() {
return "sqrt(" + value + ")";
}
}
package formula; package formula;
public class Sum implements Formula { public class Sum implements Formula {
private Formula left;
private Formula right;
private Formula[] operands;
public Sum(Formula[] operands) {
this.operands = operands;
this.left = null;
this.right = null;
}
public Sum(Formula left, Formula right) { public Sum(Formula left, Formula right) {
this.left = left;
this.right = right;
this.operands = null;
}
@Override
public String asString() {
if (operands != null) {
StringBuilder stringBuilder = new StringBuilder("(");
for (Formula operand : operands) {
stringBuilder.append(operand.asString()).append("+");
}
stringBuilder.deleteCharAt(stringBuilder.length() - 1); // Remove the last '+'
stringBuilder.append(")");
return stringBuilder.toString();
} else {
return "(" + left.asString() + "+" + right.asString() + ")";
}
}
@Override
public Double asValue() {
if (operands != null) {
double sum = 0;
for (Formula operand : operands) {
sum += operand.asValue();
}
return sum;
} else {
return left.asValue() + right.asValue();
}
} }
} }
package formula; package formula;
public class Variable implements Formula { public class Variable implements Formula {
private String variable;
private double value;
public Variable(String variable, double i) { public Variable(String variable, double i) {
this.variable = variable;
this.value = i;
}
public String getVariable() {
return variable;
}
public void setVariable(String variable) {
this.variable = variable;
}
public double getValue() {
return value;
}
public void setValue(double value) {
this.value = value;
}
@Override
public String asString() {
return variable;
}
@Override
public Double asValue() {
return value;
} }
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment