Lo scopo di questa esercitazione è di cominciare
a scrivere i primi, semplici programmi Java. Per compilare ed eseguire
questi programmi si useranno i comandi javac e java da shell.
Prima della fine dell'esercitazione, inviare
tutti i file .java
prodotti (anche se incompleti) a rbruni@cli.di.unipi.it come attachment
di un messaggio di posta elettronica con Subject: ES-03.
(1) Compilare con javac e eseguire con java
-
Creare nella propria home la directory
ProgJava11/ES03, in
cui metteremo tutti i nostri file java.
Controllare che la directory esista con il comando
ls.
-
Scaricare il programma Java AreaRettangolo.java e salvarlo
nella cartella ProgJava11/ES03.
-
Posizionarsi nella cartella ProgJava11/ES03 e verificare che contenga il file
AreaRettangolo.java.
-
Compilare il file eseguendo da shell il comando
javac
AreaRettangolo.java
-
Eseguire il programma da shell usando il comando
java AreaRettangolo
L'output dovrebbe essere:
L'area del rettangolo
e' di 35 metri quadrati.
Attenzione: Se per qualche motivo non siete riusciti
ad eseguire correttamente il programma, potreste avere serie
difficoltà nel resto dell'esercitazione. Avvisate
subito il docente o magari prima chiedete
aiuto a un collega...
(2) Editare un programma
Questo semplice esercizio consiste nel
modificare il programma
"AreaRettangolo"
nel programma "AreaPerimetroRettangolo".
Come prima cosa create una copia del file
AreaRettangolo.java
chiamata
AreaPerimetroRettangolo.java
usando il comando cp.
Quindi editate il file
AreaPerimetroRettangolo.java
con gedit, emacs o kedit (o qualsiasi altro editor preferiate), invocando il comando
gedit AreaPerimetroRettangolo.java &
All'interno del file dovete cambiare il nome della classe,
aggiungere l'espressione
che calcola il perimetro e le istruzioni per stamparne il valore.
Compilare il programma dalla shell usando il comando javac ed eseguirlo con
il comando java.
Il risultato è quello atteso, cioè 24? In caso contrario,
controllate bene il programma...
Per ognuno degli esercizi che seguono,
sviluppare un'opportuno programma Java.
Ricordatevi di
inviare al docente TUTTI i file prodotti alla fine dell'esercitazione.
-
[1]
Scrivere il programma Interesse3 che modifica Interesse2
calcolando gli interessi maturati durante i primi 3
anni partendo da un capitale di 2500 euro. Per ogni anno si stampi
l'interesse maturato e il capitale accumulato fino a quel momento.
(Il capitale finale dovrebbe essere 2692.2265625).
-
[2] Nei prossimi esercizi si chiederà di
scrivere programmi che leggono i dati da tastiera sfruttando la classe
Input.java (invece di inizializzare
le variabili con valori fissati).
La classe comprende molti
metodi statici per leggere diversi tipi di dato, tra cui:
public static int readInt() |
// metodo per leggere
interi |
public static double readDouble() |
// per leggere numeri in
virgola
mobile |
Ciascuno di questi metodi può essere invocato senza argomenti o
con un argomento di tipo stringa che viene usato come messaggio di
prompt per il dato da inserire.
La classe Input non appartiene alla
distribuzione standard di Java. Dovete quindi scaricarla nella cartella dell'esercitazione e compilarla.
La classe Input non contiene il metodo
main, quindi non potete
eseguirla.
-
[3]
Scrivere il programma DueVar che dichiara due variabili,
le inizializza con due valori in virgola mobile letti in input, e ne stampa
la somma e il prodotto.
Esempio di interazione con il programma (in verde
l'input dell'utente):
java
DueVar
Dammi il primo valore (in virgola mobile): 10.34
Dammi il secondo valore (in virgola mobile): 1.179
Somma = 11.519
Prodotto = 12.19086 |
- [4]
Scrivere il programma Divisione che legge due
numeri interi n e m e stampa prima il
quoziente della loro divisione intera e poi il resto (operatore %), su due righe
diverse e con un opportuno commento.
Cosa succede se si tenta di dividere per zero?
Esempio di interazione con il programma (in verde
l'input dell'utente):
java
Divisione
Dammi il primo numero (un
intero): 19
Dammi il secondo numero (un intero): 4
Il risultato della divisione intera
e': 4
Il resto e': 3 |
- [5]
Scrivere un programma Diagonale che chiede all'utente la
lunghezza dei due lati di un rettangolo, calcola la lunghezza della
diagonale usando il teorema di Pitagora (per estrarre la radice
quadrata, usare il metodo predefinito Math.sqrt(x))
e la stampa.
Esempio di interazione con il programma (in verde l'input dell'utente):
java
Diagonale
Dammi la
lunghezza del primo lato (un reale): 3.0
Dammi la
lunghezza del secondo lato (un reale): 4.0
La diagonale
e' lunga 5.0 |
-
[6]
Qualcuno ha scritto il programma Quadrato che chiesti all'utente i
valori della base e dell'altezza di un rettangolo dovrebbe stampare il
perimetro del quadrato avente la stessa area.
Sfortunatamente il programma contiene errori sintattici (che ne impediscono la corretta compilazione) e logici (che porterebbero a un risultato errato).
L'esercizio consiste nel correggere e commentare opportunamente il codice.
-
[7]
Scrivere un programma Somma che legga 10 valori interi e ne stampi la somma totale.
-
[8]
Dati i seguenti file di testo, ciascuno contenente 10 numeri interi su
righe separate, usare il programma Somma (es. [7]) e la ridirezione
dello standard input per stampare la somma dei valori contenuti in
ciascun file.
-
[9]
Preso il file di testo dati.txt, sfruttare il comando cut e la pipe, per calcolare la somma dei valori presenti nella quarta colonna del file di dati usando il programma Somma (es. [7])
(totale 138)
-
[10]
Correggere il programma AreaTriangolo in modo
che stampi correttamente l'area di un triangolo con base 9 e altezza
7.
-
[11]
Assumendo che le variabili intere x, y e z valgano inizialmente 1, quali valori stamperebbe la seguente serie di istruzioni?
x = x++;
System.out.println(x);
y += ++y;
System.out.println(y);
z -= z + x + y;
System.out.println(z);
System.out.println(++x);
System.out.println(y++);
System.out.println(++z + ++y + ++x);
System.out.println(x = y = z = x + y);
|
Verificate la vostra risposta scrivendo ed eseguendo un opportuno programma.
-
[12]
Assumendo che inizialmente le variabili intere x, y e z valgano rispettivamente 1,2 e 3, quali valori stamperebbe la seguente serie di istruzioni?
x = x + y * y + z / y - 1;
System.out.println(x);
y *= x *= z *= y;
System.out.println(y);
z = z -= z += z;
System.out.println(z);
|
Verificate la vostra risposta scrivendo ed eseguendo un opportuno programma.
-
[13]
Scrivere il
programma Velocita per risolvere il seguente problema: Il signor Marmitta si reca
al lavoro in macchina percorrendo lo stesso tragitto sia all'andata
che al ritorno, però a causa della diversità del traffico
mattutino da quello serale viaggia a una media di 30 Km/h all'andata
e di 60 Km/h al rientro. Qual è la velocità media del viaggio
giornaliero?
Nota: Il quesito è più sottile di quanto sembri e la risposta non è
45 Km/h, come si potrebbe essere portati a rispondere.
-
[14]
Modificare il programma Velocita in modo
che possa risolvere una qualsiasi istanza del problema (cioè con valori diversi per la media di andata e di rientro).
-
[15]
Scrivere il programma TiraDado che genera casualmente dieci
numeri interi compresi tra 1 e 6 (inclusi) e li stampa su righe separate.
Sfruttare il programma TiraDado e la ridirezione dello standard output per produrre un file lanci.txt contenente 50 numeri interi generati casualmente e compresi tra 1 e 6 (inclusi). Sfruttare il comando grep e il comando wc per capire quale numero compare meno volte dentro il file lanci.txt.
Per la generazione di numeri casuali, si usi il
metodo Math.random(), che
restituisce un numero decimale casuale compreso tra 0 (incluso) e 1 (escluso). Il numero così
generato può essere trasformato opportunamente. Ad esempio, per
assegnare alla variabile intera numeroCasuale
un numero casuale intero compreso tra 1 e n, si può
utilizzare l'istruzione
int numeroCasuale = (int)(Math.random()*n) + 1;
|
|