Corso di Fondamenti di Programmazione
(Statistica per le Tecnologie dell'Informazione)
Docente: Paolo Franciosa
anno accademico 2001-2002


Prerequisiti Contenuti Programma
Materiale Didattico Diario delle Lezioni Ricevimento Studenti

Per commenti e segnalazioni contatta il docente a


Prerequisiti

Si assume che lo studente abbia acquisito i concetti di base dell'informatica, quali l'architettura di massima di un sistema di elaborazione, i principali metodi di codifica dell'informazione e la struttura di un file system, ed abbia familiarità nell'interazione con un sistema operativo.

Contenuti del corso

Vengono illustrati i principi fondamentali della programmazione strutturata, con particolare riferimento alla programmazione orientata agli oggetti.

Vengono inoltre presentati alcuni algoritmi fondamentali per problemi di ordinamento, ricerca e selezione, evidenziandone le caratteristiche di efficienza.

Alla fine del corso lo studente sarà in grado di scrivere, compilare ed eseguire semplici programmi nel linguaggio Java, consultare la documentazione sulle classi esistenti, riutilizzare classi predefinite. Lo studente sarà in grado di progettare semplici algoritmi e valutarne la complessità computazionale. algoritmi.


Programma

Da definire

Materiale didattico

punto elenco Testi consigliati
punto elenco Strumenti di programmazione
punto elenco Altri link rilevanti

Diario delle lezioni

5 marzo 2002 8 marzo 2002
12 marzo 2002 14 marzo 2002 (lab) 15 marzo 2002
19 marzo 2002 21 marzo 2002 (lab) 22 marzo 2002
26 marzo 2002

vacanze pasquali

vacanze pasquali

4 aprile 2002 (lab) 5 aprile 2002
9 aprile 2002 11 aprile 2002 (lab) 12 aprile 2002
16 aprile 2002 18 aprile 2002 (lab) 19 aprile 2002
23 aprile 2002 festività nazionale 26 aprile 2002
30 aprile 2002 2 maggio 2002 (lab) 3 maggio 2002
7 maggio 2002 9 maggio 2002 (lab) 10 maggio 2002 RINVIATA
14 maggio 2002 16 maggio 2002 (lab) 17 maggio 2002
21 maggio 2002 23 maggio 2002 (lab) 24 maggio 2002 (lab)

Per commenti e segnalazioni, contatta il docente (paolo.franciosa@uniroma1.it)


Data 5-3-02 (lezione)
Argomenti Introduzione al corso
Origini del linguaggio Java
Richiami sulla compilazione/interpretazione di un programma in linguaggio evoluto
Il ciclo di compilazione Java
La Java Virtual Machine
Esempio di programma Java
I metodi System.out.print e System.out.println
Riferimenti al testo Capitolo 1, fino a 1.10 compreso
Errori comuni 1.1
Errori comuni 1.2
Listati Saluti.java
Esercizi proposti AlberoDiNatale.java
torna all'elenco delle lezioni
Data 8 marzo 2002 (lezione)
Argomenti Concetto di variabile
Tipi di variabili: intere, virgola mobile (reali), carattere, boolean
Definizione e inizializzazione di variabili
Assegnazione
Espressioni aritmetiche
Overflow
Visualizzazione del contenuto di variabili
Riferimenti al testo 2.1, 2.2, 2.5
Errori comuni 2.1
Suggerimenti per la qualità 2.1
Argomenti avanzati 2.1 (cenni)
Argomenti avanzati 2.2 (cenni)
Argomenti avanzati 2.3
Errori comuni 2.3
Listati Variabili.java
Esercizi proposti Distanza.java
Sconti.java
torna all'elenco delle lezioni
Data 12 marzo 2002 (lezione)
Argomenti Conversioni esplicite (cast)
Concetto di oggetto
Definizione e istanziazione di oggetti
Es. la classe Rectangle
Costruttori della classe Rectangle
Metodo contains
Metodo intersection
Assegnazione tra oggetti (copia riferimento)
Visualizzazione di oggetti e conversione a stringa(System.out.println)
Riferimenti al testo Errori comuni 2.1
1.11, 1.12, 2.3
Listati Rettangoli.java
Esercizi proposti
torna all'elenco delle lezioni
Data 14 marzo 2002 (laboratorio)
Argomenti Editing di un sorgente Java con Blocco Note (Saluti.java)
Compilazione da DOS (comando javac)
Esecuzione di bytecode da DOS (comando java)
Descrizione dell'ambiente Java: SDK e JRE
Impostazione variabili DOS PATH e JAVA_HOME
Esempi di errori sintattici
Importazione di classi (comando import)
Consultazione della documentazione sulle classi di SDK 1.4.0
Riferimenti al testo
Listati
Esercizi proposti
torna all'elenco delle lezioni
Data 15 marzo 2002 (lezione)
Argomenti Metodi statici e metodi membro
La classe String, costanti stringa
Metodi length, substring, concatenazione, toUpperCase, toLowerCase
I metodi statici Integer.parseInt, Float.parseFloat, Double.parseDouble
Input attraverso la classe ConsoleReader
Riferimenti al testo 2.6.1, 2.6.2, 2.6.3, 2.6.4 (esclusa la classe NumberFormat), 2.7
Listati Stringhe.java
UsaConsoleReader.java
ConsoleReader.java
Esercizi proposti Vedere testo: P2.3, P2.5, P2.8, P2.12, P2.19
torna all'elenco delle lezioni
Data 19 marzo 2002 (lezione)
Argomenti L'istruzione if ... else
Operatori di confronto
Test di uguaglianza tra oggetti: differenza tra == e metodo equals
if in cascata e in sequenza
dangling else
istruzione switch
Riferimenti al testo Capitolo 5 (tutto tranne Argomenti avanzati 5.1, Argomenti avanzati 5.2 e Suggerimenti per la qualità 5.2)
Listati Ordina3.java
Esercizi proposti Vedere testo: P5.1, P5.2, P5.4, P5.8, P5.9, P5.12, P5.16
torna all'elenco delle lezioni
Data 21 marzo 2002 (laboratorio)
Argomenti Introduzione all'uso dell'ambiente JCreator LE
Editing di sorgenti Java
Compilazione, esame dei messaggi di diagnostica
Interpretazione e run di classi
Riferimenti al testo
Listati
Esercizi proposti
torna all'elenco delle lezioni
Data 22 marzo 2002 (lezione)
Argomenti Il ciclo while
Esempi di programmi con cicli
Cicli infiniti
Riferimenti al testo 6.1, Errori comuni 6.1, Errori comuni 6.2, Suggerimenti per la qualità 6.2
Listati
Esercizi proposti RaddoppioRobusto.java Provare ad eseguire questo programma con capitali iniziali molto piccoli (provare con importi variabili da 5 a 1000) vengono fornite risposte diverse. Spiegare perché.
  • PrimoEDivisore.java
  • PrimoSenzaPari.java
  • AnniPerRaddoppio.java
  • torna all'elenco delle lezioni
    La lezione del 26 marzo 2002 è stata rinviata a causa di interruzione linea ferroviaria
    torna all'elenco delle lezioni
    Data 4 aprile 2002 (laboratorio)
    Argomenti Ambiente JCreator LE: Definizione delle opzioni di compilazione e della variabile classpath
    Riferimenti al testo Suggerimenti per la qualità 2.2,
    Listati
    Esercizi proposti Verifica se un numero è perfetto
    torna all'elenco delle lezioni
    Data 5 aprile 2002 (lezione)
    Argomenti I cicli for e do
    Definizione di variabili all'interno di blocchi
    Uso del break nei cicli
    La legge di De Morgan
    Uso della classe Random per generare sequenze pseudocasuali
    Variabili final
    Riferimenti al testo 6.2, Suggerimenti per la qualità 6.1, 6.3, Errori comuni 6.2, Errori comuni 6.3, Errori comuni 6.4, 6.5.1, Argomenti avanzati 6.2, Argomenti avanzati 6.3, 6.5.2, 6.6
    Listati
    Esercizi proposti
    • Modificare il programma MediaSequenza.java utilizzando un ciclo do invece del ciclo while
    • Prendendo spunto dal programma AreaCerchio.java, scrivere un programma che visualizza una sequenza di stime di Pi Greco ottenuta attraverso simulazioni che generano 10, 100, 1000, ..., 1000000 punti ciascuna.
    torna all'elenco delle lezioni
    Data 9 aprile 2002 (lezione)
    Argomenti Esempi di programmi con cicli nidificati
    Arrays: definizione, riferimento agli elementi
    Riferimenti al testo 11.1, Errori comuni 11.1, Errori comuni 11.2, Argomenti avanzati 11.1, 11.3, 11.3.1, 11.3.2
    Listati
    Esercizi proposti
    torna all'elenco delle lezioni
    Data 11 aprile 2002 (laboratorio)
    Argomenti Esercizi di programmazione in Java:
    I metodi showMessageDialog e showInputDialog della classe javax.swing.JOptionPane
    Consultazione della documentazione Java
    Riferimenti al testo Documentazione Java
    Listati
    Esercizi proposti Genera coppie di interi casuali in [0..99] e propone all'utente di calcolare somma e prodotto della coppia. Dopo 20 proposte visualizza le percentuali di successo
    torna all'elenco delle lezioni
    Data 12 aprile 2002 (lezione)
    Argomenti Copia di arrays: copia riferimento vs. copia elementi attraverso un ciclo
    La variabile istanza di array .length
    Test di uguaglianza tra arrays: == tra riferimenti vs. ciclo con == tra elementi
    valutazione "lazy" (pigra) di condizioni in && e in ||
    Arrays sovradimensionati
    Intersezione tra arrays non ordinati, sua complessità
    Ricerca sequenziale
    Cenni alla ricerca binaria
    Riferimenti al testo 11.1.2 (escluso System.arraycopy()), 11.1.3 (escluso System.arraycopy()), 11.3.1, 11.3.2
    Listati
    Esercizi proposti
    torna all'elenco delle lezioni
    La lezione del 16 aprile 2002 è stata annullata a causa dello sciopero generale
    torna all'elenco delle lezioni
    Data 18 aprile 2002 (laboratorio)
    Argomenti La classe StringTokenizer:
    costruttori, metodi countTokens(), hasMoreTokens(), nextToken()
    Definizione ed uso di array bidimensionali
    Riferimenti al testo 6.5.3, 11.7
    Listati
    Esercizi proposti
    torna all'elenco delle lezioni
    Data 19 aprile 2002 (lezione)
    Argomenti Ricerca sequenziale su array ordinati e non ordinati
    Ricerca binaria in array ordinati
    Complessità dell'algoritmo di ricerca binaria
    L'algoritmo bubble sort, versioni migliorate con test di ordinamento e scansioni di lunghezza decrescente
    Scambio di due variabili
    Riferimenti al testo 15.6, 15.7, per l'algoritmo bubble sort si rimanda al listato riportato più avanti
    Listati
    Esercizi proposti
    torna all'elenco delle lezioni
    Data 23 aprile 2002 (lezione)
    Argomenti Definizione di classi
    Metodi e variabili istanza
    Accesso public e private
    Costruttori
    Uso di classi: istanziazione di oggetti, invocazione di metodi
    Esempi di classi: Contatore e MultiInsieme
    Riferimenti al testo 3.1, 3.2, 3.3, 3.4, 3.5, Errori comuni 3.1, 3.6, Errori comuni 3.5
    Listati
    Esercizi proposti
    torna all'elenco delle lezioni
    Data 26 aprile 2002 (lezione)
    Argomenti Ereditarietà: definizione di sottoclassi, costrutto extends
    Variabili istanza e metodi della sottoclasse
    Sovrascrittura di metodi della superclasse
    Costruttore della sottoclasse, il costruttore super
    Invocazione di metodi sovrascritti dai metodi della sottoclasse con il costrutto super.nomeMetodo
    accesso alle variabili della superclasse: specifica di accesso protected
    Riferimenti al testo 9.1, Errori comuni 9.1, 9.4, 9.5, 9.8, Argomenti avanzati 9.4
    Listati
    Esercizi proposti
    torna all'elenco delle lezioni
    Data 30 aprile 2002 (lezione)
    Argomenti Categorie di applicazioni Java: applicazioni da console, applet, applicazioni grafiche
    Applet: il visualizzatore appletviewer
    Definizione di applet come sottoclasse di javax.swing.JApplet
    Sovrascrittura dei metodi init e paint
    Uso della classe grafica java.awt.Graphics2D: i metodi draw, fill, setColor
    La classe Color
    Riferimenti al testo 4.1, 4.2 (prerequisito), 4.3, 4.4, 4.5, 4.8
    Listati
    Esercizi proposti
    • Bersaglio.java
    torna all'elenco delle lezioni
    Data 2 maggio 2002 (laboratorio)
    Argomenti Esercitazioni sulla definizione di sottoclassi con metodi statici
    Esercitazioni sulla scrittura di applet
    Riferimenti al testo
    Listati
    Esercizi proposti
    torna all'elenco delle lezioni
    Data 3 maggio 2002 (lezione)
    Argomenti Overloading di metodi e costruttori
    Costrutto try catch
    Cenni sulle classi Line2D.Double, Rectangle2D.Double, Arc2D.Double, loro uso per la crazione di grafici in un applet
    Riferimenti al testo
    Listati
    Esercizi proposti
    • Visualizzazione di un istogramma o diagramma a torta
    torna all'elenco delle lezioni
    Data 7 maggio 2002 (lezione)
    Argomenti Passaggio di parametri.
    Effetti collaterali nel passaggio di riferimenti a oggetti ed array
    Introduzione alla ricorsione
    Metodo ricorsivo per il calcolo del fattoriale
    Algoritmo Merge Sort
    Riferimenti al testo
    Listati
    Esercizi proposti
    torna all'elenco delle lezioni
    Data 9 maggio 2002 (laboratorio)
    Argomenti Esercitazioni di programmazione in Java
    Implementazione dei metodi init e paint
    I metodi getHeight() e getWidth()
    Riferimenti al testo
    Listati
    Esercizi proposti
    torna all'elenco delle lezioni
    Data 14 maggio 2002 (lezione)
    Argomenti Introduzione alla complessità computazionale
    Concetto di complessità di un algoritmo.
    Misura della dimensione dell'input
    Complessità di un algoritmo
    Notazioni asintotiche O, teta, omega
    Analisi dell'algoritmo merge sort osservando l'albero di ricorsione
    Riferimenti al testo Cormen, Leiserson, Rivest[pagg. 21-26]
    Listati
    Esercizi proposti Sperimentazione degli algoritmi bubble sort e merge sort: conteggio dei confronti eseguiti dai due algoritmi per ordinare array pseudocasuali di dimensione crescente
    torna all'elenco delle lezioni
    Data 16 maggio 2002 (laboratorio)
    Argomenti Istruzione di selezione multipla switch
    Esercitazioni di programmazione in Java
    Riferimenti al testo
    Listati
    Esercizi proposti
    torna all'elenco delle lezioni
    Data 17 maggio 2002 (lezione)
    Argomenti Riepilogo sul concetto di visibilità di variabili e metodi.
    Variabili locali, parametri, istanza e static
    Visibilità di metodi istanza e static
    Concetto di vita di variabili e oggetti
    Il garbage collector di JRE
    Riferimenti al testo
    Listati
    Esercizi proposti
    torna all'elenco delle lezioni
    Data 21 maggio 2002 (lezione)
    Argomenti Analisi di complessità di algoritmi ricorsivi
    Equazioni di ricorrenza e loro soluzione tramite il teorema principale
    Algoritmi di base su array bidimensionali
    Prodotto di matrici
    Riferimenti al testo
    Listati
    Esercizi proposti
    • Verifica se una matrice è simmetrica
    • Verifica se una matrice è triangolare superiore
    • Ricerca del punto di sella di una matrice
    torna all'elenco delle lezioni
    Data 23 maggio 2002 (laboratorio)
    Argomenti Esercitazioni di programmazione in Java
    Riferimenti al testo
    Listati
    Esercizi proposti
    torna all'elenco delle lezioni
    Data 24 maggio 2002 (laboratorio)
    Argomenti Esercitazioni di programmazione in Java
    Riferimenti al testo
    Listati
    Esercizi proposti
    torna all'elenco delle lezioni