Offerta Didattica
INGEGNERIA ELETTRONICA E INFORMATICA
FONDAMENTI DI INFORMATICA (annuale)
Classe di corso: L-8 - Ingegneria dell'informazione
AA: 2019/2020
Sedi: MESSINA
SSD | TAF | tipologia | frequenza | moduli |
---|---|---|---|---|
ING-INF/05 | Caratterizzante | Libera | Libera | No |
CFU | CFU LEZ | CFU LAB | CFU ESE | ORE | ORE LEZ | ORE LAB | ORE ESE |
---|---|---|---|---|---|---|---|
12 | 8 | 0 | 4 | 96 | 48 | 0 | 48 |
LegendaCFU: n. crediti dell’insegnamento CFU LEZ: n. cfu di lezione in aula CFU LAB: n. cfu di laboratorio CFU ESE: n. cfu di esercitazione FREQUENZA:Libera/Obbligatoria MODULI:SI - L'insegnamento prevede la suddivisione in moduli, NO - non sono previsti moduli ORE: n. ore programmate ORE LEZ: n. ore programmate di lezione in aula ORE LAB: n. ore programmate di laboratorio ORE ESE: n. ore programmate di esercitazione SSD:sigla del settore scientifico disciplinare dell’insegnamento TAF:sigla della tipologia di attività formativa TIPOLOGIA:LEZ - lezioni frontali, ESE - esercitazioni, LAB - laboratorio
Obiettivi Formativi
Il corso di Fondamenti di Informatica intende fornire le conoscenze di base degli aspetti teorici e pratici dell'informatica moderna che rappresentano per gli studenti un prerequisito fondamentale per proseguire con successo nella loro formazione nellambito dellingegneria dellinformazione. Obiettivo formativo del corso è quello di trasmettere agli studenti una forma di pensiero computazionale ovvero la capacità di pensare in maniera algoritmica e di codificare gli algoritmi progettati in programmi eseguibili da un calcolatore elettronico attraverso un linguaggio di programmazione di alto livello. Gli studenti saranno resi in grado di analizzare un problema complesso, suddividerlo in sotto-problemi, ognuno dei quali può essere risolto tramite lutilizzo di strutture dati e algoritmi noti, e ricombinare i risultati ottenuti per giungere alla soluzione del problema iniziale. Il corso ha un taglio sia teorico che pratico che permetterà agli studenti di partire dai fondamenti e dalle metodologie dell'informatica di base e di arrivare ad essere in grado di progettare e implementare programmi informatici in grado di risolvere semplici problemi nellambito delle tecnologie dell'ingegneria dell'informazione.Learning Goals
The Fundamentals of Computer Science course intends to provide the basic knowledge of the theoretical and practical aspects of modern computer science which represent a fundamental prerequisite for students to continue successfully in their training in information engineering. The formative objective of the course is to transmit to the students a form of computational thinking or the ability to think in an algorithmic way and to encode the designed algorithms in programs executable by an electronic computer through a high level programming language. Students will be able to analyze a complex problem, subdivide it into sub-problems, each of which can be solved through the use of known data structures and algorithms, and recombine the obtained results to reach the solution of the initial problem. The course has both a theoretical and a practical approach that will allow students to start from the fundamentals and methodologies of basic computer science and to be able to design and implement computer programs able to solve simple problems in the field of Information Engineering technologies.Metodi didattici
Lezioni frontali, attività laboratoriali ed esercitazioni in classe. Il corso si svolge prevalentemente attraverso lezioni frontali su specifici aspetti disciplinari ma sono previste anche frequenti attività laboratoriali ed esercitazioni in classe che consentiranno agli studenti di prendere manualità con i principi di base della programmazione.Teaching Methods
Lectures, laboratory activities and classroom exercises. The course takes place mainly through lectures on specific disciplinary aspects but there are also frequent laboratory activities and classroom exercises that will allow students to gain skills with the basic principles of programming.Prerequisiti
Sono richieste conoscenze di base di analisi matematica, geometria e logica matematica.Prerequisites
Basic knowledge of mathematical analysis, geometry and mathematical logic is required.Verifiche dell'apprendimento
Sono previste due prove in itinere e una prova finale. La prima prova in itinere (con domande a risposta multipla e aperta) verterà sugli argomenti relativi alla prima fase del corso e mirerà a verificare che gli studenti abbiano acquisito le conoscenze di base relative allinformatica moderna. La seconda prova in itinere sarà effettuata al calcolatore e consisterà nella progettazione e implementazione di un programma in linguaggio C che rispetti i requisiti richiesti. Tale prova mirerà a verificare che gli studenti abbiano acquisito la capacità di valutare e selezionare le alternative disponibili per la soluzione di un problema e che siano in grado di progettare e sviluppare nuove applicazioni attraverso un linguaggio di programmazione di alto livello. Infine la prova finale sarà un esame orale che verterà sugli argomenti dellultima parte del corso. In particolare, gli studenti saranno chiamati a dimostrare di conoscere e di sapere utilizzare le strutture dati e i relativi algoritmi mostrati a lezione.Assessment
There are two on-going tests and a final test. The first in-itinere test (with multiple choices and open questions) will focus on the topics related to the first phase of the course and will aim to verify that students have acquired the basic knowledge related to modern computing. The second in-itinere test will be carried out at the computer and will consist of the design and implementation of a C language program that meets the provided requirements. This test will aim to verify that the students have acquired the ability to evaluate and select the alternatives available for the solution of a problem and that they are able to design and develop new applications through a high level programming language. Finally, the final exam will be an oral exam that will focus on the topics of the last part of the course. In particular, students will be asked to demonstrate to know and to be able to use the data structures and the related algorithms shown during classes.Programma del Corso
Prima fase FONDAMENTI DELLINFORMATICA 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. Seconda Fase 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. Terza Fase ALGORITMI E STRUTTURE DATI: 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 e loro 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 implementazione in C e calcolo della relativa complessità computazionale. 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
First phase - FUNDAMENTALS OF MODERN COMPUTER SCIENCE: Introduction to computer science. The electronic computer, Von Neumann's machine. Hierarchies of memories. Positional numerical 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. Flow diagrams. Boolean algebra. Languages and grammars. Formal grammars. Backus-NaurForm (BNF). Programming languages: machine language, assembly, high-level languages. Compilers and interpreters. Compilers for C language, GCC. Second Phase - LANGUAGE C: Characteristics of the C language, structure of a C program, main libraries. Types of data, elementary types. Strings and I/O. Operators and expressions, precedence and associativity, operator overloading, type conversions. Simple instructions, control instructions, blocks, visibility rules. "If" and "switch-case" constructs. "While", "do-while" and "for" constructs. Structured data types in C. Arrays: definition, operators, initialization. Memory management, Heap. Pointers and their operators. Implementation of arrays with pointers. Structures. Enumerative types. Unions. User-defined data types. Functions. Passing of parameters by value and by reference, use of pointers. File management, text and binary files, standard channels, use of buffers. Third Phase - ALGORITHMS AND DATA STRUCTURES: Recursive algorithms: recursive functions and parameters of recursive functions in C, termination condition, examples of recursive algorithms and their implementation in C. Evaluation 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 not). Examples of evaluation of computational complexity of C programs. Search and sort in simple data structures. Research 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. Abstract data types: lists, stacks and queues. Linked lists: search, insertion at the head, at the queue and ordered insertion, cancellation. Doubly linked lists: search, insertion at the beginning, at the end and ordered insertion, cancellation. Implementation of lists through connected arrays and through dynamic allocation of memory and pointers in C. Implementation of stacks and queues with linked lists and with one-dimensional arrays in C. Circular queues. Push, pop and peak operations. Enqueue and dequeue operations. Complex data structures: graphs and trees. Definition of graph. Oriented and non-oriented graphs. Graph representation with adjacency matrices and adjacency lists in C. Graph traversing algorithms: depth first visit and breadth-first visit. Their implementation in C. Definition of a tree as an acyclic graph. Definition of binary tree, traversing algorithms and their implementation in C. Definition of binary search tree. Creation, order entry, deletion, search and their implementation in C algorithmsTesti di riferimento: - B. Kernighan, D. Ritchie, Il linguaggio C - Principi di programmazione e manuale di riferimento., II edizione, Pearson, 2018.
- R. Sedgewick, Algoritmi in C., IV edizione, Pearson, 2015
- S. Berretti, L. Carnevali, E. Vicario, Fondamenti di Programmazione linguaggio C, strutture dati e algoritmi elementari, C++. IV edizione, Esculapio, 2017
Esami: Elenco degli appelli
Elenco delle unità didattiche costituenti l'insegnamento
Docente: FRANCESCO LONGO
Orario di Ricevimento - FRANCESCO LONGO
Giorno | Ora inizio | Ora fine | Luogo |
---|---|---|---|
Martedì | 15:00 | 16:00 | 7° piano blocco B del Dipartimento di Ingegneria |
Giovedì | 15:00 | 16:00 | 7° piano blocco B del Dipartimento di Ingegneria |
Note: