Parte
I |
Argomento: linguaggio Java - Acquisire dati da Standard Input - Esercizi molto semplici | La
mia soluzione |
Ricevere dati di tipo diverso | Scrivere un
programma che
acquisisca da standard input tre dati di tipo diverso nella stessa
riga: un numero intero, una parola e un numero in virgola mobile e li
invii a standard output nell'ordine inverso. Esempio: $java Echo7 introduci un numero intero, una stringa e un numero in virgola mobile: 7 ciao 5,1 5,1 ciao 7 NB: inserite i numeri in virgola mobile usando come carattere di separazione fra parte intera e parte frazionaria la virgola, come nell'esempio riportato sopra. Il sistema stampera' numeri in virgola mobile usando come carattere di separazione il punto. nella parte II sistemeremo questo piccolo inconveniente. |
Echo7.java |
Convenzioni locali | In JDK5.0
ulcune di funzioni di ingresso/uscita sono dipendenti da
convenzioni in uso localmente, dette impostazioni
locali. Esempi di impostazioni locali sono il formato dell'ora e il carattere di separazione nei numeri espressi in virgola mobile. Come e' noto, nel mondo anglosassone il carattere di separazione fra la parte intera e la parte frazionaria e' il carattere '.', mentre in Italia e' il carattere ','. Quando si usano oggetti di classe java.util.Scanner per acquisire in ingresso dati il programmatore puo' scegliere esplicitamente l'impostazione locale. Se non sceglie, viene usata quella dell'elaboratore su cui viene eseguito il programma, detta impostazione di default. La scelta dell'impostazione locale si fa invocando sull'oggetto di classe Scanner il metodo useLocale(Locale locale) della classe Scanner che accetta come parametro un oggetto di classe Locale del pacchetto java.util della libreria standard. La classe java.util.Locale contiene la definizione di comodi oggetti costanti da usare come parametro; ad esempio: Locale.US oggetto costante per le impostazioni locali americane (USA) Locale.ITALY oggetto costante per le impostazioni locali italiane Di seguito un esempio di uso esplicito di impostazioni locali: import java.util.Scanner; import java.util.Locale; ... Scanner in = new Scanner(System.in); in.useLocale(Locale.US); .... Anche gli oggetti di classe java.io.PrintStream come System.out possono adoperare impostazioni locali. In questo caso si usa il metodo format(Locale locale, String format, Object ...args) che invia al flusso di uscita la stringa format. Si usano le formattazioni introdotte per il metodo printf() della stessa classe. Ad esempio, per stampare a standard output un numero in virgola mobile con una impostazione locale italiana si scrive: import java.util.Locale; ... double d = 12.3; System.out.format(Locale.ITALY, "%f", d); ... Salvate la classe LocalTester.java riportata a fianco senza leggere il codice. compilatela ed eseguitela. Inserite i dati come richiesto. Sapreste scriverla? |
LocalTester.java |
Ricevere dati di tipo diverso
usando la localizzazione |
Scrivere la classe Echo8 che si
comporti come la classe Echo7, ma che accetti in ingresso numeri in
formato virgola mobile contenenti il punto come separatore anziche' la
virgola. Compilare ed eseguire. |
Echo8.java |
Gestire dati di tipo diverso usando la localizzazione | Scrivere la classe Echo9 che si
comporti come la classe Echo7, ma che
usi in ingresso e uscita numeri in virgola mobile contenenti la
virgola, anziche' il punto. Compilare ed eseguire. |
Echo9.java |
Parte
II |
Argomento: linguaggio Java - Esercizi meno semplici | La
mia soluzione |
Convertire da
decimale a binario |
Scrivere un
programma che
acquisisca da standard input (o da un 'dialog box' ) un numero
frazionario positivo n
nell'intervallo [0, 32), ne stampi a standard output la
codifica binaria in formato a virgola fissa usando cinque cifre binaria
per entrambe le parti intera e frazionaria. Esempio: 8.5 in base dieci = 01000.10000 in base due. Compilare ed eseguire. Si provi il programma con i seguenti dati di ingresso (casi di prova): 16.25 in base dieci = 10000.01000 in base due 10.75 in base dieci = 01010.11000 in base due 8.125 in base dieci = 01000.00100 in base due 4.0625 in base dieci = 00100.00010 in base due 2.03125 in base dieci = 00010.00001 in base due Si provi il programma con almeno altri quattro casi di prova a scelta dello studente. Algoritmo: si usino gli algoritmi di conversione da decimale a binario della parte intera e della parte frazionaria presentati a lezione. NOTA1: sia double d una variabile contenente un numero positivo, allora int pIntera = (int) d; // parte intera del numero d double pFraz = d - pIntera; // parte frazionaria del numero d NOTA2: nella conversione della parte frazionaria dopo aver moltiplicato per 2, si calcoli la parte intera e la parte frazionaria Esempio: convertire la parte frazionaria 0.35 0.35 * 2 = 0.7, pIntera = 0; pFraz = 0.7 0.7 * 2 = 1.4, pIntera = 1; pFraz = 0.4 0.4 * 2 = 0.8, pIntera = 0; pFraz = 0.8 ... |
MioConvertitoreBinario.java |
Convertire numeri da
base
decimale a base generica |
Scrivere un
programma che
converta un numero intero positivo da base decimale a una generica base
b con 2 <= b <= 10 . Il risultato della conversione sia sempre
espresso con otto cifre. La base e il numero da convertire siano acquisiti da standard input (o da un 'dialog box' ). Algoritmo: si usi la definizione di base numerica 125 in base 8 = 1 * 8^2 + 2 * 8^1 + 5 * 8^0 Si esegua il programma usando in ingresso i seguenti casi di prova: 64 in base 10 = 00000100 in base 8 10 in base 10 = 00000101 in base 3 36 in base 10 = 00000051 in base 7 49 in base 10 = 00000144 in base 5 Si provi il programma con almeno altri quattro casi di prova a scelta dello studente. |
ToGenericBaseConverter.java |
Parte III | Scoprire javadoc |
Esercitazione |
Copiare nella
directory
./lab3/ il file sorgente Dado.java. Nella directory home/lab3 provare a dare da terminale i comandi: [user@adtxx lab3]ls [user@adtxx lab3]javadoc Dado.java [user@adtxx lab3]ls Osservare che il comando javadoc ha creato il file Dado.html e altri file con estensione .html. Aprire il file Dado.html.con un web browser. Quello che vedete e' la documentazione dell'interfaccia pubblica della classe Dado. |
||
javadoc |
javadoc
e' un comando disponibile nell'ambiente Java che produce
documentazione automatica delle classi (Horstmann, par. 3.3 Commentare
l'interfaccia pubblica ). Un commento per javadoc inizia e finisce rispettivamente con i caratteri /** e */: /** questo e' un commento nello stile javadoc */ Si vedano ad esempio i commenti delle classi introdotte oggi al laboratorio. I token : @author nome_autore @version versione se inseriti nel commento della classe in stile javadoc identificano l'autore e la versione del codice. I token : @param nome_parametro descrizione @return descrizione se inseriti nel commento di un metodo nello stile javadoc descrivono i parametri espliciti e il dato restituito da un metodo. Guardare lo stile con cui sono stati scritti i commenti del metodo lancia() della classe Dado. |
javadoc |
wildcards | Spiegazione della
notazione
*.java. Nei comandi da shell, sia in linux sia in MS Windows, il carattere '*' si dice rappresentare una 'wildcard'. Lo spieghiamo con degli esempi: - *.java significa tutti i file con estensione .java - mioFile.* significa tutti i file di nome mioFile, qualsiasi sia l'estensione - mio*.* significa tutti i file il cui nome inizia con mio, qualsiasi sia l'estensione - *.* significa tutti i file, qualsiasi siano il nome e l'estensione. |