Problems 1 to 4 of this homework are due at 11:59PM on Monday, September 23.
Submit them using the COMP 50 Handin button on DrRacket; the homework is the structures
homework.
Problem 5 is due at 11:59PM on Monday, September 30. You will submit that problem either by signing a logbook located conveniently near the Earth’s surface, or by submitting a logbook
entry via the COMP 50 Handin button on DrRacket.
All the exercises should be done using the Beginning Student Language.
For this homework I am recommending the following finger exercises:
In the First Edition How to Design Programs, Exercises 6.4.1, 6.4.3, 6.5.1, 6.6.1 (but instead of a symbol for color, please use a string), 6.6.3, 7.1.1, 7.1.3, 7.2.1, 7.2.2, 7.5.1, 7.5.3
Develop data examples for the structure definitions in Exercise 6.4.1
Write a function that converts a GPS position (as you define it below) to English
Provide a structure definition and a data definition for representing clock time as a number of hours, minutes, and seconds elapsed since midnight. Unlike the example solution provided on the HtDP web site, your data definition must make clear exactly which values are and are not acceptable clock times.
Define a function move-big-hand
which adds one minute to a time structure.
Define a function time->digital
which consumes a time structure and produces an image showing how the time would read on a digital clock. Use the design recipe for a function that consumes compound data.
The Garmin eTrex handheld GPS renders distances in three ways:
Any distance up through 999 feet is rendered to the nearest whole foot, followed by the abbreviation “ft”.
Any distance from 1000 feet up through 999 miles is rendered to the nearest tenth of a mile, using a decimal point and the abbreviation “mi”.
Any distance of 1000 miles or more is rendered to the nearest mile, with no decimal point and the abbreviation “mi”.
Implement function meters->english
which converts a distance in meters to a string showing the English units as on the Garmin GPS. Example outputs include "37ft"
, "850ft"
, "0.2mi"
, "10.0mi"
, and "2268mi"
.
Use the design recipe for conditional functions.
Domain knowledge: 1 inch is 2.54 centimeters. 1 foot is 12 inches. 1 mile is 5280 feet.
Define a structure gps-posn
and a data definition which represents GPS coordinates (latitude and longitude). Be sure that the data definition is sufficient so that anyone can determine whether an example structure is or is not a good GPS position.
Define a function checked-make-gps-posn
which behaves like make-gps-posn
except that it guarantees that the latitude and longitude are good.
Define a function flat-earth-distance
that returns the distance in meters between two nearby GPS positions, assuming that near the positions you are interested in, the Earth’s surface has been flattened. You may wish to consult the handout on the Earth’s geometry.
A bearing is a direction given relative to the compass. A bearing may be given as a string (N, S, E, W, NE, SE, NNW, and so on) or as a number of degrees. A bearing of zero degrees is North, ninety degrees is East, and so on. Write a data definition for bearings.
Define a function which given two nearby GPS positions, returns the bearing of the second point with respect to the first. This bearing is the direction you are facing if you stand on the first point and look at the second. Again, assume that the Earth’s surface has been pressed flat near the positions you are interested in.
Define a function gps-project
which consumes a position, bearing, and distance, and produces a new position obtained by starting at the first position, facing the given bearing, and traveling the given distance. This function should assume the Earth’s surface has been flattened at the location of the initial point. This function (with a better model of the Earth) is built into my handheld GPS unit.
Use both the design recipe for compound data and the design recipe for mixed data.
Domain Knowledge: I’ve created a handout that shows the trigonometry needed to do the computations under the assumption that near the points of interest, the Earth’s surface has been pressed flat.
While riding in his convertible with the top down, Professor Jacob is struck in the head by an errant baseball. When he recovers, he decides to hire you to create an experiment designed to confirm the validity of Fitts’s Law, which you can look up on Wikipedia.
Professor Jacob asks you to design a big-bang
program that reacts to mouse clicks (“button-down” mouse events). In case the experimental subject decides not to click the mouse, the experimenter must also be able to limit the number of seconds for which the program runs.
The program should draw the first mouse click as a seven-pointed, solid green star. At that point it should place a red circle at a random location on the canvas (display). The radius of the circle should be chosen randomly between 2 and 20 pixels.
The program should then wait either for time to expire or for the experimental subject to click within the red circle.
If time expires, the program should write a consoling message over the canvas.
If the experimental subject successfully clicks within the red circle, the program should display a congratulatory message that includes the time that elapsed between the initial mouse click and the successful mouse click. Professor Jacob would really like to measure time to the nearest tenth of a second.
After the message is written, the program should display its message for a few seconds, then return a structure containing the information relative to an experiment on Fitts’s Law. Professor Jacob is still feeling a little foggy from the effects of the baseball, you will have to use the [Wikipedia page] to figure out what information to return and how to represent it.
Use all of the design recipes above, plus a wish list.
Domain knowledge: The Wikipedia page talks about a “device”, a “target”, and a “movement.” The device is not under your control and you can’t measure any of its properties directly. The “target” is the red circle you create and the starting point is the star. You are able to gather data about these aspects of the problem.
Domain knowledge: You will need the 2hdtp/image
and 2htdp/universe
teachpacks. In the second edition, read Section 3.6 (Designing World Programs), especially Figure 10: Signatures for interaction functions.
To understand how a program be limited to a given number of seconds, read the documentation for on-tick
.
To understand how to respond to the mouse, read the first part of Section 3.7 (A Note on Mice and Characters) in the second edition.
gps-project
function to follow directions over the part of the Earth’s surface that contains Tufts. At the end of the directions you will find a box containing a log book where you can write your name. To help you in your travels, you will be permitted to use a phone, tablet, or other GPS device, as well as Google Earth or Google Maps.To use the teachpack you will evaluate two expressions:
Evaluating
(follow-waypoints-english
make-gps-function latitude-selector longitude-selector passphrase)
will give you a rough set of directions in English.
Evaluating
(follow-waypoints-computer gps-project
make-gps-function latitude-selector longitude-selector passphrase)
will give you a GPS position computed using your gps-project
function.
If I can get all the pieces working,
(follow-waypoints-google-maps gps-project
make-gps-function latitude-selector longitude-selector passphrase)
will take you to a Google Maps view of your destination.
Every student will have a different passphrase which I will cause to be emailed to you.
Traveling over the Earth’s surface can be dangerous, especially if you are alone or it is dark outside. Therefore, the parts that involves finding the box and the log book are optional. The only required part of this problem is that you use the teachpack to produce GPS coordinates, which you then submit in human-readable form using compass directions, degrees, minutes, and seconds.
Define a function time->analog
which converts a clock time into an image representing an analog clock. Your image must include an hours hand and a minutes hand; whatever other elements you wish to include are up to you.
Use big-bang
to animate the passage of time on a clock. Run the animation at sixty times real time.
Run the Fitts’s Law experiment multiple times in succession and use the results to estimate the characteristics of your device.
Here are the key questions:
Are there data descriptions where needed? Are they accompanied by data examples?
Does every function have an appropriate signature (called “contract” in the first edition), purpose statement, and header?
Did you come up with examples?
Are the signature and purpose statement precise enough that somebody else could come up with good examples?
Has the function body been developed by following a template that is suited to the problem and to the class of data being consumed?
In the coding step, have you carried out the purpose statement and only the one purpose statement?
Does your submission included test cases derived from your examples using check-expect
and/or check-within
? Are the test cases sufficient to handle every situation from your analysis and every clause in every relevant data description?