1 The Basics
Purpose The first purpose of this lab is to give you some hands-on experience with the BSL programming language and with the DrRacket programming environment for BSL. The second purpose is to pair you up with a partner (see Pair Programming).
Textbook references Preface (DrRacket and the Teaching Languages), Prologue: How To Program, Chapter 2: Functions and Programs (up to but not including 2.5), Chapter 4 (up to but not including 4.5)
Introduction & Setup
Goals: Read and sign the course contract.
Exercise 1 Follow the instructions on this page to set up an account on the handin server. You will be using the handin server to submit all your homeworks for the semester.
Exercise 2 Read the course contract. Find the Course contract "assignment" on the handin server, and sign it.
Exercise 3 Find the Exam Conflicts assignment on the handin server, and complete it.
Exercise 4 Download and install DrRacket on your machine.
Partners
Goals Partnering.
In this course you will be completing your assignments with a partner. Because we are not seated physically together in a lab, your partner will be assigned randomly. You will work with this partner on your labs and homeworks. You should have one computer for the two of you: one person should be doing the typing, but both partners should be contributing ideas and code. You should switch roles regularly, to let both partners work equally. The two of you will get one grade for any given assignment.
Exercise 5 Make sure you are registered on the handin server. Once everyone is registered, your TA will randomly create teams.
Exercise 6 On the handin server, on the course homepage, you should now see that you are in a team, whose name looks something like "Team 12345 – Amal Ahmed and Ben Lerner". Next to that team name, you’ll see an @ link, which will let you email everyone in the team (which in this case is just you and your partner). Exchange contact information with your partner: telephone number, latest-greatest social network scheme, whatever-app.
Agree to a first meeting time and medium. At that meeting, agree to next meeting time and medium.
How Labs Operate
Your TA will go over this but you might find it helpful to find it written down. Lab writeups consist of three major parts: sample problems, starter code, and exercises.
Sample Problems are exercises whose solution we provide as part of the lab. Your lab’s head TA will go over the sample problem with the class.
Starter Code comes with a brief explanation you are expected to read and understand, and will enable you to complete the following exercises. You should always copy and paste the starter code into your program. Unless otherwise specified, you should make sure to take the time to understand the code you are copy/pasting.
Exercises are exercises you will complete on your own that the head TA will only review with the whole lab if they feel the majority of people are having difficulty with the problem.
You are free to leave when you have completed the entire lab or the head TA ends lab when time is up.
Using DrRacket
Goals Write a program in DrRacket’s definitions area. Explore the tools and menus of DrRacket. After running check-syntax, find documentation with "right-click" or by pressing F1.
Sample Problem Define a function that accepts a number of minutes and computes how many hours these minutes represent.
(define (minutes->hours num-minutes) (/ num-minutes 60))
Sample Problem Define the function how-far which consumes the number of minutes you drive at 55mph and produces how far you get in the given time.
(define SPEED 55) (define (how-far num-minutes) (* (minutes->hours num-minutes) SPEED))
More with DrRacket
Goals: Interact with Dr. Racket’s definitions window, interactions window, and stepper. Create basic expressions and function definitions. Introduce different types of errors.
Exercise 7 Define a function multiple-of-5? that accepts a number and determines if it is a multiple 5. Hint: the function modulo will be helpful to you here.
Exercise 8 Submit your response to the last exercise on the handin server. Note: This is the only exercise you will be submitting in this lab, and it is primarily to make sure you are authenticated with the hand-in server. Either you or your partner can submit, and the submission will be attributed to both of you. So don’t both submit. If you have any trouble submitting this exercise please tell your TA immediately so we can resolve the issue.
Exercise 9 Define a constant GREETING which contains your greeting. Then, use it in a function called greet that takes a name and outputs a full greeting.
Exercise 10 Call these functions in the interactions window. What happens if you call (multiple-of-5? "dog") or (greet #t)?
Exercise 11 Call your functions in the definitions window. Run the stepper on your program. Follow it through to see how it evaluates.
Exercise 12 It has been estimated that fixing the water in Flint, Michigan would cost 55 million dollars. Given someone’s net worth, define a function that will determine what percentage of their net worth it would take to fix the water. Elon Musk’s net worth, for example, is 77.2 billion and Jeff Bezos’ is 187.8 billion.
Conditions
Goals: Get practice writing conditional functions.
Exercise 13 Define the function absolute which consumes a number and produces the absolute value of that number (do not use abs).
Exercise 14 Define the function letter-grade. It consumes a Score and produces the corresponding letter grade ("A", "B", "C", "D", or "F"). You may be as wishful as desired in choosing your own grading scale.
Exercise 15 Define a function that given a number of hours worked and an hourly wage computes how much money has been earned. Any hours worked over 40 hours must be paid at 1.5 times the given rate.
Exercise 16 Define the function runtime that given a movie title outputs its runtime in minutes. Ensure the function works on a handful of inputs of your choosing, and for any other inputs throws an error.
Programming with Images
Goals: Get practice programming with images and writing a simple animation.
(require 2htdp/image)
Exercise 17 Use triangle, square, rectangle, above, and overlay/align to draw yourself a house with a roof and door (and circle if you’re feeling bold enough for a door handle).
Exercise 18 Congratulations, you’ve moved up a tax bracket. Define a constant WINDOW and place two of them on your humble home. Note how in using a constant we only have to draw it once and get to use it twice!
Exercise 19 Define a function scene that takes in a natural number and places a circle of that radius at the center of a 50x50 empty-scene. Use modulo to ensure the radius always stays below 20.
Exercise 20 Launch your animation by pressing run.
Pixar Whomst?
Goals: Use math and conditional programming to make the animation better.
Exercise 21 Use cond (or if if you’re feeling cheeky) to make the circle grow and shrink in a loop instead of grow and suddenly disappear and grow again. Since computing the radius is now a somewhat complex computation, it makes sense to write a separate helper function which only computes the radius that scene calls. Hint: quotient, even?.
Before You Go...
Make sure you can log into the handin server and sign the course contract if you didn’t already do that. If you have any questions regarding the lab or the course please feel free to ask a TA or tutor.