Scheda Insegnamento: INFORMATICA A.A. 2017/2018
  • Corso di Laurea: INGEGNERIA INDUSTRIALE (L-9)
  • Codice: 15672
  • Crediti: 9
  • Anno Off. Formativa: 2017/2018
  • Anno di Corso: 1
  • Erogazione: I semestre
  • Docente: PAOLA VOCCA

Programma

Risultati apprendimento
Il corso è finalizzato all’apprendimento dei concetti base della struttura di un elaboratore e della teoria degli algoritmi, della complessità e della programmazione strutturata.
All’apprendimento del linguaggio di programmazione C, di cui viene fornita una descrizione dettagliata che prescinde da ogni eventuale competenza pregressa degli studenti, vengono analizzati alcuni problemi fondamentali ed alcuni dei principali e più interessanti algoritmi risolutori.
Al termine del corso ci si aspetta che lo studente abbia le seguenti conoscenze:

- Conoscenza della struttura di un elaboratore e la formalizzazione di un linguaggio astratto di programmazione (Pseudo Assembler);
- Conoscenza degli concetti di algoritmo, problema, programma e di analisi concreta e asintotica.
- conoscenza delle rappresentazioni binarie dell'informazione (codifica di interi, codifica di numeri reali in virgola mobile, codifica di caratteri)
- Conoscenza dell’algebra di Boole.
- conoscenza dei concetti di base della programmazione (tipo di dato, variabile, parametro, strutture di controllo, array, file, puntatori)
- conoscenza delle principali strutture di dati astratte liste, pile code, matrici.

Al termine del corso ci si aspetta che lo studente abbia le seguenti abilità:

- capacità di progettare un metodo risolutivo in pseudo Assembler
- Capacità di valutare la complessità di un algoritmo;
- capacità di programmare utilizzando gli strumenti di base del linguaggio C
- capacità di utilizzare la ricorsione;
- Capacità di progettare e realizzare un progetto di piccole dimensioni in C utilizzando librerie.

Programma dettagliato
Nozioni di base: Struttura di un elaboratore, modelli di calcolo, complessità concreta, analisi asintotica, macchina a registri, pseudo Assembler. Codifica digitale delle informazioni. Algebra di Boole.

Algoritmi e strutture dati: problemi ed algoritmi. Complessità asintotica degli algoritmi. Dall’algoritmo all’implementazione. Pseudocodice
Programmazione Strutturata: Linguaggi di Programmazione, (linguaggio macchina, Assembler, linguaggi ad alto livello). Compilatori ed interpreti. Passi di compilazione di un programma. Programmi strutturati: Sequenza, selezione e iterazione. Blocchi di istruzioni: Approccio top-down, bottom-up, misto. Programmazione modulare, Programmazione orientata agli oggetti.
Linguaggio C
• Sequenza: Struttura di un programma in C. Variabili e assegnamenti. Tipi di dati. Costanti. Input e output. Funzioni.
• Selezione: Istruzioni di selezione (if, if else, operatore ?, switch… case). Istruzioni composte, if annidati, caratteri.
• Operatori: Dichiarazione di variabili numeriche. Operatori matematici, operatori relazionali, operatori logici. Espressioni logiche.
• Iterazione: for, while, do… while, operatore virgola, cicli annidati
• Array: Dichiarazioni, inizializzazioni e utilizzo di vettori. Matrici. prodotto fra matrici.
• Stringhe: Tipo carattere e stringa.
• Funzioni: Il concetto di sottoprogramma. La direttiva #include. Definizione di funzione. Il tipo void. Prototipo di funzione. Regole di visibilità. Chiamata di una funzione. Passaggio di parametri. Scomposizione funzionale.
• Puntatori: dichiarazione, inizializzazione e utilizzo di puntatori. Array e puntatori. Passaggio di parametri per indirizzo. Oggetti dinamici. Indirizzamento assoluto della memoria. Passaggio di puntatori alle funzioni. Le funzioni malloc, sizeof, free. Il tipo void*. La relazione tra puntatori e vettori. L’aritmetica dei puntatori. I vettori di puntatori.
• Ricorsione: Iterazione e ricorsione, permutazione e diposizione. Combinazioni La successione di Fibonacci. Le torri di Hanoi.
• Tipi di dato: tipi semplici e tipi strutturati, tipo carattere e stringa. La direttiva #define. Dichiarazione, inizializzazione e utilizzo di strutture. La parola chiave typedef.
• Strutture dati dinamiche: introduzione alle strutture di dati dinamiche. Allocazione dinamica della memoria. Le strutture ricorsive. Operazioni elementari su liste concatenate.
• I file su disco: lettura e scrittura di file ad accesso sequenziale. Input e output formattato con fprintf e fscanf. Le funzioni fopen, fclose,fflush, rewind.

