Corso di laurea
informatica
Università degli studi di Pisa · 47 materie · 8 file condivisi
Il Corso di Laurea in Informatica nasce con l'obiettivo di formare laureati in grado di fare fronte a tutte le esigenze della società dell'informazione. Il laureato in Informatica è dotato di una preparazione culturale di base ad ampio spettro, che gli permetterà sia di seguire con successo il continuo progredire delle tecnologie, sia di accedere ai livelli di studio universitario successivi.
La preparazione tecnica del laureato in Informatica gli consente inoltre un rapido inserimento nel mondo del lavoro nel settore delle tecnologie dell'informazione e della comunicazione, e un successivo avanzamento in carriera verso ruoli di responsabilità. Nel percorso formativo, la comprensione della tecnologia informatica e il suo utilizzo nella risoluzione di problemi sono integrati con una solida preparazione scientifica-metodologica di base.
L'integrazione tra tecnologia e fondamenti scientifici è la caratteristica distintiva del corso di laurea, che consente ai laureati di comprendere l'evoluzione tecnologica, interpretarne i contenuti, prevederne gli effetti, individuarne le applicazioni, e di ampliare la propria capacità di risolvere problemi.
Oltre alle competenze tecniche e scientifiche necessarie per l'attività professionale, il laureato in informatica acquisisce quel bagaglio di competenze trasversali necessarie per comunicare con altri specialisti tecnico-scientifici per cooperare con loro, comprendere e produrre documentazione tecnica, valutare gli aspetti economici, riconoscere e analizzare i vincoli legislativi in materia informatica.
Ogni anno di corso è articolato su due semestri, ciascuno comprendente almeno 12 settimane di attività didattica. I corsi di insegnamento prevedono che la formazione di base sia accompagnata da esercitazioni, e talvolta da attività progettuali e di laboratorio. L'acquisizione delle competenze è verificata e valutata, per ciascun insegnamento, per mezzo di verifiche scritte, prove orali o realizzazioni progettuali, talvolta anche in itinere.
Il percorso di studio prevede un solo curriculum che gli studenti possono adattare selezionando, in base ai propri interessi, 6 CFU di insegnamenti complementari e 12 CFU di insegnamenti a libera scelta.
Al momento abbiamo 8 files caricati sul nostro portale suddivisi nelle 47 materie appartenenti al tuo corso di laurea.
Sfoglia il materiale didattico
Con UniDocs hai l'opportunità di studiare insieme a tutto il tuo corso di laurea. Guadagna subito dei crediti, carica il materiale del tuo ultimo esame!
Più condividi, più tempo avrai per studiare con tutta la community!
Materie del corso
Questo corso è dedicato allo studio dell'analisi matematica: limiti, continuità, calcolo differenziale e integrazione, successioni serie e calcolo differenziale in più variabili. Questo corso è dedicato allo studio…
Scheda dell'insegnamento
Obiettivi formativi
Questo corso è dedicato allo studio dell'analisi matematica: limiti, continuità, calcolo differenziale e integrazione, successioni serie e calcolo differenziale in più variabili.
Questo corso è dedicato allo studio dell'analisi matematica: limiti, continuità, calcolo differenziale e integrazione, successioni serie e calcolo differenziale in più variabili.
Programma
Generalità sulle funzioni: dominio, codominio, immagine, grafico. Iniettività e surgettività. Funzioni pari, dispari, periodiche e monotone. Insiemi limitati. Massimo e minimo di un insieme. Estremi superiore e inferiore. Valore assoluto e disuguaglianza triangolare.
Continuità. Teorema dei valori intermedi. Teorema di Weierstrass. Continuità della funzione inversa.
Limiti. Punti di accumulazione e punti interni. Limiti da sinistra e da destra. Relazione fra continuità e limite. Unicità del limite. Teorema dei Carabinieri. Limite della funzione inversa. Teorema sulla permanenza del segno. Limite della composizione di funzioni. Limite di una funzione monotona. Infinitesimi e infiniti. Massimo e minimo di funzioni definite su insiemi non limitati. Asintoti.
Calcolo differenziale. Derivata. Derivate destra e sinistra. Relazione fra derivabilità e continuità. Retta tangente al grafico. Derivate di ordine superiore al primo. Derivata della funzione inversa e della composizione di funzioni. Monotonia e segno della derivata. Punti di massimo o di minimo locali. Teoremi di Fermat, Rolle e Lagrange. Segno della derivata seconda nei punti di massimo o minimo locali. Teorema di De L'Hôpital. Formula di Taylor. Polinomi di Taylor delle funzioni elementari. Convessità. Punti angolosi e di cuspide. Grafico qualitativo di una funzione.
Calcolo integrale. L'integrale di Riemann. Integrabilità delle funzioni generalmente continue. Linearità dell'integrale. Additività rispetto all'intervallo di integrazione. Teorema della media integrale. Teorema fondamentale del calcolo integrale. Integrali con estremi di integrazione variabili. Integrazione per parti e per sostituzione. Integrale delle funzioni razionali.
Integrali su domini di integrazione non limitati e di funzioni non limitate nell'intorno di un punto. Criteri del confronto e del confronto asintotico. Assoluta integrabilità.
Successioni. Limite di una successione. Sotto-successioni. Teorema dei Carabinieri. Esistenza del limite e limitatezza. Successioni divergenti. Composizione tra successioni e funzioni. Criteri del rapporto e della radice. Il fattoriale.
Serie numeriche. Criteri del confronto, del confronto asintotico, del rapporto e della radice. Criterio di Leibniz.
Funzioni di più variabili. Dominio, grafico e curve di livello. Limiti e continuità. Derivate parziali, differenziale e gradiente. Punti stazionari. Derivate seconde, matrice Hessiana. Massimi e minimi locali interni. Massimi e minimi su domini limitati e chiusi.
Nozioni di calcolo di base: disuguaglianze, trigonometria, funzione esponenziale, logaritmi, polinomi.
Lo studente imparerà a capire quali sono gli strumenti necessari a risolvere un problema di Analisi Matematica.
Generalità sulle funzioni: dominio, codominio, immagine, grafico. Iniettività e surgettività. Funzioni pari, dispari, periodiche e monotone. Insiemi limitati. Massimo e minimo di un insieme. Estremi superiore e inferiore. Valore assoluto e disuguaglianza triangolare. Continuità. Teorema dei valori intermedi. Teorema di Weierstrass. Continuità della funzione inversa. Limiti. Punti di accumulazione e punti interni. Limiti da sinistra e da destra. Relazione fra continuità e limite. Unicità del limite. Teorema dei Carabinieri. Limite della funzione inversa. Teorema sulla permanenza del segno. Limite della composizione di funzioni. Limite di una funzione monotona. Infinitesimi e infiniti. Massimo e minimo di funzioni definite su insiemi non limitati. Asintoti. Calcolo differenziale. Derivata. Derivate destra e sinistra. Relazione fra derivabilità e continuità. Retta tangente al grafico. Derivate di ordine superiore al primo. Derivata della funzione inversa e della composizione di funzioni. Monotonia e segno della derivata. Punti di massimo o di minimo locali. Teoremi di Fermat, Rolle e Lagrange. Segno della derivata seconda nei punti di massimo o minimo locali. Teorema di De L'Hôpital. Formula di Taylor. Polinomi di Taylor delle funzioni elementari. Convessità. Punti angolosi e di cuspide. Grafico qualitativo di una funzione. Calcolo integrale. L'integrale di Riemann. Integrabilità delle funzioni generalmente continue. Linearità dell'integrale. Additività rispetto all'intervallo di integrazione. Teorema della media integrale. Teorema fondamentale del calcolo integrale. Integrali con estremi di integrazione variabili. Integrazione per parti e per sostituzione. Integrale delle funzioni razionali. Integrali su domini di integrazione non limitati e di funzioni non limitate nell'intorno di un punto. Criteri del confronto e del confronto asintotico. Assoluta integrabilità. Successioni. Limite di una successione. Sotto-successioni. Teorema dei Carabinieri. Esistenza del limite e limitatezza. Successioni divergenti. Composizione tra successioni e funzioni. Criteri del rapporto e della radice. Il fattoriale. Serie numeriche. Criteri del confronto, del confronto asintotico, del rapporto e della radice. Criterio di Leibniz. Funzioni di più variabili. Dominio, grafico e curve di livello. Limiti e continuità. Derivate parziali, differenziale e gradiente. Punti stazionari. Derivate seconde, matrice Hessiana. Massimi e minimi locali interni. Massimi e minimi su domini limitati e chiusi. Nozioni di calcolo di base: disuguaglianze, trigonometria, funzione esponenziale, logaritmi, polinomi. Lo studente imparerà a capire quali sono gli strumenti necessari a risolvere un problema di Analisi Matematica.Modalità d'esame
Prove di verica intermedie in aula. Esercizi da svolgere a casa.
- L’esame è composto da un test, una prova scritta e una prova orale.
- Il test è propedeutico per la prova scritta che a sua volta lo è per la prova orale.
- Il test e la prova scritta si svolgeranno entrambi il giorno indicato sul portale Valutami, intervallati da una pausa di 15 minuti.
- Il test è formato da 11 domande a risposta chiusa. Ogni risposta esatta vale 3 punti, ogni risposta errata vale 1 punto negativo, ogni risposta non data vale 0 punti. Il test ha la durata di 80 minuti e non è permesso l’utilizzo di libri, appunti, dispositivi di calcolo o di comunicazione come computer, tablet, telefoni cellulari e smartwatch che dovranno essere tenuti spenti per tutta la durata della prova. In caso di mancato rispetto delle regole la prova sarà annullata.
- Al termine dei test verranno inviate via email o proiettate in aula le risposte corrette, in modo che i candidati possano calcolare il punteggio ottenuto. Se nel test si ottiene un punteggio inferiore a 18 l’esame si conclude con esito negativo e non si prosegue oltre.
- Se nel test lo studente ha ottenuto un voto V maggiore o uguale a 18 punti, ha la facoltà di concludere l’esame con un voto ottenuto con la seguente formula: 18+(V-18)×0,4 arrotondato per eccesso. In tal caso l’esame verrà verbalizzato previa verifica del punteggio ottenuto nel test.
- Se invece lo studente vuole proseguire con l’esame, deve sostenere la prova scritta che consiste in 3 esercizi da svolgere giustificando i passaggi logici eseguiti e che seguirà il test dopo una breve pausa. La prova ha la durata di 90 minuti e possono essere consultati appunti e libri ma resta il divieto di utilizzo di tutti i dispositivi, come per il test. Il punteggio massimo conseguibile è 30.
- Dopo 45 minuti lo studente deve decidere se restare fino alla fine dei 90 minuti e consegnare la prova scritta oppure ritirarsi dalla prova scritta e verbalizzare l’esame utilizzando il voto del test con le modalità precedentemente descritte.
- Nel caso di consegna del compito, il voto sarà determinato dopo la correzione di quest’ultimo (che avverrà nei giorni successivi) e sarà pari alla media aritmetica tra i punteggi ottenuti nel test e nella prova scritta, arrotondata per eccesso. Se tale voto è minore di 18 lo studente dovrà ripetere sia test che compito nell’appello successivo. In altri termini, il test non viene conservato anche se ha avuto esito positivo.
- Se il voto è maggiore o uguale a 18 lo studente può decidere se concludere l’esame o sostenere anche la prova orale che è pertanto facoltativa.
- I punteggi ottenuti, sia quelli del solo test che quelli del compito, saranno comunicati tramite il portale Valutami. I punteggi visualizzati corrispondono al voto verbalizzabile ottenuto con le formule di calcolo precedentemente descritte. Non saranno pubblicati i voti dei test inferiori a 18. Lo studente potrà confermare via email la sua volontà di verbalizzare il voto oppure recarsi in aula il giorno previsto per visionare il suo compito ed eventualmente confermare di persona la verbalizzazione.
- La prova orale non è in generale necessaria per concludere l’esame. Se il voto ottenuto dopo test e compito è superiore a 27 e lo studente non vuole sostenere la prova orale, verrà verbalizzato un voto pari a 27. Per ottenere voti maggiori di 27 è necessario sostenere la prova orale.
- Se si sostenesse la prova orale, il voto finale potrebbe essere inferiore al voto ottenuto con le prove scritte. Non è escluso che il candidato possa essere respinto.
- Nella prova orale lo studente deve mostrare di conoscere perfettamente le definizioni e i teoremi in programma, le relative dimostrazioni (quelle che sono state svolte nel corso) e saper utilizzare tali teoremi per affrontare un problema di tipo teorico.
- Il docente potrà comunque richiedere lo svolgimento della prova orale nel caso lo ritenga necessario, eventualmente anche in caso lo studente intenda verbalizzare il voto derivante dal solo test o prove intermedie.
- È necessaria l’iscrizione elettronica alle prove scritte sul portale Valutami all’indirizzo https://esami.unipi.it/. Il risultato della prova scritta verrà comunicato ai singoli candidati attraverso lo stesso sito insieme alla data e al luogo per visionare il compito e sostenere la prova orale. Le soluzioni dello scritto saranno disponibili in rete su Google Classroom
- Si ricorda inoltre che per sostenere l’esame, sia scritto che orale, è necessario portare con sé un documento d’identità valido o la tessera dello studente UNIPI o il badge virtuale UNIPI. Senza nessuno di tali documenti non sarà possibile sostenere l’esame.
- Per gli studenti del vecchio regolamento (esame da 9 crediti) valgono le stesse regole, tenendo conto delle differenze nel programma d’esame.
Verifiche intermedie
- Nella prima e nell’ultima settimana di lezione del secondo semestre verranno erogate in aula due verifiche intermedie nella stessa forma del test d’esame. La prima verifica verterà sugli argomenti del primo semestre e la seconda su quelli del secondo semestre. Gli studenti che sosterranno entrambe le verifiche, con media dei punteggi maggiore o uguale a 18, saranno esentati dal test nei tre appelli estivi (maggio, giugno e luglio) e conserveranno come punteggio di test la suddetta media. Una media tra le due verifiche intermedie pari a 17.5 non dà accesso all’esenzione dai test estivi.
- È facoltà dello studente sostenere ugualmente il test in ciascuna prova d’esame. Verrà considerato il punteggio massimo tra quello del test sostenuto nell’appello corrente e la media delle due verifiche intermedie.
- Se uno studente con media delle due verifiche intermedie sufficiente consegna lo scritto, per gli appelli successivi non potrà più utilizzare la media delle verifiche intermedie al posto del test e nemmeno per la verbalizzazione senza scritto.
- Nel caso in cui la media V tra le verifiche intermedie maggiore o uguale a 18 punti, lo studente che non vuole aspettare gli appelli estivi, potrà comunicare via email al docente la volontà di verbalizzare subito l’esame con un punteggio pari a 18+(V-18)×0,4 arrotondato per eccesso.
Testi di riferimento
Gli appunti saranno a disposizione dopo ogni lezione svolta su Google Classroom a questo link:
È attiva la piattaforma EVO LEARNING per esercitarsi con esercizi tratti da compiti d'esame degli anni precedenti al seguente link: https://evo.di.unipi.it/courses/2
I testi consigliati sono i seguenti:
- ACERBI E., BUTTAZZO G.: Analisi matematica ABC. 1-Funzioni di una variabile, Pitagora Editrice, Bologna (2003).
- BUTTAZZO G., GAMBINI G., SANTI E.: Esercizi di Analisi Matematica I, Pitagora Editrice, Bologna (1991).
- AMAR M., BERSANI A.M.: Analisi Matematica 1 Esercizi e richiami di teoria, Edizioni LaDotta, Bologna (2012).
- PAGANI C.D., SALSA S.: Analisi matematica 1, Zanichelli, Bologna (2015).
- FUSCO N., MARCELLINI P., SBORDONE C. - Lezioni di analisi matematica due - Zanichelli, Bologna (2020).
- ADAMS R. - Calcolo differenziale 1 - Casa Editrice Ambrosiana (2014).
- ADAMS R. - Calcolo differenziale 2 - Casa Editrice Ambrosiana (2014).
I testi precedenti sono tutti in italiano. Per gli studenti stranieri che avessero necessità di un testo in inglese posso suggerire
- ADAMS R.A., ESSEX C. - Calculus - A complete course - Pearson Education Canada (2010).
Codice insegnamento P815014293
Gli studenti che completeranno il corso con successo avranno familiarità con spazi vettoriali, basi e indipendenza lineare, calcolo degli autovettori, diagonalizzazione, teorema spettrale. Saranno inoltre in grado di…
Scheda dell'insegnamento
Obiettivi formativi
Gli studenti che completeranno il corso con successo avranno familiarità con spazi vettoriali, basi e indipendenza lineare, calcolo degli autovettori, diagonalizzazione, teorema spettrale. Saranno inoltre in grado di risolvere semplici esercizi su questi argomenti, di dimostrare una visione intuitiva degli aspetti algebrici e geometrici, e di provare i teoremi basilari spiegati nelle lezioni.
Gli studenti che completano il corso con successo devono avere familiarità con gli spazi vettoriali, le basi e l'indipendenza lineare, calcolo degli autovettori, diagonalizzazione, teorema spettrale.
Saranno inoltre in grado di risolvere semplici esercizi su questi argomenti, di dimostrare una visione intuitiva degli aspetti algebrici e geometrici, di dimostrare i teoremi basilari spiegati nelle lezioni.
Programma
Spazi vettoriali di dimensione finita, sottospazi, indipendenza lineare e basi. Applicazioni lineari e matrici associate. Matrici inverse e soluzioni di sistemi lineari. Determinanti. Autovalori e autovettori. Prodotto scalare, teorema spettrale.
Aritmetica elementare e operazioni algebriche al livello della scuola media superiore.
Ci si attende una normale frequenza alla lezioni e ai ricevimenti dei docenti.
Durante l'esame scritto, lo studente non deve assolutamente cercare aiuti estemi, né da altre persone, né da libri o appunti o strumenti elettronici.
Spazi vettoriali di dimensione finita, sottospazi, indipendenza lineare e basi. Applicazioni lineari e matrici associate. Matrici inverse e soluzioni di sistemi lineari. Determinanti. Autovalori ed autovettori. Prodotto scalare, teorema spettrale.
Ci si attende una normale frequenza alla lezioni ed ai ricevimenti dei docenti.
Durante l'esame scritto, lo studente non deve assolutamente cercare aiuti estemi, ne' da altre persone, ne' da libri o appunti o strumenti elettonici.
Ci si attende una normale frequenza alla lezioni e ai ricevimenti dei docenti.
Durante l'esame scritto, lo studente non deve assolutamente cercare aiuti estemi, né da altre persone, né da libri o appunti o strumenti elettronici.
Modalità d'esame
L'esame scritto, che consiste essenzialmente di esercizi, certificherà la capacità di risolvere esercizi classici. L'esame orale certificherà la conoscenza della teoria e delle sue applicazioni a esempi fondamentali.
Metodi: Esame scritto finale (obbligatorio) Esame orale finale (facoltativo) L'esame scritto contiene esercizi basati su dimostrazione o su calcolo. L'esame finale include i teoremi, le definizioni e altri esercizi/applicazioni.L'esame scritto, che consiste essenzialmente di esercizi, certificherà la capacità di risolvere esercizi classici. L'esame orale certifichera' la conoscenza della teoria e delle sue applicazioni ad esempi fondamentali.
Modalita' :
- Esame finale scritto
- Esame finale orale
Inrformazioni ulteriori;
Esame finale scritto ed esame orale.
L'esame scritto contiene esercizi basati su dimostrazione o su calcolo. L'esame finale include i teoremi, le definizioni e e altri esercizi/applicazioni.
L'esame scritto, che consiste essenzialmente di esercizi, certificherà la capacità di risolvere esercizi classici. L'esame orale certificherà la conoscenza della teoria e delle sue applicazioni a esempi fondamentali.
Metodi:
Esame scritto finale (obbligatorio)
Esame orale finale (facoltativo)
L'esame scritto contiene esercizi basati su dimostrazione o su calcolo. L'esame finale include i teoremi, le definizioni e altri esercizi/applicazioni.
Testi di riferimento
- B. Martelli, Geometria e algebra lineare, disponibile legalmente online.
- Schlesinger: Algebra lineare e geometria.
- M. Abate, Algebra Lineare, McGraw-Hill.
- S. Abeasis, Elementi di Algebra Lineare e Geometria, Zanichelli.
- Prof. M. Gobbino's video lectures on http://users.dma.unipi.it/gobbino/Home_Page/AD_AL_14.html
Ovviamente non tutti questi libri/risorse sono necessari. Lo studente può scegliere di quali testi servirsi.
- B. Martelli, Geometria e algebra lineare, disponibile legalmente online.
- Schlesinger: Algebra lineare e geometria.
- M. Abate, /Algebra Lineare/, McGraw-Hill.
- S. Abeasis, /Elementi di Algebra Lineare e Geometria/, Zanichelli.
- prof. M. Gobbino's video lectures on http://users.dma.unipi.it/gobbino/Home_Page/AD_AL_14.html
Ovviamente non tutti questi libri/risorse sono necessari. Lo studente puo' scegliere.
- B. Martelli, Geometria e algebra lineare, disponibile legalmente online.
- Schlesinger: Algebra lineare e geometria.
- M. Abate, Algebra Lineare, McGraw-Hill.
- S. Abeasis, Elementi di Algebra Lineare e Geometria, Zanichelli.
- Prof. M. Gobbino's video lectures on http://users.dma.unipi.it/gobbino/Home_Page/AD_AL_14.html
Ovviamente non tutti questi libri/risorse sono necessari. Lo studente può scegliere di quali testi servirsi.
Codice insegnamento 76821
Lo studente acquisirà conoscenze sui metodi e sulle strutture fondamentali alla base dell'informatica, come relazioni, induzione numerica e strutturale, strutture discrete (grafi, alberi, liste), combinatoria, logica e…
Scheda dell'insegnamento
Obiettivi formativi
Lo studente acquisirà conoscenze sui metodi e sulle strutture fondamentali alla base dell'informatica, come relazioni, induzione numerica e strutturale, strutture discrete (grafi, alberi, liste), combinatoria, logica e linguaggi.
Il corso si pone l'obbiettivo di fornire le conoscenze di base allo studio dell'Informatica: le strutture fondamentali (come insiemi, grafi, alberi), le tecniche di specifica e dimostrazione (come ricorsione e induzione) e il linguaggio logico-matematico.
Lo studente acquisirà conoscenze sui metodi e sulle strutture fondamentali alla base dell'informatica, come relazioni, induzione numerica e strutturale, strutture discrete (grafi, alberi, liste), combinatoria, logica e linguaggi.
Programma
Il corso introduce le basi dei seguenti argomenti: Insiemi (rappresentazione, operazioni di base, leggi e tecniche di dimostrazione per proprietà su insiemi), relazioni tra due insiemi (leggi, proprietà fondamentali e caratterizzazione, composizioni, funzioni e biiezioni), induzione su naturali (definizioni di insiemi, funzioni e dimostrazioni per induzione), relazioni su un insieme (proprietà fondamentali e caratterizzazione, chiusure), grafi orientati, non-orientati e alberi (cammini, cicli, connessione e connessione forte, proprietà e dimostrazioni), combinatoria (leggi su cardinalità, permutazioni disposizioni e combinazioni, biiezioni, combinatoria su grafi), induzione strutturale (liste, alberi binari, dimostrazioni, segnature, principio di induzione strutturale, ricorsione ben fondata), automi a stati finiti (deterministici e non, linguaggi riconosciuti e limiti), grammatiche libere da contesto (forma di Backus-Naur, alberi di derivazione sintattica, ambiguità), cenni di logica matematica (calcolo proposizionale, formalizzazione, interpretazione, tavole di verità, logica dei predicati, quantificatori logici, metodi di dimostrazione, sistemi di dimostrazione).
Non è necessaria alcuna conoscenza pregressa, ma è raccomandata padronanza delle basi matematiche fornite dalla scuola secondaria.
Lo studente sviluppa abilità critica nella risoluzione di problemi e nella dimostrazione sia applicando leggi note sia utilizzando la propria creatività nel processo risolutivo e di dimostrazione. E' incoraggiato il lavoro di gruppo durante le esercitazioni in aula.
Teoria degli Insiemi: Notazione estensionale e intensionale; insiemi notevoli; inclusione e uguaglianza; operazioni su insiemi; diagrammi di Eulero-Venn; leggi sugli insiemi e dimostrazioni per sostituzione; insiemi di insiemi; prodotto Cartesiano.
Relazioni: Relazioni come sottoinsiemi; operazioni su relazioni; relazione opposta, relazione identità; composizione di relazioni e leggi; proprietà di relazioni (totale, univalente, iniettiva e surgettiva); teoremi di caratterizzazione; funzioni e biiezioni; sequenze di lunghezza fissata e di lunghezza arbitraria.
Relazioni su un insieme: Proprietà riflessiva, transitiva, simmetrica e anti-simmetrica; chiusura riflessiva, simmetrica e transitiva; relazioni di equivalenza e partizioni; relazioni di ordinamento; ordinamento lessicografico.
Grafi: Collegamento con le relazioni; grafi orientati e non; vicinato e grado dei nodi; handshaking lemma; rappresentazione grafica, con matrici e con liste di adiacenza; isomorphismo; cammini e connettività; cammini Euleriani e Hamiltoniani; alberi; grafi diretti aciclici (DAG); distanze.
Induzione e Ricorsione: Definizione di insiemi e di funzioni per induzione; principio di induzione sui naturali; induzione su stringhe, liste, alberi ed espressioni; principio di induzione strutturale; funzioni ricorsive; relazioni ben fondate e definizioni ricorsive ben date.
Calcolo Combinatorio: Cardinalità di un insieme; teorema su bigiezioni e cardinalità; cardinalità di insiemi notevoli; cardinalità dell'insieme delle funzioni, delle relazioni e delle permutazioni; principio delle buche e dei piccioni; combinazioni semplici; coefficiente binomiale; combinazioni con ripetizioni; principio di inclusione-esclusione; contare su alberi e su grafi.
Linguaggi Formali: Alfabeti, parole e linguaggi; operazioni su linguaggi; automi deterministici e non; grammatiche libere da contesto; ambiguità; relazione tra automi e grammatiche.
Cenni di Logica Matematica: Calcolo proposizionale, sintassi e semantica; tavole di verità e tautologie; formalizzazione di enunciati; leggi e dimostrazioni per sostituzione; sistemi di dimostrazione; tecniche di dimostrazione e tautologie; cenni di Logica dei predicati; quantificatori; sintassi; formalizzazione di enunciati; interpretazioni e semantica; dimostrazioni di validità di formule.
Nessuna conoscienza iniziale è richiesta.
Durante le esercitazioni gli studenti potranno sviluppare capacità di risoluzione di problemi in gruppo.
Lo studente sviluppa abilità critica nella risoluzione di problemi e nella dimostrazione sia applicando leggi note sia utilizzando la propria creatività nel processo risolutivo e di dimostrazione. E' incoraggiato il lavoro di gruppo durante le esercitazioni in aula.
Modalità d'esame
Verifica mediante esercitazioni in aula, prove in itinere, e colloquio orale in sede di esame per verificare la comprensione e la capacità di applicare gli argomenti imparati.
L'esame prevede un "pretest", tramite quiz a scelta multipla, il cui superamento consente di accedere alla prova orale, composta da domande di base su tutti gli argomenti del corso, seguite opzionalmente da domande più avanzate mirate a valutare la pardonanza dei concetti più complessi.
I test online consentiranno di verificare il livello di comprensione degli studenti degli argomenti introdotti nel corso. Gli esami scritti e orale saranno utili per verificare le capacità deduttive nella risoluzione di semplici problemi.
- Test di valutazione online bisettimanali
- Esame scritto
- Esame orale
Gli studenti che non raggiungono la sufficienza nei test di valutazione dovranno fare un test online aggiungivo prima di scritto e orale.
L'esame prevede un "pretest", tramite quiz a scelta multipla, il cui superamento consente di accedere alla prova orale, composta da domande di base su tutti gli argomenti del corso, seguite opzionalmente da domande più avanzate mirate a valutare la pardonanza dei concetti più complessi.
Testi di riferimento
Tutto il materiale di riferimento è disponibile sulla piattaforma di e-learning del corso. Include:
Dispense del corso (Fondamenti Dell'Informatica - Filippo Bonchi, Alessio Conte, Andrea Corradini,
Roberto Grossi)
Slides annotate.
Testi delle esercitazioni con soluzione.
Quiz di autovalutazione.
Dispensa del corso: Versione Settembre 2023
Attenzione: probabilmente verrà pubblicata una nuova versione prima dell'inizio del corso.
Tutto il materiale di riferimento è disponibile sulla piattaforma di e-learning del corso. Include:
Dispense del corso (Fondamenti Dell'Informatica - Filippo Bonchi, Alessio Conte, Andrea Corradini,
Roberto Grossi)
Slides annotate.
Testi delle esercitazioni con soluzione.
Quiz di autovalutazione.
Codice insegnamento 76826
Gli studenti acquisiranno una buona conoscenza dei linguaggi di programmazione Typescript e Javascript, della programmazione imperativa, funzionale e a oggetti, e dei principali strumenti di sviluppo a supporto della…
Scheda dell'insegnamento
Obiettivi formativi
Gli studenti acquisiranno una buona conoscenza dei linguaggi di programmazione Typescript e Javascript, della programmazione imperativa, funzionale e a oggetti, e dei principali strumenti di sviluppo a supporto della programmazione come debugger, sistemi di versioning, testing.
Programma
Strumenti di supporto alla programmazione, debugging e testing. Repository di software e versioning, ambienti di sviluppo. Implementazione di problemi di complessità crescente (anche collegati ad Analisi e a Fondamenti di Informatica Teorica). Prime problematiche legate alla rappresentazione dell’informazione numerica. Debugging e Testing di programmi. Implementazione di algoritmi su Alberi, Grafi, Linguaggi, Grammatiche, Dizionari e Tabelle Hash per manipolare e fare parsing di grosse quantità di dati importate da file.
NessunoLo studente sviluppa autonomia nella gestione dello sviluppo software, dimostra precisione nella stesura del codice e rispetto delle scadenze. È incoraggiata la capacità di presentare il proprio lavoro in modo efficace.
Modalità d'esame
Prove di programmazione in Typescript e Javascript
Compiti in itinere più orale. Oppure pre-test (prova pratica) più orale.
Testi di riferimento
Il materiale didattico, gli esercizi svolti e le risorse aggiuntive sono disponibili sulla piattaforma e-learning del corso.
Codice insegnamento 76829
Al termine del corso lo studente sarà in grado di: descrivere la struttura di base di un calcolatore e il ruolo di compilatori, interpreti, ambienti di sviluppo e sistemi di esecuzione; comprendere i principali costrutti…
Scheda dell'insegnamento
Obiettivi formativi
L’insegnamento introduce lo studente ai principi, agli strumenti e alle tecniche della progettazione di algoritmi e di applicazioni informatiche, acquisendo la capacità di risolvere problemi computazionali, di capire il significato dei costrutti di un linguaggio di programmazione e il loro impatto (definiti su un modello astratto di macchina) per la verifica statica e dinamica della correttezza dei programmi. Le tecniche di base per calcolare il costo computazionale degli algoritmi permettono di progettare e implementare soluzioni efficienti ai problemi computazionali, qualora possibile: la difficoltà computazionale di alcuni problemi viene illustrata attraverso la discussione di alcune classi fondamentali (P vs NP).
L’insegnamento introduce lo studente ai principi, agli strumenti e alle tecniche della progettazione di algoritmi e della programmazione di applicazioni informatiche, acquisendo la capacità di risolvere problemi computazionali. Il significato dei costrutti di un linguaggio di programmazione e il loro impatto verranno formalmente definiti su un modello astratto di macchina, per la verifica statica e dinamica della correttezza dei programmi. Le tecniche di base per calcolare il costo computazionale degli algoritmi permettono di progettare e implementare soluzioni efficienti ai problemi computazionali, qualora possibile: la difficoltà computazionale di alcuni problemi viene illustrata attraverso la discussione di alcune classi fondamentali (P vs NP).
Programma
Il programma è articolato nei seguenti macro-temi:
· struttura del calcolatore, rappresentazione dell’informazione, linguaggi di programmazione e ambienti di sviluppo;
· problemi computazionali, algoritmi, correttezza, terminazione e analisi asintotica del costo computazionale;
· stato dei programmi, espressioni, semantica operazionale e tracce di esecuzione;
· controllo del flusso, invarianti e grafi di flusso di controllo;
· problem solving algoritmico su array e matrici;
· struttura dei programmi, funzioni, passaggio dei parametri, modularità e contratti;
· ricorsione, divide et impera, algoritmi di ricerca e ordinamento;
· strutture dati dinamiche: liste, pile, code, alberi, tabelle hash e dizionari;
· tecniche greedy e programmazione dinamica;
· grafi e principali algoritmi di visita, connettività e cammini;
· generazione automatica di codice, progettazione di prompt e valutazione critica del software generato;
· workflow agentici, uso di strumenti, supervisione umana e semantica del processo GenOS;
· fondamenti di calcolabilità, classi di complessità e distinzione tra problemi trattabili e intrattabili.
NessunoAl termine dell’insegnamento lo studente avrà sviluppato la capacità di:
· affrontare i problemi di programmazione in modo metodico, esplicitando requisiti, assunzioni e criteri di correttezza;
· adottare un atteggiamento critico nei confronti di soluzioni plausibili ma non verificate, comprese quelle prodotte da sistemi di intelligenza artificiale;
· documentare in modo trasparente strumenti utilizzati, prompt, parti generate automaticamente, modifiche, test e criteri di accettazione;
· collaborare in modo costruttivo nelle attività di laboratorio, problem solving e code review;
· operare nel rispetto dei principi di responsabilità, riproducibilità e integrità accademica.
Struttura di un calcolatore e ambienti di sviluppo. Controllo delle operazioni e del flusso all’interno di un programma. Dichiarazioni, Espressioni, Comandi. Analisi Statica e Tipi. Semantica Operazionale. Analisi asintotica del costo computazionale. Problemi computazionali e algoritmi di risoluzione: problem solving su array, alberi, e grafi. Divide et impera. Ricorsione. Blocco e struttura dei programmi. Funzioni, passaggio dei parametri. Strutture di dati dinamiche: Liste. Code e pile. Tabelle hash e dizionari. Programmazione dinamica, algoritmi greedy. Cenni di calcolabilità e di classi di complessità.Fondamenti di matematica discreta, incluse sommatorie, logaritmi, serie numeriche, calcolo combinatorio, funzioni e limiti.
Logica di base. Dimostrazioni per assurdo e per induzione.
Gli studenti saranno in grado di valutare le performance di algoritmi di base prima della loro implementazione, di progettare algoritmi efficienti per la risoluzione di problemi, e di conoscere problemi difficili per cui le scelte algoritmiche di progetto possono influenzare pesantemente il risultato.
Struttura di un calcolatore e ambienti di sviluppo.
Analisi asintotica del costo computazionale.
Problemi computazionali e algoritmi di risoluzione.
Controllo delle operazioni e del flusso all’interno di un programma.
Problem solving su array.
Blocco e struttura dei programmi. Funzioni, passaggio dei parametri.
Ricorsione. Divide et impera.
Algoritmi per ordinamento e ricerca.
Strutture di dati dinamiche. Liste. Code e pile.
Alberi, Alberi Binari, Alberi Binari di Ricerca.
Problem solving su alberi.
Tabelle hash e dizionari.
Programmazione dinamica, algoritmi greedy.
Problem Solving su grafi.
Cenni di calcolabilità e di classi di complessità.
Fondamenti di matematica discreta, incluse sommatorie, logaritmi, serie numeriche, calcolo combinatorio, funzioni e limiti.
Modalità d'esame
Le capacità saranno verificate mediante esercizi di progettazione e implementazione di algoritmi, utilizzo di strutture dati, analisi di complessità, debugging, costruzione di tracce di esecuzione e grafi di flusso di controllo, nonché mediante attività di valutazione e correzione di codice generato con il supporto dell’intelligenza artificiale.
Le prove richiederanno di produrre soluzioni, giustificarne le scelte progettuali, verificarne la correttezza e discuterne efficienza, robustezza e aderenza alla specifica. Le attività potranno essere svolte nelle esercitazioni, nelle prove intermedie e nell’esame finale.
Iscrizione L’iscrizione all’esame deve essere effettuata tramite il portale esami.unipi.it, esclusivamente per l’appello in cui si intende sostenere la prova orale, anche nel caso in cui siano state superate le verifiche in itinere. Si prega di compilare il questionario per le opinioni degli studenti. Struttura dell’esame L’esame finale è costituito da una prova scritta e da una prova orale opzionale e lo studente può richiederlo solo avendo superato la soglia di 24/30 nella prova scritta. Durante le lezioni sono previste prove in itinere che, a giudizio del docente, possono consentire l’esonero dello studente dalla prova scritta e l'eventuale accesso diretto alla prova orale qualora sia superata la soglia sopra riportata. Tale esonero è valido esclusivamente per la sessione estiva; nelle sessioni successive tutti gli studenti sono tenuti a sostenere la prova scritta. A tutte le prove di esame è obbligatorio presentarsi con un documento di riconoscimento valido con fotografia. Prova scritta La prova scritta è divisa in due parti. La prima parte è composta da diverse domande teoriche aperte e chiuse su definizioni e concetti fondamentali trattati durante l’insegnamento. Non è consentita la consultazione di alcun materiale in forma scritta o elettronica. Il superamento della prima parte permette di sostenere la seconda parte, che consiste in esercizi analoghi a quelli svolti durante le lezioni e le esercitazioni. In questa parte è consentita la consultazione del proprio materiale, purché esclusivamente in formato cartaceo. In ogni caso non è consentita alcuna forma di scambio o condivisione di materiali, né in formato cartaceo né digitale. Comportamenti quali comunicare con altri studenti, scambiare o consultare fogli non propri, utilizzare dispositivi elettronici come telefoni, smartwatch, tablet o computer, oppure consultare il compito altrui, comportano l’annullamento della prova. In generale, la consegna di una prova scritta comporta l’annullamento di eventuali risultati acquisiti tramite prove precedenti. Prova orale La prova orale si svolge senza possibilità di consultare materiale didattico ed è basata sul syllabus in allegato. È articolata in tre fasi progressive, al termine delle quali viene determinato il voto finale. Nella prima fase, si valuta la prima parte della prova scritta, come indicato sopra. Qualora le risposte non siano ritenute adeguate, si consiglia allo studente di ripetere l’esame. In caso contrario, il docente può proporre un voto fino a 24/30 oppure decidere di proseguire con la fase successiva. Nella seconda fase vengono poste domande più approfondite sugli argomenti dell’insegnamento, con particolare attenzione alle proprietà degli algoritmi, alle metodologie illustrate a lezione e alle strategie di problem solving. Sulla base delle risposte fornite, il docente può proporre un voto fino a 26/30 oppure proseguire con la fase successiva. Nella terza fase vengono affrontati argomenti più avanzati, che possono includere enunciati di teoremi con relative dimostrazioni oppure la risoluzione di problemi nuovi sui contenuti visti a lezione. La valutazione finale tiene conto dell’intero svolgimento della prova orale e può raggiungere il massimo di 30/30. Le prove orali possono anche comportare la riduzione del voto ottenuto nella prova scritta. In caso di esito negativo della prova orale, le prove in itinere sono invalidate.Esame scritto e orale
Esame Scritto che, se superato, da' accesso ad un successivo esame orale.
Testi di riferimento
Il materiale didattico comprende slide, dispense, esercizi, esempi di codice, tracce di laboratorio, casi di studio, test e documentazione tecnica messi a disposizione dal docente sulla piattaforma e-learning del corso.
Cormen, C. Leiserson, R. Rivest, C. Stein. Introduction to Algorithms. MIT Press.
Additional material will be made available on the Classroom.
Codice insegnamento 76834
Lo studente acquisirà conoscenze relative ai fondamenti scientifici e tecnologici delle Architetture dei Sistemi di Elaborazione e dei Sistemi Operativi moderni. Relativamente alle Architetture, verranno presentate le…
Scheda dell'insegnamento
Obiettivi formativi
Lo studente acquisirà conoscenze relative ai fondamenti scientifici e tecnologici delle Architetture dei Sistemi di Elaborazione e dei Sistemi Operativi moderni. Relativamente alle Architetture, verranno presentate le caratteristiche dei diversi livelli dei sistemi, le loro relazioni con gli strumenti di programmazione e la strutturazione dei sistemi in termini di moduli concorrenti e cooperanti. Relativamente ai Sistemi Operativi, verranno presentati i servizi offerti dai sistemi e gli algoritmi e le tecniche utilizzate nella loro implementazione. Lo studente, acquisirà inoltre i concetti e le metodologie della programmazione concorrente con threads e processi e di sistema utilizzando il linguaggio C.
Programma
Durante il corso verranno affrontati i seguenti argomenti:
- fondamenti dei sistemi di elaborazione
- linguaggi per la descrizione dell’hardware
- assembler
- micro architettura di base
- performance dei processori
- gerarchie di memoria
- parallelismo a livello di istruzione (ILP) e cenni ai sistemi multicore
- fondamenti dei sistemi operativi
- tecniche per il coordinamento e la gestione di risorse
- tecniche e metodologie per la programmazione di sistema
- meccanismi di sincronizzazione
- meccanismi di astrazione e strutturazione a livelli
- gestione dell’IO
- gestione della memoria
- chiamate di sistema (POSIX), (p)thread
- gestione del file system
- schedulazione
- esempi di implementazione dal mondo Unix e Windows
Buona conoscenza della programmazione con linguaggi imperativi. Saper valutare la complessità degli algoritmi. Nozioni di base di analisi matematica.
Il corso non si pone obiettivi di apprendimento in termini di comportamenti attesi.
Durante il corso verranno affrontati i seguenti argomenti: fondamenti dei sistemi di elaborazione linguaggi per la descrizione dell’hardware assembler micro architettura di base performance dei processori gerarchie di memoria parallelismo a livello di istruzione (ILP) e cenni ai sistemi multicore fondamenti dei sistemi operativi tecniche per il coordinamento e la gestione di risorse tecniche e metodologie per la programmazione di sistema meccanismi di sincronizzazione meccanismi di astrazione e strutturazione a livelli gestione dell’IO gestione della memoria chiamate di sistema (POSIX), (p)thread gestione del file system schedulazione esempi di implementazione dal mondo Unix e WindowsModalità d'esame
Le capacità acquisite dallo studente verranno verificate tramite:
- Home work con auto valutazione
- Prove di verifica intermedia
- Prova finale scritta e prova orale
La valutazione dello studente avverrà tramite una prova scritta ed una prova orale con i docenti.
Durante il corso si svolgeranno, alcune prove scritte di verifica intermedia. Lo studente che ottiene un voto sufficiente alle prove di verifica intermedia è esentato dallo svolgimento della prova scritta, e dovrà sostenere solo la prova orale in uno degli appelli dello stesso anno accademico.
La validità del voto conseguito con le prove di verifica intermedia cessa al termine dell’anno accademico. Ogni prova di verifica intermedia consiste nello svolgimento di alcuni esercizi riguardanti gli argomenti trattati nel corso fino a quel momento.
Si fa presente che per l’ammissione a tutte le prove d’esame, incluse le prove di verifica intermedia, è obbligatoria l’iscrizione secondo le modalità stabilite dal corso di laurea.
Le capacità acquisite dallo studente verranno verificate tramite:
- Home work con auto valutazione
- Prove di verifica intermedia
- Prova finale scritta e prova orale
La valutazione dello studente avverrà tramite una prova scritta ed una prova orale con i docenti.
Durante il corso si svolgeranno, alcune prove scritte di verifica intermedia. Lo studente che ottiene un voto sufficiente alle prove di verifica intermedia è esentato dallo svolgimento della prova scritta, e dovrà sostenere solo la prova orale in uno degli appelli dello stesso anno accademico.
La validità del voto conseguito con le prove di verifica intermedia cessa al termine dell’anno accademico. Ogni prova di verifica intermedia consiste nello svolgimento di alcuni esercizi riguardanti gli argomenti trattati nel corso fino a quel momento.
Si fa presente che per l’ammissione a tutte le prove d’esame, incluse le prove di verifica intermedia, è obbligatoria l’iscrizione secondo le modalità stabilite dal corso di laurea.
Testi di riferimento
- S. Harris, D. Harris, “Digital design and computer architecture: ARM edition”, Morgan Kaufmann 2017. Anche in versione italiana pubblicata da Zanichelli
- T. Anderson, M. Dahlin : "Operating Systems: principles and practice", Recursive Books Ltd, 2013 (disponibile solo in Inglese)
- Materiale didattico fornito durante le lezioni (slides, appunti, esercizi) e condiviso sulla piattaforma Google Classroom del corso (codice egnaewr4).
pletata
- S. Harris, D. Harris, “Digital design and computer architecture: ARM edition”, Morgan Kaufmann 2017. Anche in versione italiana pubblicata da Zanichelli
- T. Anderson, M. Dahlin : "Operating Systems: principles and practice", Recursive Books Ltd, 2013 (disponibile solo in Inglese)
- Materiale didattico fornito durante le lezioni (slides, appunti, esercizi) e condiviso sulla piattaforma Microsoft Teams del corso.
Codice insegnamento 76823
Apprendimento delle tecniche e degli strumenti per la risoluzione numerica di problemi che scaturiscono nelle applicazioni della matematica. L'enfasi è posta sull'analisi degli aspetti computazionali, quali il…
Scheda dell'insegnamento
Obiettivi formativi
Apprendimento delle tecniche e degli strumenti per la risoluzione numerica di problemi che scaturiscono nelle applicazioni della matematica. L'enfasi è posta sull'analisi degli aspetti computazionali, quali il condizionamento dei problemi esaminati, la stabilità e la complessità dei metodi proposti. Con l'ausilio dello strumento di calcolo MATLAB, si introduce lo studente all'analisi sperimentale degli algoritmi e alla validazione dei risultati.
Programma
- Rappresentazione dei numeri in base, aritmetica di macchina, generazione degli errori. Errore inerente ed algoritmico nel calcolo di una funzione razionale, studio dell'errore algoritmico mediante l'uso di grafi. Introduzione al sofware numerico.
- Richiami di algebra lineare. Norme vettoriali. Norme matriciali, norma 1,2, ``inf''. Localizzazione degli autovalori di una matrice: il teorema di Gershgorin.
- Risoluzione numerica di sistemi lineari. Condizionamento del problema. Sistemi lineari con matrice triangolare. Matrici elementari di Gauss. Il metodo di fattorizzazione LU. Il metodo di eliminazione di Gauss. Tecniche di pivoting. Metodi iterativi per sistemi lineari: generalita' ed analisi della convergenza. Il metodo di Jacobi e di Gauss--Seidel; condizioni sufficienti per la convergenza.
- Minimi quadrati lineari (equazioni normali e se c'e' tempo risoluzione con fattorizazione QR)
- Calcolo di autovalori ed autovettori: il metodo delle potenze.
- Risoluzione numerica di equazioni non lineari. Il metodo di bisezione. Metodi di iterazione funzionale: il teorema del punto fisso. Metodo delle tangenti. Polinomi algebrici: condizionamento del calcolo di uno zero semplice, matrice companion.
- Interpolazione polinomiale. Esistenza ed unicita`del polinomio di interpolazione. Forma di Lagrange del polinomio di interpolazione. Resto dell'interpolazione polinomiale.
Nozioni di base dell' algebra lineare e dell'analisi matematica in una variabile reale.
Lo studente potrà acquisire e/o sviluppare sensibilità alle problematiche computazionali e numeriche che sorgono nella risoluzione di problemi individuando approcci risolutivi che integrano conoscenze matematiche ed informatiche.
Modalità d'esame
L’esame è composto da una prova scritta e una prova orale.
La prova scritta verifica conoscenze teoriche di base e capacità di risolvere esercizi.
L’esame continua con una prova orale su esercizi, definizioni e/o dimostrazioni.
Le prova scritta sono finalizzate a valutare sia la comprensione da parte dello studente degli aspetti teorici dell disciplina e che la sensibilità acquisita dallo studente in merito agli aspetti computazionali e implementativi che sorgono nella risoluzione numerica di problemi matematici. La prova orale richiede allo studente un'analisi delle proprietà teoriche dei metodi utilizzati.Testi di riferimento
F. Poloni. Dispense disponibili su https://github.com/fph/note-calcolo-numerico/releases/download/latest/notes-inf.pdf
R. Bevilacqua, O. Menchi. Appunti di Calcolo Numerico. Dispensa.
L. Gemignani. Dispense
Codice insegnamento P521793095
Lo studente acquisirà conoscenze relativi alla programmazione di sistema in C, programmazione concorrente, utilizzo di Makefile, linguaggi di scripting, programmazione in Java, programmazione in assembler ARM. Lo…
Scheda dell'insegnamento
Obiettivi formativi
Lo studente acquisirà conoscenze relativi alla programmazione di sistema in C, programmazione concorrente, utilizzo di Makefile, linguaggi di scripting, programmazione in Java, programmazione in assembler ARM.
Lo studente acquisirà conoscenze relativi a: programmazione di sistema in C, programmazione concorrente, utilizzo di Makefile, linguaggi di scripting, programmazione in Java, programmazione in assembler ARM.
Programma
Programmazione sequenziale in C, incluso utilizzo di puntatori, stringhe, librerie standard I/O.
Programmazione in C utilizzando chiamate di sistema.
Debugging con GDB e controllo accessi alla memoria con valgrind.
Utilizzo di Makefile.
Programmazione concorrente in C utilizzando processi e thread.
Comunicazione e sincronizazzione tra processi e thread.
Programmazione in Assembler ARM.
Scripting in Python.
Applicazioni, esempi e collegamenti con altri corsi del secondo anno.
Buona conoscenza di almeno un linguaggio di programmazione imperativo.
Conoscenza delle strutture dati elementari: array e liste (ordinati), pile, stack, alberi, tabelle hash.
Conoscenza dei comandi base della shell Linux/Unix
Al termine del corso gli studenti dovrebbero essere in grado di svolgere in maniera efficiente compiti complessi utilizzando anche programmi concorrenti.
Buona conoscenza di almeno un linguaggio di programmazione imperativo.
Conoscenza delle strutture dati elementari: array e liste (ordinati), pile, stack, alberi, tabelle hash.
Conoscenza dei comandi principali delle shell Linux/Unix
Al termine del corso gli studenti dovrebbero essere in grado di svolgere in maniera efficiente compiti complessi utilizzando anche programmi concorrenti
Modalità d'esame
Compiti di programmazione in classe e a casa, progetto finale.
L'esame si svolgerà con una delle due seguenti modalità:
- Verifiche intermedie durante l'anno, tramite compiti di programmazione a casa e in classe, progetto finale ridotto, orale.
- Per gli studenti che non hanno passato le verifiche intermedie: progetto finale completo, orale.
L'esame si svolgerà con una delle due seguenti modalità:
- Verifiche intermedie durante l'anno, tramite compiti di programmazione a casa e in classe, progetto finale ridotto, orale.
- Per gli studenti che non hanno passato le verifiche intermedie: progetto finale completo, orale.
Testi di riferimento
P. Deitel, H. Deitel. Il linguaggio C. Fondamenti e tecniche di programmazione. Ed. Mylab. Pearson.
Marc J. Rochkind. Advanced UNIX Programming 2nd Edition, Addison-Wesley Professional Computing Series.
Jens Gustedt. Modern C
Brian "Beej" Hall. Beej's Guide to C Programming
Dispense online fornite dai docenti
P. Deitel, H. Deitel. Il linguaggio C. Fondamenti e tecniche di programmazione. Ed. Mylab. Pearson.
Marc J. Rochkind. Advanced UNIX Programming 2nd Edition, Addison-Wesley Professional Computing Series.
Dispense online fornite dai docenti.
Codice insegnamento 76830
Imparare i principi alla base dei principali paradigmi di programmazione (funzionale, object-oriented e concorrente) e del funzionamento dei linguaggi di programmazione moderni. Imparare i principi alla base dei…
Scheda dell'insegnamento
Obiettivi formativi
Imparare i principi alla base dei principali paradigmi di programmazione (funzionale, object-oriented e concorrente) e del funzionamento dei linguaggi di programmazione moderni.
Imparare i principi alla base dei principali paradigmi di programmazione (funzionale, object-oriented e concorrente) e del funzionamento dei linguaggi di programmazione moderni.Programma
- Paradigma di programmazione funzionale
L’essenza: il λ-calcolo; Il linguaggio OCaml; Formalizzazione di un linguaggio funzionale; Implementazione in OCaml di un interprete del linguaggio funzionale; Sistemi di tipi nei linguaggi funzionali;
- Paradigma di programmazione object-oriented
L’astrazione dei dati e gli oggetti; Modularità, incapsulamento, ereditarietà, principio di sostituzione, e class-based vs object-based; Formalizzazione di linguaggi object-oriented; Sistemi di tipi nei linguaggi object-oriented; Tecniche di implementazione di linguaggi class-based (es. Java Virtual Machine); Garbage-collection.
- Paradigma di programmazione concorrente
Concetti di base: esecuzione non sequenziale; Formalizzazione di un modello di concorrenza; Costrutti di programmazione concorrente nei linguaggi moderni
- Elementi di linguaggi formali, semantica e programmazione visti nei corsi del primo anno
- Linguaggio JavaScript
Programmare in modo consapevole, avendo cognizione di cosa accade al programma in fase di compilazione ed esecuzione.
Paradigma di programmazione funzionale
- λ-calcolo
- Linguaggio OCaml (nucleo funzionale)
- Formalizzazione di un linguaggio funzionale
- Implementazione in OCaml di un interprete del linguaggio funzionale
- Sistemi di tipi nei linguaggi funzionali
Paradigma di programmazione object-oriented
- Astrazione dei dati e gli oggetti
- Modularità, incapsulamento, ereditarietà, principio di sostituzione
- Linguaggi class-based vs object-based
- Formalizzazione di linguaggi object-oriented
- Sistemi di tipi nei linguaggi object-oriented
- Tecniche di implementazione di linguaggi class-based (ad es. Java Virtual Machine)
- Garbage-collection
Paradigma di programmazione concorrente
- Concetti di base: esecuzione non sequenziale
- Formalizzazione di un modello di concorrenza
- Costrutti di programmazione concorrente nei linguaggi moderni
- Elementi di linguaggi formali, semantica e programmazione visti nei corsi del primo anno
- Linguaggio JavaScript
Programmare con piena consapevolezza di ciò che accade al programma in fase di compilazione ed esecuzione.
Modalità d'esame
Esercitazioni durante il corso ed esame finale
Scritto e orale
Esercitazioni durante il corso ed esame finale. Scritto e oraleTesti di riferimento
Materiale didattico:
- Slides e dispense fornite dal docente
- Jupyter notebooks in OCaml
- Registrazione delle lezioni
Libri di testo consigliati (per approfondimenti):
- Real World OCaml ( https://dev.realworldocaml.org/ )
- Peter Sestoft, Programming Language Concepts
- Maurizio Gabrielli e Simone Martini, Linguaggi di programmazione
Materiale didattico
- Slides e dispense fornite dal docente
- Jupyter notebooks in OCaml
- Registrazione delle lezioni
Libri di testo consigliati (per approfondimenti)
- Real World OCaml ( https://dev.realworldocaml.org/ )
- Peter Sestoft, Programming Language Concepts
- Maurizio Gabrielli e Simone Martini, Linguaggi di programmazione
Codice insegnamento 76832
Il corso presenta gli strumenti necessari alla costruzione e alla risoluzione di modelli analitici di ottimizzazione per problemi di gestione ed allocazione delle risorse, con applicaizioni in moltissimi campi della…
Scheda dell'insegnamento
Obiettivi formativi
Il corso presenta gli strumenti necessari alla costruzione e alla risoluzione di modelli analitici di ottimizzazione per problemi di gestione ed allocazione delle risorse, con applicaizioni in moltissimi campi della scienza e dell'ingegneria ed attività economiche (logistica, trasporti, telecomunicazioni, finanza, energia, salute, ...). Verrà innanzi tutto introdotto il concetto di modellazione matematica per due classi particolarmente rilevanti di problemi di ottimizzazione, la Programmazione Lineare e la Programmazione Lineare Intera, mostrando come sia possibile attraverso di esse costruire modelli di moltissime situazioni reali (o realistiche, o anche completamente immaginarie). Verranno poi illustrate le proprietà teoriche ed alcune delle principali tecniche algoritmiche per la soluzione di tre grandi classi di problemi di ottimizzazione: problemi di flusso su reti, di programmazione lineare e di programmazione lineare intera.
Il corso presenta gli strumenti necessari alla costruzione e alla risoluzione di modelli analitici di ottimizzazione per problemi di gestione ed allocazione delle risorse, con applicaizioni in moltissimi campi della scienza e dell'ingegneria ed attività economiche (logistica, trasporti, telecomunicazioni, finanza, energia, salute, ...). Verrà innanzi tutto introdotto il concetto di modellazione matematica per due classi particolarmente rilevanti di problemi di ottimizzazione, la Programmazione Lineare e la Programmazione Lineare Intera, mostrando come sia possibile attraverso di esse costruire modelli di moltissime situazioni reali (o realistiche, o anche completamente immaginarie). Verranno poi illustrate le proprietà teoriche ed alcune delle principali tecniche algoritmiche per la soluzione di tre grandi classi di problemi di ottimizzazione: problemi di flusso su reti, di programmazione lineare e di programmazione lineare intera.
Programma
Introduzione (2 ore)
- Problemi decisionali e problemi di ottimizzazione
- Classi di problemi ed esempi
Modelli e loro formulazione (6 ore)
- Tipi di variabili: quantitative, logiche, continue, discrete
- Formulazione di vincoli
- Formulazione della funzione obiettivo
Grafi e Reti di flusso (16 ore)
- Modello generale dei problemi di flusso
- Alberi, cammini e tagli, visite di grafi e alberi
- Il problema dei cammini minimi
- Il problema del flusso massimo
- Il problema del flusso di costo minimo
- Il problema dell'albero di copertura di costo minimo
Programmazione Lineare (16 ore)
- Geometria della programmazione lineare e teorema fondamentale
- Dualità e scarti complementari
- Basi: complementarità, degenericità ed ottimalità
- Algoritmi del simplesso primale e duale
Programmazione Lineare Intera (8 ore)
- Metodi enumerativi: l'algoritmo "Branch&Bound"
- Implementazioni ad-hoc per i problemi dello zaino e del commesso viaggiatore
- (Metodi poliedrali: algoritmo dei tagli di Chvátal/Gomory)
- Logica elementare: connettivi logici, proposizioni, principio di induzione, metodi di dimostrazione
- Spazi vettoriali: spazi, semispazi, vettori, combinazioni lineari, indipendenza lineare, basi, coordinate
- Geometria del piano e dello spazio tridimensionale: sottospazi affini, equazione di rette, piani e semispazi
- Prodotto scalare euclideo, ortogonalità
- Matrici: operazioni con le matrici, determinante, invertibilità
- Concetto di funzione, funzioni lineari (ed affini)
- Sistemi lineari di equazioni e loro risoluzione
- Cosa è un algoritmo
- Complessità di un algoritmo
- Classi P e NP
- Strutture dati: fila, pila, deque, code di priorità, heap
- Grafi: nodi, archi, alberi, cammini, cicli
- Grafi: rappresentazione e visite (DFS e BFS)
- Alberi: rappresentazioni e visite
- Ricerca dei punti di massimo e minimo di funzioni di una variabile
Lo studente potrà sviluppare capacità critiche, sia a livello modellistico che algoritmico, per affrontare problemi di ottimizzazione del mondo reale (o realistici, o anche del tutto immaginari), che risulteranno rilevanti in svariati ambiti lavorativi, sia a livello progettuale che implementativo.
Introduzione (2 ore)
- Problemi decisionali e problemi di ottimizzazione
- Classi di problemi ed esempi
Modelli e loro formulazione (6 ore)
- Tipi di variabili: quantitative, logiche, continue, discrete
- Formulazione di vincoli
- Formulazione della funzione obiettivo
Grafi e Reti di flusso (16 ore)
- Modello generale dei problemi di flusso
- Alberi, cammini e tagli, visite di grafi e alberi
- Il problema dei cammini minimi
- Il problema del flusso massimo
- Il problema del flusso di costo minimo
- Il problema dell'albero di copertura di costo minimo
Programmazione Lineare (16 ore)
- Geometria della programmazione lineare e teorema fondamentale
- Dualità e scarti complementari
- Basi: complementarità, degenericità ed ottimalità
- Algoritmi del simplesso primale e duale
Programmazione Lineare Intera (8 ore)
- (Metodi poliedrali: algoritmo dei tagli di Chvátal/Gomory)
- Metodi enumerativi: l'algoritmo "Branch&Bound"
- Implementazioni ad-hoc per i problemi dello zaino e del commesso viaggiatore
- Logica elementare: connettivi logici, proposizioni, principio di induzione, metodi di dimostrazione
- Spazi vettoriali: spazi, semispazi, vettori, combinazioni lineari, indipendenza lineare, basi, coordinate
- Geometria del piano e dello spazio tridimensionale: sottospazi affini, equazione di rette, piani e semispazi
- Prodotto scalare euclideo, ortogonalità
- Matrici: operazioni con le matrici, determinante, invertibilità
- Concetto di funzione, funzioni lineari (ed affini)
- Sistemi lineari di equazioni e loro risoluzione
- Cosa è un algoritmo
- Complessità di un algoritmo
- Classi P e NP
- Strutture dati: fila, pila, deque, code di priorità, heap
- Grafi: nodi, archi, alberi, cammini, cicli
- Grafi: rappresentazione e visite (DFS e BFS)
- Alberi: rappresentazioni e visite
- Ricerca dei punti di massimo e minimo di funzioni di una variabile
Modalità d'esame
Le capacità di modellazione che quelle di analisi e sviuppo di algoritmi saranno verificate sia attraverso l'esame scritto che attraverso l'esame orale.
Esame scritto seguito da prova orale. Sono previste verifiche intermedie che sostituiscono l'esame scritto.
Le capacità di modellazione che quelle di analisi e sviuppo di algoritmi saranno verificate sia attraverso l'esame scritto che attraverso l'esame orale.
Testi di riferimento
Testi di base: Appunti di Ricerca Operativa e slide rilasciati dai docenti.
Altro possibile materiale didattico:
- Jon Lee A First Course in Linear Optimization Reex Press, 2013
- Fabio Schoen Optimization Models, free e-book version, 2022
- D. Simchi-Levi, X. Chen and J. Bramel Logic of Logistics: Theory, algorithms, and applications for logistics and supply chain Springer-Verlag, 2004
- M.S.Bazaraa, J.J.Jarvis, H.D.Sherali Linear programming and network flows John Wiley & Sons
- L.A. Wolsey Integer programming John Wiley & Sons
- G. Ghiani, R. Musmanno Modelli e Metodi per l'Organizzazione dei Sistemi Logistici Pitagora, 2000
- R.K. Ahuja, T.L. Magnanti, J. Orlin Network flows. Theory, algorithms and applications Prentice Hall, 1993
- F.S. Hillier, G.J. Lieberman Ricerca Operativa - Fondamenti McGraw-Hill, 2010
- C. Vercellis Ottimizzazione. Teoria, metodi, applicazioni McGraw Hill, 2008
Alcune utili risorse web (software):
- The Computational Infrastructure for Operations Research (COIN-OR)
- The SMS++ Structured Modelling System
- The SCIP (Solver Constraint Integer Programs) solver
- The IBM/ILOG CPLEX solver
- The Gurobi solver
- The Mosek solver
- The Pyomo python modelling system
- The PuLP python modelling system
- The JuMP Julia modelling system
- The YALMIP Matlab modelling system
- The MCFClass project
Testi di base: Appunti di Ricerca Operativa rilasciati dai docenti.
Altro possibile materiale didattico:
- Jon Lee A First Course in Linear Optimization Reex Press, 2013
- Fabio Schoen Optimization Models, free e-book version, 2022
- D. Simchi-Levi, X. Chen and J. Bramel Logic of Logistics: Theory, algorithms, and applications for logistics and supply chain Springer-Verlag, 2004
- M.S.Bazaraa, J.J.Jarvis, H.D.Sherali Linear programming and network flows John Wiley & Sons
- L.A. Wolsey Integer programming John Wiley & Sons
- G. Ghiani, R. Musmanno Modelli e Metodi per l'Organizzazione dei Sistemi Logistici Pitagora, 2000
- R.K. Ahuja, T.L. Magnanti, J. Orlin Network flows. Theory, algorithms and applications Prentice Hall, 1993
- F.S. Hillier, G.J. Lieberman Ricerca Operativa - Fondamenti McGraw-Hill, 2010
- C. Vercellis Ottimizzazione. Teoria, metodi, applicazioni McGraw Hill, 2008
Alcune utili risorse web (software):
- The Computational Infrastructure for Operations Research (COIN-OR)
- The SMS++ Structured Modelling System
- The SCIP (Solver Constraint Integer Programs) solver
- The IBM/ILOG CPLEX solver
- The Gurobi solver
- The Mosek solver
- The Pyomo python modelling system
- The PuLP python modelling system
- The JuMP Julia modelling system
- The YALMIP Matlab modelling system
- The MCFClass project
Codice insegnamento P775559331
Illustare i concetti di base e le principali proprietà (con dimostrazione se previsto) di statistica descrittiva, probabilità e inferenza statistica
Scheda dell'insegnamento
Obiettivi formativi
Illustare i concetti di base e le principali proprietà (con dimostrazione se previsto) di statistica descrittiva, probabilità e inferenza statistica
Programma
Nozioni di Statistica Descrittiva: dati numerici singoli e multipli e grandezze che li descrivono.
Probabilità e Variabili Aleatorie: probabilità condizionata e indipendenza, variabili aleatorie discrete e con densità, valori attesi e momenti, le principali distribuzioni di probabilità dell'inferenza statistica, Legge dei Grandi Numeri e Teorema Limite Centrale.
Inferenza Statistica: modelli statistici e stima dei parametri, intervalli di fiducia e test statistici, i principali test statistici sulle Variabili Gaussiane.
Il contenuto del corso di Analisi del primo anno, nozioni di Algebra Lineare.
Impostare ragionamenti critici e rigorosi sui problemi di ambito probabilistico e statistico
Modalità d'esame
Esame finale.
L'esame consiste in una prova scritta (che prevede sia parti di teoria sia di esercizi) seguita da un colloquio orale.
Testi di riferimento
Appunti scritti dai docenti sui contenuti del corso, con esercizi.
S. Ross "Probabilità e Statistica per l'Ingegneria e le Scienze" Apogeo
Codice insegnamento 76837
Il corso tratterà i seguenti argomenti, che corrispondono grosso modo ai capitoli da 3 a 14 del libro: "A Concrete Introduction to Higher Algebra" di Lindsay Childs. Algoritmo di Euclide Fattorizzazione unica…
Scheda dell'insegnamento
Obiettivi formativi
Il corso tratterà i seguenti argomenti, che corrispondono grosso modo ai capitoli da 3 a 14 del libro: "A Concrete Introduction to Higher Algebra" di Lindsay Childs.
- Algoritmo di Euclide
- Fattorizzazione unica
- Congruenza
- Classi di congruenza
- Anelli e campi
- Matrici e codici
- Teoremi di Fermat e di Eulero.
- Applicazioni del teorema di Eulero
- Gruppi
- Il teorema del resto cinese
- Polinomi
- Fattorizzazione unica
Programma
Numeri interi: divisione euclidea, divisibilità, massimo comun divisore e minimo comune multiplo, algoritmo di Euclide. Numeri primi e teorema di fattorizzazione unica. Piccolo teorema di Fermat e funzione di Eulero. Congruenze. Teorema cinese del resto. Relazioni di equivalenza e insiemi quoziente. Sottogruppi dei gruppi ciclici. Omomorfismi di gruppi. Sottogruppi normali e gruppo quoziente. Anelli, campi ed estensioni di campi. Polinomi a coefficienti razionali, reali e complessi, e nei campi con un numero primo di elementi. Proprieta' del grado e divisione euclidea.
Conoscenza degli elementi di base dell'algebra lineare, della logica matematica e della teoria degli insiemi.
È fortemente consigliato seguire le lezioni e svolgere gli esercizi proposti.
Modalità d'esame
Esame orale.
Testi di riferimento
L. Childs, Algebra, un'introduzione concreta, ETS Editrice.
Appunti del corso.
Codice insegnamento 76820
Conoscenze fondamentali della meccanica classica e degli strumenti matematici essenziali.
Scheda dell'insegnamento
Obiettivi formativi
Conoscenze fondamentali della meccanica classica e degli strumenti matematici essenziali.
Programma
Scopo e limitazioni della descrizione meccanica dei fenomeni fisici. Meccanica del punto materiale e leggi di Newton: gradi di libertà, coordinate, forze, quantità di moto, momento angolare, energia e lavoro. Leggi di conservazione. Meccanica dei sistemi di punti materiali ed equazioni cardinali. Meccanica del corpo rigido.
Nozioni base di algebra, calcolo, geometria e programmazione, come previsto dal Piano di Studio.
Atteggiamento critico verso i problemi e approccio rigorosamente quantitativo.
Modalità d'esame
Prove scritte con esercizi di modellizzazione matematica e calcolo e domande orali sulle strutture concettuali.
L'esame consiste in una prova scritta / informatizzata ed in una prova orale. La prova scritta consiste nell'applicazione di definizioni e leggi discussi nel corso e nella soluzione di problemi non necessariamente già discussi nel corso. Durante la prova orale allo studente si chiede di: (i) enunciare / dimostrare principi e leggi della meccanica; (ii) modellizzare matematicamente un sistema fisico e descrivere in dettaglio le procedure matematiche necessarie a calcolare le leggi orarie o altre proprietà meccaniche del sistema; (iii) risolvere esplicitamente alcune delle equazioni ottenute. Dettagli sulle procedure d'esame e sulle eventuali prove in itinere verranno dati dai docenti durante il corso.
Testi di riferimento
Testi universitari di meccanica, scelti dallo studente con indicazioni del docente.
Codice insegnamento P878721650
Lo studente che completerà con successo il corso: avrà la possibilità di utilizzare moderni strumenti e ambienti per l'analisi, la progettazione e la verifica dei sistemi software; sarà in grado di dimostrare una…
Scheda dell'insegnamento
Scheda dell'a.a. 2025/2026: quella dell'anno in corso non è ancora pubblicata.
Obiettivi formativi
Lo studente che completerà con successo il corso:
- avrà la possibilità di utilizzare moderni strumenti e ambienti per l'analisi, la progettazione e la verifica dei sistemi software;
- sarà in grado di dimostrare una solida conoscenza di molte tecniche di modellazione ampiamente utilizzate nello sviluppo del software;
- avrà le competenze per iniziare a lavorare in un ambiente cooperativo.
Programma
- Introduzione al corso e motivazioni per il resto: discutiamo i problemi che si verificano nella produzione del software e nei modelli di ciclo di vita.
- modelli di ciclo di vita del sw, modelli tradizionali e agili (scrum, XP)
- Analisi dei requisiti
- Introduzione a UML come linguagglio per la modellazione e documentazione di un progetto sw
- Diagrammi UML più utilizzati: Casi d'uso, classi e oggetti, attività, macchina a stati, componenti, deployment, sequenza
- Architetture software
- Principi pi progettazione, principi SOLID, accenni di GRASP
- Progettazione di dettaglio e design patterns: verranno presentati nel dettaglio i più utilizzati
- Introduzione alla verifica e validazione
- Verifiche statiche
- Verifiche dimaniche: criteri di progetatzione dei casi di test, test mutazionale e test combinatorio
Principi di programmazione a oggetti
Lo studente potrà saper gestire responsabilità di conduzione di un team di progetto.
Codice insegnamento P286109100
Apprendere i concetti principali e i metodi che stanno alla base della progettazione e sviluppo di sistemi intelligenti. Il corso introduce le tecniche di base per la realizzazione di agenti intelligenti e in particolare…
Scheda dell'insegnamento
Scheda dell'a.a. 2025/2026: quella dell'anno in corso non è ancora pubblicata.
Obiettivi formativi
Apprendere i concetti principali e i metodi che stanno alla base della progettazione e sviluppo di sistemi intelligenti.
Il corso introduce le tecniche di base per la realizzazione di agenti intelligenti e in particolare il paradigma di risoluzione dei problemi come ricerca in uno spazio di stati, la rappresentazione della conoscenza e il ragionamento automatico, i metodi e modelli di base dell’apprendimento automatico.
Programma
Risoluzione di problemi come ricerca:
- Formulazione di problemi come ricerca in uno spazio di stati
- Strategie di ricerca non informata ed euristica
- Giochi con avversario (opzionale)
Rappresentazione della conoscenza e ragionamento:
- Il problema fondamentale della rappresentazione della conoscenza: espressività e complessità computazionale
- Algoritmi efficienti per la soddisfacibilità
- Deduzioni automatica: il metodo di risoluzione
- Sistemi a regole: basi di dati deduttive e programmazione logica
Introduzione all’ apprendimento automatico:
- Paradigma, “forme” e metodi dell’ apprendimento automatico
- Apprendimento induttivo di regole proposizionali
- Apprendimento supervisionato: classificazione e regressione (modelli lineari e instance based)
- Apprendimento non supervisionato (clustering)
- Validazione: tecniche e aspetti teorici
- Cenni ai modelli dei paradigmi simbolico, sub-simbolico, Bayesiano
- Esempi di applicazioni.
Algoritmi e strutture dati. Logica formale. Elementi di analisi matematica: funzioni, calcolo differenziale. Elementi di calcolo matriciale e relative notazioni. Elementi di calcolo di probabilità e statistica.
Consapevolezza dei limiti attuali e delle potenzialità dei sistemi intelligenti.
Modalità d'esame
Gli esercizi delle prove scritte verificano la capacità di risoluzione di semplici istanze di nuovi problemi con le metodologie presentate nel corso.
Lo studente può inoltre esercitare (autoverifica) alcune metodologie della materia attraverso strumenti software, resi disponibili durante il corso e arricchiti di documentazione per l’uso e di prove di esercitazione specifiche per il corso.
Codice insegnamento P934622311
Il corso introduce i principi, i modelli e gli strumenti fondamentali per la progettazione e lo sviluppo di programmi paralleli efficienti su moderni sistemi di calcolo multicore ed eterogenei dotati di CPU e GPU. Al…
Scheda dell'insegnamento
Obiettivi formativi
Il corso introduce i principi, i modelli e gli strumenti fondamentali per la progettazione e lo sviluppo di programmi paralleli efficienti su moderni sistemi di calcolo multicore ed eterogenei dotati di CPU e GPU.
Al termine del corso, gli studenti avranno acquisito conoscenze relative a:
- principali forme di parallelismo, tra cui parallelismo sui dati, sui task e su stream di dati;
- architetture multicore, gerarchie di memoria e acceleratori GPU;
- metriche e metodologie per l’analisi delle prestazioni, dello speedup, dell’efficienza e della scalabilità;
- programmazione concorrente e parallela in C++ moderno;
- algoritmi paralleli della Standard Template Library e relative execution policy;
- programmazione parallela in OpenMP mediante loop paralleli, riduzioni, task e dipendenze;
- offloading di computazioni su GPU mediante OpenMP e gestione del trasferimento e della residenza dei dati sul dispositivo;
- effetti della granularità, del bilanciamento del carico, della sincronizzazione, della località e del movimento dei dati sulle prestazioni.
Programma
1. Fondamenti del calcolo parallelo
- Architetture multicore, sistemi NUMA e sistemi eterogenei CPU-GPU.
- Parallelismo sui dati, sui task e su stream di dati.
- Principali pattern di programmazione parallela.
- Partizionamento del lavoro, granularità e bilanciamento del carico.
- Gerarchie di memoria, località dei dati e costo del movimento dei dati.
- Metriche di prestazione, speedup, efficienza, strong scaling e weak scaling.
- Leggi fondamentali della scalabilità dei programmi paralleli.
2. Programmazione concorrente e parallela in C++ moderno
- Costrutti del C++ moderno rilevanti per la programmazione parallela.
- Creazione e gestione dei thread.
- Meccanismi di sincronizzazione e comunicazione tra thread.
- Programmazione asincrona mediante future e task.
- Thread pool e gestione dinamica del lavoro.
- Operazioni atomiche e modello di memoria del C++.
- Principi della programmazione lock-free.
- False sharing, località e thread affinity.
3. Algoritmi paralleli della libreria standard C++
- Algoritmi e iteratori.
- Execution policy sequenziali, parallele e vettoriali.
- Pattern map, reduce, scan e sort.
- Composizione degli algoritmi paralleli.
- Effetti dell’ordine delle operazioni sulla correttezza numerica.
- Valutazione delle prestazioni delle implementazioni parallele.
4. Programmazione multicore con OpenMP
- Modello di esecuzione OpenMP.
- Regioni parallele e gestione dello scope delle variabili.
- Parallelizzazione dei loop, riduzioni e politiche di scheduling.
- Costrutti di work-sharing e sincronizzazione.
- Task parallelism, taskloop e controllo della granularità.
- Dipendenze tra task e costruzione di grafi di computazione.
- Affinity e gestione del posizionamento dei thread.
- Sovrapposizione tra fasi di computazione e comunicazione o I/O.
5. Offloading su GPU con OpenMP
- Caratteristiche essenziali delle architetture GPU.
- Modello host-device e gerarchia di esecuzione.
- Costrutti OpenMP per l’offloading di computazioni.
- Parallelismo a livello di team e thread.
- Loop paralleli e riduzioni sul dispositivo.
- Trasferimento, allocazione e persistenza dei dati sulla GPU.
- Regioni dati e controllo esplicito del movimento dei dati.
- Confronto tra gestione esplicita e memoria unificata.
- Ottimizzazione della granularità, della località e dei trasferimenti.
- Analisi comparativa delle prestazioni su CPU multicore e GPU.
6. Strumenti e ambiente di esecuzione
- Compilazione ed esecuzione di programmi paralleli.
- Utilizzo di un cluster di calcolo.
- Gestione delle risorse mediante SLURM.
- Controllo del numero e del posizionamento dei thread.
- Raccolta e interpretazione dei risultati sperimentali.
Per affrontare con successo il corso sono richieste:
- conoscenza del linguaggio C e familiarità di base con il C++;
- familiarità con sistemi Unix-based e con l’utilizzo della linea di comando;
- conoscenze di base della programmazione concorrente, incluse creazione di thread, mutua esclusione e race condition;
- conoscenze fondamentali di architettura dei sistemi di elaborazione, processori multicore, cache e gerarchie di memoria.
L’insegnamento è consigliato agli studenti che abbiano superato, o almeno seguito, gli insegnamenti fondamentali di AESO e Laboratorio II.
Il corso mira a sviluppare autonomia di giudizio e un approccio rigoroso e sperimentale alla programmazione parallela.
Al termine del corso, gli studenti saranno in grado di:
- valutare criticamente la correttezza e l’efficienza di una soluzione parallela;
- motivare le scelte progettuali sulla base di dati sperimentali;
- distinguere tra risultati osservati, interpretazioni e limiti della sperimentazione;
- documentare in modo chiaro il codice, la metodologia sperimentale e i risultati;
- utilizzare in modo corretto e responsabile le risorse del cluster;
- utilizzare in modo appropriato librerie e strumenti software di terze parti;
- collaborare efficacemente alla progettazione e allo sviluppo di un’applicazione parallela;
- organizzare esperimenti riproducibili e interpretarne criticamente i risultati.
Modalità d'esame
Le capacità operative e progettuali saranno verificate principalmente attraverso il mini-progetto finale.
La valutazione terrà conto di:
- correttezza dell’implementazione;
- adeguatezza della strategia di parallelizzazione;
- qualità, chiarezza e organizzazione del codice;
- uso appropriato dei costrutti e degli strumenti affrontati nel corso;
- correttezza della metodologia sperimentale;
- qualità dell’analisi delle prestazioni;
- capacità di interpretare i risultati e di individuare i limiti della soluzione proposta.
La relazione tecnica dovrà descrivere l’ambiente sperimentale, la metodologia di misura e i risultati ottenuti. Durante la discussione orale, lo studente dovrà motivare le scelte effettuate e valutare possibili soluzioni alternative.
L’esame consiste nello sviluppo, nella documentazione e nella discussione di un mini-progetto di programmazione parallela, svolto individualmente o in piccoli gruppi.
Gli studenti dovranno consegnare:
- il codice sorgente del progetto;
- una relazione tecnica descrittiva del progetto
- le informazioni necessarie a riprodurre gli esperimenti eseguiti sul cluster di calcolo del corso.
Il progetto sarà presentato e discusso oralmente. Durante la discussione ciascun studente dovrà dimostrare di conoscere l’intera soluzione, motivare le scelte progettuali e interpretare i risultati sperimentali. Potranno inoltre essere poste domande sugli argomenti del corso collegati al progetto.
Il voto finale sarà determinato:
- per il 30% dalla qualità implementativa e dalle scelte fatte;
- per il 40% dalla qualità dell'analisi e degli esperimenti svolti e della loro presentazione nella relazione tecnica descrittiva del progetto;
- per il 30% dalla presentazione del lavoro e dalla discussione orale con il docente
Testi di riferimento
Testi consigliati:
- Rainer Grimm, Concurrency with Modern C++, Leanpub, 2024.
- Björn Andrist, Viktor Sehr, C++ High Performance, 2nd edition, Packt, 2020.
- T. G. Mattson, Yun Helen He, Alice E. Koniges, The OpenMP Common Core: Making OpenMP Simple Again, MIT Press, 2019.
- Tom Deakin, Timothy G. Mattson, Programming Your GPU with OpenMP: Performance Portability for GPUs, MIT Press, 2023.
Saranno inoltre utilizzati:
- slide preparate dal docente;
- esempi di codice ed esercizi;
- documentazione ufficiale del linguaggio C++ e della libreria standard;
- specifica e documentazione ufficiale OpenMP;
- documentazione dei compilatori e degli strumenti utilizzati;
- materiale reso disponibile sul canale del corso.
Codice insegnamento 79612
Recensioni del corso
Studi qui? Accedi per lasciare la tua recensione e aiutare altri studenti a scegliere.
Nessuna recensione per ora — e la prima è la più preziosa. Condividi la tua esperienza e orienta le future matricole.