This lab is also available in PDF.
Summary: This lab provides practice with simple user-defined procedures.
a. Open the reading in a separate window or tab.
b. Start DrScheme and make sure that you're in
Pretty Big Scheme mode.
fracpart procedure from
the reading on procedures
and make sure that it works as advertised.
;;; Procedure: ;;; fracpart ;;; Parameters: ;;; val, a real number ;;; Purpose: ;;; Express the fractional part of val as a fraction. ;;; Produces: ;;; rat, a rational number. ;;; Preconditions: ;;; val cannot be complex. ;;; Postconditions: ;;; 0 <= rat < 1. ;;; (- val rat) is a whole number (or a a close approximation). ;;; rat is exact. ;;; rat is approximately equal to the fractional part of val ;;; (within some unknown level of accuracy). ;;; rat is the ratio of two integers. (define fracpart (lambda (val) (inexact->exact (- val (truncate val)))))
Write a Scheme procedure
(addtwo a) that returns the sum
In this exercise, and in the subsequent ones, you need not document the procedure unless I explicitly tell you to do so.
a. Define a Scheme procedure,
that takes one argument, a real number representing a length measured in
feet, and returns the number that represents the same length as measured
in meters. Note that one foot is equal to exactly 761/2500 meters.
b. Use this procedure to determine the number of meters in one mile (5280 feet).
c. How would you use this procedure to determine the number of feet in
a 1000-meter race? (And no,
It depends on the number of runners
is not an acceptable answer.) Note that this is a thought question.
It does not ask you to compute that value, simply how you would
compute the value.
feet->meters to your library of procedures.
a. Define a procedure,
(poly1 x), that corresponds to the
polynomial 5x2 - 8x + 2.
b. Test your procedure on the values 0, 1, 2, 3, 4.
In homework 2, you wrote a pair of definitions for the roots of the quadratic polynomial ax2+bx+c. The disadvantage of those definitions was that you had to redefine a, b, and c whenever you wanted to recompute roots. You can now make the root computations a procedure.
a. Write a procedure
(quadratic-root a b c)
that finds one root of the following quadratic equation by using the
quadratic formula. (I don't care which root you find.)
ax2+bx+c = 0
In case you've forgotten, the quadratic formula is
(-b +/- sqrt(b2 - 4ac))/2a
b. Test your procedure by computing
(quadratic-root 1 -5 6) (quadratic-root 2 -10 12) (quadratic-root 1 4 4).
c. Use algebra to check these answers.
d. What are
(quadratic-root 1 0 1) and
(quadratic-root 1 0 2)?
a. Write a procedure,
(swap-first-two lst), that,
given a list as an
argument, creates a new list that interchanges the first two elements of
the original list, leaving the rest of the list unchanged. Thus,
> (swap-first-two (list 'a 'b 'c 'd 'e)) (b a c d e)
In this problem, assume that the list given to
has at least two elements; do not worry about the possibility that
swap-first-two might be applied to numbers, symbols,
empty lists, or lists with only one element.
b. Add this procedure to your library.
The volume of a sphere of radius r is 4/3 times pi times r3.
The circumference of a sphere of radius r is 2 times pi times r.
a. Write a procedure,
(sphere-volume r), that
takes as its argument the radius of a sphere (in, say, centimeters)
and returns its volume (in, say, cubic centimeters).
b. Write a procedure,
that converts the circumference of a sphere to its radius.
c. Use these procedures to compute the volume of a standard softball, which has a circumference of 12 inches.
d. Use these procedures to compute the volume of a Chicago-style softball, which has a circumference of 16 inches.
e. Compute the volumes of each kind of softball using centimeters instead of inches.
a. Define a procedure
that takes two arguments, of which the second should be a list.
snoc should return a list just like its second argument,
except that the first argument has been added at the right end:
> (snoc 'alpha (list 'beta 'gamma 'delta)) (beta gamma delta alpha) > (snoc 1 (list 2 3 4 5 6)) (2 3 4 5 6 1) > (snoc 'first null) (first)
Hint: There are at least two ways to define this procedure. One uses calls to
cons; the other uses calls to
snoc to your library.
If you find that you have extra time, you might want to attempt the following tasks.
Write a procedure,
(rotate lst), that,
given a nonempty list of elements (e.g.,
(a b c)),
creates a new list with the original first element moved to the end .
> (rotate (list 'a 'b 'c)) (b c a) > (rotate (list 1 2)) (2 1) > (rotate (rotate '(first second third fourth))) (third fourth first second)
In a figure-skating competition, judges have observed the competitors' performances and awarded three separate scores to each competitor: one for accuracy, one for style, and one for the difficulty of the chosen routine. Each score is in the range from 0 to 10. The rules of the competition specify that a competitor's three scores are to be combined into a weighted average, in which accuracy counts three times as much as difficulty and style counts twice as much as difficulty. The overall result should be a single number in the range from 0 to 10.
a. Write a comment in which you describe the nature and purpose of a procedure that takes three arguments -- a competitor's accuracy, style, and difficulty scores -- and returns their weighted average.
b. Define the procedure that you have described.
c. Test your procedure, looking for cases in which the weighted average is computed incorrectly. (If you find any, make corrections in your definition.)
snoc (exercise 8) in two different ways. (You
should have already written it one way; find another way.)
(round-to-n-places val p),
which rounds val to p places after the decimal point.
Note that you may have described the steps for
in the lab on numeric values.
Write a procedure,
(quadratic-roots a b
c) which computes both roots of the quadratic
equation and returns them in a list.
ax2+bx+c = 0
> (quadratic-roots 3 5 2) (1 2/3)
I usually create these pages
on the fly, which means that I rarely
proofread them and they may contain bad grammar and incorrect details.
It also means that I tend to update them regularly (see the history for
more details). Feel free to contact me with any suggestions for changes.
This document was generated by
Siteweaver on Thu Sep 13 20:54:26 2007.
The source to the document was last modified on Sun Feb 4 07:55:08 2007.
This document may be found at
You may wish to validate this document's HTML ; ;Samuel A. Rebelsky, firstname.lastname@example.org
http://creativecommons.org/licenses/by-nc/2.5/or send a letter to Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.