INGEGNERIA ELETTRICA ELETTRONICA E INFORMATICAIngegneria informaticaAnno accademico 2024/2025

9797558 - FONDAMENTI DI PROGRAMMAZIONE A - E
Modulo PROGRAMMAZIONE I

Docente: MARCO GRASSIA

Risultati di apprendimento attesi

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.

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 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.

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.

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

CONCETTI PRELIMINARI

  • Algoritmi
    • Concetti di base sull'elaborazione dell'informazione e sugli algoritmi.
    • Proprietà di un algoritmo.
    • Notazioni testuali e grafiche per esprimere algoritmi.
    • Sviluppo di algoritmi semplici.
  • Rappresentazione dell'informazione
    • Sistemi numerici e conversioni tra di essi.
    • Sistema di numerazione binaria.
    • Operazioni tra numeri binari.
    • Rappresentazione dei numeri interi, inclusi quelli con segno.
    • Gestione di overflow e underflow.
    • Rappresentazione in virgola fissa e mobile.
    • Codici e rappresentazione dei caratteri.
    • Algebra di Boole, funzioni logiche, espressioni logiche e applicazioni dell'algebra booleana.
  • Architettura del Calcolatore e Linguaggi di Programmazione
    • Struttura di un elaboratore: unità centrale, memoria centrale, unità di ingresso-uscita, memoria di massa.
    • Funzionamento elementare dell'elaboratore.
    • Introduzione al sistema operativo: struttura e modalità di funzionamento.
    • Linguaggi di programmazione: tipologie, traduzione ed esecuzione dei programmi.
    • Compilatori ed interpreti.
    • Ambienti di programmazione e sviluppo.

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 base di input/output 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 e operatori ed espressioni con puntatori.
    • Puntatori ed array e loro equivalenza
    • Strutture, array di strutture, puntatori a strutture, array e strutture all'interno di altre strutture.
    • Altre strutture come unione 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.
    • Ricorsione.
    • Dichiarazioni e campo di azione degli identificatori.
    • Tecniche di legame dei parametri.
    • Effetti collaterali ed implementazione delle funzioni.
    • Utilizzo di 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.
  • Gestione della Memoria
    • Organizzazione della memoria in un programma (globale, heap e stack)
    • Memoria heap e allocazione dinamica dei vettori

Testi di riferimento

Programmazione del corso

 ArgomentiRiferimenti testi
1Algoritmi[BeGu] Capitolo 3
2Rappresentazione dell'informazione[BeGu] App. D, E
3Architettura del Calcolatore e Linguaggi di Programmazione[BeGu] Capitolo 1, 2, 4
4Elementi fondamentali del linguaggio C[BeGu] Capitolo 5, 6, 7, 8, 9
5Tipi Strutturati[BeGu] Capitolo 10, 13, 14, 16
6Funzioni[BeGu] Capitolo 11, 15
7Gestione dell’Input/Output (I/O)[BeGu] Capitolo 17
8Gestione della memoria[BeGu] Capitolo 14

Verifica dell'apprendimento

Modalità di verifica dell'apprendimento

Modalità di verifica dell'apprendimento

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 e/o esercizi frequenti

Esempi di domande ed esercizi sono disponibili sul portale Studium.UniCT di Ateneo e/o la piattaforma Microsoft Teams.

English version