* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Download Document
Root of unity wikipedia , lookup
Quartic function wikipedia , lookup
Horner's method wikipedia , lookup
Gröbner basis wikipedia , lookup
Cayley–Hamilton theorem wikipedia , lookup
Polynomial greatest common divisor wikipedia , lookup
System of polynomial equations wikipedia , lookup
Polynomial ring wikipedia , lookup
Factorization of polynomials over finite fields wikipedia , lookup
Fundamental theorem of algebra wikipedia , lookup
Assignment 1
CP-213
Winter 2017
Due: Wednesday, February 8, 5 pm
This assignment is worth 8% of the final grade.
POLYNOMIAL MANIPULATION
Write a Java program that manipulates univariate polynomials with integer coefficients. For this you
need to define a class Poly with methods that implement addition (add), subtraction (sub),
multiplication (mul), evaluation (evalAt), and integer root finding (iRoots). All polynomials
processed by your program are assumed to be in the same independent variable x. You also must
implement class Stack with elements of type Poly and the standard stack API. Finally, you need to
implement class Manipulate that processes input and produces the output according to the
following description.
INPUT SPECIFICATION
The input is a sequence of lines with each line containing one polynomial or instruction such as
ADD, SUB, MUL, EVALAT, ROOTS, QUIT, TEST, and PRINT. Every polynomial in the input
is represented as:
n an an-1 … al a0
where n>=0 – is the degree of the polynomial and ak,k=n, n-1, …,0 are integer coefficients. For
example:
4 2 0 -1 0 7
represents the polynomial 2x4-x2+7.
Input is processed line by line as follows:
if the next line of the input stream is representation of a polynomial, create an object of
class Poly that represents this polynomial and push it on the stack;
if the next line of the input stream is ADD, MUL, SUB, remove from the stack the two
topmost polynomials, apply the operation to them and push the result back on the stack;
if the next line is EVALAT p (where p is an integer), evaluate the topmost polynomial
from the stack at x=p and output the result (the stack state is not changed);
if the next line is ROOTS , find and output all integer roots of the topmost polynomial (the
stack state is not changed);
if the next line is PRINT, output the topmost polynomial (the stack state is not changed);
if the next line is TEST, remove from the stack the two topmost polynomials, and if they
are the same push only one of them back on the stack, otherwise push both of them back
on the stack in the original order;
if the next line is QUIT, your program should output all polynomials that remain on the
stack and exit.
You can assume that input is always correct and valid. No exception handling is required.
Your program should not print anything else (e.g. it should not prompt user for input of lines).
Polynomial output requirements:
monomials are printed in the descending order of their degrees;
only monomials with non-zero coefficients are printed;
monomial with nonzero coefficient ak is printed as ak x^k;
monomial with nonzero coefficient a1 is printed as a1 x;
monomial with coefficient a0 is printed as a0;
zero polynomials is printed as 0;
coefficients equal to 1 or -1 are not printed;
the printed string should not contain sign sequences, such as “+-“ or “++”.
For example,
polynomial 4 2 0 -1 0 7 should be printed as 2 x^4 – x^2 + 7,
polynomial 5 0 0 -2 1 0 0 should be printed as -2 x^3 + x^2.
Class Poly API requirements:
Define immutable class Poly with the instance variables as shown below
public class Poly {
private int deg;
private int[] coef;
…
Define all necessary constructors, accessors, and
String toString()
returns pretty printed string representation of an object of class Poly.
boolean equals(Poly other)
tests equality of this and other object of class Poly.
Poly add(Poly other)
returns new object of class Poly which is the result of addition of this and other
object of class Poly.
Poly sub(Poly other)
returns new object of class Poly which is the result of subtraction of this and other
object of class Poly.
Poly mul(Poly other)
returns new object of class Poly which is the result of multiplication of this and other
object of class Poly.
int evalAt(int p)
returns result of evaluation of this polynomial at x=p.
void iRoots()
prints all integer roots of this object of class Poly.
Remarks/hints:
degree of the sum and difference of two polynomials is smaller or equal to the maximal
degree of the input polynomials; for example, degree of x^3-2x^2+1 is 3, degree of
-x^3+2x^2+x is 3, but degree of their sum x+1 is 1.
any nonzero integer root of a given polynomial (if it exists) divides the constant term; if
the constant term of a given polynomial is 0, then the same applies to the nonzero
coefficient of the monomial of the least degree; if the constant term of a given polynomial
is 0, then this polynomial has integer root equal to 0.
You cannot use Java’s class Stack but need to provide your own implementation of stack
functionality.
Use JavaDoc to document your code. Submit the code along with proper documentation.