Università degli Studi di Napoli "Parthenope"

Scheda dell'insegnamento

Anno accademico: 
2018/2019
Tipologia di insegnamento: 
Base
Tipo di attività: 
Obbligatorio
Corso di afferenza: 
Corso di Laurea triennale (DM 270) in INFORMATICA
Settore disciplinare: 
INFORMATICA (INF/01)
Lingua: 
Italiano
Crediti: 
12
Anno di corso: 
1
Docenti: 
Ciclo: 
Primo Semestre
Ore di attivita' frontale: 
96

Obiettivi

I due moduli integrati (Programmazione I e Laboratorio di Programmazione I, 12 CFU, esame unico) costituiscono un percorso introduttivo alla programmazione, ovvero alle metodologie e alle tecniche per lo sviluppo, l’analisi e l’implementazione degli algoritmi. Il corso introduce il linguaggio C, utilizzato per la realizzazione dei prodotti software previsti nelle attività di laboratorio (in gruppo) e nei progetti individuali degli allievi.
Conoscenza e capacità di comprensione: Lo studente deve dimostrare di conoscere e saper comprendere le metodologie di base per lo sviluppo e l’analisi degli algoritmi, il linguaggio di programmazione C e un suo ambiente di sviluppo.
Capacità di applicare conoscenza e comprensione: Lo studente deve dimostrare di saper utilizzare la propria conoscenza acquisita per risolvere computazionalmente semplici problemi applicativi, anche quando essi appaiono in contesti concreti, per sviluppare algoritmi e analizzarli dal punto di vista della correttezza e della complessità, per usare in modo consapevole il linguaggio di programmazione C al fine di implementare efficientemente un algoritmo. Tali capacità si estrinsecano anche in un uso approfondito e consapevole degli strumenti di calcolo e dei laboratori informatici avanzati.
Autonomia di giudizio: Lo studente deve essere in grado di sapere valutare e interpretare in maniera autonoma i risultati di un algoritmo e di una sua implementazione in linguaggio C.
Abilità comunicative: Lo studente deve essere in grado di redigere una relazione di presentazione di un algoritmo e di documentare la sua implementazione in linguaggio C, anche lavorando in gruppo, servendosi di strumenti avanzati di scrittura/documentazione e usando correttamente la terminologia di base dell’Informatica, anche in lingua inglese.
Capacità di apprendimento: Lo studente deve essere in grado di aggiornarsi e approfondire in modo autonomo argomenti e applicazioni specifiche di programmazione in C.

Prerequisiti

Nessuno

Contenuti

