The objective of this course is to build and formalize complex algorithms through mastering the specification and development of sub-routines. Among acquired skills, students learn how to write classical algorithms (such as searching in and sorting arrays), analyze problems in a recursive fashion and handle dynamic structures using pointers. The programming language is Ada.
This course familiarizes the students with concurrency and provides mathematical definitions of formalisms for modeling concurrent systems, namely communicating automata and Petri nets. Students learn how to model in these formalisms and analyze the resulting models using model-checking techniques. The modeling and verification tools for lab training are TINA and UPPAAL.