## Learning objectives

The main aim of the course is to provide students with the fundamental techniques of imperative programming through the use of the imperative subset of the C ++ programming language. The course also aims at providing students with the ability to apply analytical techniques to solve simple practical problems (such as, for instance, problems of calculus and sorting) and to translate these solutions into executable programs. Finally, the course develops analytical and abstraction skills and it aims at improving the ability related to the decomposition of problems into sub-problems.

Taking Dublin Indicators into account:

Knowledge and understanding

During the course, the main ideas related to imperative programming are introduced. Particular emphasis is dedicated to the comprehension of algorithmic techniques on which imperative languages rely. Most of the suggested literature is in italian, even though proper english words are used during classes, in order to help students in reading also international scientific papers and books. During the course, students are encouraged to learn fundamentals of programming, using C++ as programming language. Students also acquire adequate knowledge of computers architecture and information representation. Moreover, students are able to comprehend applications of mathematics to computer science.

Applying knowledge and understanding

Acquired theoretical knowledge is applied to solve specific problems, which are typically related to mathematics. During the course, some exercise sessions are dedicated to the solutions of problems, using the C++ language. Many solving methods are applied to mathematical and numerical problems and they are presented from an algorithmic point of view. Students are able to use computational instruments as a support to mathematical processes and as a way to acquire new information.

Making judgments

Exercises proposed during classes can be solved individually or in groups and they often can be solved in different ways. Students can compare their approach to the solutions proposed by other students and to the solutions shown during classes. Such comparisons enhance the development of specific skills which are useful to better understand the considered problems.

Communication skills

Discussions during classes and exercise sessions allow students to improve their communications skills. Such discussions concern specific algorithmic techniques to solve the proposed problems and they focus on advantages and disadvantages of the proposed approaches. Students learn to work individually and in groups.

Learning skills

The study of algorithmic techniques and their application to heterogeneous problems help students to improve in-depth comprehension of the topics. Acquired knowledge can be adapted to solve problems which may be different from those specifically seen during classes. Students acquire computational techniques useful to work in groups and autonomously.