FONDAMENTI DI PROGRAMMAZIONE F - O
Modulo PROGRAMMAZIONE I

Anno accademico 2023/2024 - Docente: Orazio TOMARCHIO

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.

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

  • 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

  • Notazione esponenziale o scientifica dei numeri. Arrotondamento dei valori numerici;
  • Numeri reali. Operazioni con numeri reali. Potenza ad esponente razionale e reale. Logaritmo di un numero reale positivo;
  • Concetto di funzione matematica;
  • Vettori e Matrici: Operazioni con vettori e matrici.

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

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

  • [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

 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

Prova in itinere

  • Il modulo prevede una prova in itinere
    • sviluppo di una applicazione al calcolatore della durata, di norma, da 60 a 90 minuti
  • La partecipazione alla prova in itinere è subordinata
    • alla frequenza di almeno il 70% delle lezioni del modulo
  • La prova in itinere si svolgerà al termine del modulo
  • La prova in itinere ha valore solo nell’anno accademico in corso 

Prova finale del modulo Programmazione I

  • Sviluppo di una applicazione al calcolatore della durata, di norma, da 60 a 90 minuti
  • La prova ha valore solo nell’anno accademico in corso 

Prova di esame dell’insegnamento

  • Consiste nel superamento delle prove finali del modulo Programmazione I e del modulo Programmazione II
  • Le prove di entrambi i moduli potranno essere svolte nello stesso appello

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