The following is a list of zipped CLion project files (more might be added during the quarter). Please feel free to download, unzip, run, and study these programs (both their code and their run-time behavior). Programmers gain tremendous insight into all facets of programming by studying the code of other programmers (especially those with more experience; and I am happy to improve my code based on your observations -nothing is perfect). A good programmer typically makes elegant use of the required language features, resulting in smaller, more elegant code.
All downloadable projects are listed alphabetically; you can also search this page for keywords. All are zip files, so unzip them first. Most project files require the Download: standard course library which contains a variety of useful functions and classes. If you followed the CLion installation instructions, you should have already created the courselib folder in your workspace and populated it with these modules.
Download: Backtracking Problem Solving
These programs use generalized (recursive) backtracking to search an implicit
solution tree.
See the backtrack_exceptions and solver files, which contain
the tools to solve any problem; use the problem_template file to
build any new application (and see how it compares with the examples below).
The n_queens files contain code to determine how to place N queens on
a chessboard so that none can attack another).
The satifiy files contains code to determine how to assign true
and false values to variables in a formula to satisfy it -make it
evaluated to true.
The sudoku files contain code that reads a Sudoku puzzle from a file
and determines how to assign 1-9 values to the empty cells in a Sudoku puzzle
to satisfy its constraints.
Download:
Testing all Data Types
This project folder contains drivers and GoogleTests for all five standard
data types: Stack, Queue, PriorityQueue, Set, and Map.
The code tests the array implementations of these data types supplied in the
courselib, but it can be easily changed to test any other
implementations.
Recall that a runnable program can have only one main function: so, only
one .cpp file can be uncommented (the code in all the others must be
commented-out).
Download:
Testing Binary Search Trees Empirically on Integers
This programs builds any number of binary search trees (of any size) from a
random permutation of integers.
It computes and displays a histogram of the number of tree of each height and
the average number of probest to access all values.
Download:
Testing Hashing Empirically on Strings
These programs test a hashing function (on std::string):
the first uses chaining, computing a histogram of the number of values
stored in each bin size and the average number of probes to access all
values;
the second uses open hashing (with either linear or
quadratic probing), computing a histogram of the number of values
requiring N probes the average number of probes to access all values
(for a variety of increasingt load factors).
Use the supplied hash function or your ownn, testing its ability to distribute
the values among the bins for random strings.
Download:
Testing Sorting Empirically
You must have Java installed to run this program.
Run this Java program on a PC by double-clicking the double click me.bat
file (see its contents and mimic their use on other operating systems).
You can choose (rechoose) an array size, decide how to populate it with values,
and run various O(N^2) and O(N Log N) sorting functions (specifying how many
times to repeat the process): we can also run a radix sort.
It will print the timings for the chosen sorting algorithm, and the average.
Note that the clock is accurate to about 1 millisecond: antthing taking less
time registers as 0.0 seconds.
Download: State Space Search
These programs (just one now) use a generalized state-space searching to solve
various problems involving applying operators.
See the solver file, which contains the tools to solve any problem (both
using breadth-first and best-first searching); use
the problem_template file to build any new application (and see how it
compares with the examples below).
The water_jugs files contain code to determine how to achieve one
distribution of water in jugs, given a starting distribution.
Examine the State::how_close function for a pure best_first
solution and an A* solution: it typically examines some number of
states between pure best-first and breadth-first) but
guarantees an optimal solution.
Download: X (cross) Reference
This program produces a cross-reference list of all the words (separated by
spaces) in a text file.
It uses the map, priority queue, and stack classes from the ITC.
The download includes a small data file on which to test the program.