The student is expected to achieve the following targets:
Knowledge and Understanding:
to know the basics of C programming;
to know some fundamental algorithms;
to know how to plan a (moderately) complex program;
to single out the proper structures for modelling problems;
Applying knowledge and understanding:
to know how to model concrete problems, via proper abstract representation;
to know how to use/develop known/new algorithms for solving problems and evaluate their computational complexity;
Being able to formalize a problem, analyze it, and decide which tools are adequate for confronting it, taking a critical line open to possible improvements.
Being able to describe/comment properly one’s code and to work with peers in a constructive way.
Being able to extend one’s competence to other programming languages.
– Introduction to algorithms and elements of Computation Complexity. Big O notation.
-Introduction to the C programming language. Basic types: (long) int, char, float, double. Number representation and computer arithmetic.
– Variables and arrays. Structured programming. Tests. If, While, For statements. Iterative and recursive paradigm. Nested loops.
– Functions. Call by value and call by reference.
– Sorting algorithms (Insertion-Sort, Bubble-Sort, Quick-Sort, Merge-Sort).
– Random numbers, Montecarlo methods with some applications.
– Bitwise operations.
– Programming techniques for efficiency: memoization and dynamic programming.
– File access.
– Formatting Input/Output.
– Abstract data types: lists, queues, stacks, trees. Applications.
– Graphs and related algorithms: DFS, BFS, Minimum Spanning Tree.
[or the previous editions: “C Corso Completo di Programmazione”, Authors: Deitel & Deitel. Edizioni APOGEO Education].
– “Introduzione agli Algoritmi e strutture dati”. Authors: Cormen, Leiserson, Rivest, Stein. Ed. Mc Graw Hill.
– Course notes.