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


Prerequisiti Obiettivi Programma
Materiale Didattico Diario delle Lezioni Ricevimento Studenti
Prove d'esame Modalità d'esame

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.

OObiettivi e 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


Programma

Da definire


Materiale didattico

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

Prove d'esame

Per visualizzare i file .pdf è necessario il programma Acrobat Reader, reperibile gratuitamente presso
  http://www.adobe.com/products/acrobat/readstep2.html

Modalità d'esame

L'esame consiste in una prova scritta, di norma svolta nell'aula informatica, ed un colloquio.

Nella prova scritta si richiede di scrivere o completare un sorgente Java. Lo studente potra' utilizzare un semplice strumento di sviluppo (p.es. JCreator LE), il compilatore Java e la macchina virtuale Java disponibili in laboratorio. Potrà inoltre consultare la documentazione sulle API standard Java.

Non è permessa la consultazione di materiale cartaceo, ne' di quanto non previsto nel paragrafo precedente.

Il materiale prodotto durante la prova (sorgenti Java, bytecode, eventuale documentazione generata con Javadoc) dovrà essere salvato in una opportuna cartella.

Per facilitare l'organizzazione della prova si raccomanda agli studenti di prenotarsi solo se si è realmente intenzionati a sostenere l'esame.

Gli studenti non prenotati o che si presenteranno in ritardo o non muniti di un documento di riconoscimento non saranno ammessi a sostenere la prova scritta. E' possibile prenotarsi anche inviando una e-mail al docente


Diario delle lezioni

15 aprile 2003

vacanze pasquali

vacanze pasquali

24 aprile 2003 (lab)

festività

29 aprile 2003

festività

2 maggio 2003
6 maggio 2003 8 maggio 2003 (lab) 9 maggio 2003
13 maggio 2003 15 maggio 2003 (lab) 16 maggio 2003
20 maggio 2003 22 maggio 2003 (lab) 23 maggio 2003
27 maggio 2003 29 maggio 2003 (lab) 30 maggio 2003

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


