INFORMATICA
(obiettivi)
Obiettivi formativi. Obiettivo formativo primario è apprendere come descrivere semplici processi in maniera formale, attraverso la definizione di algoritmi, e acquisire una metodologia per valutare la complessità di un algoritmo. Gli studenti devono essere in grado di: - definire in modo non ambiguo un problema, - individuare in maniera precisa quali dati devono essere trattati, - come rappresentare tali dati, - quali passi realizzano un procedimento che risolve il problema. Queste capacità sono espresse attraverso l'uso del linguaggio di programmazione Java.
Conoscenza e capacità di comprensione. Dopo aver frequentato il corso gli studenti conoscono e comprendono il concetto di algoritmo e come un algoritmo si possa esprimere utilizzando un linguaggio di programmazione. Utilizzano i costrutti di base del linguaggio Java e sono coscienti della possibilità di risolvere uno stesso problema con algoritmi di complessità computazionale diverse. Conoscono inoltre vari algoritmi per la soluzione di problemi di base, come ricerca e ordinamento, e alcuni algoritmi numerici.
Capacità di applicare conoscenza e comprensione. Al termine del corso gli studenti sono in grado di formalizzare algoritmi per semplici problemi, realizzare programmi che li implementano in linguaggio Java, passando attraverso tutte le fasi: progettazione, stesura del codice sorgente, compilazione, debugging ed esecuzione. Conoscono le notazioni che permettono di esprimere asintoticamente la complessità di un algoritmo. Conoscono le modalità di codifica di informazioni di natura testuale, numerica, ed altra natura.
Autonomia di giudizio. Gli studenti sono in grado di apprezzare la differenza tra risolvere un problema e descrivere formalmente un processo risolutivo. Riescono a valutare come scelte realizzative diverse possono portare a soluzioni con diverse caratteristiche di efficienza, applicando paradigmi studiati nell'ambito di problemi di base. Attraverso le intense attività di laboratorio acquisiscono una maggiore consapevolezza dei processi alla base dell'uso di un elaboratore.
Abilità comunicativa. Gli studenti vengono acquisiscono il rigore formale indispensabile per utilizzare un linguaggio di programmazione. Riescono ad apprezzare e a prevedere le ricadute, in termini di complessità, dell'applicazione di tecniche risolutive diverse. Riescono ad applicare tecniche di decomposizione, in modo da ridurre la soluzione di problemi complessi alla soluzione di problemi più semplici.
Capacità di apprendimento. Gli studenti che superano l’esame possono analizzare la struttura di un programma, anche complesso, possono impadronirsi facilmente dell'uso di un qualunque altro linguaggio di programmazione imperativo o a oggetti, possono distinguere quali problemi si prestano ad una soluzione automatizzata.
|
Codice
|
1017587 |
Lingua
|
ITA |
Tipo di attestato
|
Attestato di profitto |
Crediti
|
9
|
Settore scientifico disciplinare
|
INF/01
|
Ore Aula
|
72
|
Ore Studio
|
-
|
Attività formativa
|
Attività formative di base
|
Canale: 1
Mutua da
|
1017587 INFORMATICA in Statistica, economia e società L-41 1 FRANCIOSA PAOLO GIULIO
(programma)
Generalità(10 ore) Componenti di un sistema di elaborazione: hardware, software, principali unità periferiche. Interazione con un sistema operativo basato su finestre. Il sistema operativo: funzioni principali, gestione dei processi, gestione della memoria, file system. Concetto di cartella, documento, applicazione/programma. Rappresentazione dell'informazione: codifica di informazioni numeriche - sistemi di numerazione posizionali, codifica binaria, ottale, esadecimale, conversioni di base. Rappresentazione di numeri interi negativi. Rappresentazione in virgola mobile. Codifica di caratteri. Concetto di algoritmo. Esempi di algoritmi in linguaggio naturale. Generalità sui linguaggi di programmazione, compilatori.
Programmazione in linguaggio Java (30 ore) La Java Virtual Machine, ambienti di programmazione, compilazione ed esecuzione di programmi Java. Costrutti essenziali del linguaggio: variabili, espressioni, oggetti. Assegnazioni, metodi di input/output, istruzioni di selezione, ed iterazione. Uso di classi predefinite, invocazione di metodi. Consultazione della documentazione standard Java. Definizione di classi, principio della riutilizzazione del codice. Implementazione di vettori e matrici. Ereditarietà e polimorfismo.
Algoritmi fondamentali (16 ore) Ricerca sequenziale, ricerca dicotomica su un vettore ordinato. Ordinamento: selection sort, merge sort, quick sort, bubble sort. Algoritmo di Euclide per la ricerca del Massimo Comun Divisore (MCD). Algoritmo per la ricerca del k-esimo elemento. Algoritmi di base su matrici.
Introduzione alla complessità computazionale (6 ore) Concetto di complessità di un algoritmo, notazioni asintotiche. Equazioni di ricorrenza e metodi per la loro soluzione. Complessità computazionale degli algoritmi studiati.
Walter Savitch Programmazione con Java Pearson, 2013.
Cormen, Leiserson, Rivest: Introduzione agli algoritmi, volume 1, Jackson libri capitolo 1: Introduzione; capitolo 2: Ordine di grandezza delle funzioni - contiene l'algoritmo di ordinamento merge sort; capitolo 4, pagg. 58-60: soluzione di equazioni di ricorrenza; capitolo 8, pagg. 145-153: l'algoritmo di ordinamento quick sort.
Ceri, Mandrioli, Sbattella: Informatica arte e mestiere, McGraw-Hill. Cap. 11, pagg. 243-255, o in alternativa Ceri, Mandrioli, Sbattella: Informatica istituzioni, McGraw-Hill. Cap. 2 fino a 2.2.2 compreso e ad 2.3 alla fine del capitolo, pagg. 29-43
|
Date di inizio e termine delle attività didattiche
|
22/09/2019 - 19/12/2019 |
Date degli appelli
|
Date degli appelli d'esame
|
Modalità di erogazione
|
Tradizionale
|
Modalità di frequenza
|
Non obbligatoria
|
Canale: 2
Mutua da
|
1017587 INFORMATICA in Statistica, economia, finanza e assicurazioni L-41 2 LAURIA MASSIMO
(programma)
Vedere http://www.massimolauria.net/courses/informatica2019/
* Programma
** Introduzione all'informatica
Abbiamo dato alcuni cenni storici e generali riguardanti l'evoluzione della disciplina dell'informatica. Poi abbiamo discusso di
- cosa sono gli algoritmi - rappresentazione dei dati - codifica di testi e numeri - rappresentazione binaria, decimale, esadecimale - ASCII, UTF-8, Latin1 ** Programmazione Python
Capitoli e parti del libro /Pensare in Python/ di Allen B. Downey
1, 2, 3, 5, 6.1-6.4, 7, 8, 10, 11.1-11.3, 14.1-14.4, Appendice A.
- Variabili, Espressioni e Istruzioni - Tipi di dati: numerici - Chiamata e scrittura di funzioni - Istruzioni condizionali - Istruzioni di ciclo - Iterazione e ricorsione - Diagrammi di stack e limiti della ricorsione - Fibonacci e MCD - Tipi di dati: stringhe ed manipolazione di testi - Liste e sequenze di dati - Dizionari - Operazioni su file
** Strumenti di sviluppo
- Interprete python interattivo - Programmare con un editor di testo - Programmare con un ambiente integrato (Thonny)
** Algoritmi ed efficienza computazionale
- Ordine di crescita della complessità - Notazioni $O$, $\Omega$, $\Theta$ - Algoritmi di ricerca sequenziale e binaria - Algoritmo di ordinamento Insertion sort - Algoritmo di ordinamento Bubblesort - Algoritmo di ordinamento Quicksort - Algoritmo di ordinamento Mergesort - Nozione di ordinamento stabile - Struttura a pila e programmi ricorsivi - Risoluzione di equazioni di ricorrenza
Capitoli degli Appunti: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11.
Vedere http://www.massimolauria.net/courses/informatica2019/
Libri di testo e appunti
Pensare in Python - Come Pensare da Informatico --- Allen B. Downey Appunti su algoritmi e complessità --- Massimo Lauria
Diapositive sul sito del corso
|
Date di inizio e termine delle attività didattiche
|
22/09/2019 - 19/12/2019 |
Date degli appelli
|
Date degli appelli d'esame
|
Modalità di erogazione
|
Tradizionale
|
Modalità di frequenza
|
Non obbligatoria
|
|
|