Programming in C ++
Labs 7-8: Project
General requirements
At the end of the module there is another large homework, during which you can use what you have learnt so far. You need to write a program to demonstrate your programming skills. You can choose your project theme.
There are 14 days for solving the homework.
Deadlines
- Start of the project 05/05/2022 23:59:59
- Submission 15/05/2022 23:59:59
The program must use the folder structure introduced in the internships. The solution must come with a Makefile (cmake, qmake or another similar system can be used), which allows you to easily compile the program under three compilation environments supported by the practice (MinGW, Linux, Mac OS X). You must be able to specify the location of libraries inside the Makefile with a variable.
NB! No Doxygen documentation is required.
Task 1 - Setting up a project (3 points)
Give a verbal statement of the project. The topic must be interesting to you. Briefly explain the structure of the program and the programming tools used. The project set-up is submitted to Moodle.
Task 2 - Submitting code (10 points)
Code is submitted via the form on the module website. The code is also submitted for evaluation to the Moodle forum. The size of the project is about 10 hours of work.
Task 3 - Project presentation (3 points)
Present your project in a lab or record a videopresentation (share link in Moodle for evaluation). The presentation should be 5-10 minutes. Demonstrate the program work.
Task 4 - Project evaluation (4 points)
Evaluate at least two projects submitted by fellow students. You will receive up to 2 points for each evaluation.
Projects are available in the Moodle forum. Evaluate the following project characteristics on a 5-point scale (5-excellent, 4-good, 3-satisfactory, 2-poor, 1-unsatisfactory):
- topic
- compilation and startup
- technical implementation
- ease of use
Briefly justify your marks. Also give the total score of the evaluated project, which is the sum of these four scores.
Sample topics
Light:
- Command line based tic-tac-toe
- Typeracer (similar to https://play.typeracer.com/ )
- Diff (for example, how 2 text files differ from each other line by which)
- Hangman game
- Bubble Sort (Algorithm Implementation with Description)
Middle:
- Dijkstra algorithm (Algorithm implementation with description)
- Solver for linear equations
- Calculation of some genetic distances. Bonus: Acceleration of the algorithm with Intel X86_64 vector instructions.
- Some useful algorithms that are implemented in C ++ and can be called from another language (eg R, Python, Javascript / Node.js, etc). This approach is often used to make a slow part of a script written in dynamic language much faster.
Difficult:
- Accessing the memory space of a second process (reading / modifying the memory). Depends on the operating system, in windows (Help "Windows.h" header).
- Hashcracker (Brute-force the default password hash) can support only one algorithm
- Boids - simulation and visualization
- Very simple software only floating point (addition, multiplication, inverse, square root)
- Implicit Runge-Kutta Differential Equation Solver (a general numerical solver that takes as input any function object). Previous experience with numerical methods is strongly recommended. An external linear equation solver can be used.
- Simulation and visualization of light in 2D space (see https://benedikt-bitterli.me/tantalum/tantalum.html ). An extremely voluminous topic if you are not already familiar with physics and its simulation.
- Minesweeper Solver. Should be able to solve randomly generated intermediate level puzzles on average in more than a quarter of cases.
- Japanese puzzle solver. Can solve tasks up to 50 times the size humans can solve in a reasonable time. Puzzles should be able to be input as a simple text format (not exactly the same as the link).