2016-09-19 18:48:27 +02:00
|
|
|
package org.warp.picalculator.math.functions;
|
2016-09-12 16:30:51 +02:00
|
|
|
|
2016-09-18 14:33:25 +02:00
|
|
|
import java.util.ArrayList;
|
2016-09-12 16:30:51 +02:00
|
|
|
|
2016-09-19 18:48:27 +02:00
|
|
|
import org.warp.picalculator.Error;
|
|
|
|
import org.warp.picalculator.math.MathematicalSymbols;
|
2016-11-25 22:40:43 +01:00
|
|
|
import org.warp.picalculator.math.rules.ExponentRule15;
|
2016-11-02 21:56:40 +01:00
|
|
|
import org.warp.picalculator.math.rules.NumberRule1;
|
|
|
|
import org.warp.picalculator.math.rules.NumberRule2;
|
2016-11-25 22:40:43 +01:00
|
|
|
import org.warp.picalculator.math.rules.NumberRule6;
|
|
|
|
import org.warp.picalculator.math.rules.SyntaxRule1;
|
2016-12-05 22:57:11 +01:00
|
|
|
import org.warp.picalculator.math.rules.methods.MultiplicationMethod1;
|
2016-09-12 16:30:51 +02:00
|
|
|
|
2016-09-19 18:48:27 +02:00
|
|
|
public class Multiplication extends FunctionTwoValues {
|
|
|
|
|
2016-11-02 21:56:40 +01:00
|
|
|
public Multiplication(Function parent, Function value1, Function value2) {
|
|
|
|
super(parent, value1, value2);
|
2016-11-25 22:40:43 +01:00
|
|
|
if (value1 instanceof Variable && value2 instanceof Variable == false) {
|
|
|
|
variable1 = value2;
|
|
|
|
variable2 = value1;
|
|
|
|
}
|
2016-09-12 16:30:51 +02:00
|
|
|
}
|
2016-12-04 22:22:16 +01:00
|
|
|
|
|
|
|
@Override
|
|
|
|
protected Function NewInstance(Function parent2, Function value1, Function value2) {
|
|
|
|
return new Multiplication(parent, value1, value2);
|
|
|
|
}
|
2016-09-12 16:30:51 +02:00
|
|
|
|
|
|
|
@Override
|
|
|
|
public String getSymbol() {
|
|
|
|
return MathematicalSymbols.MULTIPLICATION;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2016-11-25 22:40:43 +01:00
|
|
|
protected boolean isSolvable() {
|
2016-10-02 16:01:41 +02:00
|
|
|
if (variable1 instanceof Number & variable2 instanceof Number) {
|
|
|
|
return true;
|
2016-09-18 14:33:25 +02:00
|
|
|
}
|
2016-11-25 22:40:43 +01:00
|
|
|
if (SyntaxRule1.compare(this)) return true;
|
2016-11-02 21:56:40 +01:00
|
|
|
if (NumberRule1.compare(this)) return true;
|
|
|
|
if (NumberRule2.compare(this)) return true;
|
2016-11-25 22:40:43 +01:00
|
|
|
if (NumberRule6.compare(this)) return true;
|
|
|
|
if (ExponentRule15.compare(this)) return true;
|
2016-12-05 22:57:11 +01:00
|
|
|
if (MultiplicationMethod1.compare(this)) return true;
|
2016-10-02 16:01:41 +02:00
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2016-12-04 22:22:16 +01:00
|
|
|
public ArrayList<Function> solve() throws Error {
|
|
|
|
ArrayList<Function> result = new ArrayList<>();
|
2016-11-25 22:40:43 +01:00
|
|
|
if (SyntaxRule1.compare(this)) {
|
|
|
|
result = SyntaxRule1.execute(this);
|
|
|
|
} else if (NumberRule1.compare(this)) {
|
2016-11-02 21:56:40 +01:00
|
|
|
result = NumberRule1.execute(this);
|
|
|
|
} else if (NumberRule2.compare(this)) {
|
|
|
|
result = NumberRule2.execute(this);
|
2016-11-25 22:40:43 +01:00
|
|
|
} else if (NumberRule6.compare(this)) {
|
|
|
|
result = NumberRule6.execute(this);
|
|
|
|
} else if (ExponentRule15.compare(this)) {
|
|
|
|
result = ExponentRule15.execute(this);
|
2016-12-05 22:57:11 +01:00
|
|
|
} else if (MultiplicationMethod1.compare(this)) {
|
|
|
|
result = MultiplicationMethod1.execute(this);
|
2016-11-02 21:56:40 +01:00
|
|
|
} else if (variable1.isSolved() & variable2.isSolved()) {
|
2016-09-18 14:33:25 +02:00
|
|
|
result.add(((Number)variable1).multiply((Number)variable2));
|
|
|
|
}
|
|
|
|
return result;
|
2016-09-12 16:30:51 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean drawSignum() {
|
|
|
|
Function[] tmpVar = new Function[] { variable1, variable2 };
|
|
|
|
boolean[] ok = new boolean[] { false, false };
|
|
|
|
for (int val = 0; val < 2; val++) {
|
|
|
|
while (!ok[val]) {
|
|
|
|
if (tmpVar[val] instanceof Division) {
|
|
|
|
ok[0] = true;
|
|
|
|
ok[1] = true;
|
|
|
|
} else if (tmpVar[val] instanceof Variable) {
|
|
|
|
ok[val] = true;
|
|
|
|
} else if (tmpVar[val] instanceof Number) {
|
|
|
|
if (val == 0) {
|
|
|
|
ok[val] = true;
|
|
|
|
} else {
|
|
|
|
if (!(tmpVar[0] instanceof Number)) {
|
|
|
|
ok[val] = true;
|
|
|
|
} else {
|
2016-11-25 22:40:43 +01:00
|
|
|
break;
|
2016-09-12 16:30:51 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
} else if (tmpVar[val] instanceof Power) {
|
|
|
|
tmpVar[val] = ((Power) tmpVar[val]).variable1;
|
|
|
|
} else if (tmpVar[val] instanceof Root) {
|
2016-11-02 21:56:40 +01:00
|
|
|
if (val == 0) {
|
|
|
|
break;
|
|
|
|
}
|
2016-09-12 16:30:51 +02:00
|
|
|
ok[val] = true;
|
|
|
|
} else if (tmpVar[val] instanceof RootSquare) {
|
2016-11-02 21:56:40 +01:00
|
|
|
if (val == 0) {
|
|
|
|
break;
|
|
|
|
}
|
2016-09-12 16:30:51 +02:00
|
|
|
ok[val] = true;
|
2016-11-02 21:56:40 +01:00
|
|
|
} else if (tmpVar[val] instanceof Undefined) {
|
|
|
|
break;
|
|
|
|
} else if (tmpVar[val] instanceof Joke) {
|
|
|
|
break;
|
2016-11-25 22:40:43 +01:00
|
|
|
} else if (tmpVar[val] instanceof Negative) {
|
|
|
|
if (val == 1) {
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
ok[val] = true;
|
2016-09-12 16:30:51 +02:00
|
|
|
} else if (tmpVar[val] instanceof Expression) {
|
|
|
|
ok[0] = true;
|
|
|
|
ok[1] = true;
|
2016-09-19 18:48:27 +02:00
|
|
|
} else if (tmpVar[val] instanceof FunctionTwoValues) {
|
2016-09-12 16:30:51 +02:00
|
|
|
if (val == 0) {
|
2016-09-19 18:48:27 +02:00
|
|
|
tmpVar[val] = ((FunctionTwoValues) tmpVar[val]).variable2;
|
2016-09-12 16:30:51 +02:00
|
|
|
} else {
|
2016-09-19 18:48:27 +02:00
|
|
|
tmpVar[val] = ((FunctionTwoValues) tmpVar[val]).variable1;
|
2016-09-12 16:30:51 +02:00
|
|
|
}
|
2016-09-19 18:48:27 +02:00
|
|
|
} else if (tmpVar[val] instanceof AnteriorFunction) {
|
|
|
|
tmpVar[val] = ((AnteriorFunction) tmpVar[val]).variable;
|
2016-11-25 22:40:43 +01:00
|
|
|
} else {
|
|
|
|
ok[val] = true;
|
2016-09-12 16:30:51 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (ok[0] == true && ok[1] == true) {
|
|
|
|
return false;
|
|
|
|
} else {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
2016-11-25 22:40:43 +01:00
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean equals(Object o) {
|
|
|
|
if (o instanceof Multiplication) {
|
|
|
|
FunctionTwoValues f = (FunctionTwoValues) o;
|
|
|
|
if (variable1.equals(f.variable1) && variable2.equals(f.variable2)) {
|
|
|
|
return true;
|
|
|
|
} else if (variable1.equals(f.variable2) && variable2.equals(f.variable1)) {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
2016-09-12 16:30:51 +02:00
|
|
|
}
|