Il modulo Programmazione I del corso Fondamenti di Programmazione si concentra sulla formazione di studenti competenti nella programmazione ANSI C, capaci di affrontare sfide di media complessità, di valutare, scegliere e progettare algoritmi, di comunicare usando le tecniche più appropriate ed un linguaggio informatico appropriato. Il modulo include cenni di rappresentazione dell’informazione, di architettura del calcolatore e sistemi operativi.
Al termine di questo modulo lo studente ha una conoscenza completa del linguaggio ANSI C.
Conoscenza e capacità di comprensione (knowledge and understanding):
L'obiettivo principale è fornire agli studenti una conoscenza del linguaggio di programmazione ANSI C, compresa la comprensione della sua sintassi, semantica e applicazioni. Il modulo si concentra sui tipi di dato, variabili, operatori, strutture di controllo, funzioni e puntatori.
· conoscenza elementare dei sistemi di numerazione e rappresentazione dell’informazione
· conoscenza elementare dell'architettura del calcolatore e dei principi di funzionamento dei sistemi operativi
· conoscenza delle tecniche di soluzione dei problemi, dei principi dell'informatica
· conoscenza del paradigma di programmazione di tipo procedurale.
· conoscenza della sintassi e della semantica del linguaggio ANSI C
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 ANSI C e le loro applicazioni pratiche, con particolare attenzione alle funzioni di input/output, la manipolazione delle stringhe, 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)
Capacità di apprendimento (learning skills)
Gli studenti saranno in grado di analizzare e valutare problemi di media complessità quali la gestione di sequenze, dimensionamento, elaborazione che prevede l’uso di allocazione di memoria e 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.
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
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.
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
CONCETTI PRELIMINARI
- Algoritmi
o Concetti di base sull'elaborazione dell'informazione e sugli algoritmi.
o Proprietà di un algoritmo.
o Notazioni testuali e grafiche per esprimere algoritmi.
o Sviluppo di algoritmi semplici.
- Rappresentazione dell'informazione
o Sistemi numerici e conversioni tra di essi.
o Sistema di numerazione binaria.
o Operazioni tra numeri binari.
o Rappresentazione dei numeri interi, inclusi quelli con segno.
o Gestione di overflow e underflow.
o Rappresentazione in virgola fissa e mobile.
o Codici e rappresentazione dei caratteri.
o Algebra di Boole, funzioni logiche, espressioni logiche e applicazioni dell'algebra booleana.
- Architettura del Calcolatore e Linguaggi di Programmazione
o Struttura di un elaboratore: unità centrale, memoria centrale, unità di ingresso-uscita, memoria di massa.
o Funzionamento elementare dell'elaboratore.
o Introduzione al sistema operativo: struttura e modalità di funzionamento.
o Linguaggi di programmazione: tipologie, traduzione ed esecuzione dei programmi.
o Compilatori ed interpreti.
o Ambienti di programmazione e sviluppo.
- IL LINGUAGGIO ANSI C
- Elementi fondamentali del linguaggio C, inclusa la sintassi.
o Struttura di un programma C.
o Tipi di dati e rappresentazioni.
o Variabili, costanti e istruzioni di assegnazione.
o Operatori aritmetici, relazionali e logici.
o Espressioni.
o Funzioni di base di input/output da console: printf e scanf.
o Strutture di controllo: if-else, switch e iterazioni (while, do-while, for).
o Ambienti di sviluppo C, compilazione, esecuzione e debugging.
- Tipi Strutturati
o Array monodimensionali.
o Stringhe e array di stringhe.
o Array multidimensionali.
o Variabili puntatore e operatori ed espressioni con puntatori.
o Puntatori ed array e loro equivalenza
o Strutture, array di strutture, puntatori a strutture, array e strutture all'interno di altre strutture.
o Altre strutture come unione ed enumerazioni.
o Sizeof e typedef.
- Funzioni
o
Definizione e
dichiarazione di funzioni.
o
Regole di
visibilità delle funzioni.
o
Argomenti delle
funzioni, inclusi quelli di main
o
Istruzione return e
valori restituiti da una funzione.
o
Ricorsione.
o
Dichiarazioni e
campo di azione degli identificatori.
o
Tecniche di legame
dei parametri.
o
Effetti collaterali
ed implementazione delle funzioni.
o Utilizzo di puntatori a funzioni.
- Gestione dell’Input/Output (I/O)
o I/O formattato
o File di testo e binari
o Operazioni di lettura e scrittura su file.
- Gestione della Memoria
o
Memoria heap e
allocazione dinamica dei vettori
[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
| Argomenti | Riferimenti testi | |
|---|---|---|
| 1 | Algoritmi | libro di testo |
| 2 | Rappresentazione dell'informazione | libro di testo |
| 3 | 3.- Architettura del Calcolatore e Linguaggi di Programmazione | libro di testo |
| 4 | Elementi fondamentali del linguaggio C | libri di testo |
| 5 | Tipi Strutturati | libri di testo |
| 6 | Funzioni | libri di testo |
| 7 | Gestione dell’Input/Output (I/O) | libri di testo |
| 8 | Gestione della Memoria | libri di testo |
Prova finale del modulo Programmazione I
La prova finale del modulo 1 consiste nello sviluppo di una applicazione al calcolatore della durata, di norma, da 60 a 90 minuti:
Prova di esame dell’insegnamento
Esempi di domande ed esercizi sono disponibili sul portale Studium.UniCT di Ateneo e/o la piattaforma Microsoft Teams