FONDAMENTI DI PROGRAMMAZIONE P - Z
Modulo PROGRAMMAZIONE II

Anno accademico 2025/2026 - Docente: MARCO GRASSIA

Risultati di apprendimento attesi

Il modulo Programmazione II del corso Fondamenti di Programmazione si concentra sulla formazione di studenti competenti nella programmazione utilizzando il linguaggio ANSI C. Il modulo include cenni di complessità degli algoritmi e di strutture dati complesse.

Al termine di questo modulo lo studente ha una conoscenza completa del linguaggio ANSI C e delle semplici strutture dati di base.

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 ai tipi di dato, alle variabili, agli operatori, alle strutture di controllo e alle funzioni.

Più nel dettaglio, le conoscenze e capacità di comprensione richieste sono:

  • conoscenza della sintassi e della semantica del linguaggio ANSI C

  • conoscenza di algoritmi notevoli e delle principali strutture dati
  • conoscenza delle principali tecniche di gestione della memoria
Capacità di applicare conoscenza e comprensione (applying knowledge and understanding)

Gli studenti svilupperanno la capacità di applicare le conoscenze acquisite attraverso esercitazioni ed esercizi svolti sia in forma cartacea che con il calcolatore con l’obiettivo di mettere in pratica le abilità di risoluzione dei problemi e di scrittura di codice ANSI C.

Questo modulo mira a rendere gli studenti competenti nell'utilizzo delle risorse disponibili, comprese le funzioni della libreria standard C e le loro applicazioni pratiche, con particolare attenzione alle funzioni di input/output, la manipolazione delle stringhe, la gestione di semplici strutture dati, la gestione elementare della memoria e la gestione dei file.

  • capacità di risolvere problemi elementari, scrivere l’algoritmo risolutivo e implementarlo usando il linguaggio ANSI C 
  • capacità di analizzare il codice e correggere gli errori durante le fasi di sviluppo e realizzare una applicazione funzionante
  • capacità di utilizzare un ambiente di sviluppo (IDE)[MM1] 


Capacità di apprendimento (learning skills)

Gli studenti saranno in grado di analizzare e valutare problemi di media complessità quali la gestione di sequenze, dimensionamento, applicare la programmazione in ANSI C per risolverli, usando correttamente un ambiente di sviluppo e gli strumenti di debug per la risoluzione di errori comuni.

  • Comprendere e applicare strutture di controllo (condizioni, cicli, funzioni).

  • Utilizzare tipi di dato primitivi e strutture dati di base.
  • Leggere e scrivere codice ANSI C funzionante, strutturato e leggibile.
  • Affrontare problemi di complessità crescente attraverso tecniche di problem solving algoritmico.
  • Essere in grado di apprendere nuovi linguaggi, nuovi paradigmi di programmazione e di manipolare strutture dati 
  • Essere in grado di utilizzare le conoscenze e competenze apprese per affrontare in maniera metodologica problemi complessi

Abilità comunicative (communication skills)

Questo insegnamento introdurrà gli studenti al gergo informatico, e consentirà loro di comunicare in modo efficace attraverso il linguaggio matematico/informatico, consentendo la condivisione di soluzioni e idee di programmazione

  • Lo studente acquisisce la conoscenza del linguaggio informatico e della terminologia tecnica

Modalità di svolgimento dell'insegnamento

Il corso prevede come metodo di insegnamento principale le lezioni frontali per acquisire le conoscenze teoriche di base e tutti gli elementi sintattici e lo svolgimento di esercitazioni, da svolgere anche in modo autonomo, proposte dal docente per acquisire la capacità di risolvere i problemi, applicare la conoscenza e utilizzare gli ambienti e le metodologie di sviluppo.


Il docente propone, inoltre, delle esercitazioni individuali che consistono nella soluzione di un problema che lo studente deve affrontare in autonomia che vengono successivamente corrette o discusse in classe.


Qualora l'insegnamento venisse impartito in modalità mista o a distanza potranno essere introdotte le necessarie variazioni rispetto a quanto dichiarato in precedenza, al fine di rispettare il programma previsto e riportato nel syllabus.

Prerequisiti richiesti

Conoscenza degli argomenti trattati nel modulo Programmazione I.

Frequenza lezioni

La frequenza non è obbligatoria, seppure fortemente consigliata, per sostenere con successo la prova di esame.


