FONDAMENTI DI PROGRAMMAZIONE A - E
Modulo PROGRAMMAZIONE I

Anno accademico 2025/2026 - Docente: MARCO GRASSIA

Risultati di apprendimento attesi

Descrizione del modulo

Il modulo Programmazione I del corso Fondamenti di Programmazione si concentra sulla formazione di studenti competenti nella programmazione Python (con approccio procedurale), capaci di affrontare sfide di media complessità, di valutare, scegliere e progettare algoritmi, e di comunicare utilizzando tecniche e linguaggio informatico appropriati.
Il modulo include cenni sulle strategie di ricerca e correzione degli errori (sintattici, semantici e a tempo di esecuzione), sulla rappresentazione dell’informazione, sull’architettura del calcolatore e sui sistemi operativi.

Al termine del modulo, lo studente sarà in grado di sviluppare e descrivere algoritmi per la soluzione di problemi e avrà una conoscenza delle caratteristiche procedurali del linguaggio Python.

Conoscenza e capacità di comprensione (Knowledge and understanding)

L'obiettivo principale è fornire agli studenti una conoscenza delle tecniche algoritmiche e del linguaggio di programmazione Python, compresa la comprensione della sua sintassi, semantica e applicazioni. Il modulo si concentra sullo sviluppo di semplici algoritmi e sui concetti relativi a tipi di dato, variabili, operatori, strutture di controllo e funzioni.

Conoscenze e capacità di comprensione richieste:
  • conoscenza elementare dei sistemi di numerazione e della rappresentazione dell’informazione
  • conoscenza elementare dell'architettura del calcolatore e dei principi di funzionamento dei sistemi operativi
  • conoscenza delle tecniche di soluzione dei problemi e dei principi dell'informatica
  • conoscenza delle principali tecniche di rappresentazione degli algoritmi
  • introduzione ai fondamenti della programmazione procedurale con Python
  • strumenti concettuali per la risoluzione di problemi computazionali
  • conoscenza delle nozioni base di informatica: algoritmi, strutture dati, architettura del calcolatore
  • capacità di sviluppare il pensiero computazionale e progettare soluzioni algoritmiche
  • conoscenza della sintassi e della semantica del linguaggio Python
  • conoscenza delle tecniche di base per la ricerca degli errori nei programmi

Capacità di applicare conoscenza e comprensione (Applying knowledge and understanding)

Gli studenti svilupperanno la capacità di applicare le conoscenze acquisite attraverso esercitazioni, svolte sia su carta che al calcolatore, che permettono di mettere in pratica le abilità di risoluzione dei problemi tramite algoritmi e la loro implementazione in Python.

Il modulo mira a rendere gli studenti competenti nell'utilizzo delle risorse disponibili, comprese le funzioni delle librerie di base di Python e le loro applicazioni pratiche, con particolare attenzione a:
  • funzioni di input/output
  • manipolazione delle stringhe
  • gestione di semplici strutture dati
  • gestione elementare della memoria e dei file
  • risoluzione di problemi numerici
Competenze sviluppate:
  • capacità di risolvere problemi elementari, scrivere l’algoritmo risolutivo e implementarlo in Python
  • capacità di analizzare il codice, correggere gli errori e realizzare un'applicazione funzionante
  • capacità di utilizzare un ambiente di sviluppo (IDE)

Capacità di apprendimento (Learning skills)

Gli studenti saranno in grado di analizzare e valutare problemi di media complessità, come la gestione di sequenze, il dimensionamento e problemi numerici, applicando la programmazione in Python per risolverli, utilizzando correttamente un ambiente di sviluppo e strumenti di debug. Competenze sviluppate:
  • comprendere e applicare strutture di controllo (condizioni, cicli, funzioni)
  • utilizzare tipi di dato primitivi e strutture dati di base
  • leggere e scrivere codice Python funzionante, strutturato e leggibile
  • affrontare problemi di complessità crescente con tecniche di problem solving algoritmico
  • comprendere il funzionamento generale di un calcolatore (memoria, CPU, input/output)
  • essere in grado di apprendere nuovi linguaggi, paradigmi di programmazione e manipolare strutture dati

Abilità comunicative (Communication skills)

Il modulo introdurrà gli studenti al gergo informatico, consentendo loro di comunicare efficacemente attraverso il linguaggio matematico/informatico e di condividere soluzioni e idee di programmazione. Competenze sviluppate:
  • acquisizione del linguaggio informatico e della terminologia tecnica

Modalità di svolgimento dell'insegnamento

Il corso prevede lezioni frontali per l’acquisizione delle conoscenze teoriche di base e degli elementi sintattici, e lo svolgimento di esercitazioni, sia in aula che in autonomia, proposte dal docente per sviluppare la capacità di risolvere problemi, correggere errori, applicare conoscenze e utilizzare ambienti e metodologie di sviluppo.

Il docente propone inoltre esercitazioni individuali che consistono nella soluzione autonoma di un problema, successivamente corretto o discusso in classe.

Qualora l'insegnamento venisse impartito in modalità mista o a distanza, potranno essere introdotte le necessarie variazioni per rispettare il programma previsto e riportato nel syllabus.

