aboutsummaryrefslogtreecommitdiff
path: root/Week7/src/polynomial/Polynomial.java
diff options
context:
space:
mode:
authorCamil Staps2015-04-18 13:44:44 +0200
committerCamil Staps2015-04-18 13:44:44 +0200
commit6a44b074f0169a1b0f9e92347af929c5e471746e (patch)
treeae5663fe7c69881bf4ecfedbef99c2505f8ec964 /Week7/src/polynomial/Polynomial.java
parentAdded copyright to docs (diff)
Reorganised projects
Diffstat (limited to 'Week7/src/polynomial/Polynomial.java')
-rw-r--r--Week7/src/polynomial/Polynomial.java189
1 files changed, 0 insertions, 189 deletions
diff --git a/Week7/src/polynomial/Polynomial.java b/Week7/src/polynomial/Polynomial.java
deleted file mode 100644
index c87b96a..0000000
--- a/Week7/src/polynomial/Polynomial.java
+++ /dev/null
@@ -1,189 +0,0 @@
-package polynomial;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Scanner;
-
-/**
- * A class for representing Polynomials
- *
- * @author Sjaak Smetsers
- * @date 10-03-2015
- *
- * @author Camil Staps, s4498062
- * @date 17-03-2015
- */
-public class Polynomial {
-
- /**
- * A polynomial is a sequence of terms here kept in an List.
- * The assignment tells us 'it's handy' when terms are ordered by exponent.
- * We don't seem to need that though, so there's no need to implement it.
- */
- List<Term> terms;
-
- /**
- * A constructor for creating the zero Polynomial zero is presented as an
- * empty list of terms and not as a single term with 0 as a coefficient
- */
- public Polynomial() {
- terms = new ArrayList<>();
- }
-
- /**
- * A Constructor creating a polynomial from the argument string.
- *
- * This implementation, in contrast to the given implementation, allows for
- * entering polynomials with two or more terms with the same exponent. Even
- * though this is strictly not necessary and these inputs aren't legit, this
- * behaviour is always better than the behaviour of the given implementation
- * which would happily add two terms with the same exponent to our list.
- *
- * This implementation also directly checks that the coefficient unequals 0,
- * which is also not need-to-have, but still nice-to-have.
- *
- * Both changes to the given implementation do not change the behaviour on
- * legit input but do allow a user to mess up in some cases.
- *
- * @param s a String representing a list of terms which is converted to a
- * scanner and passed to scanTerm for reading each individual term
- */
- public Polynomial( String s ) {
- terms = new ArrayList<>();
- Scanner scan = new Scanner(s);
-
- for (Term t = Term.scanTerm(scan); t != null; t = Term.scanTerm(scan))
- if (t.getCoef() != 0)
- plus(t);
- }
-
- /**
- * The copy constructor for making a deep copy
- *
- * @param p the copied polynomial
- */
- public Polynomial( Polynomial p ) {
- terms = new ArrayList<>(p.terms.size());
- for (Term t : p.terms) {
- terms.add(new Term(t));
- }
- }
-
- /**
- * A straightforward conversion of a Polynomial into a string based on the
- * toString for terms
- *
- * @return a readable string representation of this
- */
- @Override
- public String toString() {
- StringBuilder sb = new StringBuilder();
- boolean not_first = false;
- for (Term t : terms) {
- if (not_first && t.getCoef() >= 0)
- sb.append("+");
- sb.append(t);
- not_first = true;
- }
- return sb.toString();
- }
-
- /**
- * Add a polynomial to this polynomial
- * @param b the polynomial to add
- */
- public void plus(Polynomial b) {
- for (Term t : b.terms)
- plus(t);
- }
-
- /**
- * Add a term
- * @param t the term to add
- */
- private void plus(Term t) {
- if (t.getCoef() == 0)
- return;
-
- Iterator<Term> iter = terms.iterator();
- while (iter.hasNext()) {
- Term this_t = iter.next();
- if (this_t.getExp() == t.getExp()) {
- this_t.plus(t);
- if (this_t.getCoef() == 0)
- iter.remove();
- return;
- }
- }
- terms.add(new Term(t));
- }
-
- /**
- * Subtract a polynomial from this polynomial
- * @param p the polynomial to subtract
- */
- public void minus(Polynomial p) {
- Polynomial temp = new Polynomial(p);
- temp.times(new Polynomial("-1 0"));
- plus(temp);
- }
-
- /**
- * Multiply a polynomial with this polynomial
- * @param p the polynomial to multiply with
- */
- public void times(Polynomial p) {
- Polynomial result = new Polynomial();
- for (Term that_t : p.terms)
- for (Term this_t : terms)
- result.plus(new Term(that_t.getCoef() * this_t.getCoef(), that_t.getExp() + this_t.getExp()));
- terms = result.terms;
- }
-
- public void divide(Polynomial b) {
- }
-
- /**
- * Check equality
- * @param other_poly the object to check with
- * @return true iff other_poly represents the same polynomial as this instance
- */
- @Override
- public boolean equals(Object other_poly) {
- if (other_poly == null || other_poly.getClass() != getClass())
- return false;
-
- Polynomial that = new Polynomial((Polynomial) other_poly); // We need to copy because later we'll remove elements
- if (terms.size() != that.terms.size())
- return false;
- for (Term this_t : terms) {
- Iterator<Term> that_iter = that.terms.iterator();
- boolean found = false;
- while (that_iter.hasNext()) {
- if (this_t.equals(that_iter.next())) {
- found = true;
- that_iter.remove();
- break;
- }
- }
- if (!found) {
- return false;
- }
- }
- return true;
- }
-
- /**
- * Apply the polynomial to a concrete variable
- * @param x the variable
- * @return the result of the polynomial applied on x
- */
- public double apply(double x) {
- double result = 0;
- for (Term t : terms)
- result += t.apply(x);
- return result;
- }
-
-}