INFORMATICA GENERALE

Obiettivi formativi

Obiettivi generali Acquisire conoscenze di base relativamente al progetto di algoritmi di base, iterativi e ricorsivi, ed alla valutazione della loro efficienza computazionale. Obiettivi specifici Conoscenza e comprensione: Al termine del corso gli studenti conosceranno le metodologie di base per la progettazione e l'analisi di algoritmi iterativi e ricorsivi, le principali strutture dati, alcuni modi per scandire tali strutture, i principali algoritmi di ordinamento e le implementazioni più elementari dei dizionari. Avanno una buona conoscenza del linguaggio C, compresi aspetti avanzati come allocazione dinamica di memoria, aritmetica dei puntatori e compilazione separata dei programmi. Applicare conoscenza e comprensione: Al termine del corso gli studenti avranno acquisito familiarità con le principali strutture dati di base, in particolare quelle che implementano i dizionari. Sapranno spiegarne gli algoritmi e analizzarne la complessità, evidenziando come le prestazioni dipendano dalla struttura dati utilizzata. Saranno in grado di progettare nuove strutture dati e i relativi algoritmi, rielaborando quelli esistenti; sapranno spiegare i principali algoritmi di ordinamento, illustrando le strategie di progetto sottostanti e le relative analisi di complessità; saranno in grado di confrontare i comportamenti asintotici dei tempi di esecuzione degli algoritmi studiati; saranno in grado di progettare soluzioni ricorsive di problemi e di analizzare asintoticamente gli algoritmi risultanti. Sapranno infine implementare gli algoritmi e le strutture dati apprese in linguaggio C, con attenzione anche all’analisi di correttezza, alla chiarezza e all’efficienza concreta dei programmi. Capacità critiche e di giudizio: Lo studente avrà le basi per analizzare la qualità di un algoritmo e delle relative strutture dati, sia dal punto di vista della effettiva risoluzione del problema che da quello della efficienza computazionale con la quale il problema viene risolto. Capacità comunicative: Lo studente acquisirà la capacità di esporre in modo chiaro ed organizzato le proprie conoscenze, capacità che verrà verificata sia mediante i quesiti presentati nelle prove scritte che durante la prova orale. Lo studente sarà in grado di esprimere un’idea algoritmica in modo rigoroso sia ad alto livello, tramite l’uso dello pseudocodice, che in linguaggio C. Capacità di apprendimento: Le conoscenze acquisite permetteranno allo studente, una volta concluso il ciclo di studi, di affrontare lo studio, individuale o previsto nell’ambito di un corso di laurea magistrale, di tecniche algoritmiche, di strutture dati più avanzate e di metodologie avanzate di programmazione.

Canale 1
IVANO SALVO Scheda docente

Programmi - Frequenza - Esami

Programma
Parte generale (60 ore): Descrizione e progettazione di algoritmi efficienti: Introduzione ai concetti di algoritmo, di struttura dati, di efficienza, di complessità computazionale. Notazione asintotica. Introduzione alla ricorsione. Il problema dell'ordinamento. Strutture dati fondamentali (vettori, liste, pile, code, code con priorità, alberi). Dizionari. Grafi. Parte sul linguaggio C (24 ore): Linguaggio C: Principi di buona strutturazione dei programmi (programmazione strutturata, sviluppo di programmi corretti seguendo una metodologia top-down strutturando i programmi con utilizzo di funzioni). Richiamo di nozioni elementari del linguaggio C: costrutti iterativi e funzioni, vettori e strutture. Ricorsione in C. Puntatori e allocazione dinamica di memoria. Liste e alberi binari.
Prerequisiti
Nozioni base di programmazione.
Testi di riferimento
Testo di riferimento: T. H. Cormen, Charles E. Leiserson, Ronald L. Rivest: Introduction to algorithms, The MIT Press Sarà cura dei docenti distribuire materiale didattico, relativo sia alle lezioni ed esercitazioni della parte generale (sotto forma di dispense) che alla parte sul linguaggio C (sotto forma di dispense e programmi di esempio scritti in linguaggio C).
Modalità insegnamento
Alla didattica frontale, relativa sia alla parte generale che alla parte sul linguaggio C ed articolata in lezioni per circa il 70% delle ore ed in esercitazioni per il restante 30%, si affianca una attività di tutoraggio in laboratorio, non obbligatoria, durante la quale gli studenti possono sviluppare programmi in autonomia usufruendo del supporto di un tutore. NOTA: in caso perdurare dell'emergenza Covid-19 le lezioni si svolgeranno in modalità mista (con parte degli studenti in aula e parte a distanza).
Frequenza
Seguire le lezioni è fortemente raccomandato.
Modalità di esame
L’esame mira a valutare l’apprendimento tramite una prova scritta (consistente nella risoluzione di problemi dello stesso tipo di quelli svolti nelle esercitazioni), degli homework (consistente nella scrittura e nella esecuzione di programmi C di varia difficoltà) e una prova orale (consistente nella discussione dei temi più rilevanti illustrati nel corso). La prova scritta avrà una durata di circa due ore e può essere sostituita da prove intermedie, più brevi, che si svolgeranno durante il corso. Per superare l'esame occorre conseguire un voto non inferiore a 18/30. Lo studente deve dimostrare di aver acquisito una conoscenza sufficiente degli argomenti di entrambe le parti del programma. Per conseguire un punteggio pari a 30/30 e lode, lo studente deve invece dimostrare di aver acquisito una conoscenza eccellente di tutti gli argomenti trattati durante il corso ed essere in grado di raccordarli in modo logico e coerente.
Bibliografia
Testi di consultazione e ispirazione: J. Kleimberg, E. Tardos: "Algorithm Design", Pearson, 2006. E. W. Dijkstra: "A Discipline of Programming", Prentice Hall, 1976. J. Bentley: "Programming Pearls" (1986) and "More Programming Pearls" (1988), Addison Wesley.
Modalità di erogazione
La modalità di svolgimento è tradizionale in aula con slides. Possibilità di didattica blended, a seconda della situazione pandemica.
ADOLFO PIPERNO Scheda docente

