These are some of my Matlab assignments which I've used when teaching CIT 592.

Course descriptions are on my main webpage.

When I give programming assignments, in addition to the instructions, I generally give the students precompiled code with the completed assignment, so they can play with the project to see how it is supposed to work when it's done. I also usually give them a unit tester. Matlab doesn't have a built-in testing facility, so I write a function which creates a working report for the students, to let them know which modules are functioning properly.


Scheduling:

In this project, students implement the critical path scheduling algorithm given by Ronald Graham's papers from 1978. The input to this algorithm is simply a list of named tasks, each with a given completion time, and any pre-requisites associated with that task. This simple model allows for an arbitrary number of identical processors. Surprisingly, many little paradoxes occur with even this very simplistic setup, and the problem is already NP-Complete with as few as 2 processors!

The great thing about this project from a teaching perspective is that the requirements of the assignment can be adjusted to fit just about any level of student, from middle school to graduate school. This is one of those algorithms that's fairly easy to implement by hand but takes quite a bit of finesse to correctly program!

This project is in Java, the language most of my students (in CIT 592) are studying in their other course (CIT 591) at the time this project is assigned.

Instructions


Circuits Lab:

This lab is a particularly special favorite of mine. It involves the use of homemade devices which run on 9-Volt batteries and was co-designed by my colleague/husband and me. The three devices each contain 3 switches and 2 LEDs. The brain of the device is a set of four NAND gates on an integrated circuit. Students get into groups and take turns with the devices. They also work out truth tables for 6 circuit diagrams I provide. Then, they get to match up the diagrams with the objects. For my graduate course, I don't give the students the diagrams, but simply inform them that there are only four NAND gates per device. It is fun watching them reconstruct the functions! It generally takes about 45 minutes from start to finish and is a fun and relaxing thing to do at the end of a semester.

Abstract


Difference Equations:

This project covers only second order linear homogeneous difference equations with real coefficients. Students implement both an iterative solution as well as solve for the explict form of the difference equation. Since Python is very friendly with regards to both large integers and complex values, it's nearly as easy to implement the solutions to complex problems as it is to real-only equations.

I have found that students often struggle to understand difference equations, so I've switched to using a project to get the basic concepts across. I feel this demonstrates an understanding which is deeper than what they typically achieve when they muddle through 5 or 10 exercises by hand in a semester. This allows them to review the much-needed basics such as how to intersect two arbitrary lines or how to solve the quadratic equation.

Most of the students in this course (CIT 592) are simultaneously taking an introduction to programming course (CIT 591) which is also using Python at the time this project is assigned.

Instructions


RSA:

RSA encryption, or public key cryptography, is so commonly used that motivation for this project is nearly obvious to most students. However, when RSA is simulated on paper, most students find the exercises boring and tedious. To combat this, in my course, I have the students send silly encrypted messages between themselves, after posting their public keys in a Blackboard discussion. It only drives the main points home more solidly when (as often happens) a student who had previously posted his/her encryption key contacts me in a panic: "I need to change my key!!! I lost my decryption key, and I can't decrypt the message my classmate sent to me!!!"

This project encompasses many technical and educational problems. The students have to find random prime numbers (using Miller-Rabin) and they have to properly convert text messages into numerical blocks of a reasonable size. I post my own 300 digit product-of-two-primes and offer a free A on the next exam if anybody can factor it. (So far, no winners!)

I break this project up into two assignments to make it easier for the students.

Part One Instructions

Part Two Instructions