Parte
I |
Argomento:
linguaggio Java - Acquisire dati da Standard Input - Esercizi molto
semplici |
La
mia soluzione. |
Eco |
Programmare una
classe eseguibile che acquisisce una stringa da standard input e invia
la stringa stessa a standard output. |
Echo2.java |
Eco andando a capo. |
qProgrammare una classe eseguibile che
acquisisca una riga da standard input contenente tre parole (stringhe
separate dai caratteri SP o '\t') e le stampi una per riga
nell'ordine in cui sono nella stringa.
Esempio: l'esecuzione produce le seguenti stampe, se si introduce la stringa "uno due tre" $java Echo3 introduci tre parole nella stessa riga: uno due tre uno due tre |
Echo3.java |
Eco andando a capo
in ordine inverso |
Programmare
una classe eseguibile che acquisisca una riga da standard input
contenente tre parole (stringhe separate dai caratteri SP o '\t') e le
stampi una per riga in ordine inverso di acquisizione. Esempio: l'esecuzione produce le seguenti stampe, se si introduce la stringa "uno due tre" $java Echo4 introduci tre parole nella stessa riga: uno due tre tre due uno |
Echo4.java |
Ricevere e sommare
numeri. |
Programmare
una classe eseguibile che acquisisca tre numeri in virgola mobile da
standard input e stampi a standard output i tre numeri e la loro somma. Esempio: l'esecuzione produce le seguenti stampe, se si introduce la stringa "uno due tre" $java Echo5 introduci tre numeri in virgola mobile nella stessa riga: 1,0 2,0 3,0 1.0 + 2.0 + 3.0 = 6.0 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. Vedremo prossimamente come sistemare questo piccolo problema. |
Echo5.java |
Ricevere e sommare numeri. | Programmare
una classe eseguibile che acquisisca due numeri in virgola mobile
ciascuna da una InputBox e stampi la somma dei numeri in una MessageBox. NB: il sistema richiede di inserire i numeri in virgola mobile usando come carattere di separazione fra parte intera e parte frazionaria il punto. |
Echo6.java |
Parte
II |
Argomento:
linguaggio Java - Esercizi meno semplici |
La mia soluzione. |
Invertire l'ordine
delle parole
in una riga |
Leggere da standard
input una
riga composta da cinque parole e inviare a standard output una riga in
cui le parole sono disposte in ordine inverso. Esempio: input: uno due tre quattro cinque output: cinque quattro tre due uno |
FiveWordsLineReverser.java |
Spaziare un numero I |
qLeggere
da standard input un numero intero positivo avente al massimo 5 cifre
e visualizzare sull’output standard le singole cifre del numero
separandole con uno spazio. Ad esempo il numero 12345 verra' visualizzato come 1 2 3 4 5, il numero 123 come 0 0 1 2 3.
Algoritmo: applicare la definizione di notazione posizionale in base 10 e le proprieta' delle operazioni divisione e modulo dell'aritmetica intera. Il link Algorimo.html, a fianco, vi porta all'algorimo da applicare: usatelo solo se non riuscite a descrivere da soli il vostro algoritmo. Il link Spaziatore.java vi porta alla classe che risolve l'esercizio. Consultatelo solo se non riuscite a scrivere il programma dopo aver provato a costruire la soluzione da soli per almeno 15 - 20 min. Verificare il comportamento della classe con dati di ingresso non ammessi quali: - numeri con piu' di cinque cifre - numeri negativi - numeri frazionari - ingressi non numerici, ad esempio "ciao" |
Algoritmo.html Spaziatore.java |
Spaziare un numero II |
Riscrivere la classe
precedente usando il metodo substring(int, int) della classe
java.lang.String per estrarre i singoli caratteri dalla stringa
di ingresso. Che cosa succede se il numero introdotto - ha meno di cinque cifre? - e' frazionario? - e' negativo? - non e' un numero ma una stringa di cinque caratteri come "ciao!" |
SpaziatoreStringa.java |
Spaziare un numero III | Riscrivere la classe
precedente usando il metodo charAt(int) della classe
java.lang.String per estrarre i singoli caratteri dalla stringa
di ingresso. Che cosa succede se il numero introdotto - ha meno di cinque cifre? - e' frazionario? - e' negativo? - non e' un numero ma una stringa di cinque caratteri come "ciao!" |
SpaziatoreCarattere.java |
Parte
III |
Argomento:
approfondimento sulla rappresentazione dell'informazione |
Esempi |
I limiti del codice
ASCII |
Il linguaggio Java
supporta pienamente la codifica Unicode. Non così accade per
tutti i
sistemi operativi. Scrivere un programma che stampi una riga di testo contenente caratteri Unicode non appartenenti al codice ASCII (codici Unicode superiori a 127 decimale o 007F esadecimale), quali i caratteri 'à', 'ò', ' è', ' ì', ' ù'. Compilare ed eseguire il programma nei sistemi operativi Linux (in laboratorio) e Windows (a casa se ne avete la possibilità). I risultati sono differenti? Perche'? |
ASCIItester.java |
La divisione per
zero nei numeri
interi |
Scrivere il codice
della classe
IntegerDivider che acquisisce due numeri interi m e n da standard input
e invia a standard output il risultato e il resto della divisione
m
/ n Compilare e eseguire. Che cosa succede se il divisore e' zero? |
IntegerDivider.java |
La divisione per
zero nei numeri
a virgola mobile IEEE 754 a doppia precisione |
Scrivere il codice
della classe
DoubleDivider che acquisisce
due numeri reali x e y da standard input e invia a standard
output il
risultato della divisione x / y. Compilare ed eseguire. Esegue correttamente? Provare con le coppie di numeri: x = 7.0 y = 0.0 x = -7.0 y = 0.0 x = 0.0 y = 0.0 Spiegare i risultati ottenuti |
DoubleDivider.java |
Errori nella
rappresentazione in
virgola mobile IEEE 754 |
Scaricare,
compilare
ed eseguire
la classe ScontoImperfetto.java
che
effettua uno sconto di 50 unita' su un
importo
di
100 milioni di miliardi di unita' (pari a 1017). La classe stampa i risultati ottenuti usando: - l'aritmetica IEEE 754 doppia precisione (in java di tipo double) - l'aritmetica intera a 64 bit (in java di tipo long). Compilare ed eseguire. Perché i risultati sono diversi? |
|
Limiti delle
rappresentazioni
numeriche |
Scrivere una classe
che invii a
standard output per ciascun tipo di dati fondamentali del linguaggio
Java il massimo e
il minimo
rappresentabile. |
SegnalatoreLimitiNumerici.java |
Parte
IV |
Argomento: usare le classi |
La
mia soluzione. |
Dado |
La classe Dado
rappresenta un dado. Dado.class è il
suo bytecode mentre Dado.html è la sua
interfaccia pubblica. Copiare nella directory Lab2 il bytecode
Dado.class. Scrivere e memorizzare nella directory Lab2 la classe
eseguibile Risiko.java che effettua le seguenti operazioni: - acquisisce da standard input il nome del primo giocatore e lo memorizza - acquisisce da standard input il nome del secondo giocatore e lo memorizza - lancia tre volte il dado per ciascun giocatore - invia a standard output il risultato del lancio dei dadi Esempio: $java Risiko introduci il nome del primo giocatore: rossi introduci il nome del secondo giocatore: neri lanci di rossi: 5 2 3 lanci di neri: 1 6 5 |
Risiko.java |
Calendario. |
La classe Calendario effettua
elaborazioni relative alle date. Calendario.class
è il suo bytecode. Calendario.html
la sua interfaccia pubblica. Copiare nella directory Lab2 il bytecode Calendario.class. Scrivere e memorizzare nella directory Lab2 la classe eseguibile mainCalendario.java che effettua le seguenti operazioni: - acquisice da standard input una data nel formato gg/mm/aaaa (es: 10/10/2007) - calcola il giorno della settimana corrispondente alla data (es: per la data 10/10/2007 calcola Mercoledi') - invia a standard output il messaggio "giorno della settimana data" (es: Mercoledi' 10/10/2007) - calcola quanti giorni sono trascorsi dalla data inserita a quella odierna - invia a standard output il messaggio "trascorsi dal data n giorni" (es: trascorsi dal 10/10/2007 5 gioni); |
MainCalendario.java |