Corso di Laurea in Ingegneria Elettronica - Università di Roma "La
Sapienza"
Corso di Fondamenti di Informatica - A.A. 2001/2002
Registro del Corso
Materiale didattico: testi di riferimento
[L1] H. Deitel, P. Deitel.
C Corso completo di Programmazione. Apogeo, 2000.
[L2] D. Calvanese, P. Liberatore, F. Massacci,
R. Rosati. Programmazione con strutture dati in
C. Esculapio, Progetto Leonardo, Bologna, 2001.
[D1] Architettura del
calcolatore e rappresentazione dell'informazione (complementi al corso
di Fondamenti di Informatica per il corso di Laurea in Ingegneria Elettronica
A.A. 2001/2002). D. D'Aloisi. 2002.
[D2] Dispensa di Fondamenti di Informatica:
Guida all'uso di LCC-Win32 per la programmazione in
C. A.A. 2001/2002.
Programmi
Tutti i programmi svolti a lezione e
assegnati come esercizio sono disponibili via internet all'indirizzo
http://www.dis.uniroma1.it/~calvanes/didattica/01-02-fond-el/programs/.
I programmi accessibili direttamente da questa pagina sono in formato HTML
(per evidenziare la sintassi con colori diversi) e non in formato testo.
Cliccando sul nome del file nella prima riga si accede alla versione in formato
testo del programma (che può essere salvata sul proprio disco rigido).
Lezioni
Completi: lucidi.pdf
Suddivisi per argomento:
- Introduzione all'elaborazione
automatica delle informazioni (pubblicato 18/3/2002)
- I sistemi di elaborazione (pubblicato
18/3/2002)
- La programmazione nel linguaggio C
- Introduzione ai programmi C
(pubblicato 18/3/2002)
- Istruzioni
condizionali
(pubblicato 18/3/2002, ultime 3 slide del 25/3/2002)
- Istruzioni iterative (o
cicliche)
(pubblicato 25/3/2002, ultime 2 slide del 27/3/2002)
- Modularizzazione e
funzioni
(pubblicato 25/3/2002) e
ricorsione
(pubblicato 5/4/2002)
- Puntatori
(pubblicato 5/4/2002)
- Tipi primitivi
(pubblicato 16/4/2002)
- Array
(pubblicato 16/4/2002, ultime 4 slide del 6/5/2002)
- Stringhe
(pubblicato 6/5/2002)
- Strutture e file
(pubblicato 6/5/2002)
- Liste collegate
(pubblicato 14/5/2002)
- Tipi di dato astratti (pile, code,
alberi)
(pubblicato 21/5/2002)
- La complessità di calcolo
(pubblicato 28/5/2002)
- Algoritmi di ricerca e di
ordinamento
(pubblicato 28/5/2002)
Tabella riassuntiva
Sett |
Argomento |
Lunedì |
Martedì |
Mercoledì
(lez.) |
Mercoledì
(lab.) |
#1 11 mar |
Archit. calc. Rappres. info.
|
Introduzione al corso
(Lez 1,2)
|
Algoritmi e programmi
(Lez 3,4)
|
Arch. del calcolatore, compilazione
(Lez 5,6)
|
Rappr. di naturali
(Lez 7,8)
|
#2 18 mar. |
Introduzione al C |
Rappr. di interi e reali
(Lez 9,10)
|
Introduzione al C
(Lez 11,12)
|
If-else, istr. composta
(Lez 13,14)
|
Operatori booleani istr. switch
(Lez 15,16)
|
#3 25 mar. |
Strutture di controllo |
Istruzioni iterative
(Lez 17,18)
|
Esercitazione in laboratorio
(Eser 19,20 - Lun.)
|
Cicli definiti e indefiniti, Cicli annidati
(Lez 21-23 - Mar.)
|
Modularizzazione, funzioni
(Lez 24-26)
|
#4 1 apr. |
Funzioni |
-- |
-- |
Funzioni con parametri e valore di ritorno
(Lez 27,28)
|
Esercitazione in laboratorio
(Lez 29,30)
|
#5 8 apr. |
Ricorsione Puntatori |
Gestione della memoria, Ricorsione
(Lez 31-33)
|
Ricorsione multipla, Puntatori
(Lez 34-36)
|
Parametri per indirizzo
(Lez 37,38)
|
Esercitazione in laboratorio
(Lez 39,40)
|
#6 15 apr. |
Tipi primitivi, Array |
Tipi primitivi del C
(Lez 41-43)
|
-- |
Vettori
(Lez 44,45)
|
Esercitazione in laboratorio
(Lez 46,47)
|
#7 29 apr. |
Array |
Vettori e puntatori
(Lez 48-50)
|
Matrici e array dinamici Stringhe
(Lez 51-53)
|
-- |
Esercitazione in laboratorio
(Lez 54,55 - Ven.)
|
#8 6 mag. |
Array e stringhe |
Esercizio ricorsione, Libreria caratteri
(Lez 56-58)
|
Libreria stringhe
(Lez 59,60)
|
Strutture
(Lez 61,62)
|
Esercitazione in laboratorio
(Lez 63,64)
|
#9 13 mag. |
File, Liste collegate |
File
(Lez 65,66)
|
Liste collegate
(Lez 67,68)
|
Liste collegate
(Lez 69,70)
|
Esercitazione in laboratorio
(Lez 71,72)
|
#10 20 mag. |
Liste collegate |
Liste collegate
(Lez 73,74)
|
Esercizio sulle liste
(Lez 75,76)
|
Tipi astratti
(Lez 77,78)
|
Esercitazione in laboratorio
(Lez 79,80)
|
#11 27 mag. |
Tipi di dato astratti |
Pile e Code
(Lez 81,82)
| Alberi binari
(Lez 83,84)
|
Complessità
(Lez 85,86)
|
Esercitazione in laboratorio
(Lez 87,88)
|
#12 3 giu. |
Complessità,
ordinamento |
Ricerca binaria, Ordinamento
(Lez 89,90)
|
Ordinamento
(Lez 91,92)
|
Esercizio di esame
(Lez 93,94)
|
Esercizio di esame
(Lez 95,96)
|
Dettaglio
Settimana 1:
Architettura del calcolatore e rappresentazione dell'informazione
Lezioni 1,2 -- 11/3/2002
- Argomenti trattati
- presentazione del corso
- la soluzione di problemi -> il concetto di algoritmo
- Cosa lo studente dovrebbe sapere dopo la lezione
Lezioni 3,4 -- 12/3/2002
- Argomenti trattati
[L2, Prefazione, Parr.3.3-3.4]
[D1, Parte 1]
- definizione e proprietà di algoritmi
- pseudocodice per la specifica di algoritmi
- architettura di un calcolatore
- struttura e accesso alla memoria centrale
- Cosa lo studente dovrebbe sapere dopo la lezione
- quali sono le proprietà di un algoritmo
- quali sono le strutture di controllo nello pseudocodice
- come è strutturata la memoria centrale
Lezioni 5,6 -- 13/3/2002
- Argomenti trattati
[D1, Parte 1]
- architettura di un calcolatore
- bus di sistema
- organizzazione e funzionamento della CPU
- dal codice sorgente al codice macchina
- il processo di compilazione
- codice assembler
- codice macchina
- Cosa lo studente dovrebbe sapere dopo la lezione
- come è organizzata una CPU
- come avviene l'esecuzione di istruzioni da parte della CPU
- come avviene il passaggio dal codice sorgente al codice macchina
- quali sono i principali tipi di istruzione del codice assembler
Lezioni 7,8 - 13/3/2002
- Argomenti trattati
[D1, Parte 2]
- codifica binaria dell'informazione: rappresentazione di numeri
naturali
- conversioni di base
- operazioni fatte nella base di arrivo
- operazioni fatte nella base di partenza
- quando una base è potenza di un'altra
- Cosa lo studente dovrebbe sapere dopo la lezione
- come vengono rappresentati i numeri naturali
- come si converte un numero da una base ad un'altra
- Esercizi proposti
- specifica dell'algoritmo di conversione da base p a base 10
Settimana 2:
Rappresentazione dell'informazione
Lezioni 9,10 - 18/3/2002
- Argomenti trattati
[D1, Parte 2]
- rappresentazione di numeri interi
- operazioni aritmetiche tra numeri in complemento
- rappresentazione di numeri reali
- Cosa lo studente dovrebbe sapere dopo la lezione
- come si rappresentano interi e reali in un calcolatore
- come si effettuano operazioni aritmetiche tra numeri interi
rappresentati in complemento
Lezioni 11,12 - 19/3/2002
- Argomenti trattati
[L1, Cap.2]
- il primo programma C
- commenti
- funzione main
- istruzione di stampa (printf)
- istruzione di return
- nozione di blocco
- nozione di variabile
- dichiarazioni di variabili
- istruzione di ingresso (scanf)
- istruzione di assegnazione
- Cosa lo studente dovrebbe sapere dopo la lezione
- come è strutturato un semplice programma C
- come si stampano stringhe di caratteri
- quali sono le caratteristiche di una variabile
- come si dichiarano e usano variabili
- come si leggono dati da tastiera
- differenza tra parte destra e sinistra in un'assegnazione
- Programmi discussi
- il primo programma
[ciao.c]
- area di un rettangolo di dimensioni fisse
[arearet1.c]
- area di un rettangolo di dimensioni lette da tastiera
[arearet2.c]
- Esercizi proposti
- conversione da Euro in Lire
[eurolire.c]
- quoziente e resto di una divisione tra due interi
[divisione.c]
- soluzione di un'equazione quadratica a discriminante positivo
[eq2dispo.c]
Lezioni 13,14 - 20/3/2002
- Argomenti trattati
[L1, Par.2.6, Parr.3.1-3.6, Par.4.11]
- istruzioni condizionali (if e if-else)
- istruzione composta
- operatori relazionali (==, !=, <,
>, <=, >=)
- if-else annidati
- Cosa lo studente dovrebbe sapere dopo la lezione
- utilizzare le istruzioni if e if-else semplici e
annidate
- usare gli operatori relazionali
- Programmi discussi
- Esercizi proposti
Lezioni 15,16 - 20/3/2002
- Argomenti trattati
[L1, Par.4.10, Par.4.7]
- operatori booleani (!, &&, ||)
- istruzione switch
- Cosa lo studente dovrebbe sapere dopo la lezione
- utilizzare gli operatori booleani
- utilizzare l'istruzione switch
- Programmi discussi
- calcolo del numero di giorni di un mese
[giormese.c]
- esempio di istruzione switch senza break in ogni
ramo
[switchnb.c]
- Esercizi proposti
- tipo di un triangolo utilizzando condizioni complesse
[triang3.c]
- lettura di giorno, mese ed anno di una data e calcolo della
data del giorno successivo
[datasucc.c]
Settimana 3:
Strutture di controllo
Lezioni 17,18 - 25/3/2002
- Argomenti trattati
[L1, Parr.3.7-3.8, Parr.3.11-3.12]
- istruzione while
- cicli definiti (controllati da contatore)
- operatori di incremento (++), decremento (++),
assegnazione (=)
- la nozione di side-effect
- Cosa lo studente dovrebbe sapere dopo la lezione
- aver compreso le nozioni di ciclo definito e indefinito
- utilizzare l'istruzioni while per implemetare cicli
controllati da contatore
- aver compreso la nozione di side-effect
- usare gli operatori di incremento, decremento, assegnazione
- Programmi discussi
- calcolo del massimo di 10 interi positivi letti da tastiera
[massimo.c]
- Esercizi proposti
- somma di 10 interi letti da tastiera
[somma.c]
- calcolo del massimo di 10 interi letti da tastiera
[massimoi.c]
- lettura di N da tastiera e stampa dei primi N numeri pari
[pari.c]
Lezioni 19,20 - 25/3/2002 - in laboratorio
- Argomenti trattati
[D2]
- Cosa lo studente dovrebbe sapere dopo la lezione
- scrivere, compilare, e mandare in esecuzione semplici programmi
C nell'ambiente Lcc-Win32
- Esercizi svolti
- Esercizi proposti
Lezioni 21-23 - 26/3/2002
- Argomenti trattati
[L1, Parr.3.9-3.11, Parr.4.1-4.6, Par.4.8]
- forme abbreviate dell'assegnazione (+=, -=,
*=, /=, %=)
- istruzione for
- cicli indefiniti
- istruzione do-while
- cicli annidati
- Cosa lo studente dovrebbe sapere dopo la lezione
- aver compreso la nozione di ciclo indefinito
- le differenze tra le istruzioni while e do-while
- saper usare cicli annidati
- Programmi discussi
- calcolo della lunghezza di una sequenza di interi nonnulli
terminata da 0, usando un ciclo do-while
[lung2.c]
- calcolo del massimo comun divisore di due interi positivi
- utilizzando direttamente la definizione
[mcd1.c]
- utilizzando l'algoritmo di euclide
[mcd2.c]
- con il controllo sui dati in ingresso
[mcd3.c]
- lettura di una sequenza di 0 e 1 (separati da spazi)
terminata da 2, e calcolo della più lunga
sottosequenza di soli 0
[sequenz1.c]
- stampa della tavola pitagorica
[pitagor1.c]
- Esercizi proposti
- riscrivere tutti gli esempi ed esercizi visti finora usando
l'istruzione for invece dell'istruzione while
- calcolo del fattoriale di un intero letto da tastiera
[fattiter.c]
- somma dei positivi e dei negativi di una sequenza letta da tastiera
- calcolo della lunghezza di una sequenza di interi positivi
terminata da 0, usando un ciclo while
[lung1.c]
- lettura di una sequenza di numeri interi diversi da 0
terminata da 0 e stampa della somma dei numeri positivi e
della somma dei numeri negativi
[sompone3.c]
- calcolo del massimo comun divisore di due interi positivi
- utilizzando l'algoritmo di euclide con i resti
[mcd4.c]
- utilizzando l'algoritmo di euclide con i resti nella versione
ottimizzata che non usa if-else nel ciclo
[mcd5.c]
- dimostrare la correttezza della formula alla base
dell'algoritmo di euclice
(dimostrazione)
- ottimizzare l'algoritmo (ed il codice) per il calcolo della
più lunga sottosequenza di soli 0, in modo da aggiornare la
lunghezza massima solo al termine di una sequenza di soli 0
[sequenz2.c]
Lezioni 24-26 - 27/3/2002
- Argomenti trattati
[L1, Par.4.9, Parr.5.1-5.5, Par.5.12]
- output formattato
- instruzione break
- cenni sulla modularizzazione di un programma
- astrazione funzionale
- funzioni in C senza parametri
- definizione di funzione
- chiamata (o attivazione, invocazione) di funzione
- variabili locali ad una funzione (visibilità di un
identificatore e tempo di vita (esistenza) di una variabile)
- Cosa lo studente dovrebbe sapere dopo la lezione
- cosa vuol dire modularizzare un programma
- cos'è l'astrazione funzionale
- definire ed attivare semplici funzioni senza parametri
- Programmi discussi
- stampa di una piramide di asteristichi con altezza letta da
tastiera
[piramid1.c]
- interfaccia per la stampa di figure geometriche
- stampa di messaggi al posto delle figure (funzioni senza
variabili locali e senza parametri)
[figure0.c]
- figure di dimensione fissa (funzioni con variabili locali e
senza parametri)
[figure1.c]
- figure di dimensione variabile (funzioni con variabili locali
e con parametri)
[figure2.c]
- Esercizi proposti
- stampa di una tavola pitagorica con riga e colonna di
intestazione
[pitagor2.c]
- stampa di una piramide di
numeri con altezza letta da tastiera
[piramid2.c]
- calcolo del fattoriale di tutti i numeri compresi tra 1 ed un
intero letto da tastiera
[fatttab.c]
- stampa di un rettangolo di asterischi di larghezza fissa usando una
funzione per la stampa di una riga di asterischi
Settimana 4: Funzioni
Lezioni 27,28 - 3/4/2002
- Argomenti trattati
[L1, Parr.5.4-5.5]
- parametri formali (per valore) e attuali
- funzioni che restituiscono un valore
- Cosa lo studente dovrebbe sapere dopo la lezione
- dichiarare, definire, ed attivare semplici funzioni con parametri
(per valore)
- Programmi discussi
- interfaccia per la stampa di figure geometriche di dimensione
variabile (funzioni con variabili locali e con parametri)
[figure2.c]
- maggiore tra due interi
[maggfun.c]
- conversione da "cifra romana" a intero (come funzione)
[romani1.c]
- conversione di un numero romano in un intero,
assumendo che la sequenza di "cifre romane" sia decrescente
[romani2.c]
- Esercizi proposti
- stampa di un rettangolo di asterischi di larghezza e spostamento
variabili usando una funzione per la stampa di una riga di
asterischi
[rettang3.c]
- interfaccia per la stampa di figure geometriche di dimensione,
spostamento e carattere di riempimento variabili
[figure4.c]
- interfaccia per stampa di figure geometriche di dimensione,
spostamento e carattere di riempimento variabili utilizzando una
funzione di stampa di una sequenza di caratteri
[figure5.c]
- conversione di un numero romano in un intero per un numero romano
qualunque (assunto corretto)
[romani3.c]
Lezioni 29,30 - 3/4/2002 - in laboratorio
- Argomenti trattati
[D2]
- seconda esercitazione
autoguidata:
esercizi su istruzioni condizionali (if, if-else,
switch), e cicliche (while, do-while)
- ambiente Lcc-Win32
- modalità generali di lavoro
- ispezione delle variabili
- esecuzione passo-passo
- Cosa lo studente dovrebbe sapere dopo la lezione
- utilizzare le funzionalità di ispezione delle variabili
e di esecuzione passo-passo dell'ambiente Lcc-Win32
- Esercizi proposti
- determinazione del tipo di un carattere
[tipocar.c]
- verifica se un numero è primo
[primo.c]
Settimana 5: Ricorsione, puntatori
Lezioni 31-33 - 8/4/2002
- Argomenti trattati
[L1, Parr.5.6-5.13]
- dichiarazioni (prototipi) di funzione
- file di intestazione (file header) e librerie standard del C
- funzioni matematiche dichiarate nel file header math.h
- gestione della memoria a tempo di esecuzione (pila dei record di
attivazione)
- variabili statiche
- la ricorsione
- funzioni ricorsive
- definizioni induttive
- Cosa lo studente dovrebbe sapere dopo la lezione
- dichiarare, definire, ed attivare semplici funzioni con parametri
(per valore)
- le differenze tra variabili statiche e variabili automatiche
- cosa sono i record di attivazione delle funzioni e come sono
gestiti durante l'esecuzione di un programma
- descrivere l'evoluzione della pila dei record di attivazione
durante l'esecuzione di un programma con funzioni ricorsive
- scrivere programmi che utilizzano funzioni ricorsive
- Programmi discussi
- contatore di attivazione di funzioni
[contaatt.c]
- esemplificazione dell'evoluzione della pila dei record di
attivazione
[stack.c]
- programma che usa una funzione ricorsiva
[ricorsio.c]
- calcolo del fattoriale usando una funzione ricorsiva
[fattoria.c]
- lettura di una sequenza di caratteri e stampa al contrario,
utilizzando una funzione ricorsiva
[invertic.c]
- Esercizi proposti
- calcolo del numero di combinazioni con ripetizione utilizzando una
funzione per il calcolo del fattoriale
[combi.c]
- modularizzare i programmi visti finora a lezione o dati come
esercizio attraverso l'introduzione di opportune funzioni
- illustrare l'evoluzione della pila dei record di attivazione per
semplici programmi visti a lezione che utilizzano funzioni
- aggiungere al programma
driveint.c
le funzioni ricorsive che calcolano le operazioni di somma,
prodotto ed elevamento a potenza sfruttando la
definizione induttiva di tali
operazioni
[operindu.c]
- leggere un numero intero positivo e stamparne le cifre al
contrario, utilizzando una funzione ricorsiva
[invertin.c]
- funzione che legge una sequenza di caratteri con un punto centrale
e determina se è palindroma
[palinric.c]
Lezioni 34-36 - 9/4/2002
- Argomenti trattati
[L1, Parr.5.13-5.15, Parr.7.1-7.3]
- ricorsione multipla
- variabili di tipo puntatore
- dichiarazione di puntatori
- inizializzazione di puntatori
- stampa di puntatori
- operatori di indirizzo (&) e di dereferenziamento
(*)
- differenza tra puntatori e interi
- compatibilità tra tipi puntatore
- operatore sizeof applicato a variabili di tipo puntatore e
a puntatori derefenziati
- Cosa lo studente dovrebbe sapere dopo la lezione
- descrivere l'evoluzione della pila dei record di attivazione
durante l'esecuzione di una funzione con ricorsione multipla
- sapere cosa sono i puntatori
- utilizzare gli operatori di indirizzo (&) e di
dereferenziamento
- Programmi discussi
- Esercizi proposti
Lezioni 37,38 - 10/4/2002
- Argomenti trattati
[L1, Parr.7.3-7.4, 12.3]
- passaggio di parametri per indirizzo
- allocazione dinamica della memoria
- funzione malloc per l'allocazione dinamica
- lo heap
- Cosa lo studente dovrebbe sapere dopo la lezione
- come passare parametri per indirizzo ad una funzione
- come utilizzare l'allocazione dinamica della memoria
- Programmi discussi
- esempio di passaggio di parametri per indirizzo
[parametr.c]
- funzione per lo scambio dei valori di due variabili
[scambio.c]
- stampa di due valori ordinati
[ordina2.c]
- funzione per il calcolo della data del giorno dopo
[datasuN1.c]
- Esercizi proposti
- calcolo della data di n giorni dopo
- versione che itera n volte il calcolo della data del giorno
dopo
[datasuN1.c]
- versione ottimizzata che passa direttamente al primo del mese
successivo
[datasuN2.c]
Lezioni 39,40 - 10/4/2002 - in laboratorio
- Argomenti trattati
[D2]
- terza esercitazione
autoguidata: esercizi sull'uso di funzioni
- ambiente LCC-Win32
- comandi Step in, Same level e
Step out per eseguire passo-passo un programma
con diverse funzioni
- Cosa lo studente dovrebbe sapere dopo la lezione
- eseguire passo-passo un programma con diverse funzioni
- Esercizi proposti
- stampa delle cifre di un numero a due cifre come cifra o in
italiano, utilizzando funzioni
[duecifre.c]
- calcolo del massimo comun divisore e del minimo comune multiplo
[mcmmcd.c]
- somma di due numeri razionali rappresentati come frazioni
[sommaraz.c]
Settimana 6: Tipi primitivi, array
Lezioni 41-43 - 15/4/2002
- Argomenti trattati
[L1 Par.12.3, Cap.9]
- deallocazione dinamica della memoria
- funzione free per
- tempo di vita di variabili allocate dinamicamente
- classificazione dei tipi primitivi del C
- tipi interi del C:
- interi con segno: short, int, long
- interi senza segno: unsigned short, unsigned
int, unsigned long
- tipi carattere: char, signed char,
unsigned char
- reali in C: float, double, long double
- conversioni tra tipi aritmetici del C
- conversioni implicite
- conversioni sicure (e non sicure)
- conversioni in assegnazione
- operatore di cast
- input/output formattato
- formattazione dell'output con printf
- specificatori di formato per l'output
- formattazione dell'input con scanf
- specificatori di formato per l'input
- gruppi di scansione
- soppressione dell'input
- Cosa lo studente dovrebbe sapere dopo la lezione
- come utilizzare l'allocazione e la deallocazione dinamica della
memoria
- conoscere i tipi primitivi del C e le loro proprietà
- intervalli di definizione (operatore sizeof, file
limits.h e file float.h)
- operazioni
- rappresentazione delle costanti
- funzionalità di ingresso/uscita
- sapere come vengono effettuate le conversioni di tipo tra i tipi
aritmetici
- sapere come viene effettuato l'input/output formattato
- Programmi discussi
- allocazione e deallocazione dinamica della memoria
[puntator.c]
- tempo di vita di variabili allocate dinamicamente
[vitadin.c]
- intervalli di definizione per i tipi interi con segno
[intlim.c]
- intervalli di definizione per i tipi interi senza segno
[unsiglim.c]
- intervalli di definizione per i tipi carattere
[charlim.c]
- operazioni aritmetiche tra due interi
[charop.c]
- intervalli di definizione per i tipi reali
[floatlim.c]
- ingresso e uscita di reali formattato e non
[floatio.c]
- ingresso e uscita per i tipi aritmetici
[tipiarit.c]
- Esercizi proposti
Lezioni 44,45 - 17/4/2002
- Argomenti trattati
[L1 Parr.6.1-.6.4]
- vettori (o array monodimensionali)
- dichiarazioni di variabili di tipo vettore
- accesso agli elementi di un vettore
- inizializzazione di un vettore
- Cosa lo studente dovrebbe sapere dopo la lezione
- come si dichiarano ed usano vettori
- come si inizializzano vettori
- Programmi discussi
- lettura e stampa di un vettore
[vettrw.c]
- ripetizioni del risultato di un esperimento
[esperime.c]
- frequenza delle cifre in una sequenza di caratteri
- Esercizi proposti
- massimo di un vettore di 10 elementi interi
- Esercizio 6.15 del Deitel&Deitel
- leggere una sequenza di caratteri terminata da '\n' e
- stampare la frequenza della lettera alfabetica maiuscola a
frequenza massima tra tutte le lettere maiuscole
- stampare la frequenza della lettera alfabetica a frequenza
massima tra tutte le lettere (ignorando la differenza tra
maiuscole e minuscole)
Lezioni 46,47 - 17/4/2002 - in laboratorio
- Argomenti trattati
[D2]
- quarta esercitazione
autoguidata: esercizi sull'uso di funzioni e sulla ricorsione
- ambiente LccWin32
- comando Stack per visualizzare la pila delle
attivazioni nello stato corrente
- Cosa lo studente dovrebbe sapere dopo la lezione
- visualizzare la pila delle attivazioni durante l'esecuzione
- Esercizi proposti
Settimana 7: Array
Lezioni 48-50 - 29/4/2002
- Argomenti trattati
[L1, Parr.6.5, 6.9, 7.7-7.8]
- array multidimensionali e matrici
- inizializzazione di matrici
- aritmetica dei puntatori
- operazioni ammesse sui puntatori
- relazione tra vettori e puntatori
- passaggio di parametri di tipo vettore
- Cosa lo studente dovrebbe sapere dopo la lezione
- come si dichiarano ed usano matrici
- come viene calcolato l'indirizzo denotato da un'espressione in cui
si usano operazioni aritmetiche su puntatori
- che relazione sussiste tra vettori e puntatori
- come avviene il passaggio di un vettore ad una funzione
- Programmi discussi
- lettura e stampa di una matrice
[matrici.c]
- somma di due matrici
[matsomma.c]
- prodotto di due matrici
[matprod.c]
- verifica se le somme di tutte le righe di una matrice coincidono
[matsomri.c]
- esempio di passaggio di un vettore ad una funzione
[vettfunz.c]
- inversione di un vettore
[vettinv.c]
- Esercizi proposti
- programma che legge una matrice di dimensioni MxN e
- stampa l'elemento massimo con i suoi indici di riga e colonna
- costruisce il vettore degli elementi massimi di ogni riga, e
lo stampa
- verifica se è diagonale (in questo caso M=N)
- verifica se è simmetrica
- calcola la matrice trasposta
- programma che verifica se una matrice quadrata è magica
[magica.c]
Lezioni 51-53 - 30/4/2002
- Argomenti trattati
[L1 Parr.6.9, 7.5, 7.9, 12.3, 8.1-8.2]
- passaggio di parametri di tipo matrice
- esercizi sulle matrici
- array dinamici
- vettori di puntatori
- utilizzo del qualificatore const per la dichiarazione dei
parametri formali di una funzione
- stringhe
- dichiarazione di stringhe
- inizializzazione di stringhe
- input/output di stringhe
- Cosa lo studente dovrebbe sapere dopo la lezione
- come si dichiarano e si utilizzano parametri di tipo matrice
- come si allocano e si utilizzano array dinamici
- come si dichiarano vettori di puntatori
- quando si utilizza il qualificatore const
- cosa sono le stringhe in C, e come si utilizzano
- Programmi discussi
- programma che legge una matrice dimensioni MxN e usando opportune
funzioni:
- stampa l'elemento massimo con i suoi indici di riga e colonna
[matmax.c]
- costruisce il vettore degli elementi massimi di ogni riga, e
lo stampa
[matvetma.c]
- verifica se è diagonale (in questo caso M=N)
[matdiago.c]
- verifica se è simmetrica
[matsimm.c]
- calcola la matrice NxM trasposta
[mattrasp.c]
- allocazione dinamica di un vettore
[allocdin.c]
- esempio dell'utilizzo di stringhe
[stringhe.c]
- confronto di uguaglianza tra due stringhe
[strequal.c]
- Esercizi proposti
- gestione di un deposito di autobus utilizzando array dinamici
- lunghezza di una stringa
[strlungh.c]
Lezioni 54,55 - 3/5/2002 - in laboratorio
- Argomenti trattati
[D2]
- Cosa lo studente dovrebbe sapere dopo la lezione
- scrivere e mandare in esecuzione programmi che utilizzano vettori e
matrici
- Esercizi proposti
- calcolo di media e deviazione standard di un insieme di dati di
dimensione fissata
[meddevst.c]
- verifica se una matrice è triangolare superiore
[mattrian.c]
- calcolo di media e deviazione standard di un insieme di dati di
dimensione scelta dall'utente
[meddevdi.c]
Settimana 8: Stringhe
Lezioni 56-58 - 6/5/2002
- Argomenti trattati
[L2, Parr.10.6, 8.3-8.6]
- esercizi sulle funzioni ricorsive
- funzioni della libreria per la gestione dei caratteri
- funzioni che determinano il tipo di un carattere
- funzioni di conversione maiuscolo - minuscolo
- funzioni per la conversione delle stringhe
- Cosa lo studente dovrebbe sapere dopo la lezione
- scrivere programmi che utilizzano funzioni ricorsive
- utilizzare le funzioni di libreria per la manipolazione di stringhe
e caratteri
- Programmi discussi
- Esercizi proposti
- ottimizzazione del programma per l'attraversamento della palude in
modo che ogni zona di terra venga esplorata al più una
volta.
- estensione del programma per l'attraversamento della palude in modo
da permettere mosse in tutte le direzioni
(file contenente la rappresentazione di una palude per cui l'unico
cammino richiede mosse all'indietro:
palude5.txt)
- fornire un'implementazione delle funzioni di libreria per la
manipolazione di caratteri e di stringhe
Lezioni 59,60 - 7/5/2002
- Argomenti trattati
[L1 Parr.8.6-8.7]
- funzioni di input/output per stringhe e caratteri
- funzioni per la manipolazione di stringhe
- funzioni di copia
- funzioni di concatenazione
- funzioni di confronto
- programmi con argomenti
- Cosa lo studente dovrebbe sapere dopo la lezione
- utilizzare printf e scanf con le rispettive stringhe di formato per
la stampa e l'immissione di dati
- come scrivere programmi che prendono argomenti dalla riga di
comando
- Programmi discussi
- stampa del numero di argomenti ricevuti da un programma
[argnum.c]
- stampa degli argomenti ricevuti da un programma
[argprint.c]
- stampa della somma di due numeri interi passati come argomenti
[argsum.c]
- Esercizi proposti
- conversione di una data dal formato "gg/mm/aaaa"
al formato "gg mese aaaa"
[convdata.c]
- fornire un'implementazione delle funzioni di libreria per la
manipolazione di stringhe
- eliminazione dell'estensione dal nome di un file passato come
argomento
[argnoext.c]
- modificare i programmi visti a lezione che leggono da input un
numero fisso di dati, in modo che i dati vengano passati come
argomenti al programma invece che letti da input
Lezioni 61,62 - 8/5/2002
- Argomenti trattati
[L1, Parr.10.1-10.5]
- definizione di strutture (struct)
- dichiarazione di variabili di tipo struttura
- operazioni sulle strutture
- assegnazione tra variabili di tipo struttura
- ottenere l'indirizzo tramite &
- dimensione di una struttura
- accesso ai membri di una struttura (operatore
".")
- inizializzazione di strutture
- passaggio di parametri di tipo struttura
- Cosa lo studente dovrebbe sapere dopo la lezione
- come definire ed usare strutture in C
- Programmi discussi
- passaggio di struttura con campo di tipo vettore
[structvet.c]
Lezioni 63,64 - 8/5/2002 - in laboratorio
- Argomenti trattati
- Cosa lo studente dovrebbe sapere dopo la lezione
- scrivere, compilare, ed eseguire semplici programmi che utilizzano
array (vettori, matrici, stringhe)
- Esercizi proposti
- calcolo della trasposta di una matrice, utilizzando una matrice
di appoggio
[mattras1.c]
- riconoscimento di una password all'interno di un insieme di
password predefinite
[password.c]
Settimana 9: File, liste collegate
Lezioni 65,66 - 13/5/2002
- Argomenti trattati
[L1, Parr.10.6, 11.1-11.5]
- introduzione di sinonimi di un tipo tramite typedef
- la nozione di file
- apertura (fopen) e chiusura di file (fclose)
- scrittura formattata su file (fprintf)
- lettura formattata da file (fscanf)
- Cosa lo studente dovrebbe sapere dopo la lezione
- scrivere programmi che utilizzano file
- Programmi discussi
- operazioni su numeri complessi rappresentati come coppie di reali
[complex.c]
- conteggio del numero di caratteri e di linee in un file
[contaclf.c]
- calcolo della somma dei valori in un file di interi
- creazione di una copia di un file
- simulare 100 lanci di due dadi stampando i risultati su un file;
leggere i risultati dal file e stampare su un altro file le
frequenze dei risultati
[duedadif.c]
- Esercizi proposti
- conteggio del numero di parole in un file
[contapar.c]
- calcolo delle frequenze dei caratteri alfabetici in un file
Lezioni 67,68 - 14/5/2002
- Argomenti trattati
[L1 Par.6.1]
- la nozione di lista collegata
- dichiarazioni di tipo per le liste collegate
- Cosa lo studente dovrebbe sapere dopo la lezione
- come rappresentare liste collegate
- Programmi discussi
- definizioni di tipo per una lista collegata
[tipolis.c]
- creazione "a mano" di una lista collegata e stampa dei suoi
elementi
[listeman.c]
- Esercizi proposti
Lezioni 69,70 - 15/5/2002
- Argomenti trattati
[L2, Cap.6]
- Cosa lo studente dovrebbe sapere dopo la lezione
- scrivere programmi che eseguono semplici operazioni di
manipolazione di liste collegate
- Programmi discussi ed esercizi proposti
Lezioni 71,72 - 15/5/2002 - in laboratorio
- Argomenti trattati
[D2]
- Cosa lo studente dovrebbe sapere dopo la lezione
- scrivere, compilare, ed eseguire semplici programmi che utilizzano
tipi di dato derivati (vettori, stringhe, strutture)
- Esercizi proposti
- gestione dei dati relativi a studenti di un corso
Settimana 10: Liste collegate
Lezioni 73,74 - 20/5/2002
- Argomenti trattati
[L2, Cap.6]
- Cosa lo studente dovrebbe sapere dopo la lezione
- scrivere programmi che eseguono semplici operazioni di
manipolazione di liste collegate
- Programmi discussi ed esercizi proposti
- operazioni sulle liste
collegate
- versione iterativa delle operazioni che richiedono confronti
di uguaglianza tra elementi
[listecon.c]
- versione iterativa delle operazioni che richiedono confronti
di ordinamento tra elementi
[listeord.c]
- versione ricorsiva delle operazioni non elementari
[listeric.c]
- versione delle operazioni non elementari che fa uso delle
operazioni elementari
[listealt.c]
- lettura e scrittura di liste da e su file
[listeirw.c,
listerw.c]
- driver per verificare il funzionamento delle funzioni che eseguono
operazioni sulle liste collegate
[driverli.c]
Lezioni 75,76 - 21/5/2002
- Argomenti trattati
[L2, Cap.6]
- Cosa lo studente dovrebbe sapere dopo la lezione
- scrivere programmi che eseguono semplici operazioni di
manipolazione di liste collegate
- Programmi discussi
- Esercizi proposti
- esercizio su file e liste: gestione di un archivio di esami svolti:
esami.txt
Lezioni 77,78 - 22/5/2002
- Argomenti trattati
[L2, Cap.7]
- Cosa lo studente dovrebbe sapere dopo la lezione
- come vengono specificati tipi di dato astratti
- conoscere la distinzione tra tipi astratti e lore realizzazione in
un linguaggio di programmazione
- passi necessari alla realizzazione di un tipo di dato astratto
- Programmi discussi
- Esercizi proposti
Lezioni 79,80 - 22/5/2002 - in laboratorio
- Argomenti trattati
[D2]
- Cosa lo studente dovrebbe sapere dopo la lezione
- scrivere, compilare, ed eseguire semplici programmi che utilizzano
file
- Esercizi proposti
- conteggio del numero di '0' e '1' in un file
[conta01.c]
- codificare il contenuto di un file utilizzando il codice dei
carbonari
[carbonar.c]
Settimana 11:
Tipi di dato astratti
Lezioni 81,82 - 27/5/2002
- Argomenti trattati
[L2, Cap.7]
- il tipo di dato pila: specifica, e realizzazioni sequenziale
statica, collegata e sequenziale tramite array dinamico
- il tipo di dato coda: specifica, e realizzazioni sequenziale e
collegata
- Cosa lo studente dovrebbe sapere dopo la lezione
- implementare le operazioni sulle pile
- usare le pile
- implementare le operazioni sulle code
- usare le code
- Programmi discussi ed esercizi proposti
- realizzazione sequenziale statica del tipo di dato pila
[pileseq.c]
- realizzazione collegata del tipo di dato pila
[pile.c]
- realizzazione sequenziale tramite array dinamico del tipo di dato
pila
[piledin.c]
- realizzazione sequenziale del tipo di dato coda
[codeseq.c]
- realizzazione collegata del tipo di dato coda
[code.c]
- Esercizi proposti
Lezioni 83,84 - 28/5/2002
- Argomenti trattati
[L2, Cap.8]
- generalità sugli alberi binari
- realizzazione collegata degli alberi binari
- lettura da file di un albero binario
- visita di un albero binario:
- visita in preordine
- visita in postordine
- visita per livelli
- alberi binari di ricerca
- Cosa lo studente dovrebbe sapere dopo la lezione
- cosa sono, come si rappresentano e come si usano gli alberi binari
- gli algoritmi di visita e la loro implementazione
- la ricerca in un albero binario di ricerca
- Programmi discussi
- Esercizi proposti
- esercizi in [L2, Par.8.6]
Lezioni 85,86 - 29/5/2002
- Argomenti trattati
[L2, Cap.3]
- complessità di calcolo
- valutazione del costo dei programmi
- la notazione O
- Cosa lo studente dovrebbe sapere dopo la lezione
- come si valuta la complessità di un programma
- Esercizi proposti
- valutare la complessità degli algoritmi e dei programmi
visti finora a lezione o dati per esercizio
Lezioni 87,88 - 29/5/2002 - in laboratorio
- Argomenti trattati
[D2]
- Cosa lo studente dovrebbe sapere dopo la lezione
- scrivere, compilare, ed eseguire semplici programmi che utilizzano
file, strutture, e liste collegate
- Esercizi proposti
- gestione di dati riguardanti un insieme di voli
Settimana 12: Complessità e
ordinamento
Lezioni 89,90 - 3/6/2002
- Argomenti trattati
[L2, Parr.4.3,4.4]
- ricerca sequenziale in un vettore ordinato
- il metodo della ricerca binaria
- algoritmo di ordinamento per selezione (selection sort)
Cosa lo studente dovrebbe sapere dopo la lezione
- gli algoritmi di ricerca in un vettore (ordinato e non)
- ordinare un vettore in memoria centrale
Programmi discussi
- ricerca di un elemento in un vettore (con driver
[drivevet.c])
- ricerca esaustiva in un vettore
[ricesau.c]
- ricerca binaria ricorsiva in un vettore ordinato
[ricbinri.c]
- algoritmo di ordinamento per selezione
[ordsel.c]
Esercizi proposti
- ricerca binaria iterativa di un elemento in un vettore ordinato
[ricbinit.c]
Lezioni 91,92 - 4/6/2002
- Argomenti trattati
[L2, Par.4.4]
- algoritimi di ordinamento e loro complessità
- ordinamento per selezione (selection sort)
- ordinamento a bolle (bubble sort)
- ordinamento per fusione (merge sort)
- Cosa lo studente dovrebbe sapere dopo la lezione
- i principali algoritmi di ordinamento e la loro complessità
- Programmi discussi
- algoritmi di ordinamento (con driver
[drivevet.c])
- Esercizi proposti
Lezioni 93,94 - 5/6/2002 - esercitazione
- Argomenti trattati
- decima esercitazione: risoluzione di un esercizio di esame
- Cosa lo studente dovrebbe sapere dopo la lezione
- risolvere esercizi della difficoltà di un esercizo di esame
- Programmi discussi
Lezioni 95,96 - 5/6/2002 - esercitazione
- Argomenti trattati
- undicesima esercitazione: risoluzione di un esercizio di esame
- Cosa lo studente dovrebbe sapere dopo la lezione
- risolvere esercizi della difficoltà di un esercizo di esame
- Programmi discussi
- Esercizi proposti
home page del corso
Ultimo aggiornamento di questo file:
Thursday, 6-Jun-2002 14:53:04 CEST