Programmi - Frequenza - Esami

Programma
Linguaggio C: Principi di buona strutturazione dei programmi (programmazione strutturata, sviluppo di programmi corretti seguendo una metodologia top-down strutturando i programmi con utilizzo di funzioni). [5 ore] Richiamo di nozioni elementari del linguaggio C: costrutti iterativi e funzioni, vettori e strutture. [12 ore] Ricorsione in C. [5 ore] Puntatori e allocazione dinamica di memoria. Liste e alberi binari.[8 ore]
Prerequisiti
Per il modulo relativo all'insegnamento del linguaggio C, nessuno
Testi di riferimento
Testo di riferimento: T. H. Cormen, Charles E. Leiserson, Ronald L. Rivest: Introduction to algorithms, The MIT Press Sarà cura dei docenti distribuire materiale didattico sotto forma di dispense e programmi di esempio scritti in linguaggio C.
Modalità insegnamento
Alla didattica frontale, articolata in lezioni per circa il 70% delle ore ed in esercitazioni per il restante 30%, si affianca una attività di tutoraggio in laboratorio, non obbligatoria, durante la quale gli studenti possono sviluppare programmi in autonomia usufruendo del supporto di un tutore.
Frequenza
Non obbligatoria
Modalità di esame
L’esame mira a valutare l’apprendimento tramite una prova scritta (consistente nella risoluzione di problemi dello stesso tipo di quelli svolti nelle esercitazioni), un progetto (consistente nella scrittura e nella esecuzione di programmi C di varia difficoltà) e una prova orale (a richiesta dello studente) di discussione della prova scritta. La prova scritta avrà una durata di circa due ore, e può essere sostituita da due prove intermedie, entrambe della durata di due ore, la prima delle quali si svolgerà a metà corso e la seconda immediatamente dopo la fine del corso.
Bibliografia
Nessuna
Modalità di erogazione
Lezioni frontali
Canale 2
ALESSANDRO PANCONESI Scheda docente

Programmi - Frequenza - Esami

Programma
Parte generale (60 ore): Descrizione e progettazione di algoritmi efficienti: Introduzione ai concetti di algoritmo, di struttura dati, di efficienza, di complessità computazionale. Notazione asintotica. Introduzione alla ricorsione. Il problema dell'ordinamento. Strutture dati fondamentali (vettori, liste, pile, code, code con priorità, alberi). Dizionari. Grafi. Modulo di programmazione (30 ore): Linguaggio C: Principi di buona strutturazione dei programmi (programmazione strutturata, sviluppo di programmi corretti seguendo una metodologia top-down strutturando i programmi con utilizzo di funzioni). Richiamo di nozioni elementari del linguaggio C: costrutti iterativi e funzioni, vettori e strutture. Ricorsione in C. Puntatori e allocazione dinamica di memoria. Strutture dati fondamentali quali liste, pile e alberi binari.
Prerequisiti
I prerequisiti del corso di Informatica Generale sono i fondamenti di un moderno linguaggio di programmazione ad alto livello, in particolare di C/C++, come quelli che vengono forniti nell'insegnamento di Laboratorio di Programmazione e Calcolo (LPC), obbligatorio per tutti e collocato al primo anno di corso.
Testi di riferimento
Testo di riferimento: Jon Kleinberg and Eva Tardos, Algorithm design Dispense e altro materiale integrativo potranno essere forniti dal docente
Modalità insegnamento
Alla didattica frontale, relativa sia alla parte generale che al modulo di programmazione (per circa il 70% ed il 30% del tempo, rispettivamente), si affianca una attività di tutoraggio in laboratorio, non obbligatoria, durante la quale gli studenti possono sviluppare programmi in autonomia usufruendo del supporto di un tutore.
Modalità di esame
L’esame mira a valutare l’apprendimento tramite una prova scritta (consistente nella risoluzione di problemi dello stesso tipo di quelli discussi in classe) e di un progetto (consistente nella scrittura e nella esecuzione di programmi C di varia difficoltà). La prova scritta può essere sostituita da due prove intermedie, la prima delle quali si svolgerà circa a metà corso e la seconda immediatamente dopo la fine del corso. La prima prova intermedia sarà incentrata principalmente sugli argomenti illustrati nella prima metà del corso mentre la seconda sugli argomenti illustrati nella seconda metà del corso.
Modalità di erogazione
Alla didattica frontale, relativa sia alla parte generale che al modulo di programmazione (per circa il 70% ed il 30% del tempo, rispettivamente), si affianca una attività di tutoraggio in laboratorio, non obbligatoria, durante la quale gli studenti possono sviluppare programmi in autonomia usufruendo del supporto di un tutore.
CLAUDIO CILLI Scheda docente
  • Codice insegnamento1032750
  • Anno accademico2024/2025
  • CorsoMatematica
  • CurriculumGenerale
  • Anno2º anno
  • Semestre1º semestre
  • SSDINF/01
  • CFU9
  • Ambito disciplinareAttività formative affini o integrative