COMPUTER PROGRAMMING III AND LAB
The two parts of the didactic activity ("Computer Programming 2 and Lab.") examine in depth some key aspects of algorithm development, analysis methodologies, logic data organization and corresponding implementation in C language. In addition, they introduce some fundamental concepts of the Object Oriented Programming in C++ language.
Knowledge and understanding
Students must show to know and to understand:
• basic concepts of the algorithm development methodology and of abstract data types;
• the C programming language (at least an elementary knowledge).
Ability to apply knowledge and understanding
Students must show:
• to be able in using their acquired knowledge for the design of algorithms to solve particular problems, even when they appear in concrete contexts and in other scientific fields;
• to be able in using the C language consciously, in order to implement an algorithm.
These capabilities are also expressed in a thorough and conscious use of computational tools and advanced computer labs.
Autonomy of judgement
Students, by themselves, must be able to assess the results returned by a software. In addition, they should know how to identify, even using online repositories, the most suitable algorithms and software to solve a specific problem.
Students, also working in groups, should be able to draw up a report on an algorithm, to make remarks on its results, and to document its C-language implementation using advanced scientific computing and documentation tools. Moreover, students should be able to use the suitable terminology of Computer Programming and of Abstract Data Structures, even in English language.
Students must be able to keep up-to-date and to analyze in depth topics and specific applications of Programming Techniques, even accessing databases, on-line software repositories and other tools available on the web.
Contents of "Computer Programming I and Laboratory".
• Logical data type (boolean and bitwise operators), numerical types (the integer arithmetic system, the IEEE 754 Standard Floating-Point Binary Arithmetic System), Character and string types.
• Dynamic linear data structures (list, queue, stack) and non-linear data structures (trees, binary and heap trees, graphs). Implementation of Dynamic Data Structures in C language and their management algorithms.
• Recursive functions and recursive algorithms. Classification of recursive functions and analysis of the maximum recursion depth. Examples of recursive algorithms in C.
• Basic problems: Pattern Matching (Knuth-Morris-Pratt algorithm) Divide et impera sorting algorithms (Mergesort, Quicksort, Heapsort).
# Introduction to Object Oriented programming
# C++ language, ggc compilar and Code::Blocks
# Basic type data
# Structures, Unions and Enumerations
# Classes and Objects
# Concrete classes
# Derived classes
# Abstract classes
# UML language
# Templates and containers
# UML and C++
# Introduction to C++ Design Patterns (Singleton, Abstract Factory)
# Examples and exercises
K. N. KING: "Programmazione in C", Apogeo.
R. SEDGEWICK: "Algoritmi in C++", Addison-Wesley
B. STROUSTRUP, C++ Linguaggio, Libreria Standard, Principi di Programmazione, 4a edizione, 2015
E. Gamma, R. Helm, R. Johnson, J. Vlissides
(the GangOfFour), Design Patterns: Elements of Reusable Object-Oriented Software, AddisonWesley Professional, 1994
Oral examination and written test about C/C++ programming