Lo studente è tenuto a frequentare almeno il 70% delle lezioni del corso per poter sostenere la prova in itinere del modulo.


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

IL LINGUAGGIO ANSI C

Elementi fondamentali del linguaggio C, inclusa la sintassi

  • Struttura di un programma C

  • Tipi di dati e rappresentazioni

  • Variabili, costanti e istruzioni di assegnazione

  • Operatori aritmetici, relazionali e logici

  • Espressioni

  • Funzioni di input/output di base da console: printf e scanf

  • Strutture di controllo: if-else, switch e iterazioni (while, do-while, for)

  • Ambienti di sviluppo C, compilazione, esecuzione e debugging


Tipi strutturati

  • Array monodimensionali

  • Stringhe e array di stringhe

  • Array multidimensionali

  • Variabili puntatore, operatori ed espressioni con puntatori

  • Puntatori e array e la loro equivalenza

  • Strutture, array di strutture, puntatori a strutture, array e strutture all’interno di altre strutture

  • Altre strutture: union, campi di bit ed enumerazioni

  • sizeof e typedef


Funzioni

  • Definizione e dichiarazione di funzioni

  • Regole di visibilità delle funzioni

  • Argomenti delle funzioni, inclusi quelli di main

  • Istruzione return e valori restituiti da una funzione


Gestione della memoria

  • Organizzazione della memoria in un programma (globale, heap e stack)

  • Memoria heap e allocazione dinamica degli array

  • Ricorsione

  • Dichiarazioni e campo di azione degli identificatori

  • Tecniche di legame dei parametri

  • Effetti collaterali e implementazione delle funzioni

  • Utilizzo di puntatori a funzioni

  • Puntatori a funzioni


Gestione dell’Input/Output (I/O)

  • Lettura e scrittura di caratteri e stringhe

  • I/O formattato

  • File di testo e binari

  • Operazioni di lettura e scrittura su file


Tipi di Dato Astratto: implementazione in C

  • Traduzione dei Tipi di Dato Astratto in Tipi di Dati Concreti (TDC) tramite l’uso del linguaggio ANSI C

  • Scrittura di applicazioni in ANSI C che utilizzino i TDA e le loro implementazioni


Strutture dati lineari

  • Liste e liste ordinate: implementazione concatenata, semplice e doppia

  • Code

  • Pile

  • Esempi di array di strutture dati lineari

Strutture dati non lineari

  • Alberi binari e alberi binari di ricerca

  • Definizione, implementazione e principali algoritmi

  • Grafi: definizione e algoritmi di visita


Complessità computazionale

  • Notazioni O e Ω per valutare la complessità di un programma

Testi di riferimento

[BeGu] Bellini, Guidi. Linguaggio C. Guida alla programmazione. McGraw-Hill

[Pel] Pellegrino Principe. C guida alla programmazione. Apogeo

Dispense ed esercizi svolti distribuito dal docente attraverso la piattaforma Studium.UniCT e/o la piattaforma Microsoft Teams.

Programmazione del corso

 ArgomentiRiferimenti testi
1Cenni di Complessità ComputazionaleDispense del docente
2Algoritmi di Ricerca e OrdinamentoDispense del docente
3Tipi di Dato Astratto (TDA) e loro implementazione in CDispense del docente
4PileDispense del docente
5CodeDispense del docente
6Liste e liste ordinateDispense del docente
7AlberiDispense del docente
8Alberi binari e binari di ricercaDispense del docente
9Dizionari / HashtablesDispense del docente
10GrafiDispense del docente

Verifica dell'apprendimento

Modalità di verifica dell'apprendimento

Prova finale del modulo 2

La prova finale del modulo consiste:

  • Nello sviluppo di una applicazione al calcolatore della durata, di norma, di 120 minuti

  • Alla prova viene assegnato un punteggio massimo di 23 punti.

  • In una prova orale, il cui accesso è subordinato al superamento della prova al calcolatore

Prova dell’insegnamento

  • Consiste nel superamento delle prove finali del modulo 1 e del modulo 2

  • Il voto finale è dato dalla media dei voti conseguiti nelle due prove

  • Le prove di entrambi i moduli potranno essere svolte nello stesso appello

Non sono previste prove in itinere

Esempi di domande e/o esercizi frequenti

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