Due Friday, October 8 at 11:59 pm
- Submissions received by the due date receive a small on-time bonus.
- All students are granted a pre-approved extension or "grace period" of 48 hours after the due date. Late submissions are accepted during the grace period with no penalty.
- The grace period expires Sun, Oct 10 at 11:59 pm, after which we cannot accept further late submissions.
- All due dates and submission times are expressed in Pacific time.
This week's lectures have introduced you to some of the classic Abstract Data Types (ADTs), and now it's time to put those handy collections to use! With the low-level details of how these data structures work abstracted away, your attention is free to solve more interesting problems. This assignment asks you to write client code that leverages these ADTs to implement some nifty algorithms and systems. 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 featuring use of different ADTs. Finally, you'll finish off by answering a couple of embedded ethics questions related to this week's assignment content.
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 the implementation of a famous algorithm that can efficiently find a solution path to escape 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!
We also here to help if you get run into issues along the way! The Ed forum is open 24/7 for general discussion about the assignment, lecture topics, the C++ language, using Qt, and more. Always start by first searching 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.