Concetto di Algoritmo – Algoritmi per esecutori umani - Algoritmi per calcolare e per risolvere semplici problemi aritmetici. 2h
Concetto di Variabile – Variabili e tipi: Nozioni di base sulle variabili in programmazione - Operazione di assegnazione - Operazione di lettura/visualizzazione - Operazioni di base sulle variabili in programmazione. 4h
Introduzione al linguaggio C – Linguaggi di programmazione: linguaggio macchina e linguaggi di alto livello e programmi traduttori - Aspetti generali del linguaggio C ed “esecuzione” di un programma C - Variabili e tipi in C - Puntatori in C – Input / output in C. 6h
Costrutti di controllo – Costrutto di selezione - Costrutti di ripetizione - Costrutti di selezione in C - Costrutti di ripetizione in C. 6h
Function e procedure – Organizzazione di algoritmi come function - Organizzazione di algoritmi come procedure - Function in C - Function C che restituiscono più valori. 8h
Approccio incrementale – Algoritmi per il calcolo di somme - Algoritmo per la determinazione dell’elemento massimo in un insieme di dati di input - Algoritmo per la determinazione dell’appartenenza di un valore a un insieme di dati di input (algoritmo di search) - Algoritmi per il calcolo di somme di potenze e del massimo comun divisore - Function C per problemi aritmetici di base e per problemi applicativi di base. 6h
Strutture dati – Generalità sul concetto di tipo strutturato array - Algoritmi elementari con array - Ricerca sequenziale in un array - Fusione di array ordinati - Algoritmo per la determinazione dell’uguaglianza di due array - Algoritmi di base su array 2D - Generalità sull’array in C - Function in C per problemi di base con array 1D e 2D. 8h
Array e insiemi –algoritmi di unione, intersezione, inclusione, sottrazione e uguaglianza - Function in C per operazioni di base su insiemi - Tipi enumerativi e tipi derivati in C. 6h
Stringhe ed elaborazione di testi – Operazioni elementari su stringhe: operazioni di concatenazione, estrazione - Algoritmi di analisi testi e di individuazione di pattern - Stringhe in C - La libreria string del C - Sviluppo di function in C per l’elaborazione di testi.8h
Efficienza degli algoritmi – Definizione di complessità di tempo e di spazio di un algoritmo – Le funzioni Complessità di tempo e Complessità di spazio - Complessità asintotica –Classi di complessità - Ottimalità di algoritmi - Trattabilità e intrattabilità di problemi. 4h
Ordinamento di array – Algoritmo di ordinamento per inserimento - Algoritmo di ordinamento per selezione - Sviluppo di function in C per l’ordinamento ed esempi di utilizzo. 8h
Formule ricorrenti – Formula di Fibonacci: interpretazione modellistica, proprietà e algoritmi di calcolo - Sviluppo di function in C per le formule ricorrenti ed esempi di utilizzo. 6h
Approccio divide et impera – Idea di base del “divide et impera” - Algoritmo di ricerca binaria - Analisi dell’efficienza della ricerca binaria - Algoritmi divide et impera per somma e massimo di un array - Function in C per la ricerca binaria e algoritmi di raddoppiamento. 6h
Algoritmi ricorsivi – Tecniche di programmazione ricorsiva - Algoritmo ricorsivo per la ricerca binaria - algoritmi ricorsivi basati sull’approccio incrementale e sull’approccio divide et impera - Sviluppo di function ricorsive in C. 8h
Strutture dati: record – Generalità sul concetto di tipo strutturato - il tipo struct del C. 3h
Numeri pseudocasuali e simulazioni stocastiche – Generalità sui numeri pseudocasuali - Le function C per la generazione di numeri pseudocasuali ed esempi di utilizzo in simulazioni stocastiche. 3h

Metodi didattici

Lezioni frontali del docente, lezioni in laboratorio del docente con il supporto di tutor; esercitazioni in gruppo in aula e in laboratorio sotto la direzione del docente mirate al problem solving

Verifica dell'apprendimento

L’obiettivo della procedura di verifica consiste nel quantificare, per ogni studente, il livello di raggiungimento degli obiettivi formativi precedentemente indicati. La procedura di verifica consiste in una prova intercorso (con eventuale esonero dalla prova scritta), in un progetto individuale (20% del voto), una prova scritta (20% del voto) e un esame orale (60% del voto). Per l’esito positivo della valutazione sono necessari gli esiti positivi di tutte e tre le verifiche (progetto, prova scritta, prova orale). La prova intercorso verifica il livello di conoscenza degli algoritmi basati sull'approccio incrementale e descritti in modo iterativo, il livello di capacità di analisi di complessità di tali algoritmi e la capacità di scrivere un programma in C anche attraverso una opportuna organizzazione in function. L'esame orale verifica il livello di conoscenza degli algoritmi basati sull'approccio divide et impera e descritti in modo ricorsivo, e il livello di capacità di utilizzare le strutture dati array e struct, e di analizzare la complessità di tali algoritmi. La prova scritta valuta la capacità di scrivere un programma in C anche attraverso una opportuna organizzazione in function. Il progetto verifica la capacità di affrontare e risolvere in modo completo un problema sviluppando un algoritmo risolutore, anche basato su simulazione stocastica, implementandolo in un programma C articolato in function, e scrivendo una relazione esplicativa corredata da un processo di testing critico.

Testi

A. KELLEY, I. POHL; “C: didattica e programmazione”, Pearson Education Italia, 2004.
A. CIARAMELLA, G. GIUNTA: “Manuale di programmazione in C”, 2009. Scaricabile dalla piattaforma di e-learning del Dipartimento di Scienze e Tecnologie.
Tutte le lezioni e tutte le attività di laboratorio sono fruibili come presentazioni animate in formato Flash con l’audio di commento del Docente, in streaming attraverso la piattaforma di e-learning del Dipartimento di Scienze e Tecnologie; le slide (formato .pdf e .pps) di tutte le lezioni sono disponibili sulla stessa piattaforma, insieme con quiz on-line di autovalutazione, esercizi, progetti di approfondimento e varie note per il laboratorio.

Altre informazioni