Parte
I |
Linguaggio
Java: Metodologia
di programmazione delle classi |
Metodologia | In questo
laboratorio inizieremo a programmare classi in java. Per programmare una classe e' bene seguire le seguenti fasi: 1/ Progettare la classe 1.1 Definire le variabili di esemplare E' necessario individuare le variabili di esemplare (quante? quali? dipende dalla classe!). Per ciascuna variable di esemplare si deve, poi, definire tipo e nome. 1.2 Definire l'interfaccia pubblica Definire i costruttori e i metodi da realizzare e per ciascuno scrivere la firma, in modo da definire gli eventuali parametri e tipi di dati restituiti, seguita dal corpo vuoto. Se un metodo restituisce un tipo di dati, scrivere nel corpo la sola istruzione return seguita da: - false se il metodo restituisce un valore di tipo boolean - 'a' se il metodo restituisce un valore di tipo char - 0 se il metodo restituisce un valore numerico (byte, short, int, long, float, double) - null se il metodo restituisce un riferimento a un oggetto E' importante programmare l'istruzione return perche' questo ci permette di compilare senza errori i metodi prima di scriverne il codice. Quando si scrive il metodo si modifica l'istruzione return secondo quanto richiesto dal metodo. 2/ Scrivere il codice Usando un editor di testi scrivere il codice, iniziando dalla definizione delle costanti e delle variabili di esemplare. L'editor deve essere impostato nel seguente modo: - tabulazione pari a 3 caratteri - indentazione automatica pari a 3 caratteri - conversione tabulazione in caratteri (Si veda Horstmann 3^ Ed. cap. 6 Consigli per la produttivita' 6.1 pag.176) VERIFICARE LE IMPOSTAZIONI DEL PROPRIO EDITOR!!! Non appena si e' realizzato un metodo, si deve compilare e correggere gli errori di compilazione. (Se il metodo e' complicato compilare anche prima di terminare il metodo). NON ASPETTATE DI AVER CODIFICATO TUTTA LA CLASSE PER COMPILARE!!! Se fate questo, vi troverere, probabilmente, a dover affrontare un numero elevato di errori, col rischio di non riuscire a venirne a capo in un tempo ragionevole (come quello a disposizione per la prova d'esame).. 3/ Provare la classe In questo laboratorio non impareremo a provare le classi. Lo faremo nei prossimi. Oggi le classi saranno provate in modo molto semplice usando classi di prova fornite dal docente. Buon lavoro. :) AL |
Parte
II |
Linguaggio
Java: programmare
semplici
classi |
Una
soluzione possibile |
Numeri complessi | In Java non esiste
un tipo di dati fondamentali per rappresentare i numeri complessi. Per
elaborare numeri complessi è necessario scrivere una classe. Si scriva la classe Complex con la seguente Interfaccia publica per la gestione di numeri complessi. Attenzione: l'esercizio richiede solo le semplici nozioni sui numeri complessi riportate qui. Osservazioni e suggerimenti: 1/ Variabili di esemplare: definite due variabili di esemplare per memorizzare, rispettivamente, la parte reale e la parte immaginaria del numero complesso. 2/ Esempio per la realizzazione dei metodi: il metodo add() public Complex add (double z) { /* costruisco un numero complesso di parte reale re + z.re e parte immaginaria im + z.im. Nota1: re e im sono le variabili di esemplare del parametro implicito. Il metodo add() verra' invocato nel programma chiamante nel seguente modo: c1.add(c2); // dove c1 e c2 sono due riferimenti a oggetti di classe Complex definiti e inizializzati precedentemente. Nota2: z.re e z.im sono le variabili di esemplare dell'oggetto z. Si pou' usare questa notazione per accedere alle variabli di esemplare private solo all'interno della classe. */ Complex c = new Complex (re + z.re, im + z.im); return c; } 3/ Tipo di dati restituiti dai metodi I metodi possono ritornare riferimenti a oggetti. I metodi della classe Complex restituiscono riferimenti a oggetti di classe Complex! Questo e' possibile e molto comune in java. Provare la classe Complex con la classe di prova ComplexTester fornita. La classe richiede l'immissione da Standard Input di due numeri complessi, uno per riga, nel formato x, y <Enter>, dove x (parte reale) e, y (parte immaginaria) sono separate dal carattere ','. Fornisce a Standard Output: somma, sottrazione, prodotto, divisione, elementi inversi e coniugati dei numeri. Provatela con numeri semplici, in modo da verificare i risultati ottenuti. |
Complex.java ComplexTester.java |
Triangolo |
qSi
scriva la classe
Triangolo, che descrive un triangolo, con la seguente interfaccia
pubblica Triangolo.html.
Qui ci sono dei suggerimenti. Non leggeteli subito, ma solo se non riuscite a scrivere la classe da soli. Provare la classe Triangolo con le classi di prova fornite, una che legge i dati da standard input, l'altra da dialogBox. Provate triangoli semplici. |
Triangolo.java ProvaTriangoloStdIO.java ProvaTriangoloJOptionPane.java |
Parte
III |
Linguaggio
Java: decisioni e
cicli. Semplici classi eseguibili |
Una
soluzione possibile |
Una semplice
successione di
numeri interi |
Scrivere un
programma che invia
all'output standard la successione dei numeri interi da 1 a n (n compreso),
dove n e'
letto da Standard Input Provare a stampare i primi 200 numeri. Casi particolari: n <= 0: stampare un messaggio del tipo: "Ingresso non ammesso". |
Enumeratore.java |
Migliorare la stampa |
qModificare
il programma precedente in modo che stampi i numeri incolonnati in 10
colonne.
Provare a stampare i primi 200 numeri. |
EnumeratoreInColonna.java |
Migliorare ancora |
Modificare il
programma precedente in modo che ciascun numero stampato abbia almeno 5
caratteri (spazi a sinistra se il numero ha meno di 5 cifre). Provare a stampare i primi 200 numeri. |
EnumeratoreEquispaziato |
Riconoscere i numeri
primi |
Scrivere un
programma che legga
da standard input una serie di numeri interi positivi (uno alla
volta) e per ciascun numero segnali su output standard se il
numero e'
primo o ha divisori. Il programma termini quando viene letto il
carattere Q. Definizione di numero primo Un numero intero positivo n > 0 e' primo se e solo i suoi soli divisori sono 1 e n stesso. Per verificare se un numero intero positivo n e' primo si divida n per i numeri interi dell'insieme J = {j | j >= 2 && j*j <= n}. Se viene trovato anche un solo divisore, il numero n non e' primo. L'algoritmo non e' efficiente. Un algoritmo piu' efficente sarebbe 'Il Crivello di Eratostene', ma non sappiamo ancora programmarlo. Casi particolari: - n <= 0: stampare un messaggio del tipo: "Ingresso non ammesso". - fare attenzione ai casi particolari n = 1, 2, 3 per i quali l'insieme J e' vuoto. |
RiconoscitoreNumeriPrimi |
Ancora numeri primi |
Scrivere un
programma che
legga da standard input un numero intero positivo n e stampi
su standard output i numeri primi compresi fra 1 e n (n compreso). |
EnumeratoreNumeriPrimi.java |
Massimo Comun
Denominatore
(MCD) con l'algoritmo di Euclide |
Scrivere un
programma che
calcoli il massimo comun divisore (MCD) fra due numeri interi positivi m e n. Si acquisiscano i numeri m e n da standard input e si visualizzi il risultato a standard output. Algoritmo di Euclide per il calcolo del MCD Siano m e n due numeri interi positivi con m > n . 1. finche' il resto dell divisione di m per n e' diverso da zero si ponga 2. il nuovo m diventa n precedente, il nuovo n diventa ( m precedente % n precedente) 3. Quando il resto e' zero, allora MCD = n |
MCD.java |
Fattori primi |
Scrivere un
programma che esegua
la scomposizione in fattori primi di un numero intero positivo n. Si
acquisisca il numero da standard input e si visualizzi la
fattorizzazione a standard output. Esempio di fattorizzazione: 12 = 2 * 2 * 3 |
Fattorizzatore.java |
Fibonacci il Grande |
Scrivere un
programma che stampi
su output standard i primi n termini della
successione di Fibonacci. Il
numero n
sia acquisito da standard input . Successione di Fibonacci f(0) = 1, f(1) = 1, f(k) = f(k-2) + f(k-1) per k > 2 Esempio: 1, 1, 2, 3, 5, 8, 13, 21, 34, ... La successione fu introdotta da Leonardo da Pisa detto Fibonacci (Pisa, 1175-1235 d.c.) per descrivere l'evoluzione di una popolazione di conigli a partire da un'unica coppia, nell'ipotesi che a tempo fisso (ad esempio ogni mese) ciascuna coppia generi una nuova. Nell'esempio che segue n sia il numero progressivo del mese, sia C = coppia adulta in grado di generare, n = coppia appena nata che raggiunge la maturita' dopo un mese: n popolazione f(n) 0 n 1 1 C 1 2 C + n 2 3 2C + n 3 4 3C + 2n 5 5 5C + 3n 8 ... Attenzione I numeri della successione di Fibonacci crescono rapidamente tanto che il tipo di dati di java int non risulta adatto a memorizzare piu' di circa 40 termini della successione. Il file fibonacci.txt elenca i primi 35 numeri della successione. |
GeneratoreFibonacci.java |
Numeri triangolari |
Scrivere un
programma che stampi a standard output i primi n numeri triangolari. Il
numero n sia
acquisito da standard input. Numeri triangolari Il numero traingolare n-esimo e' pari alla somma dei numeri n + (n - 1) + (n - 2) + ...+ 2 + 1. I numeri trangolari sono generati dalla successione t(n) = n * (n + 1) / 2 = n + (n - 1) + (n - 2) + ... + 2 + 1, per n >= 1 Si chiamano triangolari perche' sono pari ai numeri di punti evidenziati nei triangoli seguenti: * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * n 1 2 3 4 5 6 t(n) 1 3 6 10 15 21 in cui ogni triangolo si puo' ricavare dal precedente aggiungendo la fila di base. Il file triangolari.txt elenca i primi 100 numeri triangolari. |
GeneratoreNumeriTriangolari ProvaCalcolatoreNumerico.java |