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.
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.
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.
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
[BeGu] Bellini, Guidi. Linguaggio C. Guida alla programmazione. McGraw-Hill
[Pel] Pellegrino Principe. C guida alla programmazione. Apogeo
| Argomenti | Riferimenti testi | |
|---|---|---|
| 1 | Tipi di Dato Astratto (TDA) e loro implementazione in C | dispense |
| 2 | Liste e liste ordinate | Disense |
| 3 | code | Dispense |
| 4 | Pile | Dispense |
| 5 | Alberi binari e binari di ricerca | Dispense |
| 6 | Cenni di Complessità Computazionale | dispense |
| 7 | Grafi | Dispense |
| 8 | Algoritmi di Ordinamento | dispense |
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