CS 115
Introduction to Computer Science 1

Course Philosophy

Welcome to CS 115!

CS 115 has been designed with the diverse interests, backgrounds, and goals of students always in mind. As we are aware of the varied ways in which this material might be of use in the future, we have included concepts that are beautiful and universal. The focus of the course is foundational concepts in computer science (rather than the mechanics of programming) and ways of thinking about computation (rather than solving tasks in a rote fashion). Students will learn skills that are applicable to new languages and environments, not just those used in the course. Because of the fundamental nature of the concepts taught in CS 115, the course can serve both students whose primary interest in computers is in their use in their chosen areas of study and students intending to minor in CS.

A lot of the information on this page can also be found in a separate course outline.


All announcements will be posted on Learn. You should check Learn everyday!

This course uses the version of Scheme called DrRacket. Follow this link to Install DrRacket.

Below is the class/lab schedule for Spring 2019.

CS 115 LEC 001: Tuesdays and Thursdays, 08:30–09:50, RCH 110
CS 115 LEC 002: Tuesdays and Thursdays, 11:30–12:50, MC 2034

CS 115 LAB 101: Fridays, 10:00–11:20, MC 3003
CS 115 LAB 102: Fridays, 11:30–12:50, MC 3003
CS 115 LAB 103: Fridays, 13:00–14:20, MC 3003

Monday June 24th, 7:00–8:50PM, rooms TBA

Final Exam
Wednesday August 14th, 2019 from 4:00PM - 6:30PM in PAC Sections 1 & 2


Participation/Clicker 5%
Labs 3% (bonus)
Assignments 20%
Midterm 30%
Final 45%

You must pass the weighted exam average in order to pass the course.

You must pass the course to receive the 3% bonus (the total bonus is based on the number of completed labs).
Assignment 0 is not worth any marks, but it MUST be submitted for all other grades to be counted.

If you have any grievances about an assignment's marking, please email cs115@uwaterloo.ca with your quest ID, the assignment, and the concern you have about the grading. Note that remarking for the midterm/final is handled by instructors. If you would like an exam remarked, please follow the instructions posted on Learn.

Schedule and Course Materials

Week Lectures Labs Assignments/Exam
1. May 6–10 Module 1: Introduction
Textbook: How To Design Programs
Lab 1 (Getting Started)
*Labs are still running the first week of classes!
Please be sure to attend!
Assignment 0 due Wed May 15 10:00AM
Assignment 0 Q3 Interface
Assignment 0 Q4 Interface
*Please download and save the Interface Files, do not copy and paste them.
2. May 13–17 Module 2: The Design Recipe
[Code from Class]notes] -->
3. May 20–24 Module 3: Working with Lists
[Code from Class]
Lab 2 due Tue May 21 4:00PM
Lab 2 Interface
Assignment 1 due Wed May 22 10:00AM
Assignment 1 Interface
4. May 27–31 Module 4: Making Decisions
[Code from Class]
Lab 3 due Mon May 27 4:00PM
Lab 3 Interface
Assignment 2 due Wed May 29 10:00AM
Assignment 2 Interface
[List of Allowed Built in Functions]
5. Jun 3–7 Module 5: Deconstructing and Constructing Lists
[Code from Class]
Lab 4 due Mon June 3 4:00PM
Lab 4 Interface
Assignment 3 due Wed June 5 10:00AM
Assignment 3 Interface
[List of Allowed Built in Functions]
6. Jun 10–14 Module 5: Deconstructing and Constructing Lists (continued) Lab 5 due Mon June 10 4:00PM
Lab 5 Interface
Assignment 4 due Wed June 12 10:00AM
Assignment 4 Interface
[List of Allowed Built in Functions]
7. Jun 17–21 Module 6: Recursion
[Code from Class]
Lab 6 due Mon June 17 4:00PM
Lab 6 Interface
Assignment 5 due Wed June 19 10:00AM
Assignment 5 Interface
[List of Allowed Built in Functions]
8. Jun 24–28 Midterm
Module 7: Advanced Recursion
[Code from Class]
Lab 7 due Wednesday June 26 4:00PM
Lab 7 Interface
Midterm Exam: Monday, June 24th 7:00PM-8:50PM
No Assignment
9. Jul 1–5 Module 7: Advanced Recursion (continued)
Lab 8 due Tue July 2 4:00PM
Lab 8 Interface
Assignment 6 due Wed July 3 10:00AM
Assignment 6 Interface
[List of Allowed Built in Functions]
10. Jul 8–12 Module 8: Other Data Structures
[Code from Class]
Lab 9 due Mon July 8 4:00PM
Lab 9 Interface
Assignment 7 due Wed July 10 10:00AM
Assignment 7 Interface
[List of Allowed Built in Functions]
11. Jul 15–19 Module 9: Trees
[Code from Class]
Lab 10 due Mon July 15 4:00PM
Lab 10 Interface
Assignment 8 due Wed July 17 10:00AM
Assignment 8 Interface
[List of Allowed Built in Functions]
12. Jul 22–26 Module 10: Imperative Programming Lab 11 due Mon July 22 4:00PM
Lab 11 Interface
Assignment 9 due Wed July 24 10:00AM
Assignment 9 Interface
13. Jul 29–Aug 2 Lab 12 due Mon July 29 4:00PM
Assignment 10 due Tues July 30 11:59PM