15-4-03 (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
Esempi di programmi Java
I metodi System.out.print e System.out.println
Cenni all'uso di variabili, assegnazioni, strutture di controllo if e while
Riferimenti al testo Capitolo 1: tutto.
Esercizi proposti
  • Stampa della somma dei primi cento naturali
  • Stampa della somma dei quadrati dei primi cento naturali
  • Stampa di somma e prodotto di due interi, con messaggio sulla concordanza dei segni dei due interi
torna all'elenco delle lezioni
24-4-03 (laboratorio)
Argomenti Strumenti per sviluppo, compilazione, esecuzione di programmi in Java
Compilazione di sorgenti Java da linea di comando (comando "javac")
Esecuzione di codice intermedio (.class) da linea di comando (comando "java")
Uso di un semplice ambiente di programmazione a finestre: JCreator LE
Cenni alla consultazione della documentazione sulle API Java
Riferimenti al testo
Esercizi proposti
  • Stampa della tavola pitagorica 5 x 5
torna all'elenco delle lezioni
29-4-03 (lezione)
Argomenti Tipi primitivi: aritmetici, carattere, boolean
Dichiarazione di variabili, variabili final
Operatori aritmetici, relazionali, logici
Costruzione di espressioni complesse
Precedenza tra operatori
Conversioni implicite ed esplicite, operatore cast
Istruzione di selezione if ... else ...
Riferimenti al testo Capitolo 2: tutto. Capitolo 3: fino 3.3.1.2 (compreso).
Esercizi proposti
  • Verifica se tre interi possono essere le misure dei lati di un triangolo
  • Stampa tre interi in ordine non decrescente
  • Stampa il numero di divisori di un intero
  • Verifica se un intero è primo
torna all'elenco delle lezioni
2-5-03 (lezione)
Argomenti Istruzioni if annidate
Cicli: istruzione while, for
Esempi di programmi con cicli e selezioni
Input/output con metodi della classe JOptionPane
Alcuni metodi della classe Math
Riferimenti al testo Capitolo 3: fino a 3.6 (compreso) esclusi 3.3.2, 3.4.3.
Del 3.7 è stata trattata inoltre l'istruzione break (3.7.1)
Esercizi proposti
  • Stampa albero di Natale di ordine n
  • Conta divisori (versione migliorata)
Soluzioni ad alcuni esercizi
torna all'elenco delle lezioni
6-5-03 (lezione)
Argomenti Istruzione for
Esempi di semplici programmi con cicli
Dichiarazione e allocazione di array
Esempi di programmi su array
Riferimenti al testo Capitolo 3: da 3.5 alla fine. Capitolo 4: fino a 4.3 (compreso)
Esercizi proposti
  • Posizione del massimo in un array
  • Elenco di tutte le posizioni di un array che contengono il valore massimo
  • Massimi locali in un array
  • Crivello di Eratostene (stampa dei numeri primi minori di un intero N fissato)
Soluzioni ad alcuni esercizi
torna all'elenco delle lezioni
8-5-03 (laboratorio)
Argomenti Consultazione della documentazione sulle API Java
Uso di metodi static
Alcuni metodi static delle classi JOptionPane: showInputDialog e showMessageDialog
Alcuni metodi della classe Math
Alcuni metodi della classe Arrays: fill e sort
Cenni al sovraccarico di metodi
Riferimenti al testo
torna all'elenco delle lezioni
9-5-03 (lezione)
Argomenti Generazione di punti con coordinate casuali per la stima di π (Pi greco)
Inizializzazione di array
Ordinamento per selezione
Complessità computazionale dell'algoritmo di ordinamento per selezione
Riferimenti al testo Capitolo 4: fino 4.3 (compreso), 4.5 (escluso 4.5.5)
Esercizi proposti
  • Verifica se una sequenza in input è ordinata in senso non decrescente, crescente, non crescente, decrescente oppure nessuno dei precedenti
  • Stampare il numero di confronti eseguiti dall'algoritmo di ordinamento per selezione
  • Stampare l'andamento del numero di confronti eseguiti dall'algoritmo di ordinamento per selezione al variare della dimensione dell'array
  • Mostrare l'andamento del valore stimato di π al variare del numero di punti generati
  • Determinare il numero di terne di interi tra 1 e 1000 x, y, z tali che x, y, e z possono essere i lati di un triangolo rettangolo, con x < y < z
Programmi presentati
torna all'elenco delle lezioni
13-5-03 (lezione)
Argomenti Istruzione do ... while
Differenze tra le varie istruzioni di ciclo
Ricerca binaria, sua complessità, ricerca binaria con interpolazione (cenni)
Array multidimensionali
Esempi di programmi su array
Riferimenti al testo Capitolo 3: 3.4.3; Capitolo 4: 4.4, 4.5.5
Esercizi proposti
  • Somme per righe e per colonne degli elementi di una matrice
  • Stampa delle posizioni dei minimi locali di una matrice di reali
  • Ricerca binaria con interpolazione
  • Lettura di un array, ordinamento, ricerca binaria ripetuta di valori immessi da tastiera
Programmi presentati
torna all'elenco delle lezioni
15-5-03 (laboratorio)
Argomenti Esercitazioni in Java
torna all'elenco delle lezioni
16-5-03 (lezione)
Argomenti Definizione di metodi static
Signature di un metodo: tipo restituito, nome, parametri formali
Abbinamento tra parametri attuali e formali, conversioni implicite, passaggio per valore
Variabili locali: ambito di visibilità
Parametri di tipo array, passaggio per riferimento
Uso del costrutto .length in metodi con parametri array multidimensionali
Istruzione switch (cenni)
Riferimenti al testo Capitolo 3: 3.3.2; Capitolo 5: tutto (escluso 5.9)
Esercizi proposti Riprendere esercizi svolti, realizzando le singole funzioni attraverso la definizione di metodi e la relativa invocazione
Programmi presentati
torna all'elenco delle lezioni
20-5-03 (lezione)
Argomenti La ricorsione
Generalità sul paradigma divide et impera
Definizione ricorsiva del fattoriale di un naturale
Realizzazione del fattoriale ricorsivo in Java
L'ordinamento per fusione (merge sort)
Codifica del merge sort
Riferimenti al testo Capitolo 6: tutto (escluso 6.6)
Esercizi proposti
  • Calcolare il numero di elementi comuni dati due array (ciascuno con elementi distinti)
  • Costruire e stampare l'array intersezione
  • Costruire e stampare l'array unione
Programmi presentati
torna all'elenco delle lezioni
22-5-03 (laboratorio)
Argomenti Definizione di metodi public static
Uso di metodi public definiti in altre classi dall'utente
Realizzaione di semplici metodi pubblici di Input/Output
Documentazione di classi e metodi: javadoc
Commenti javadoc relativi a classi e metodi: i tag @param e @return
Metodi che restituiscono array
Riferimenti al testo
Esercizi proposti
  • Realizzazione ed uso di metodi di I/O per valori numerici che utilizzano JOptionPane
  • Realizzazione ed uso di un metodo per la visualizzazione di piccoli array monodimensionali attraverso JOptionPane
Programmi presentati
torna all'elenco delle lezioni
23-5-03 (lezione)
Argomenti Classi ed oggetti
Definizione e istanziazione di oggetti
Principio dell'incapsulamento, risorse public e private
Utilizzo di alcuni metodi della classe StringBuffer
Riferimenti al testo Capitolo 8: fino a 8.4 (compreso), con enfasi sull'uso di classi predefinite piuttosto che sulla definizione di nuove classi
Esercizi proposti
  • Leggere una stringa da tastiera, inserirla in un oggetto StringBuffer, contare il numero di occorrenze di caratteri numerici
  • Leggere due stringhe da tastiera, inserirle in oggetti StringBuffer, visualizzare la posizione iniziale di ciascuna occorrenza della seconda stringa nella prima
Programmi presentati
torna all'elenco delle lezioni
27-5-03 (lezione)
Argomenti Invocazione di metodi: metodi static vs. metodi membro, metodi interni alla classe
Visibilità di metodi: public e private
Passaggio di parametri oggetto (riferimento), il parametro implicito this
Ereditarietà: il metodo clone(), il metodo toString()
Cenni al concetto di polimorfismo
Esempi di uso della classe Rectangle
Riferimenti al testo
Esercizi proposti
  • Esercizi sulla classe Rectangle
Programmi presentati
torna all'elenco delle lezioni
29-5-03 (laboratorio)
Argomenti Simulazione di prova scritta (vedi modalità d'esame)
torna all'elenco delle lezioni
30-5-03 (lezione)
Argomenti Definizione di una classe: variabili membro e metodi membro
Definizione ed implementazione di una classe Pila
Riferimenti al testo Capitolo 8: fino 8.4 (compreso)
Esercizi proposti
  • Modificare la classe Pila, ridimensionando l'array ogni volta che viene eseguito un inserimento sulla pila piena o una eliminazione da una pila in cui il rapporto tra nuemro di elementi e capacità scende al di sotto di 1/3.
    La soluzione è mostrata in PilaElastica.java
Programmi presentati
torna all'elenco delle lezioni