FONDAMENTI DI PROGRAMMAZIONE A - E
Modulo PROGRAMMAZIONE I

Anno accademico 2025/2026 - Docente: Vincenza CARCHIOLO

Risultati di apprendimento attesi

 

Descrizione del moduloIl 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 diPython 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 
  • 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

    • ·       Progettazione e descrizioni di algoritmi (programmazione strutturata, cicli, ecc.)
    • ·       Conoscenza e capacità di utilizzo di un IDE
    • ·       Conoscenza di nozioni di basi sulla struttura di un sistema di elaborazione

    Frequenza lezioni

    La frequenza non è obbligatoria, sebbene fortemente consigliata, per sostenere con successo la prova d’esame.


    La frequenza di almeno il 70% delle lezioni da la possibilità di acquisire di 2 punti nella valutazione complessiva del modulo solo nel caso che l'esame viene effettuato nel corrente anno accademico,


    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


    PYTHON: PROGRAMMAZIONE PROCEDURALE



    Introduzione a Python

    • Ambiente di sviluppo

    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.

    Lo studente potrà usufruire di 2 punti bonus per la frequenza.

    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 stessoappello.Se la prova del Modulo 2 viene sostenuta nello stesso appello della prova del Modulo 1, sarà ritenuta valida solo se la prova delModulo 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 e/o esercizi frequenti

    Esempi di domande ed esercizi sono disponibili sulla piattaforma Studium UniCT e/o Microsoft Teams.