Assigned: Wednesday, January 24, 2007
Due: Friday, January 26, 2007
Summary: In this assignment, you will explore the use of
Scheme to compute the square roots of a
Purposes: To give you exprience writing expressions in
“Scheme form” (prefix notation and
parenthesized). To get you used to doing daily homework assignments,
particularly submitting the
assignments. To demonstrate the utility of Scheme as an extended calculator.
Expected Time: One hour.
Collaboration: You should work in groups of two or three.
You may not work alone. You may not work
in groups of four or more. You may discuss the assignment with anyone you wish.
You may obtain help
from anyone you wish, but you should clearly document that help.
Submitting: Email me your work. More details below.
Warning: So that this exercise is a learning assignment
for everyone, I may spend class time publicly
critiquing your work.
Background: Roots of Polynomials
One advantage of learning a programming language is that
you can automate the more tedious
computations you encounter. We begin your work in Scheme by considering one such
One of the more painful computations students are often
asked to do in high-school mathematics courses is
to compute the roots of a polynomial. As you may recall, a root is a value for
which the value of the
polynomial is 0. For example, the roots of 3x2 -5x+2 are 2/3 and 1. (See the
end of this assignment for a
There is, of course, a formula for computing the roots of
a quadratic polynomial of the form ax2+bx+c. In
a narrative style, it’s often expressed
Negative b plus or minus the square root of b squared
minus four a c all over two a.
In more traditional mathematical notation, we might write
(-b +/- sqrt(b2 - 4ac))/2a
Our goal, of course, is to convert all of these ideas to a
We can express the coefficients of a particular polynomial
by using define expressions.
(define a 3)
(define b -5)
(define c 1)
If we also define x, we can evaluate the polynomial.
(define x 5)
(define value-of-polynomial (+ (* a x x) (* b x) c))
Of course, since we’ve defined a, b, and c, we can also
compute the roots. Here is a bit of incorrect code
to compute roots.
(define root1 (+ (- b) (sqrt b)))
(define root2 (- (- b) (sqrt b)))
Your goal, of course, is to correct the code for root1 and
root2 so that we correctly compute the roots
of the polynomial.
You can test the correctness of your solution by trying
(define value-of-polynomial-at-root1 (+ (* a root1 root1)
(* b root1) c))
(define value-of-polynomial-at-root2 (+ (* a root2 root2) (* b root2) c))
If your solution is correct, each of these values should
be 0 (or close to 0).
Testing Your Work
In the past, we’ve seen students test their quadratic-root
formula by trying essentially arbitrary values for
a, b, and c. Unfortunately, many arbitrary quadratic polynomials have no real
roots. Hence, we suggest
that you test your work by building polynomials for which you know the roots.
How? Create your
polynomials by multiplying two linear polynomials, (px+q)*(rx+s). You know that
the roots of this
polynomial will be -q/p and -s/r.
Important Evaluation Criteria
The primary evaluation criterion for this assignment is,
of course, correctness. That is, I will check to
make sure that you expressed the quadratic formula correctly in Scheme.
Particularly elegant solutions may earn a modicum grade
boost. Conciseness is one aspect of elegance.
Formatting of your code for clarity, using horizontal and vertical whitespace is
another. You may discover
Submitting Your Homework
Once you have ensured that all of the definitions in the
definitions window are correct, please submit your
definitions in the body of an email message.
In particular, select all your definitions and then copy
them (typically, using Copy from the File item).
Open a mail composition window, either in Icedove or Outlook Express, and paste
the definitions into that
window. Add your names at the top of the window. Make the subject of the email
CSC151 Homework 2.
Send the mail.
In the narrative above, we claimed that the roots of 3x2
-5x+2 are 2/3 and 1. Let’s see if that’s true.
3*(2/3)*(2/3) - 5*2/3 + 2
= 12/9 - 10/3 + 2
= 4/3 - 10/3 + 2
= (4-10)/3 + 2
= -6/3 + 2
= -2 + 2
3*1*1 - 5*1 + 2
= 3 - 5 + 2