Due Friday, October 14 at 11:59 pm
- Submissions received by the due date receive a small on-time bonus.
- Late work after the due date is accepted if within the grace period (48 hours for this assignment).
- The grace period gives you the ability to self-grant an extension; we trust you will make reasonable and sparing use of this power.
- The grace period expires Sun, Oct 16 at 11:59 pm, after which we do not accept further late work.
- All due dates and submission times are expressed in Pacific time.
The recent lectures have introduced you to some of the classic Abstract Data Types (ADTs), and now it's time to put that knowledge to use. In this assignment, you will write code that leverages those ADTs to implement some nifty algorithms. The tasks may sound a little daunting at first, but given the powerful tools in your arsenal, each requires a very manageable amount of code. Let's hear it for abstraction!
This assignment is to be completed individually. Working in pairs/groups is not permitted.
- To more fully experience the joy of using pre-written classes. Most of the heavy-lifting is handled by the collection ADTs.
- To stress the notion of abstraction as a mechanism for managing data and providing functionality without revealing the representational details.
- To learn how to model and solve problems using classic data structures such as vectors, grids, stacks, queues, sets, and maps.
This assignment consists of a short warmup exercise using the debugger and two coding tasks that use of variety of ADTs. Finally, you'll finish off by answering a couple of embedded ethics questions.
Practice with testing and debugging on different abstract data types. Do the warmup first!
Gridof walls and corridors is used to represent a maze, and the
SetADTs are used in a clever algorithm to find a solution path that escapes the maze.
Mapis used to associate words with a
Setof documents containing that word. Using the map, you can find matching entries that contain terms from simple or compound queries, and construct a mini search engine.
In this section, you will explore beyond traditional Big-O analysis to study some of the potential human and societal impacts of designing and optimizing efficient software systems.
The two coding tasks are roughly comparable to each other in size and scope, so pace yourself to complete each in about three days. Note: The code you will write for Assignment 2 is considerably more complex than Assignment 1, so be sure to get an early start!
We provide a ZIP of the starter project. Download the zip, extract the files, and double-click the
.pro file to open the project in Qt Creator.
The two source files you will edit are
search.cpp. Additionally, you will answer the questions in
- The CS106B Guide to Testing
- The CS106B Style Guide
- Resolving Common Build/Run Errors, compiled by section leader Jillian Tang.
- Stanford library documentation for Vector, Grid, Stack, Map, Set
Keep an eye on the Ed forum for an announcement of the YEAH (YEAH = Your Early Assignment Help) group session where our veteran section leaders will answer your questions and share pro tips. We know it can be daunting to sit down and break the barrier of starting on a substantial programming assignment – come to YEAH for advice and confidence to get you on your way!
The Ed forum is open 24/7 for questions about the assignment, lecture topics, the C++ language, using Qt, and more. Please first search Ed to see if your question has already been asked and answered before making a new post. To troubleshoot a problem with your specific code, your best bet is to bring it to the LaIR helper hours or office hours.
Before you call it done, run through our submit checklist to be sure all your
ts are crossed and
is dotted. Then upload your completed files to Paperless for grading.
Please submit only the files you edited; for this assignment, these files will be:
You don't need to submit any of the other files in the project folder.
Note: On Paperless, all due dates and submission times are expressed in Pacific time.