Prerequisiti richiesti

  • Conoscenza della notazione esponenziale o scientifica dei numeri e delle tecniche di arrotondamento dei valori numerici
  • Familiarità con i numeri reali e le operazioni su di essi, comprese le potenze con esponente razionale e reale, e il logaritmo di un numero reale positivo
  • Comprensione del concetto di funzione matematica
  • Conoscenza di vettori e matrici, incluse le operazioni fondamentali su di essi

Frequenza lezioni

La frequenza non è obbligatoria, sebbene fortemente consigliata, per sostenere con successo la prova d’esame.
Qualora l’insegnamento venisse impartito in modalità mista o a distanza, i requisiti per la partecipazione alle prove in itinere potranno essere modificati.

Contenuti del corso

CONCETTI PRELIMINARI

Algoritmi
  • Concetti di base sull'elaborazione dell'informazione e sugli algoritmi
  • Proprietà di un algoritmo
  • Notazioni testuali e grafiche per esprimere algoritmi
  • Sviluppo di algoritmi semplici
Rappresentazione dell'informazione
  • Sistemi numerici e conversioni tra di essi
  • Sistema di numerazione binaria
  • Operazioni tra numeri binari
  • Rappresentazione dei numeri interi, inclusi quelli con segno
  • Gestione di overflow e underflow
  • Rappresentazione in virgola fissa e mobile
  • Codici e rappresentazione dei caratteri
  • Algebra di Boole, funzioni logiche, espressioni logiche e applicazioni dell'algebra booleana
Architettura del calcolatore e linguaggi di programmazione
  • Struttura di un elaboratore: unità centrale, memoria centrale, unità di ingresso/uscita, memoria di massa
  • Funzionamento elementare dell'elaboratore
  • Introduzione al sistema operativo: struttura e modalità di funzionamento
  • Linguaggi di programmazione: tipologie, traduzione ed esecuzione dei programmi
  • Compilatori e interpreti
Introduzione a Python
  • Ambiente di sviluppo
PYTHON: PROGRAMMAZIONE PROCEDURALE

Tipi di dato e operazioni fondamentali
  • Tipi primitivi: int, float, str, bool
  • Operatori aritmetici, logici e di confronto
  • Input/output
  • Conversioni di tipo
Strutture di controllo
  • Condizioni: if, elif, else
  • Cicli: while, for
  • Iterazione su stringhe e range
  • Debugging e uso del print per tracciare l’esecuzione
Strutture dati fondamentali
  • Liste: indicizzazione, slicing, metodi
  • Tuple e dizionari
  • Set
  • Iterazione su liste e dizionari
  • Liste nidificate
  • Esercizi di manipolazione dati
  • Pattern comuni di iterazione
Funzioni e modularizzazione
  • Definizione di funzione: def
  • Parametri e valori di ritorno
  • Scope e binding delle variabili
  • Ricorsione (introduzione)
  • Esempi di decomposizione funzionale
Strategie di risoluzione dei problemi
  • Divide et impera
  • Backtracking (accenno)
  • Convergenza di un algoritmo
  • Convergenza nei cicli iterativi: quando una sequenza di valori (es. una serie, un’approssimazione) tende a un valore finale
  • Strategie di terminazione di un programma: guess and check, approssimazione, bisezione
Cenni di complessità computazionale
  • Efficienza dei programmi ed elementi di valutazione dell’efficienza di un algoritmo
  • Algoritmi di ricerca e ordinamento

Testi di riferimento

  • Kenneth A. Lambert, Programmazione in Python, Maggioli Editore (Apogeo Education)
  • Dispense ed esercizi svolti distribuiti dal docente attraverso la piattaforma Studium UniCT e/o Microsoft Teams

Verifica dell'apprendimento

Modalità di verifica dell'apprendimento

Prova finale del modulo Programmazione I

La prova finale del Modulo 1 consiste in:

1. Questionario a risposte aperte e/o chiuse sui contenuti del programma (valutato in decimi), in particolare su:

  • Architettura dei sistemi di elaborazione
  • Sistemi di numerazione
  • Algebra di Boole
  • Algoritmi e programmi
  • Gestione della memoria
  • Concetti dei linguaggi di programmazione, incluso Python

2. Prova al calcolatore, che prevede la scrittura di codice Python, la correzione e la verifica del funzionamento (valutata in ventesimi)

La prova complessiva del modulo ha una durata di 90 minuti ed è valutata in trentesimi (somma dei punteggi delle due prove).
La prova si intende superata se lo studente ottiene almeno 18/30, con almeno 5/10 nel questionario e almeno 10/20 nella prova al calcolatore.

La prova contribuirà percentualmente all’attribuzione del voto finale dell’insegnamento.

Prova d’esame dell’insegnamento

Consiste nel superamento delle prove finali del Modulo 1 e del Modulo 2.
Le prove di entrambi i moduli possono essere sostenute nello stesso appello o in appelli differenti.
Il superamento della prova del Modulo 1 è propedeutico al superamento della prova del Modulo 2, anche se svolte nello stesso appello.
Se la prova del Modulo 2 viene sostenuta nello stesso appello della prova del Modulo 1, sarà ritenuta valida solo se la prova del Modulo 1 è stata superata.
Il voto finale è determinato dalla media dei punteggi ottenuti nelle due prove.
Non sono previste prove in itinere.

Esempi di domande e/o esercizi frequenti

Esempi di domande ed esercizi sono disponibili sulla piattaforma Microsoft Teams.