DM560, Introduction to Programming in C++

Final Assignment

Instructions

Here you find examples of final assignments for DM560. The pass/fail decision in the course depends on the accomplishment of the chosen topic. The assignment is to be carried out individually.

Submission

The submission deadline is typically around mid January.

To pass the course, you have to hand in a software project and a written report about it. Everything has to be uploaded as a single zip file in the open SDU Assignment in BlackBoard. The zip file must contain the following:

  • report.pdf: this is the written report.

  • code: a directory containing all source code of the software project.

Detailed instructions on the two items are given below.

Report

The report must be written in Danish or English and be at the most 3 page long.

Use default line spacing and ensure that the page margins are at least 3cm (in all directions). For the body text use Times New Roman as font family and 11pt as font size.

In the first page, you must state the name of the course, your name, your e-mail address, and the date (in which you last edited the document). The report must contain the following sections:

  • Structure. Here you explain how you designed your program. Give a brief overview of the classes and how your program works.

  • Tests. The results of the tests conducted on your code.

  • Advantages. Here you have to explain the nice points of your implementation, i.e., the advantages that come out of your design choices.

  • Limitations. Here you have to explain the limitations of your approach and, possibly, how they could be overcome. Did you sacrifice performance for achieving better readability of your code? Or, did you sacrifice readability for improving efficiency? Is there a way to improve? Is there something that does not work as expected? Are there known bugs in your program?

Inspiration points to discuss advantages and limitations:

  • Readability
  • Speed
  • Memory consumption
  • Reusability (the code can be reused in different contexts)
  • Scalability (scales well with memory usage)
  • Reliability (handling of errors/exceptions)

Further details are Topic specific and are exposed in the description of each individual Topic.

Software

Organize your files in a directory called Topic#, where # is the number of the selected topic. Inside this directory create a directory src/ containing all source files .h and .cpp that you have created for the assignment. For the topics using the graphical library you do not need to hand in the FLTK and the Graph_lib library. Include a Makefile to compile your program.

Hence, the zip file must uncompress as follows:

└── Topic1
    ├── report
    |   └── report.pdf
    └── src
        ├── Makefile
    	├── file.h
        └── file.cpp

The files file.* can have different names and can be as many as you need. However, the structure and organization of your code is also important and is under assessment.

The code must compile and execute without errors on the tests described in the report. The reference environment where the code must work as expected is the IMADA Computer Lab. For the tasks that use data files, include those files in your archive.

Topics

  • Topic 1 asks you to parse a file containing timestamps of bike transit through a counter and producing a textual bar chart and historgram about the distribution of bikes over time. A couple of working days should suffice.

  • Topic 2 asks you to implement sparse vector and matrix classes. It could be implemented with the knowledge up to Chapter 19 of the text book, but a good implementation requires an understanding of the STL associative container map described in Chapter 21. It requires a good understanding of how classes must be implemented. Probably, if you are up to date with the topics of the course, a couple of full days of work could suffice.

  • Topic 3 asks you to compute the inverse of a matrix. It requires that you have read Chapter 24 on Numerics from the text book and that you use the Matrix class and the Gaussian Elimination method described in that chapter. It does not need graphical libraries and the amount of code to add is relatively small once the code from the chapter is understood and imported.

  • Topic 4 asks you to implement a graph class and to draw graphs. You should accouint for three working days.

  • Topic 5 asks you to implement an animation of a flocking system. Even if you are up to date with the material of the course, you should account for three or more full days of work at this topic. This topic is challenging.

The last two topics require using the graphical library FLTK and the additional library Graph_lib.