For questions related to course content, contact an instructor or an ISA. The best place to ask questions is on LEARN DISCUSSION or email, but you can also send email or visit during office hours. For questions about marking, contact the Assistants first, who will consult with the Instructor if necessary.


Cameron Morland
Email: cjmorland@uwaterloo.ca
Office: MC 4030
Office hours: MC 4065

Tuesday and Thursday 10-11,
Tuesday 1-2,
or by appointment

Instructional Support Assistants (ISAs)

Coming to a theater near you
Josué Kurke
Email: cs115@uwaterloo.ca
Office: MC 4065
Office hours: Monday 12-1

Tuesday 2-3,
or by appointment

Instructional Support Coordinator (ISC)

Barbara Daly
email: bmzister@uwaterloo.ca
Office: MC 4007

Office Hours


Class Participation

Class participation counts for 5% of the final grade in CS 115. This grade is based off the in-class use of iClickers. iClickers can be purchased at the campus bookstore. During weekly lectures, the instructor will ask several multiple-choice questions to be answered using clickers. Each question during lectures is worth 2 marks: one mark for participation (answering the question), and one mark for correctness (getting the right answer). Your final participation grade is taken from the best 75% of your clicker answers over the whole term.

Use this link for iClicker registration.

You must register your iClicker in order for your responses to count towards your grade.
The Faculty of Mathematics has a fairly extensive iClicker FAQ if you have any questions.


Some assignments will require to complete stepping/tracing questions. Follow the link here to access the stepping problems.


Follow the link below to access assignment solutions. Please note that solutions to labs will not be posted.


Common errors found on assignments will be posted below.

How to Submit on MarkUs


To log in to MarkUs, please ensure that you are doing the following:

  • Use Firefox, Safari, or Chrome to access Markus. MarkUs does not work properly with Internet Explorer or Edge.
  • Use all lowercase letters when entering your userid on the CAS page. Using uppercase letters will render you unrecognizable to the system.
  • Use the link to MarkUs provided on the menu at the left.

If you encounter a "Login Failed" message, check that you meet the above three criteria before contacting course personnel. If you are still experiencing issues or have run into different errors (such as a redirect problem), please e-mail the ISAs with your Quest userid and a brief description of your error.

Submitting Assignments

