CMPS 144 Fall 2025
Oct. 8 test preview
The kinds of problems you can expect on the test include the following:
- Given some relatively simple computational problem (e.g., involving
an array) and a loop invariant to guide you, develop code to solve
the problem in a manner consistent with the specified loop invariant.
(Recall the lectures pertaining to finding the maximum value in an
array, 2-color partitioning, linear and binary search, etc.)
as well as Labs #5 and #6, in the latter of which you implemented
loops to perform 3-color partitioning.)
- Given an array whose elements are in ascending order (from least to
greatest) and a search key, trace execution of the binary search
algorithm, which finds the lowest-numbered location in the array
containing a value greater than or equal to the search key.
(Tracing execution means showing the values of relevant variables
at particular "moments in time" (namely, initially and at the end
of each loop iteration).)
- Given some computational problem similar to one that you would have
solved in developing the Polynomial Java class for
Prog. Assg. #1, develop code to solve it.
- Given a relatively simple abstraction
(e.g., a pair of dice or a line segment),
develop a Java class to implement it.
If other classes are provided as potential building blocks
(e.g., SixSidedDie, PointOnPlane),
use them in that implementation.
(Recall the TimeOfDay classes in Labs #1 and #2.)
- Given a relatively simple Java class that lacks some desired
functionality, develop a child class that provides that functionality.
Among the examples of this covered in lecture or lab are
- the Coin class and its descendants,
BiasedCoin and BiasedCoinWithCounts
- the Counter class and its child
ResetableCounter, the latter of which added
functionality by which a client program could reset
a counter to its initial value
- Temperature and its child Temperature2
(Lab #3)
- Counter and its child ReversibleCounter
(Lab #3)
- SixSidedDie and its child SixSidedDieWithCounts
(Lab #3)
- Given an abstract Java class that "expects" its children to
supply the implementation of one or more of its abstract
method(s) (i.e., methods whose bodies are omitted), develop
such a child class. Examples:
- StringSorter and its children (Lab #4),
- BoundedCounter and its children (Lab #4),
- FilterOfInt and its children (Lab #4),
- Given a class hierarchy (e.g., Counter and its descendants in
Lab #4) and a program that makes use of objects from classes in that
hierarchy, be able to trace execution of that program and report its
results. (In particular, that would involve understanding, with respect
to a method call obj.doSomething(), which version of the
doSomething)() method actually gets called (among the
possibly multiple versions found in classes in the hierarchy).
- Show the history of a pair of stacks used in evaluating a
fully-parenthesized expression. (Lab #6.)