FONDAMENTI DI PROGRAMMAZIONE P - ZModulo PROGRAMMAZIONE II
Anno accademico 2025/2026 - Docente: MARCO GRASSIARisultati 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
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
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
Argomenti | Riferimenti testi | |
---|---|---|
1 | Cenni di Complessità Computazionale | Dispense del docente |
2 | Algoritmi di Ricerca e Ordinamento | Dispense del docente |
3 | Tipi di Dato Astratto (TDA) e loro implementazione in C | Dispense del docente |
4 | Pile | Dispense del docente |
5 | Code | Dispense del docente |
6 | Liste e liste ordinate | Dispense del docente |
7 | Alberi | Dispense del docente |
8 | Alberi binari e binari di ricerca | Dispense del docente |
9 | Dizionari / Hashtables | Dispense del docente |
10 | Grafi | Dispense 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