To submit files for Assignments, follow the instructions below.

  1. On your MarkUs homepage, click the assignment name to go to its submission page.
    This box shows you how many files you have submitted and how many of the required files you are missing. The Missing Required Files will initially be equal to the number of files you have to submit. As you submit the properly named files, this number will decrease.
    Assignment Rules
    This box has the assignment name, due date, and the names of the required files for the assignment. You must name your assignment submissions as indicted by the list: a lowercase a followed by a 0, then the assignment number, then a lowercase q followed by the question number. The file extension must be .rkt. For example, for Assignment 2 Question 3, your file should be named a02q3.rkt.
    The names of the lab files are similar to how you name assignment files: a lowercase l (l stands for "lab"; not a capital i nor a number 1) followed by two digits for the lab number, then a lowercase q followed by the question number. For example, the file name for Lab 1 Question 2 should be l01q2.rkt.
  2. Click the "Submissions" tab at the top of the page.
  3. Click "Add A New File". A new row will be added to the table. Click "Choose File" or "Submit" in the new row. (The button's name will depend on your web browser.) In the window that appears, browse to where you have saved your file and select it. Click the Submit button.
  4. Your submitted file will now appear in the table. Check that the filename is correct. If you click on the filename, you will see the contents of the file. You should check that the contents are correct, and that you have submitted what you wanted to submit.

Replacing a file

You can only replace a file with one that has the same name.
Warning Do not use Internet Explorer to replace files. It will appear as though the change has gone through when it has not. Your files will not be replaced.

  • Under the "Replace" column, click "Choose File" or "Browse" for the file you want to replace. In the window that appears, browse to the replacement file and select it. Click the Submit button.

Deleting a file

If you have submitted the incorrect file, you can delete it by selecting the "Delete" box for the file and then clicking Submit. This is also an alternative way to replace a file: delete the file you want to replace and submit the correct version/file.

Viewing Assignment Marks and Results

Once marking for an assignment is completed, you can see your mark for each assignment on your MarkUs home page. For a more detailed breakdown of your mark along with marker comments, click the "Results" link.

  • On the right is your mark breakdown:
    Under this tab you can see the level you received for each criterion.
    Under this tab you can see the weight for each catagory and how your mark was added up.
  • On the left is the code for one of your files.
    1. To see marker comments, click on the left drop-down box (it is above and to the right of ''Annot. Summary'').
    2. Select "GRADED_ASSIGNMENT.rkt". This file contains all of your submissions.
    3. Put your mouse over any lines that are yellow. A box will appear with the marker's comments about that particular line of code, or a general note about your submission.
      The ''Annot. Summary'' tab contains a list of all the comments a marker has made to your assignment. Click on the link at the top left of each comment to go to the associated code.


The midterm will be June 24th from 7:00-8:50PM.

Give the Sample Midterm a try.

Try out these shuffled exercises, taken from Modules 1-6. You should be able to do most or all of them!

For the exam you will have a Reference Sheet that may resemble this one.
The midterm will cover content from Modules 1 - 5 with a little bit of recursion from Module 6.
You will not need to perform step by step tracing of programs, but will be asked to evaluate code.

You can find your assigned seat here. Do not forget to bring your WatCard to the midterm!


Course technology

  • If you have any questions, you can ask them on LEARN in the Discussion Forum section. Keep in mind that course staff probably will not answer questions late at night, so try to ask questions early!

Other documentation

  • There are a few general documents that will help you get through this course, which are identical to the ones we made available to you in CS 105. Make sure you've read the Survival Guide for starters. Then, before submitting code for assignments and labs, make sure you're up to speed on our suggested Style Guide and that you know how to submit code on MarkUs.

Assignment Information

General information

All Assignments will be posted on the course website AND the Assignment folder on Learn.

Before submitting code for assignments, you should familiarize yourself with the code style guidelines and read the instructions on how to submit.

Lab computers are available to complete assignments on should you have any technical difficulties with your personal computer. We highly recommend to regularly back up your files, to prevent lost progress.

Assignments are designed to give you practice in the concepts and skills discussed in lecture, to prepare you for exams, and to give you feedback on your mastery of course material. You rob yourself of these benefits if you hand in work that is not your own. Please read the section below on Academic Integrity, including the linked UW Policies and Avoiding Academic Offenses. These apply to every course you will take at UW, and you should be familiar with them.

Preamble: Each assignment has a preamble which explains the assignment requirements and restrictions. Read carefully. Changes from one assignment to the next will be highlighted.

Help: Each assignment will have its own discussion board on Learn broken down by question. Use these forums to ask for clarification on assignment questions, lecture material, or Racket in general. If you are worried about whether or not your question is appropriate (Do not post code) you can make a private post.

Basic Tests: Check Markus to see the basic test results for your submitted files. Note that basic tests only check to see if your code will run on our marking server and that any required spelling of functions, parameters, etc. or number of parameters/arguments is correct. It does not generally do testing to verify the correctness of your code as per the assignment specifications; that is something you must check.

Accessing Files: To use any of the Racket files, you must save them from the webpage onto your computer by right clicking on the file name and seleting the option "Save Link as...". This will open a dialogue box that will allow you to save the Racket file on your computer and open it using DrRacket on your computer. Please do not use Internet Explorer to attempt to access files; the option to save the file does not exist. Any other browser is acceptable.

Interface Files: With every assignment, we will typically include an "interface" which contains the correct spelling of all functions and structures requested by the assignment. Since the markers will be running our tests of your code, spelling errors can result in loss of marks. Use the interface provided as a starting point for your own work.

Style guidelines: Your assignment submissions should conform to the guidelines laid out in the style guide. Some of the main points are summarized here.

  • The file for one question should have a file extension of .rkt.
  • Please do not submit code using the embedded Special Boxes offered by DrRacket, such as Comment Boxes or Test Boxes; these cause major problems for our marking procedures.
  • Use semicolons for comments, and check-expect tests as described in the style guide and in lecture.
  • Do not cut anything out of the Interactions window of DrRacket and paste it into the Definitions window. There is no need for you to do this, and because of the way DrRacket works, what you are pasting is not simple text; it also causes major problems with our marking procedures.

Submission: You will submit program files electronically through MarkUs as described in how to submit.

Late assignments: Late assignments will not be accepted; consequently, you should aim to finish early, to allow for unexpected delays. You may submit a single question as often as you wish; submitting a partially-completed solution is a good idea, just in case you don't get back to it in time. After an assignment due date has passed, you may still submit your work for feedback only (no marks) but you must inform the CS 115 ISAs by email so they are aware of your submission and request for feedback.

Missed work due to illness: With appropriate, authorized documentation, assignment work may be excused. If a missed assignment is excused, its weight is distributed over the remaining un-excused assignments. In the interest of understanding the course material for future assignments and exams, students who miss work are encouraged to do it, submit it and request feedback from the ISAs.

Marked assignments: Corrected assignments will be available on MarkUs, usually the week after the assignment is due. Complete solutions will be available online under the solutions tab. Review the feedback that is provided on the marked assignment and in the Post-Mortems.

Remark requests for assignments: If, after checking the marking on MarkUs, the post mortem comments and the solutions, you believe that errors were made in the marking, please email a ISA via cs115@uwaterloo.ca, preferably from your uWaterloo email account for verification of who you are, and state clearly what questions or components you feel were mis-marked and why. The subject for the email should be cs115 Assignment X Remark Request with the assignment number filled in appropriately. If you are not emailing from your uWaterloo email, then include your uWaterloo(Quest) username and student ID. The deadline for remark requests is 2 weeks after the marks are released on MarkUs. To ensure fairness and equality, remark requests are usually processed together after the deadline.


All work in CS 115 is to be done individually. The penalty for plagiarism on assignments (first offense) is an assigned mark of 0 percent on the assignment and a 5 percent reduction of the final grade, consistent with School of Computer Science policy. In addition, a letter detailing the offense is sent to the Associate Dean of Undergraduate Studies, meaning that subsequent offenses will carry more severe penalties, up to suspension or expulsion.

To avoid inadvertently incurring this penalty, you should discuss assignment issues with other students only in a very broad and high-level fashion. Do not take notes during such discussions, and avoid looking at anyone else's code, on screen or on paper. If you find yourself stuck, contact the ISA or instructor for help, instead of getting the solution from someone else. Do not consult other books, library materials, Internet sources, or solutions (yours or other people's) from other courses or other terms.

