[CS Dept., U Chicago] Courses


CMSC 16100: Honors Introduction to Computer Programming I (Autumn 2003)

Class Project



Assignments in the second half of the quarter are organized in a coherent (at least it's intended to be coherent) project, producing a simulated hand calculator performing computations with exact real numbers.

Open Project (Non)Rules

The class project for CMSC 16100 is an open project. It is open in two senses.

  1. There are no restrictions on how you accomplish project work. I encourage you to collaborate, share work, use ideas that you hear from others, find information in books and articles, or figure out for yourself, whatever works. Of course, you must acknowledge the source of each idea that you use. I also encourage you to share your own work freely with the class.

  2. You may propose changes to the definition of the project. You may choose to work on unassigned issues connected to the project that particularly interest you.

I hope that the open project format will reduce the inefficiency of learning in your own individual Skinner box, without adding the huge social and organizational burden of working in defined groups. In order to benefit from the project, both in learning and in the evaluation producing your grade, you must assimilate the work of others by understanding it thoroughly and practicing the programming skills involved in creating it. I will find a way to confirm that you have learned and not just acquired work, probably through a supervised lab exercise.

If you deviate from the work that I lay out, you must check with me in advance to make sure that I can evaluate the work for a good grade.

Directory for shared work

  • Shared Files Directory Index
  • In order to share your work with the class, please create a subdirectory named html/CMSC16100_files in your home directory on your CS computing account. If you are already keeping Web pages on the CS server, then you already have the html subdirectory. Make sure that these subdirectories are readable and executable by everyone. As long as you do not create any files named index.html within the html/CMSC16100_files subdirectory, others can get at the files in it through the Web. Aren will collect an index of these directories. Even if you don't expect to have anything to share, it's better to create the directory now, and have it handy.

    Project steps

    I will break out approximately 5 steps of varying length and difficulty for you to accomplish as homework assignments.

    1. Step 1: Approximate reals as rational intervals. port ratpair implementation of ratintvl datatype from 2002 work. Due Monday 10 November 2003.

    2. Step 2: Exact reals as functions. Port and extend precfunc implementation of xreal. Due Monday 17 November 2003.

    3. Step 3: Exact reals as infinite numerals. Port and extend tristream implementation of xreal, creating the wordstream implementation. Due Friday 21 November 2003.

    4. Step 4: Timing experiments. Compare the efficiency of precfunc, tristream, wordstream on well-chosen examples. Due Tuesday 25 November 2003.

    5. Step 5: Binary precision functions. Due Wednesday 3 Decmber 2003, or do Step 6 first.

    6. Step 6: Cached precision functions. Due Wednesday 3 Decmber 2003, or do Step 5 first.

    7. Hand in the remaining step 5 or 6, plus any final observations about the impact of different types of implementation on the performance of xreal functions, at the end of the quarter. I will post the exact deadline soon. As a nice optional step, you may combine the work of steps 5 and 6 into a cachebinfunc implementation, and evaluate the result. Do the two steps interact in any surprising way? (I don't expect that they do, but I haven't proved that they don't.)

    Project resources


    Project performance graphs

    Thanks to Ben Singer, who created them.
    Valid HTML 4.0!


    Last modified: Sat Nov 29 13:07:14 CST 2003