Skip to content
Snippets Groups Projects
Commit 9a6ddad7 authored by RADELLAH Badr's avatar RADELLAH Badr
Browse files

Formula TP2

parent ad925775
No related branches found
No related tags found
No related merge requests found
package formula; package formula;
public class Product implements Formula { public class Product extends VariadicOperator {
private Formula[] formulas;
public Product(Formula... formulas) { public Product(Formula... formulas) {
this.formulas = formulas; super(formulas);
}
// Retourne la valeur initiale pour le produit (1)
public double initialValue() {
return 1;
}
// Cumul des valeurs pour le produit (multiplication)
public double cumulativeValue(double accumulator, double value) {
return accumulator * value;
} }
@Override @Override
public String asString() { public String symbol() {
StringBuilder sb = new StringBuilder("("); return "*";
for (int i = 0; i < formulas.length; i++) {
sb.append(formulas[i].asString());
if (i < formulas.length - 1) sb.append(symbol());
}
sb.append(")");
return sb.toString();
} }
@Override @Override
public double asValue() { public double initialValue() {
double result = initialValue(); // Initialise avec la valeur de départ (1 pour Product) return 1;
for (Formula formula : formulas) {
result = cumulativeValue(result, formula.asValue()); // Multiplie chaque valeur
}
return result;
} }
// Méthode symbol() comme déjà définie @Override
public String symbol() { public double cumulativeValue(double accumulator, double value) {
return "*"; return accumulator * value;
} }
} }
package formula; package formula;
public class Sum implements Formula { public class Sum extends VariadicOperator {
private Formula[] formulas;
public Sum(Formula... formulas) { public Sum(Formula... formulas) {
this.formulas = formulas; super(formulas);
}
// Retourne la valeur initiale pour la somme (0)
public double initialValue() {
return 0;
}
// Cumul des valeurs pour la somme (addition)
public double cumulativeValue(double accumulator, double value) {
return accumulator + value;
} }
@Override @Override
public String asString() { public String symbol() {
StringBuilder sb = new StringBuilder("("); return "+";
for (int i = 0; i < formulas.length; i++) {
sb.append(formulas[i].asString());
if (i < formulas.length - 1) sb.append(symbol());
}
sb.append(")");
return sb.toString();
} }
@Override @Override
public double asValue() { public double initialValue() {
double result = initialValue(); // Initialise avec la valeur de départ (0 pour Sum) return 0;
for (Formula formula : formulas) {
result = cumulativeValue(result, formula.asValue()); // Ajoute chaque valeur
}
return result;
} }
// Méthode symbol() comme déjà définie @Override
public String symbol() { public double cumulativeValue(double accumulator, double value) {
return "+"; return accumulator + value;
} }
} }
package formula;
public abstract class VariadicOperator implements Formula {
protected Formula[] formulas;
public VariadicOperator(Formula... formulas) {
this.formulas = formulas;
}
// Méthode abstraite pour le symbole
public abstract String symbol();
// Méthode abstraite pour la valeur initiale de l'opération
public abstract double initialValue();
// Méthode abstraite pour le cumul des valeurs
public abstract double cumulativeValue(double accumulator, double value);
@Override
public String asString() {
StringBuilder sb = new StringBuilder("(");
for (int i = 0; i < formulas.length; i++) {
sb.append(formulas[i].asString());
if (i < formulas.length - 1) sb.append(symbol());
}
sb.append(")");
return sb.toString();
}
@Override
public double asValue() {
double result = initialValue();
for (Formula formula : formulas) {
result = cumulativeValue(result, formula.asValue());
}
return result;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment