FONDAMENTI DI PROGRAMMAZIONE A - E
Modulo PROGRAMMAZIONE II

Anno accademico 2025/2026 - Docente: Vincenza CARCHIOLO

Risultati di apprendimento attesi

Modulo Programmazione II – Fondamenti di Programmazione

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 anche un’introduzione alla complessità degli algoritmi e alle strutture dati complesse.

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


Conoscenza e capacità di comprensione

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ù nello specifico, le conoscenze e capacità di comprensione richieste includono:

  • 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

Gli studenti svilupperanno la capacità di applicare le conoscenze acquisite attraverso esercitazioni ed esercizi svolti sia su carta che al computer, con l’obiettivo di mettere in pratica le abilità di problem solving e di scrittura di codice ANSI C.

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

  • capacità di risolvere problemi elementari, scrivere l’algoritmo risolutivo e implementarlo in linguaggio ANSI C

  • capacità di analizzare il codice, correggere gli errori durante lo sviluppo e produrre un’applicazione funzionante

  • capacità di utilizzare un ambiente di sviluppo (IDE)


Capacità di apprendimento

Gli studenti saranno in grado di analizzare e valutare problemi di media complessità, come la gestione di sequenze e il dimensionamento, applicando la programmazione in ANSI C per risolverli, utilizzando correttamente un ambiente di sviluppo e strumenti di debugging per affrontare gli errori più comuni.

  • comprendere e applicare le 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 tramite 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 acquisite per affrontare in modo metodologico problemi complessi


Abilità comunicative

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

Lo studente acquisirà 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.


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

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

Programmazione del corso

 ArgomentiRiferimenti testi
1Tipi di Dato Astratto (TDA) e loro implementazione in Cdispense
2Liste e liste ordinateDisense
3codeDispense
4PileDispense
5Alberi binari e binari di ricercaDispense
6Cenni di Complessità Computazionaledispense
7GrafiDispense
8Algoritmi di   Ordinamentodispense

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.