Programma del Corso
------------------------------------------------------------
Modulo: 192/1 - FONDAMENTI DI INFORMATICA A
------------------------------------------------------------
- FONDAMENTI DELL’INFORMATICA MODERNA: Introduzione all'informatica. Il calcolatore elettronico, macchina di Von Neumann. Gerarchie di memorie. Sistemi numerici posizionali. Sistema binario. Conversioni di base. Operatori aritmetici nel sistema binario. Algoritmi, dati ed istruzioni, programmazione strutturata, Teorema di Böhm-Jacopini. Codifica degli algoritmi, linguaggio naturale, linguaggio di programmazione, pseudo-codice. Diagrammi di flusso. Algebra booleana. Linguaggi e grammatiche. Grammatiche formali. Backus-NaurForm (BNF). Linguaggi di programmazione: linguaggio macchina, Assembler, linguaggi di alto livello. Compilatori ed interpreti. Compilatori per linguaggio C, GCC.
- IL LINGUAGGIO C: Caratteristiche del linguaggio C, struttura di un programma C, principali librerie. Tipi di dato, tipi elementari. Stringhe e I/O da terminale. Operatori ed espressioni, precedenza ed associatività, overloading degli operatori, conversioni di tipo. Istruzioni semplici, istruzioni di controllo, blocchi, regole di visibilità. Costrutto if e costrutto switch-case. Costrutti while, do-while e for. Tipi di dato strutturato in C. Array: definizione, operatori, inizializzazione. Gestione della memoria, Heap. Puntatori e loro operatori. Implementazione di array con puntatore. Le strutture. Tipi enumerativi. Le unioni. Tipi di dato definiti dall'utente. Le funzioni. Passaggio dei parametri per valore e per riferimento, utilizzo dei puntatori. Gestione dei file, file di testo e binari, canali standard, uso dei buffer.
------------------------------------------------------------
Modulo: 192/2 - FONDAMENTI DI INFORMATICA B
------------------------------------------------------------
- ALGORITMI AVANZATI: Algoritmi ricorsivi: funzioni ricorsive e parametri di funzioni ricorsive in C, condizione di terminazione, esempi di algoritmi ricorsivi e loro implementazione in C. Calcolo della complessità: introduzione alla valutazione della complessità di un algoritmo, utilizzo di espressioni asintotiche per esprimere la complessità computazionale di un algoritmo eloro proprietà e regole. Complessità computazionale di operazioni semplici, cicli e funzioni (ricorsive e non). Esempi di calcolo di complessità computazionale di programmi in C. Ricerca e ordinamento in strutture dati semplici. Algoritmi di ricerca: ricerca sequenziale e ricerca binaria. Loro implementazione in C e calcolo della loro complessità computazionale. Algoritmi di ordinamento semplici e evoluti: Bubble sort, Selection sort, Insertion sort, Shell sort, Quick sort, Merge sort. Loro implementazionein C e calcolo della relativa complessità computazionale.
- STRUTTURE DATI ELEMENTARI E AVANZATE: Tipi di dato astratto: liste, pile e code. Liste concatenate: ricerca, inserimento in testa, in coda e ordinato, cancellazione. Liste doppiamente concatenate:ricerca, inserimento in testa, in coda e ordinato, cancellazione. Implementazione delle liste tramite array collegati e tramite allocazione dinamica della memoria e puntatori in C. Implementazione di pile e code con liste concatenate e con array monodimensionali in C. Code circolari. Operazioni di push, pop e peak. Operazioni di enqueue e dequeue. Strutture dati complesso: grafi e alberi. Definizione di grafo. Grafi orientati e non orientati. Rappresentazione dei grafi con matrici di adiacenza e liste di adiacenza in C. Algoritmi di attraversamento dei grafi: in ampiezza e in profondità. Loro implementazione in C. Definizione di albero come grafo aciclico. Definizione di albero binario, algoritmi di attraversamento e loro implementazione in C. Definizione di albero binario di ricerca. Algoritmi di creazione, inserimento ordinato, cancellazione, ricerca e loro implementazione in C.
Course Syllabus
------------------------------------------------------------
Modulo: 192/1 - FONDAMENTI DI INFORMATICA A
------------------------------------------------------------
- FUNDAMENTALS OF MODERN COMPUTERS: Introduction to computer science. The electronic calculator, Von Neumann's machine. Memory hierarchies. Positional number systems. Binary system. Basic conversions. Arithmetic operators in the binary system. Algorithms, data and instructions, structured programming, Böhm-Jacopini theorem. Coding of algorithms, natural language, programming language, pseudo-code. Flowcharts. Boolean algebra. Languages ââand grammars. Formal grammars. Backus-Naur Form (BNF). Programming languages: machine language, Assembler, high-level languages. Compilers and interpreters. Compilers for C language, GCC.
- THE C LANGUAGE: Features of the C language, structure of a C program, main libraries. Types of data, elementary types. Strings and terminal I/O. Operators and expressions, precedence and associativity, operator overloading, type conversions. Simple instructions, control instructions, blocks, visibility rules. If construct and switch-case construct. While, do-while and for constructs. Types of structured data in C. Array: definition, operators, initialization. Memory Management, Heap. Pointers and their operators. Pointer array implementation. Structures. Enumerative types. Unions. User-defined data types. Functions. Passing parameters by value and by reference, using pointers. File management, text and binary files, standard channels, use of buffers.
------------------------------------------------------------
Modulo: 192/2 - FONDAMENTI DI INFORMATICA B
------------------------------------------------------------
- ADVANCED ALGORITHMS: Recursive algorithms: recursive functions and parameters of recursive functions in C, termination condition, examples of recursive algorithms and their implementation in C. Computation of complexity: introduction to the evaluation of the complexity of an algorithm, use of asymptotic expressions to express the computational complexity of an algorithm and their properties and rules. Computational complexity of simple operations, cycles and functions (recursive and otherwise). Examples of computational complexity calculations of C programs. Search and sorting in simple data structures. Search algorithms: sequential search and binary search. Their implementation in C and calculation of their computational complexity. Simple and advanced sorting algorithms: Bubble sort, Selection sort, Insertion sort, Shell sort, Quick sort, Merge sort. Their implementation in C and calculation of the relative computational complexity.
- ELEMENTARY AND ADVANCED DATA STRUCTURES:Abstract data types: lists, stacks and queues. Linked lists: search, insertion at the top, in the queue and sorted, deletion. Lists doubly linked: search, insertion in the head, in the queue and sorted, deletion. Implementation of lists through linked arrays and through dynamic memory allocation and pointers in C. Implementation of stacks and queues with linked lists and one-dimensional arrays in C. Circular code. Push, pop and peak operations. Operations of enqueue and dequeue. Complex data structures: graphs and trees. Definition of graph. Directed and undirected graphs. Representation of graphs with adjacency matrices and adjacency lists in C. Algorithms for crossing graphs: in width and depth. Their implementation in C. Definition of tree as acyclic graph. Definition of binary tree, traversing algorithms and their implementation in C. Definition of binary search tree. Algorithms of creation, ordered insertion, deletion, search and their implementation in C.