Rules for group work: All assignments are to be done individually.


Academic Integrity

In order to maintain a culture of academic integrity, members of the University of Waterloo community are expected to promote honesty, trust, fairness, respect and responsibility. [Check www.uwaterloo.ca/academicintegrity/ for more information.]


MOSS (Measure of Software Similarities) is used in this course as a means of comparing students' assignments to ensure academic integrity.


A student who believes that a decision affecting some aspect of his/her university life has been unfair or unreasonable may have grounds for initiating a grievance. Read Policy 70, Student Petitions and Grievances, Section 4, www.adm.uwaterloo.ca/infosec/Policies/policy70.htm. When in doubt please be certain to contact the department's administrative assistant who will provide further assistance.


A student is expected to know what constitutes academic integrity [check www.uwaterloo.ca/academicintegrity/] to avoid committing an academic offence, and to take responsibility for his/her actions. A student who is unsure whether an action constitutes an offence, or who needs help in learning how to avoid offences (e.g., plagiarism, cheating) or about 'rules' for group work/collaboration should seek guidance from the course instructor, academic advisor, or the undergraduate Associate Dean. For information on categories of offences and types of penalties, students should refer to Policy 71, Student Discipline, www.adm.uwaterloo.ca/infosec/Policies/policy71.htm. For typical penalties check Guidelines for the Assessment of Penalties, www.adm.uwaterloo.ca/infosec/guidelines/penaltyguidelines.htm.


