Materiali Didattici Esercitazioni

torna alla pagina principale

Seduta
Materiali base
Materiali aula
Data
Durata
Argomenti coperti - Note
1
I tag HTML
Algoritmi (solo slides da 2 a 4)
Esempi HTML
12 marzo
3 ore
Panoramica su HTML ed il suo impiego nel Web.
Presentazione dei principali tag HTML e dimostrazione del loro uso e dei loro effetti.
Un esempio di definizione di algoritmo e pseudocodice: ricerca del massimo fra N numeri.
2
Commento e approfondimento di esempi di semplici programmi in C tratti dalle slides delle lezioni:
Tipi (parte III/2)
(solo slides 6, 8, 11, 26)

Struttura dei programmi C
(solo slides 12, 13sinistra, 14, 15, 39destra, 40, 41, 42, 43sinistra)
-
22 marzo
2 ore
Divisione intera e modulo.
Effetto precedenze tra operatori; parentesi
Effetti degli operatori di preincremento/postincremento e simili.
Valutazione di espressioni logiche
I/O di numeri in dec/hex/ottale
Utilizzo di scanf per la lettura di valori da tastiera
Costrutto if.. else semplice e nidificato; legame tra else e il più vicino if; uso delle parentesi graffe per imporre la struttura desiderata nei casi confusi
Uso di variabili int e float
Perdita di decimali nella divisione intera; uso di variabili float
Cicli while a condizione iniziale
La slide 42 contiene un errore: quale?
Verifica della primalità di un numero - moltiplicazione per somme ripetute
3
Ancora su HTML: pagina esempio

5 aprile
2 ore
Il tag TITLE: suo effetto e necessità di accompagnarne l'uso con i tag <HTML>, <HEAD>, <BODY>
Analisi e modifica di alcuni programmi C che evidenziano aspetti particolari:


Tavola pitagorica

cicli for, gets, atoi; struttura if; effetto del carattere \t e suo uso per ottenere tabelle regolari; come ottenere un ciclo while "perpetuo"; utilizzo dell'istruzione break per uscire prematuramente dal ciclo

Tavola pitagorica - 2 Rielaborazione dello stesso programma con decomposizione in funzioni per aumentare la leggibilità del sorgente e in particolare della funzione main.
Necessità di dichiarare le funzioni prima del punto in cui vengono utilizzate per la prima volta. Eventuali errori del compilatore in caso di violazione di questa regola.
Convertitore di formato hex-oct-dec-bin

visualizzazione di un menu; lettura opzione scelta; organizzazione del programma con struttura if-else if-else if-else; estrazione e visualizzazione dei bit da un numero intero mediante l'uso degli operatori bitwise e degli operatori di scorrimento a sinistra e a destra; utilizzo dell'istruzione return per interrompere prematuramente l'esecuzione di una funzione

Convertitore di formato hex-oct-dec-bin (2) Versione modificata dello stesso programma: la struttura if-else if-else if-else, poco leggibile, è stata sostituita con una più chiara struttura switch a 3+1 rami.
Struct e union

Differenza di filosofia e di effetto dell'uso di struct e union; strutture che contengono strutture; strutture che contengono strutture e union; progetto di una struttura dati: criteri di scelta dell'uno o dell'altro costruttore di tipo in funzione del tipo di dati da trattare. Esempi semplici: dati personali, dati personali con sottostruttura, numeri, un esempio completo: modellizzazione autoveicoli. Accompagnamento delle union con un campo descrittore ("tag") per renderne possibile una corretta interpretazione da parte del codice ricevente.
Manipolazione bitmask

Sinossi degli operatori disponibili; visualizzazione dell'effetto dell'applicazione di maschere in AND e in OR e degli scorrimenti sinistro e destro.
Funzioni strcmp, strcat, strcpy, strlen

Esempio dell'uso (e dell'effetto) di queste funzioni
Presentazione di una loro possibile implementazione equivalente a quella della libreria standard: mystrcmp, mystrlen, mystrcat, mystrcpy
4
Soluzione commentata dei due temi della I prova in itinere. Tema A, Tema B.

10 maggio
3 ore
Errori più comuni, esempi di soluzione, osservazioni.
Analisi di programmi generici di complessità da bassa a media
(parte 1 - parte 2)

Argc e argv
Sorgenti dei programmi esaminati:
Varianti Hello, World: 1, 2, 3, 4, 5
Inversione stringa
Conteggio parole e frequenze caratteri: 1, 2
Utilizzo di argv e argc nel main(..) del programma per ricevere argomenti dalla riga di comando.
Numerazione degli argomenti ricevuti.
Il significato particolare di argv[0].
Controllo della presenza di argomenti nella quantità attesa.
Scansione di stringhe e generazione di statistiche.
Utilizzo di array per immagazzinare una batteria di contatori.
5
Realizzazione  e discussione di programmi (con accesso ai files) equivalenti ad alcuni comandi di MS-DOS (type, copy).
Listati base: mytype, mycopy.

Programma Archivio

Programma per conversione numeri arabi in numeri romani - listato
Variante modificata di mytype.c

Crypt.c
(cifratura e decifratura controllate da parametri)

Decrypt.c
(solo decifratura, offset fisso)
14 giugno
2 ore
Analisi e rielaborazione di semplici programmi con accesso sequenziale a files di testo.

istruzioni di apertura e chiusura file
in lettura,
in scrittura con file esistente,
in scrittura con creazione del file;
rilevamento e gestione degli errori in apertura del file;
chiusura file;
i/o (a carattere) da/verso file;
output a carattere su schermo;
input (di stringhe) da file con fgets;
copiatura di un file su un altro;
visualizzazione del contenuto di un file di testo esistente;
manipolazione del contenuto di un file (conteggio linee, ricerca caratteri, cifratura e decifratura..)
gestione di diversi parametri su riga di comando, argc/argv
programma Archivio con funzioni di aggiunta, ricerca ed visualizzazione dell'elenco completo
cenno all'utilizzo della funzione fseek per posizionarsi a fine file

programma Conversione da numeri arabi a numeri romani (if, divisione intera, modulo, analisi caratteri,..)
6
Le liste singole e doppie. Teoria ed esempi pratici.

Documentazione
Frammenti di codice
21 giugno
2 ore
I frammenti di codice allegati si riferiscono ad alcuni degli esempi dettagliatamente discussi a esercitazione:

Esempio di dichiarazione di nodo di lista singola con campo informativo di tipo intero
Esempio di dichiarazione di puntatore alla testa della lista
Algoritmo astratto per inserimento di un nodo in una lista
Creazione e inserimento di un nuovo nodo in seconda posizione in lista singola con utilizzo di variabile temporanea
Creazione e inserimento di un nuovo nodo in seconda posizione in lista singola senza utilizzo di variabile temporanea
Rimozione di secondo nodo da lista singola
Inserimento di nuovo nodo in seconda posizione in lista doppia
Rimozione secondo nodo da lista doppia
Accesso al campo informativo del terzo nodo di una lista singola o doppia
Lettura da tastiera del campo informativo di tipo intero del secondo nodo di una lista doppia di tre elementi
Lettura da tastiera del campo informativo di tipo stringa del primo nodo di una lista singola o doppia