This lecture introduces basic program elements like machine models, variables, pointers, objects, and control structures with very basic programming exercises in C/C++ and MATLAB. It includes very basic exposition to recursion, event-driven programming (interrupts, event queue, etc.), and functional programming as well. We will introduce algorithms as examples covering Part I Foundations from the seminal book “Introduction to Algorithms” (Cormen et al.). Then, C++11 data structures (map, queue, list, set, unordered sets, priority queue, tree) are introduced together with their algorithms (linear search, binary search, sorting, min-hash, balanced trees). as well as modern C++ control structures and their use (e.g., unique_ptr, shared_ptr, unique_lock, scoped_lock, counting_semaphore, latches, barriers etc.). In this way, a clear introduction to core principles of programming and common pitfalls is ensured as all these advanced structures have been introduced to avoid common pitfalls and inefficiencies.
Reference literature includes parts of Bjarne Stroustrups book “Programming”. In the tutorials, we will introduce selected algorithmic patterns (e.g., dynamic programming, integer programming, shortest paths, divide & conquer) as they are only to be understood by applying them to toy problems. Then we increase the versatility of students in computational engineering problems by introducing selected non-trivial algorithms. A chapter on correctness including treatment of rounding errors, infinite precision computation, and the Hoare calculus complete the lectures core exposition. Finally, students will get an overview (partly simplified) to the real world including special situations including embedded, GPU, FPGA, Supercomputer, and other challenging computational environments and what they imply for programming and software design.
By completing this module, students will have had a detailed exposition to two (mainly) imperative programming environments MATLAB and C/C++. They have learned the core language. Furthermore, students have understood a selection of data structures (arrays, trees, maps, hash tables, priority queues, sets), programming patterns, and core algorithms .
The lecture will be held every week in presence. The lecture timeslot is
Tuesday, 11:30 - 13:00.
Please check the location in TUMonline.
The tutorials will be held online via Zoom. The tutorial timeslots are
Group A: Wednesday, 16:00 - 17:00
Group B: Friday, 10:00 - 11:00
Group C: Friday, 11:00 - 12:00
We appreciate your feedback and support. You can drop me a line at any time. If you have interesting examples, you want to share with your fellow students, you can either send it to me via email or create a pull request on GitHub. I would be happy to include your examples, solutions and portations in the lecture.
Due to the current COVID-19 situation, we need to regulate the enrollment. If you want to enroll in the course after 10/17/2021 please contact us via email.
Please send an email to gabriel.dax@tum.de and CC to martin.werner@tum.de.