Practical C/C++ programming
Code  Completion  Credits  Range  Language 

B2B99PPC  KZ  6  2P+2C  Czech 
 Corequisite:
 Safety in Electrical Engineering for a bachelor´s degree (BEZB)
Basic health and occupational safety regulations (BEZZ)  Lecturer:
 Stanislav Vítek (guarantor), Josef Dobeš
 Tutor:
 Stanislav Vítek (guarantor), Václav Navrátil, Ondřej Nentvich
 Supervisor:
 Department of Radioelectronics
 Synopsis:

The course introduces students to the C ++ and develops their practical skills in programming in C/C++ with an emphasis on solving computational tasks and multithreaded applications using parallel programming. The first part of the course is devoted to the objectoriented programming in C++ and provides students with basic data containers of standard library STL. Students learn the principles of parallel programming, multithreaded applications, synchronization mechanisms and models of multithreaded applications. The second part is dedicated to develop an algorithmic thinking to solve computational problems by searching the problem state space. Two main approaches are considered: the deterministic search of a graph representation of the state space; and local optimization techniques. Additionally, students will be familiarized with models of arbitrary precision data representations, representation of matrices, and matrix calculations.
 Requirements:

The subject assumes a basic knowledge of procedural programming, which can be obtained in the course „Procedural programming“.
 Syllabus of lectures:

1. Principles of objectoriented programming: classes, objects, encapsulation
2. Inheritance and Polymorphism
3. Generic types
4. Exceptions and debugging
5. Containers (STL)
6. Data streams and operators
7. Parallel programming  threads, synchronization
8. Parallel Programming  multithreaded applications, parallelization (eg. OpenMP)
9. Graph structures and search techniques
10. Dynamic Programming
11. Floating point arithmetic, libraries for arbitrary precision arithmetic
12. Matrices and matrix computations
13. C/C++ numerical libraries, optimization algorithms (hill climbing, simulated annealing)
14. Evolution of C/C++, versions and standards (C++11/C++14), portability and compilers
 Syllabus of tutorials:

Practical labs are focused on acquiring and practicing programming habits so that students will be able to independently develop readable codes using existing standard libraries and data containers. During the semester, students have to submit a series of assignments to address a particular programming tasks. The score of the assignment consists of correct solution, efficiency of the code, and also points reflecting the quality of the source code regarding its readability and reusability. A particular lab consists of practical mastery of the topics discussed at the lectures and assignment of the related programming task.
 Study Objective:

The main goal of the course is to introduce students to the practical aspects of C/C++ programming. Students will learn how to effective implement algorithms and numerical methods that are commonly used in electronic systems.
 Study materials:

[1] Stroustrup: Programming: Principles and Practice Using C++ (2nd Edition), 2014, ISBN 9780321992789
[2] Stroustrup: The C++ Programming Language (4th Edition), 2013, ISBN 9780321563842
[3] Sedgewick, Wayne: Algorithms (4th Edition), 2011, ISBN 9780321573513
 Note:
 Further information:
 https://cw.fel.cvut.cz/b192/courses/b2b99ppc
 Timetable for winter semester 2019/2020:
 Timetable is not available yet
 Timetable for summer semester 2019/2020:

06:00–08:0008:00–10:0010:00–12:0012:00–14:0014:00–16:0016:00–18:0018:00–20:0020:00–22:0022:00–24:00
Mon Tue Fri Thu Fri  The course is a part of the following study plans:

 Electronics and Communications 2016 (compulsory course in the program)
 Electronics and Communications 2018 (compulsory course in the program)