A decision made or penalty imposed under Policy 70 (Student Petitions and Grievances) (other than a petition) or Policy 71 (Student Discipline) may be appealed if there is a ground. A student who believes he/she has a ground for an appeal should refer to Policy 72 (Student Appeals) www.adm.uwaterloo.ca/infosec/Policies/policy72.htm.

Students with Disabilities

AccessAbility Services (AAS), located in Needles Hall, Room 1132, collaborates with all academic departments to arrange appropriate accommodations for students with disabilities without compromising the academic integrity of the curriculum. If you require academic accommodations to lessen the impact of your disability, please register with AAS at the beginning of each academic term.

Mental Health Resources

Mental Health: If you or anyone you know experiences any academic stress, difficult life events, or feelings like anxiety or depression, we strongly encourage you to seek support.

On-campus Resources

Off-campus Resources

  • Good2Talk (24/7): Free confidential help line for post-secondary students. Phone: 1-866-925-5454
  • Here 24/7: Mental Health and Crisis Service Team. Phone: 1-844-437-3247
  • OK2BME: set of support services for lesbian, gay, bisexual, transgender or questioning teens in Waterloo. Phone: 519-884-0000 extension 213

Diversity: It is our intent that students from all diverse backgrounds and perspectives be well served by this course, and that students’ learning needs be addressed both in and out of class. We recognize the immense value of the diversity in identities, perspectives, and contributions that students bring, and the benefit it has on our educational environment. Your suggestions are encouraged and appreciated. Please let us know ways to improve the effectiveness of the course for you personally or for other students or student groups. In particular:

  • We will gladly honour your request to address you by an alternate/preferred name or gender pronoun. Please advise us of this preference early in the semester so we may make appropriate changes to our records.
  • We will honour your religious holidays and celebrations. Please inform of us these at the start of the course.
  • We will follow AccessAbility Services guidelines and protocols on how to best support students with different learning needs.

More Information

Academic Integrity and Students with Disabilities