Corso di Laurea in Ingegneria Elettronica
Corso di Fondamenti di Informatica - A.A. 2000/2001
Registro del Corso del Prof. Diego Calvanese
Canale A-L
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] Guida per lo Studente (corso di
Fondamenti di Informatica per il corso di Laurea in Ingegneria Elettronica,
A.A. 2000/2001).
[D2] Architettura del calcolatore e
rappresentazione dell'informazione (complementi al corso di Fondamenti di
Informatica per il corso di Laurea in Ingegneria Elettronica A.A. 2000/2001).
D. D'Aloisi. 2001.
[D3] Dispensa di Fondamenti di Informatica:
Guida all'uso del TurboC/C++ per la programmazione in
C . 2000.
Programmi
Tutti i programmi svolti a lezione e
assegnati come esercizio sono disponibili via internet all'indirizzo
http://www.dis.uniroma1.it/~calvanes/didattica/00-01-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 - tabella riassuntiva
Sett |
Argomento |
Lunedì |
Martedì |
Mercoledì
(lez.) |
Mercoledì
(eser.) |
#1 19 feb |
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 26 feb |
Rappr. informazione |
-- |
-- |
Rappr. di interi e reali
(Lez 9,10)
|
Introduzione al C
(Lez 11,12)
|
#3 5 mar |
Strutture di controllo |
Assegnazione
(Lez 13,14)
|
If-else, istr. composta
(Lez 15,16)
|
Switch, istruzioni cicliche
(Lez 17,18)
|
Esercitazione in laboratorio
(Lez 19,20)
|
#4 12 mar |
Strutture di controllo |
Cicli definiti
(Lez 21,22)
|
Cicli indefiniti e annidati
(Lez 23,24)
|
Tipi predefiniti del C, tipi interi
(Lez 25,26)
|
Esercitazione in laboratorio
(Lez 27,28)
|
#5 19 mar |
Funzioni |
Tipi carattere e reali
(Lez 29,30)
|
Modularizzazione, funzioni
(Lez 31,32)
|
Funzioni con valore di ritorno
(Lez 33,34)
|
Esercitazione in laboratorio
(Lez 35,36)
|
#6 26 mar |
Ricorsione |
Pila dei record di attivazione
(Lez 37,38)
|
Esercizi su funzioni ricorsive
(Lez 39,40)
|
Puntatori
(Lez 41,42)
|
Esercitazione in laboratorio
(Lez 43,44)
|
#7 2 apr |
Array |
Parametri per indirizzo
(Lez 45,46)
|
Array e vettori
(Lez 47,48)
|
Vettori e puntatori
(Lez 49,50)
|
Esercitazione in laboratorio
(Lez 51,52)
|
#8 9 apr |
Array e stringhe |
Array dinamici
(Lez 53,54)
|
Stringhe
(Lez 55,56)
|
Incontro con il tutor
(Lez 57,58)
|
Esercitazione in laboratorio
(Lez 59,60)
|
#9 18 apr |
Autovalutazione |
-- |
-- |
Prova di autovalutazione
(Lez 61,62)
|
Esercitazione in laboratorio
(Lez 63,64)
|
#10 23 apr |
Stringhe |
Libreria stringhe e caratteri
(Lez 65,66)
|
Formattazione I/O
(Lez 67,68)
|
-- |
-- |
#11 30 apr |
Strutture |
Esercizio su ricorsione
(Lez 69,70)
|
-- |
Strutture
(Lez 71,72)
|
Esercitazione in laboratorio
(Lez 73,74)
|
#12 7 mag |
File, liste collegate |
File
(Lez 75,76)
|
Liste collegate
(Lez 77,78)
|
Liste collegate
(Lez 79,80)
|
Esercitazione in laboratorio
(Lez 81,82)
|
#13 14 mag |
Tipi di dato astratti |
-- |
Esercizio di esame
(Lez 83,84)
|
Pile
(Lez 85,86)
|
Code
(Lez 87,88)
|
#14 21 mag |
Complessità,
ordinamento |
Alberi binari
(Lez 89,90)
|
Complessità, ricerca binaria
(Lez 91,92)
|
Ordinamento
(Lez 93,94)
|
Esercizio di esame
(Lez 95,96)
|
Lezioni - dettaglio
Settimana 1:
Architettura del calcolatore e rappresentazione dell'informazione
Lezioni 1,2 -- 19/2/2001
- Argomenti trattati
- presentazione del corso
- la soluzione di problemi -> il concetto di algoritmo
- Cosa lo studente dovrebbe sapere dopo la lezione
Lezioni 3,4 -- 20/2/2001
- Argomenti trattati
[L2, Prefazione, Parr.3.3-3.4]
[D2, 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 -- 21/2/2001
- Argomenti trattati
[D2, 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 - 21/2/2001
- Argomenti trattati
[D2, Parte 2]
- codifica binaria dell'informazione: rappresentazione di numeri
naturali
- conversioni di base
- 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 - 28/2/2001
- Argomenti trattati
[D2, Parte 2]
- conversioni di base quando una base è potenza di un'altra
- 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 - 28/2/2001
- Argomenti trattati
[L1, Cap.2]
- il primo programma C
- commenti
- funzione main
- istruzione di stampa (printf)
- istruzione di return
- nozione di blocco
- Cosa lo studente dovrebbe sapere dopo la lezione
- come è strutturato un semplice programma C
- come si stampano stringhe di caratteri
- Programmi discussi
Settimana 3:
Strutture di controllo
Lezioni 13,14 - 5/3/2001
- Argomenti trattati
[L1, Parr.2.1-2.5]
- nozione di variabile
- dichiarazioni di variabili
- istruzione di ingresso (scanf)
- istruzione di assegnazione
- Cosa lo studente dovrebbe sapere dopo la lezione
- 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
- 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 15,16 - 6/3/2001
- 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
- operatori booleani (!, &&, ||)
- Cosa lo studente dovrebbe sapere dopo la lezione
- utilizzare le istruzioni if e if-else semplici e
annidate
- usare gli operatori booleani e relazionali
- Programmi discussi
- Esercizi proposti
Lezioni 17,18 - 7/3/2001
- Argomenti trattati
[L1, Par.3.7, Par.4.7]
- istruzione switch
- istruzione while
- Cosa lo studente dovrebbe sapere dopo la lezione
- utlizzare l'istruzione switch
- aver compreso le nozioni di ciclo definito e indefinito
- Programmi discussi
- calcolo del numero di giorni di un mese
[giormese.c]
- Esercizi proposti
- lettura di giorno, mese ed anno di una data e calcolo della
data del giorno successivo
[datasucc.c]
Lezioni 19,20 - 7/3/2001 - in laboratorio
- Argomenti trattati
[D2]
- Cosa lo studente dovrebbe sapere dopo la lezione
- manipolare file in ambiente WINDOWS
- scrivere, compilare, e mandare in esecuzione semplici programmi
C nell'ambiente TurboC/C++
- Esercizi svolti
- massimo di tre numeri
- scrivere, compilare e provare alcuni programmi finora discussi a
lezione
Settimana 4:
Strutture di controllo
Lezioni 21,22 - 12/3/2001
- Argomenti trattati
[L1, Parr.3.8-3.12, Parr.4.1-4.6]
- cicli definiti (controllati da contatore)
- operatori di incremento (++), decremento (++),
assegnazione (=)
- la nozione di side-effect
- forme abbreviate dell'assegnazione (+=, -=,
*=, /=, %=)
- istruzione for
- Cosa lo studente dovrebbe sapere dopo la lezione
- aver compreso la nozione di ciclo definito
- utilizzare le istruzioni while e for per
implemetare cicli controllati da contatore
- aver compreso la nozione di side-effect
- usare gli operatori di incremento, decremento, assegnazione
- Programmi discussi
- lettura di giorno, mese ed anno di una data e calcolo della
data del giorno successivo
[datasucc.c]
- 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]
- riscrivere tutti gli esempi ed esercizi visti finora usando
l'istruzione for invece dell'istruzione while
- somma dei positivi e dei negativi di una sequenza letta da tastiera
Lezioni 23,24 - 13/3/2001
- Argomenti trattati
[L1, Par.4.8, Par.4.10, Par.4.12]
- 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]
- 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]
- stampa di una piramide di asteristichi con altezza letta da
tastiera
[piramid1.c]
- Esercizi proposti
- 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]
- 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]
- 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]
- Ulteriori esercizi
- 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]
- 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)
Lezioni 25,26 - 13/3/2001
- Argomenti trattati
[L1]
- tipi di dato astratti (o matematici):
- dominio dei valori del tipo
- operazioni ammesse
- costanti che denotano valori del tipo
- realizzazione dei tipi astratti nei linguaggi di programmazione
(tipi concreti)
- intervallo di definizione
(sizeof e limits.h)
- operazioni predefinite
- rappresentazione delle costanti
- funzionalità di ingresso/uscita
- classificazione dei tipi del C
- tipi interi del C: interi con segno, interi senza segno, caratteri
- interi con segno: short, int, long
- interi senza segno: unsigned short, unsigned
int, unsigned long
- Cosa lo studente dovrebbe sapere dopo la lezione:
- conoscere la distinzione tra tipi astratti e lore realizzazione in
un linguaggio di programmazione
- quali sono i tipi base del C
- i tipi interi con segno e senza segno e le differenze tra di loro
- Programmi discussi
- intervalli di definizione per i tipi interi con segno
[intlimits.c]
- intervalli di definizione per i tipi interi senza segno
[unsiglim.c]
- Esercizi proposti
Lezioni 27,28 - 13/3/2001 - in laboratorio
- Argomenti trattati
[D3]
- seconda esercitazione
autoguidata:
esercizi su istruzioni condizionali (if, if-else,
switch), e cicliche (while, do-while)
- ambiente TurboC/C++
- verifica delle impostazioni del compilatore (ANSI C e non
C++)
- gestione delle finestre
- ispezione delle variabili
- Cosa lo studente dovrebbe sapere dopo la lezione
- impostare l'ambiente TurboC/C++ per la compilazione di programmi C
- utilizzare le funzionalità di ispezione delle variabili
dell'ambiente TurboC/C++
- Esercizi proposti
- soluzione di un sistema di due equazioni lineari
[sistema.c]
- stampa delle cifre di un numero a due cifre come cifra o in
italiano
[duecifre.c]
- verifica se un numero è primo
[primi.c]
Settimana 5: Funzioni
Lezioni 29,30 - 19/3/2001
- Argomenti trattati
[L1]
- tipi carattere del C char, signed char,
unsigned char,
- reali in C: float, double, long double
- intervalli di definizione, sizeof e float.h
- operazioni definite (come per interi eccetto %)
- rappresentazione delle costanti
- funzionalità di ingresso/uscita
- conversioni tra tipi aritmetici del C
- conversioni implicite
- conversioni sicure (e non sicure)
- conversioni in assegnazione
- operatore di cast
- Cosa lo studente dovrebbe sapere dopo la lezione:
- i tipi carattere
- i tipi reali
- le conversioni di tipo tra i tipi aritmetici
- Programmi discussi
- 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 31,32 - 20/3/2001
- Argomenti trattati
[L1, Parr.5.1-5.5, Par.5.12]
- cenni sulla modularizzazione di un programma
- astrazione funzionale
- funzioni in C senza parametri (per valore)
- 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)
- parametri formali (per valore) e attuali
- Cosa lo studente dovrebbe sapere dopo la lezione
- cos'è l'astrazione funzionale
- definire ed attivare semplici funzioni con parametri (per valore)
- Programmi discussi
- 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 un rettangolo di asterischi usando una funzione per la
stampa di una riga di asterischi
- rettangolo di larghezza fissa
[rettang1.c]
- rettangolo di larghezza fissa (usando un ciclo)
[rettang2.c]
- rettangolo di larghezza e spostamento variabili
[rettang3.c]
- interfaccia per la stampa di figure geometriche di dimensione,
spostamento e carattere di riempimento variabili
[figure34.c]
Lezioni 33,34 - 21/3/2001
- Argomenti trattati
[L1, Parr.5.6-5.10]
- funzioni che restituiscono un valore
- dichiarazioni (prototipi) di funzione
- file di intestazione (file header)
- librerie standard del C
- funzioni matematiche dichiarate nel file header math.h
- Cosa lo studente dovrebbe sapere dopo la lezione
- dichiarare, definire, ed attivare semplici funzioni con parametri
(per valore)
- Programmi discussi
- maggiore tra due interi
[maggfun.c]
- conversione da "cifra romana" a intero (come funzione)
[romani1.c]
- Esercizi proposti
- 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]
- calcolo del numero di combinazioni con ripetizione utilizzando una
funzione per il calcolo del fattoriale
[combi.c]
- conversione di un numero romano in un intero
- assumendo che la sequenza di "cifre romane" sia decrescente
[romani2.c]
- per un numero romano qualunque (assunto corretto)
[romani3.c]
- modularizzare i programmi visti finora a lezione o dati come
esercizio attraverso l'introduzione di opportune funzioni
Lezioni 35,36 - 21/3/2001 - in laboratorio
- Argomenti trattati
[D3]
- terza esercitazione
autoguidata: esercizi sull'uso di funzioni
- ambiente TurboC/C++
- comandi Step over e Trace into per eseguire
passo-passo un programma con diverse funzioni
- comandi Copy e Paste
- Cosa lo studente dovrebbe sapere dopo la lezione
- eseguire passo-passo un programma con diverse funzioni
- Esercizi proposti
- calcolo del massimo comun divisore e del minimo comune multiplo
[mcmmcd.c]
- somma di due numeri razionali rappresentati come frazioni
[sommaraz.c]
- stampa delle cifre di un numero a due cifre come cifra o in
italiano, utilizzando funzioni
[duecifun.c]
Settimana 6: Ricorsione
Lezioni 37,38 - 26/3/2001
- Argomenti trattati
[L1, Parr.5.11-5.13]
- gestione della memoria a tempo di esecuzione
- evoluzione della pila dei record di attivazione e del contatore di
programma
- variabili statiche
- funzioni ricorsive
- definizioni induttive
- Cosa lo studente dovrebbe sapere dopo la lezione
- 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
- 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]
- Esercizi proposti
- 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]
Lezioni 39,40 - 27/3/2001
- Argomenti trattati
[L1, Parr.5.13-5.15]
- esempi di funzioni ricorsive
- 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
- scrivere programmi che utilizzano funzioni ricorsive
- Programmi discussi
- lettura di una sequenza di caratteri e stampa al contrario,
utilizzando una funzione ricorsiva
[invertic.c]
- funzione ricorsiva per il calcolo dell'n-esimo numero di Fibonacci
[fibonacc.c]
- problema delle torri di Hanoi
[hanoi.c]
- Esercizi proposti
- 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]
- scrivere una funzione ricorsiva che calcola la funzione di Ackermann
[ackerman.c]
- sfruttando la definizione induttiva
delle operazioni, scrivere funzioni ricorsive per
- calcolare il massimo comun divisore di due interi nonnegativi
[mcdricor.c]
- verificare se due numeri interi positivi sono primi tra loro
[primrico.c]
- calcolare il resto della divisione tra un intero ed un intero
positivo
[restoric.c]
Lezioni 41,42 - 28/3/2001
- Argomenti trattati
[L1, Parr.7.1-7.3]
- 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
- Cosa lo studente dovrebbe sapere dopo la lezione
- sapere cosa sono i puntatori
- utilizzare gli operatori di indirizzo (&) e di
dereferenziamento
- Programmi discussi
- relazione tra gli operatori di indirizzo (&) e di
dereferenziamento (*)
[puntind.c]
Lezioni 43,44 - 28/3/2001 - in laboratorio
- Argomenti trattati
[D3]
- quarta esercitazione
autoguidata: esercizi sull'uso di funzioni e sulla ricorsione
- ambiente TurboC/C++
- comando Call stack per visualizzare la pila delle
attivazioni nello stato corrente
- comandi Step over e Trace into per eseguire
passo-passo un programma con funzioni ricorsive
- Cosa lo studente dovrebbe sapere dopo la lezione
- visualizzare la pila delle attivazioni durante l'esecuzione
- Esercizi proposti
- stampa di un rettangolo di asterischi di dimensioni date
[rettang.c]
- visualizzazione della pila delle attivazioni
- per una funzione con ricorsione semplice (fattoriale)
[fattdeb.c]
- per una funzione con ricorsione multipla (fibonacci)
[fibodeb.c]
- calcolo della potenza tramite una funzione ricorsiva
[potenza.c]
- scrittura di funzioni ricorsive utilizzando la
definizione induttiva delle
operazioni:
Settimana 7: Array
Lezioni 45,46 - 2/4/2001
- Argomenti trattati
[L1, Parr.7.3-7.4, 12.3]
- operatore sizeof applicato a variabili di tipo puntatore e
a puntatori derefenziati
- passaggio di parametri per indirizzo
- allocazione dinamica della memoria
- funzione malloc per l'allocazione dinamica
- funzione free per la deallocazione dinamica
- lo heap
- tempo di vita di variabili allocate dinamicamente
- Cosa lo studente dovrebbe sapere dopo la lezione
- come passare paremtri per indirizzo ad una funzione
- come utilizzare l'allocazione e la deallocazione dinamica della
memoria
- Programmi discussi
- operatore sizeof con puntatori
[puntsize.c]
- 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]
- allocazione e deallocazione dinamica della memoria
[puntator.c]
- tempo di vita di variabili allocate dinamicamente
[vitadin.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 47,48 - 3/4/2001
- Argomenti trattati
[L1 Parr.6.1-.6.4, 6.9]
- array monodimensionali (o vettori)
- dichiarazioni di variabili di tipo array
- accesso agli elementi di un array
- inizializzazione di un array
- array multidimensionali e matrici
- Cosa lo studente dovrebbe sapere dopo la lezione
- come si dichiarano ed usano vettori
- come si dichiarano ed usano matrici
- 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
- lettura e stampa di una matrice
[matrici.c]
- 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 49,50 - 4/4/2001
- Argomenti trattati
[L1, Parr.6.5, 6.9, 7.7-7.8]
- 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 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
- 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
Lezioni 51,52 - 4/4/2001 - in laboratorio
- Argomenti trattati
[D3]
- quinta esercitazione
autoguidata: esercizi sulla ricorsione, sul passaggio di
parametri e sui vettori
- ambiente TurboC/C++
- comando Call stack per visualizzare la pila delle
attivazioni nello stato corrente
- comandi Step over e Trace into per eseguire
passo-passo un programma con funzioni ricorsive
- Cosa lo studente dovrebbe sapere dopo la lezione
- visualizzare la pila delle attivazioni durante l'esecuzione di un
programma ricorsivo
- Esercizi proposti
- calcolo della potenza tramite una funzione ricorsiva
[potenza.c]
- ordinamento di un vettore di 3 elementi tramite una funzione
[ordina3.c]
Settimana 8: Array e stringhe
Lezioni 53,54 - 9/4/2001
- Argomenti trattati
[L1 Parr.6.9, 12.3]
- passaggio di parametri di tipo matrice
- esercizi sulle matrici
- array dinamici
- 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
- Programmi discussi
- inversione di un vettore
[invvett.c]
- 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]
Lezioni 55,56 - 10/4/2001
- Argomenti trattati
[L1 Parr.7.5, 7.9, 8.1-8.2]
- vettori di puntatori
- stringhe
- carattere di fine stringa
- dichiarazione di stringhe
- inizializzazione di stringhe
- input/output di stringhe
- utilizzo del qualificatore const per la dichiarazione dei
parametri formali di una funzione
- Cosa lo studente dovrebbe sapere dopo la lezione
- come si dichiarano vettori di puntatori
- cosa sono le stringhe in C, e come si utilizzano
- quando si utilizza il qualificatore const
- Programmi discussi
Lezioni 57,58 - 11/4/2001 - incontro con il
tutor
Lezioni 59,60 - 11/4/2001 - in laboratorio
- Argomenti trattati
- Cosa lo studente dovrebbe sapere dopo la lezione
- scrivere, compilare, ed eseguire semplici programmi che utilizzano
matrici e stringhe
- Esercizi proposti
- scambio di righe con colonne in una matrice utilizzando una matrice
di appoggio
[swapmatr.c]
- riconoscimento di una password di lunghezza fissa all'interno di un
insieme di password predefinite di lunghezza fissa
[password.c]
- Ulteriori esercizi
- riconoscimento di una password di lunghezza variabile all'interno
di un insieme di password predefinite di lunghezza variabile
[passwor1.c]
Settimana 9: Autovalutazione
Lezioni 61,62 - 18/4/2001 - prova di
autovalutazione
Lezioni 63,64 - 18/4/2001 - in laboratorio
- Argomenti trattati
[D3]
- Cosa lo studente dovrebbe sapere dopo la lezione
- scrivere, compilare, ed eseguire semplici programmi che utilizzano
vettori di stringhe
- Esercizi proposti
- creazioni di semplici frasi in inglese utilizzando un generatore di
numeri pseudocasuali
[frase.c]
- creazioni di semplici frasi in italiano (con distinzione tra
articoli maschili e femminili) utilizzando un generatore di numeri
pseudocasuali
[fraseit.c]
Settimana 10: Stringhe
Lezioni 65,66 - 23/4/2001
- Argomenti trattati
[L1 Parr. 8.3-8.6]
- 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
- funzioni di input/output per stringhe e caratteri
- funzioni per la manipolazione di stringhe
- Cosa lo studente dovrebbe sapere dopo la lezione
- utilizzare le funzioni di libreria per la manipolazione di stringhe
e caratteri
- Programmi discussi
- confronto di uguaglianza tra due stringhe
[strequal.c]
- Esercizi proposti
- fornire un'implementazione delle funzioni di libreria per la
manipolazione di caratteri e di stringhe
Lezioni 67,68 - 24/4/2001
- Argomenti trattati
[L1 Parr.8.6-8.7, Cap.9]
- funzioni per la manipolazione di stringhe
- funzioni di concatenazione
- funzioni di confronto
- 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
- 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
- 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
Settimana 11: Strutture
Lezioni 69,70 - 30/4/2001
- Argomenti trattati
[L2, Par.10.6]
- esercizi sulle funzioni ricorsive
- Cosa lo studente dovrebbe sapere dopo la lezione
- scrivere programmi che utilizzano funzioni ricorsive
- 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)
Lezioni 71,72 - 2/5/2001
- Argomenti trattati
[L1, Parr.10.1-10.6]
- strutture in C
- 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
- introduzione di sinonimi di un tipo tramite typedef
- Cosa lo studente dovrebbe sapere dopo la lezione
- come definire ed usare strutture in C
- Programmi discussi
- operazioni su numeri complessi rappresentati come coppie di reali
[complex.c]
- Esercizi proposti
- completare l'implementazione delle operazioni su numeri complessi
rappresentati come coppie di reali
[complex.c]
Lezioni 73,74 - 2/5/2001 - in laboratorio
- Argomenti trattati
[D3]
- Cosa lo studente dovrebbe sapere dopo la lezione
- scrivere, compilare, ed eseguire semplici programmi che utilizzano
strutture
- Esercizi proposti
- modifica di dati riguardanti un insieme di voli
[voli.c]
Settimana 12: File e liste
collegate
Lezioni 75,76 - 7/5/2001
- Argomenti trattati
[L1, Parr.11.1-11.5]
- la nozione di file
- apertura (fopen) e chiusura di file (fclose)
- lettura formattata da file (fscanf)
- scrittura formattata su file (fprintf)
- Cosa lo studente dovrebbe sapere dopo la lezione
- scrivere programmi che utilizzano file
- Programmi discussi
- conteggio del numero di caratteri e di linee in un file
[contclf.c]
- creazione di una copia di un file
- Esercizi proposti
- conteggio del numero di parole in un file
- calcolo della somma dei valori in un file di interi
- 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]
- calcolare le frequenze dei caratteri alfabetici in un file
Lezioni 77,78,79,80 - 8-9/5/2001
- 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
- creazione "a mano" di una lista collegata e stampa dei suoi
elementi
[listeman.c]
- definizioni di tipo per una lista collegata
[tipolis.c]
- operazioni sulle liste
collegate
- operazioni elementari e versione iterativa delle operazioni
non elementari
[liste.c]
- 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 procedure e funzioni
che eseguono operazioni sulle liste collegate
[driverli.c]
Lezioni 81,82 - 9/5/2001 - in laboratorio
- Argomenti trattati
[D3]
- Cosa lo studente dovrebbe sapere dopo la lezione
- scrivere, compilare, ed eseguire semplici programmi che utilizzano
file
- Esercizi proposti
- codificare il contenuto di un file utilizzando il codice dei
carbonari
[carbon.c]
- conteggio del numero di '0' e '1' in un file
[conta.c]
Settimana 13: Tipi di dato
astratti
Lezioni 83,84 - 15/5/2001
- 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 85,86 - 16/5/2001
- Argomenti trattati
[L2, Cap.7]
- specifica di tipi di dato astratti
- il tipo di dato insieme di lettere
alfabetiche maiuscole
- realizzazione di tipi di dato astratti
- il tipo di dato pila: specifica, e realizzazioni sequenziale
statica, collegata e sequenziale tramite array dinamico
- Cosa lo studente dovrebbe sapere dopo la lezione
- come vengono specificati tipi di dato astratti
- passi necessari alla realizzazione di un tipo di dato astratto
- implementare le operazioni sulle pile
- usare le pile
- Programmi discussi
- Esercizi proposti
Lezioni 87,88 - 16/5/2001
- Argomenti trattati
[L2, Cap.7]
- il tipo di dato coda: specifica, e realizzazioni sequenziale e
collegata
- Cosa lo studente dovrebbe sapere dopo la lezione
- implementare le operazioni sulle code
- usare le code
- Programmi discussi ed esercizi proposti
- realizzazione sequenziale del tipo di dato coda
[codeseq.c]
- realizzazione collegata del tipo di dato coda
[code.c]
Settimana 14: Complessità e
ordinamento
Lezioni 89,90 - 21/5/2001
- 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 91,92 - 22/5/2001
- Argomenti trattati
[L2, Cap.3, Par.4.3]
- complessità di calcolo
- valutazione del costo dei programmi
- la notazione O
- ricerca sequenziale in un vettore ordinato
- il metodo della ricerca binaria
- Cosa lo studente dovrebbe sapere dopo la lezione
- come si valuta la complessità di un programma
- gli algoritmi di ricerca in un vettore (ordinato e non)
- 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]
- Esercizi proposti
- valutare la complessità degli algoritmi e dei programmi
visti finora a lezione o dati per esercizio
- ricerca binaria iterativa di un elemento in un vettore ordinato
[ricbinit.c]
Lezioni 93,94 - 23/5/2001
- 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 95,96 - 23/5/2001 - esercitazione
- Argomenti trattati
- Cosa lo studente dovrebbe sapere dopo la lezione
- risolvere esercizi della difficoltà di un esercizo di esame
- Programmi discussi
- esercizio di esame del 14/10/2000:
home page del
Corso di Fondamenti di Informatica del Corso di Laurea in
Ingegneria Elettronica dell'Università di Roma "La Sapienza"
Ultimo aggiornamento di questo file:
Friday, 15-Mar-2002 19:52:57 CET