Testi consigliati

1) D. Mandrioli, S. Ceri, L. Sbattella, P. Cremonesi, G. Cugola, Informatica: Arte e Mestiere 4ed, McGraw-Hill, 2014
2) Dispense e lucidi

Testi facoltativi e integrativi
1) A. Bellini & A. Guidi: Linguaggio C: Guida alla programmazione. McGraw-Hill
2) Crescenzi - Gambosi - Grossi - Rossi - STRUTTURE DI DATI E ALGORITMI (Progettazione, analisi e programmazione) -PEARSON EDUCATION ITALIA -2012
3) B. W. Kernigham, D.M. Ritchie, Linguaggio C, Jackson Libri, 1989. (Opzionale)

Propedeuticità

Nessuna

Frequenza

Facoltativa

Metodologia didattica

Ore lezione: 72

Valutazione del profitto

Prova scritta, prova orale, prova pratica

Descrizione dei metodi di accertamento

L'Esame del corso di PROGRAMMAZIONE è composto dalle seguenti parti:
• Progetto: Assegnato un mese prima. Il progetto va sviluppato secondo le specifiche fornite dal docente. Consiste nello sviluppo di un insieme di algoritmi che dovranno essere consegnati obbligatoriamente prima della prova scritta che si intende sostenere. Il progetto dovrà essere consegnato prima della prova orale all'ing. Piergentili (faberk@inwind.it) per la valutazione. Rappresenta il 10% del voto finale
• Prova scritta: L'esame scritto è composto di vari esercizi che richiedono la stesura delle funzioni necessarie ad implementare gli algoritmi risolutivi dei quesiti proposti, utilizzando la sintassi del Linguaggio C. Concorre al 60% del voto finale.
• Prova orale: valutazione delle conoscenze relative a tutto il programma con particolare riferimento alla parte iniziale. Concorre al 30% del voto finale.
Si potrà accedere all'orale solo se il progetto e la prova scritta saranno ritenute sufficienti. Si potrà sostenere la prova orale solo se si sarà superata la prova scritta e valutato sufficiente il progetto.

L'esame si riterrà superato se e solo se tutte le prove saranno ritenute sufficienti.
La valutazione delle singole prove avverrà nelle forme stabilite dall'art. 23 del Regolamento Didattico di Ateneo. Nella valutazione della prova e nell'attribuzione del voto finale si terrà conto: del livello di conoscenza dei contenuti dimostrato (superficiale, appropriato, preciso e completo, completo e approfondito), della capacità di applicare i concetti teorici (errori nell'applicare i concetti, discreta, buona, ben consolidata), della capacità di analisi, di sintesi e di collegamenti interdisciplinari (sufficiente, buona, ottima), della capacità di senso critico e di formulazione di giudizi (sufficiente, buona, ottima), della padronanza di espressione (esposizione carente, semplice, chiara e corretta, sicura e corretta).

Luogo lezioni

Via S. Camillo De Lellis Blocco E, Piano T Aula Magna/Aula Informatica

Orario lezioni

Mercoledì ore 14.00-18.00 Aula magna/Aula informatica
Giovedì ore 11.00-13.00 Aula 4/Aula informatica

Comunicazioni

Il ricevimento è previsto a valle delle lezioni oppure su previo appuntamento concordato via mail all'indirizzo (vocca@unitus.it).