CODICE 52473 ANNO ACCADEMICO 2025/2026 CFU 8 cfu anno 1 MATEMATICA 11897 (L-35 R) - GENOVA 8 cfu anno 1 STATISTICA MATEM. E TRATTAM. INFORMATICO DEI DATI 11900 (L-35 R) - GENOVA SETTORE SCIENTIFICO DISCIPLINARE INF/01 LINGUA Italiano SEDE GENOVA PERIODO 2° Semestre PRESENTAZIONE L'insegnamento si propone di fornire le conoscenze di base e gli strumenti per la programmazione imperativa attraverso l'introduzione di linguaggi ad alto livello. Nel percorso formativo, la conoscenza dei fondamenti della programmazione e di un linguaggio "generalista" (come quello presentato qui) costituisce la base per poter apprendere facilmente i linguaggi specialistici dell'ambito matematico e statistico, che saranno utilizzati in successivi insegnamenti. OBIETTIVI E CONTENUTI OBIETTIVI FORMATIVI L'insegnamento introduce alla programmazione e ai linguaggi di programmazione, in particolare al paradigma imperativo, che sara' presentato sull'esempio di un linguaggio di riferimento. Saranno fornite le conoscenze di base e gli strumenti tecnici per definire semplici algoritmi che risolvono piccoli problemi, e per progettare, realizzare e validare semplici programmi a partire da specifiche informali del compito da svolgere. Le conoscenze e le abilita' acquisite saranno utili anche per l'apprendimento futuro di altri linguaggi di programmazione. OBIETTIVI FORMATIVI (DETTAGLIO) E RISULTATI DI APPRENDIMENTO L'insegnamento fornirà alcune necessarie nozioni di base sull'architettura del calcolatore, la rappresentazione dei dati, il sistema operativo. Introdurra' le nozioni di algoritmo e di programma, i linguaggi di programmazione ad alto livello e le modalità per l'esecuzione del codice. Presenterà i concetti e i costrutti di base della programmazione imperativa di alto livello (variabili, istruzioni, costrutti per il controllo del flusso d'esecuzione), che saranno esemplificati su un linguaggio imperativo. Fornirà linee guida per la progettazione di piccoli programmi che risolvono un semplice problema e per il testing degli stessi. Dopo avere seguito l'insegnamento lo studente: conoscerà i concetti di base relativi al modo in cui i programmi vengono eseguiti nel calcolatore (rappresentazione dei dati, linguaggio ad alto livello e linguaggio macchina, file system, ecc.) conoscerà i costrutti di base della programmazione imperativa saprà utilizzare strumenti semplici per lo sviluppo di programmi (editor di testi, compilazione ed esecuzione da linea di comando) sarà in grado di progettare semplici algoritmi e di scrivere piccoli programmi, partendo da specifiche informali sarà in grado di comprendere, utilizzare e modificare codice scritto da altri PREREQUISITI Non sono previsti requisiti specifici. MODALITA' DIDATTICHE L'insegnamento, erogato al secondo semestre, prevede 3 ore di lezione in aula e 4 ore di laboratorio alla settimana. Lezioni e laboratori sono strettamente coordinati per applicare subito in laboratorio le nozioni introdotte a lezione. La frequenza dei laboratori non è obbligatoria ma è fortemente consigliata. L'esperienza pratica di programmazione è indispensabile per acquisire le capacità di sviluppo e testing del codice. Saranno date anche istruzioni per installare sui propri PC il software necessario. L'attività di laboratorio sarà svolta a piccoli gruppi (2-3 persone). Agli studenti lavoratori o per altre ragioni non frequentanti sarà permesso di lavorare singolarmente. Ogni settimana saranno dati degli esercizi, che chiederanno di realizzare piccoli programmi, e che potranno essere consegnati per ricevere un riscontro su eventuali errori o problemi, utile all'autovalutazione e al miglioramento del proprio livello. In alcuni momenti durante il semestre saranno assegnati degli esercizi di riepilogo che, se consegnati, saranno valutati con un punteggio e contribuiranno al voto finale dell'esame (maggiori dettagli nella sezione relativa all'esame). Tutte le consegne sono di gruppo e sono facoltative. PROGRAMMA/CONTENUTO Nozioni di base sui calcolatori: rappresentazione dei dati e aritmetica degli elaboratori; cenni sull'architettura del calcolatore e sui sistemi operativi finalizzati alla comprensione della modalità; di esecuzione dei programmi. I linguaggi di programmazione di alto livello: sorgenti e compilazione. Nozione di algoritmo, pseudocodice, programma. Linguaggi imperativi: stato (rappresentato dalle variabili e dai loro valori) e cambiamento di stato (operato dalle istruzioni). Elementi di base dei linguaggi imperativi: tipi, espressioni, variabili, dichiarazioni, assegnazioni, costrutti per il controllo del flusso di esecuzione (condizionali e cicli), funzioni e procedure; programmazione strutturata e modularità. Programmazione in piccolo: progettazione di semplici algoritmi e piccoli programmi sequenziali a partire dalla specifica informale del problema da risolvere. Istruzioni operative per la scrittura e compilazione di programmi; esecuzione del codice; linee guida pratiche per il testing. TESTI/BIBLIOGRAFIA Il materiale didattico sarà erogato tramite Aulaweb, dove verranno pubblicati: slide delle lezioni, link a risorse on-line relative al linguaggio utilizzato (manuali e tutorial), testi degli esercizi di laboratorio, correzioni degli esercizi consegnati, ecc. In generale, gli appunti presi durante le lezioni e il materiale su Aulaweb (uniti alla necessaria pratica di laboratorio) sono sufficienti per la preparazione dell'esame. Come appoggio possono essere usati i seguenti libri (in versione italiana o inglese), come anche altri libri e fonti on-line introduttive alla programmazione: "Programming Principles and Practice using C++". B.Stroustrup. Addison-Wesley 2008, 2014, 2024. "C++. Fondamenti di programmazione". H.M.Deitel, P.J.Deitel. Apogeo 2009. "Che C serve? Per iniziare a programmare". Burattini, Chianese, Picariello, Moscato, Sansone. Maggioli editore 2016. DOCENTI E COMMISSIONI PAOLA MAGILLO Ricevimento: Ricevimento su appuntamento concordabile via email (paola.magillo@unige.it) MATTEO DELL'AMICO Ricevimento: Su appuntamento (in presenza o online) definito per email (matteo.dellamico@unige.it). LEZIONI INIZIO LEZIONI Le lezioni inizieranno in accordo con l'anno accademico (secondo semestre). Orari delle lezioni L'orario di questo insegnamento è consultabile all'indirizzo: Portale EasyAcademy ESAMI MODALITA' D'ESAME L'esame si compone di due parti obbligatorie: Prova a quiz sugli argomenti trattati durante il semestre. Il quiz sara' erogato tramite Aulaweb e comprendera' sia domande dove bisogna scegliere tra risposte preimpostate (risposte multiple, abbinamenti, completamenti ecc.), sia domande che richiedono la scrittura ex novo di brevi porzioni di codice. Prova di laboratorio consistente nella scrittura di codice nel linguaggio di programmazione di riferimento, completando un canovaccio di un programma che sara' dato, in base a specifiche che saranno date. Entrambe le prove saranno valutate in trentesimi. Per superare l'esame e' necessario ottenere almeno 18 in ciascuna delle due prove e poi sara' fatta la media dei due voti. Consegnando le esercitazioni di riepilogo durante il semestre (facoltative) e' possibile ottenere fino a 2 punti, che vanno a sommarsi alla media di cui sopra. Il risultato, arrotondato a numero intero, sara' il voto finale dell'esame. Le due prove (quiz e laboratorio) possono essere sostenute anche in appelli diversi e anche in sessioni diverse. Il voto sufficiente conseguito in una prova resta valido fino all'ultimo dei 5 appelli dell'anno accademico (cioe' febbraio dell'anno solare successivo, essendo un insegnamento del secondo semestre). Lo stesso limite di validita' si applica ai punti delle esercitazioni consegnate durante il semestre. Se si ripete una prova, il nuovo voto annulla quello precedentemente conseguito nella stessa prova (anche se il nuovo voto fosse minore). Gli studenti con DSA possono fare riferimento a questa pagina https://corsi.unige.it/corsi/8766/studenti-disabilita-dsa per richiedere adattamenti in sede d'esame. MODALITA' DI ACCERTAMENTO La prova quiz valutera' la conoscenza dei concetti introdotti a lezione, la padronanza dei costrutti fondamentali del linguaggio imperativo e il loro corretto uso, la comprensione di codice dato, la capacita' di produrre un (breve) codice corretto per un dato scopo. Ad ogni risposta giusta sara' dato un punteggio positivo (diverso secondo la difficolta' della domanda), nel caso di domande a risposta multipla alcune risposte sbagliate potranno portare una penalita' (punteggio negativo), nelle altre tipologie le risposte sbagliate avranno punteggio zero. Per le domande che richiedono la scrittura di codice, Aulaweb consente di provare il codice per confrontare i risultati prodotti con quelli attesi, ad ogni prova pero' il sistema attribuisce una (piccola) penalita'. La prova in laboratorio valutera' la capacità di individuare algoritmi per risolvere semplici problemi e tradurli nel linguaggio, producendo codice funzionante. La prova consiste nel completare un programma schematico che verrà fornito, seguendo le richieste specificate. La valutazione terra' conto dei seguenti aspetti in ordine decrescente di importanza: codice privo di errori algoritmici o sintattici, che produce risultati corretti (requisito minimo), stile e leggibilità, efficienza di calcolo. ALTRE INFORMAZIONI Rivolgersi al docente per ulteriori informazioni non comprese nella scheda insegnamento. Agenda 2030 Istruzione di qualità Parità di genere