Programmare in Java
Marco Bertacca, Andrea Guidi
Copyright © 2007 – The McGraw-Hill Companies srl
Soluzioni degli esercizi
Capitolo 1
2
a. Scrivi 1
b. fintantoché il numero scritto è diverso da 100, scrivi il numero precedente + 1
c. fine
3
a. Scrivi 1
b. fintantoché il numero scritto è diverso da 99, scrivi il numero precedente + 2
c. fine
5
a.
b.
c.
d.
e.
Scrivi –150
addiziona 1 al numero precedente
se il resto della divisione intera, del numero ottenuto, per 4 è diverso da zero scrivi il numero
fintantoché il numero ottenuto è diverso da 0 vai all’istruzione b
fine
6
a. Suddividi le carte in 4 mazzi, ognuno dei quali costituito da carte dello stesso seme
b. per ogni seme ordina le carte dall’asso al re
c. prendi il mazzo di cuori, quadri, fiori e picche
7
Alla prima mossa si devono lasciare all’avversario 9 oggetti (4i + 1, i = 2)
a. Raccogli 2 oggetti
b. il secondo giocatore raccoglie m oggetti (1  m  3)
c. finché ci sono ancora oggetti sul tavolo: raccogli 4 – m oggetti e vai all’istruzione b
d. fine (il secondo giocatore gioca sempre per ultimo e il primo giocatore vince sempre)
8
a.
b.
c.
d.
e.
Il primo giocatore raccoglie m oggetti (m può essere 1 o 3)
raccogli m oggetti
il primo giocatore raccoglie m oggetti (1  m  3)
finché ci sono ancora oggetti sul tavolo: raccogli 4 – m oggetti e vai all’istruzione c
fine (il primo giocatore gioca sempre per ultimo e il secondo giocatore vince sempre)
9
Non è possibile scrivere un algoritmo vincente quando gli oggetti sono n = 4i + 1, per esempio 9, 13, 17, 21 ecc. In tali
circostanze il primo giocatore non può lasciare al secondo un numero di oggetti della forma 4i + 1. Negli altri casi (n
diverso da 4i + 1) l’algoritmo è il seguente.
a. Raccogli j oggetti, dove j = 2 se r = 3 (r è il resto della divisione intera di n per 4), j = 1 se r = 2, j = 3 se r = 0
b. il secondo giocatore raccoglie m oggetti (1  m  3)
c. finché ci sono ancora oggetti sul tavolo: raccogli 4 – m oggetti e vai all’istruzione b
d. fine (il secondo giocatore gioca sempre per ultimo e il primo giocatore vince sempre)
10
a. Prendi i coefficienti a, b e c
b. calcola  = b2 – 4ac
c. se  < 0 non esistono radici reali, altrimenti
Programmare in Java
Marco Bertacca, Andrea Guidi
Copyright © 2007 – The McGraw-Hill Companies srl
se  = 0 allora x1 = x2 = –b/2a, altrimenti
x1 
b  
b  
; x2 
2a
2a
Capitolo 2
2
numero = 1;
while(numero<101) {
scrivi numero;
numero = numero + 1;
}
o, tra le tante alternative:
numero = 0;
do {
numero = numero + 1;
scrivi numero;
}
while (numero!=100);
3
numero = 1;
while(numero<100) {
scrivi numero;
numero = numero + 2;
}
5
numero = -150;
while(numero<0) {
if(numero%4!=0) scrivi numero;
numero = numero + 1;
}
7
n è la variabile che contiene il numero di oggetti con cui si gioca, mentre m è la variabile che contiene il numero di
oggetti che preleva il secondo giocatore. Si dà per scontato che il secondo giocatore raccolga 1, 2 o 3 oggetti, per cui
l’istruzione
prendi m;
assegnerà a m un valore intero compreso tra 1 e 3. In realtà questi valori andrebbero controllati.
n = 11;
n = n - 2;
while(n>4) {
prendi m;
n = n - m;
n = n -(4-m);
}
scrivi "Tocca al secondo giocatore, e il primo ha vinto"
Programmare in Java
Marco Bertacca, Andrea Guidi
Copyright © 2007 – The McGraw-Hill Companies srl
Naturalmente avremmo potuto scrivere al posto delle ultime due istruzioni n=n-m-(4-m).
8
Nota: si dà per scontato che il primo giocatore raccolga 1 o 3 oggetti al primo giro e 1, 2 o 3 oggetti ai giri successivi. In
realtà questi valori andrebbero controllati.
n = 11;
prendi m;
n = n - m;
while(n>4) {
prendi m;
n = n - m;
n = n -(4-m);
}
scrivi "Tocca al primo giocatore, e il secondo ha vinto"
9
Non è possibile scrivere un algoritmo vincente quando gli oggetti sono n = 4i + 1, per esempio 9, 13, 17, 21 ecc. In tali
circostanze il primo giocatore non può lasciare al secondo un numero di oggetti della forma 4i + 1. Negli altri casi (n
diverso da 4i+1) l’algoritmo è il seguente.
prendi n;
r = n % 4;
if(r=3) j=2;
if(r=2) j=1;
if(r=0) j=3);
n = n - j;
while(n>4) {
prendi m;
n = n - m;
n = n -(4-m);
}
scrivi "tocca al secondo giocatore, e il primo ha vinto"
Abbiamo utilizzato una sequenza di tre if per determinare il valore di j; avremmo potuto utilizzare una cascata di if
(Capitolo 4).
if(r=3) j=2; else
if(r=2) j=1; else j=3;
Dato che nel nostro caso i valori ammissibili del resto della divisione intera di n per 4 possono essere solo 0, 2, 3 (1 non
può essere, altrimenti n sarebbe della forma 4i + 1) possiamo evitare l’ultima if: if(r=0) e mettere direttamente
l’else.
Capitolo 3
7
-2147483648
2
-2147483648
0
8
a)
b)
44
44
Programmare in Java
Marco Bertacca, Andrea Guidi
Copyright © 2007 – The McGraw-Hill Companies srl
c)
45
d)
errore in compilazione
e)
45
errore in compilazione
errore in compilazione
errore in compilazione
errore in compilazione
127
-128
10
/* Calcola l’espressione y = xa+b, dove il valore di x è richiesto all'utente */
import java.util.Scanner;
class Espressione {
public static void main (String argv[]) {
int a, b, x, y;
a=18;
b=7;
System.out.print ("x = ");
Scanner sc = new Scanner(System.in);
x = sc.nextInt();
y = x*a + b;
System.out.print("y = ");
System.out.println(y);
}
}
11
/* Determina l'area di un rettangolo in
* cui i valori di base e altezza,
* passati dall'utente, sono di tipo float */
import java.util.Scanner;
class AreaRettangoloDaUtente {
public static void main (String argv[]) {
float base, altezza, area;
Scanner in = new Scanner(System.in);
System.out.print ("Base: ");
base = in.nextFloat();
System.out.print ("Altezza: ");
altezza = in.nextFloat();
area = base * altezza;
System.out.print ("Area = ");
System.out.println (area);
}
}
Capitolo 4
2
/* Determina il maggiore dei quattro interi immessi */
import java.util.Scanner;
class Maggiore {
public static void main (String argv[]) {
Programmare in Java
Marco Bertacca, Andrea Guidi
Copyright © 2007 – The McGraw-Hill Companies srl
int i1=0, i2=0, i3=0, i4=0;
Scanner sc = new Scanner(System.in);
System.out.print ("Immettere primo intero:");
i1 = sc.nextInt();{ }
System.out.print ("Immettere secondo intero:");
i2 = sc.nextInt();{ }
System.out.print ("Immettere terzo intero:");
i3 = sc.nextInt();{ }
System.out.print ("Immettere quarto intero:");
i4 = sc.nextInt();{ }
if(i1>i2)
if(i1>i3)
if(i1>i4) {
System.out.print
System.out.print
}
else {
System.out.print
System.out.print
}
else
if(i3>i4) {
System.out.print
System.out.print
}
else {
System.out.print
System.out.print
}
else
if(i2>i3)
if(i2>i4) {
System.out.print
System.out.print
}
else {
System.out.print
System.out.print
}
else
if(i3>i4) {
System.out.print
System.out.print
}
else {
System.out.print
System.out.print
}
("Il maggiore e': ");
(i1);
("Il maggiore e': ");
(i4);
("Il maggiore e': ");
(i3);
("Il maggiore e': ");
(i4);
("Il maggiore e': ");
(i2);
("Il maggiore e': ");
(i4);
("Il maggiore e': ");
(i3);
("Il maggiore e': ");
(i4);
}
}
4
/* Verifica il valore delle espressioni date */
Programmare in Java
Marco Bertacca, Andrea Guidi
Copyright © 2007 – The McGraw-Hill Companies srl
class VerificaEspressioni {
public static void main (String argv[]) {
int a=5, b=35, c=7, ris; boolean risLog;
ris = a+b-c;
risLog = a>b;
System.out.print ("ris=a+b-c, ris: ");
System.out.println (ris);
System.out.print ("risLog=a>b, risLog: ");
System.out.println (risLog);
ris = a/b;
risLog = a/b > c;
System.out.print ("ris=a/b, ris: ");
System.out.println (ris);
System.out.print ("rislog=a/b>c, risLog: ");
System.out.println (risLog);
risLog = (a>b) | (a<c) | (c==b);
System.out.print ("risLog=(a>b) | (a<c) | (c==b), risLog: ");
System.out.println (risLog);
}
}
I risultati visualizzati dal programma saranno i seguenti:
a)
b)
c)
d)
e)
33
false
0
false
true
5
I risultati visualizzati dal programma saranno i seguenti:
a)
true
b)
false
c)
true
d)
true
e)
false
f)
true
6
I risultati visualizzati dal programma saranno:
a)
true
b)
false
c)
true
d)
true
e)
false
16
d = (a*a+b) != c ? a*b*c: a+b+c;
17
/* Accetta tre valori interi in ingresso e ne
* determina il maggiore con l’espressione condizionale “?:” */
import java.util.Scanner;
class MaggioreCondizionale {
public static void main (String argv[]) {
int a, b, c, x;
Programmare in Java
Marco Bertacca, Andrea Guidi
Copyright © 2007 – The McGraw-Hill Companies srl
Scanner sc = new Scanner(System.in);
System.out.print ("Primo intero: ");
a = sc.nextInt();
System.out.print ("Secondo intero: ");
b = sc.nextInt();
System.out.print ("Terzo intero: ");
c = sc.nextInt();
System.out.print ((x=(a>b)?a:b)>c?x:c);
}
}
18
/* Gestione di un menu */
import java.util.Scanner;
class GestioneMenu {
public static void main (String argv[]) {
int scelta;
System.out.println ("
MENU DI PROVA");
System.out.println ("1) Per immettere dati");
System.out.println ("2) Per determinare il maggiore");
System.out.println ("3) Per determinare il minore");
System.out.println ("4) Per ordinare");
System.out.println ("5) Per visualizzare");
System.out.print ("Scelta: ");
Scanner sc = new Scanner(System.in);
scelta = sc.nextInt();
switch (scelta) {
case 1: System.out.println ("In esecuzione l'opzione 1");
break;
case 2: System.out.println ("In esecuzione l'opzione 2");
break;
case 3: System.out.println ("In esecuzione l'opzione 3");
break;
case 4: System.out.println ("In esecuzione l'opzione 4");
break;
case 5: System.out.println ("In esecuzione l'opzione 5");
break;
default:
System.out.println ("Opzione inesistente");
}
}
}
19
/* Visualizza la rappresentazione binaria di un intero
* positivo utilizzando l’operatore & */
import java.util.Scanner;
class RappresentazioneBinaria {
public static void main (String argv[]) {
byte b;
System.out.print ("Intero positivo minore di 127: ");
Scanner sc = new Scanner(System.in);
b = sc.nextByte();
System.out.print ((b & 128)/128);
System.out.print ((b & 64) /64);
System.out.print ((b & 32) /32);
System.out.print ((b & 16) /16);
Programmare in Java
Marco Bertacca, Andrea Guidi
Copyright © 2007 – The McGraw-Hill Companies srl
System.out.print
System.out.print
System.out.print
System.out.print
((b
((b
((b
((b
&
&
&
&
8)
4)
2)
1)
/8);
/4);
/2);
/1);
}
}
Capitolo 5
3
/* Visualizza un rettangolo di cornice * e
parte interna Q; le dimensioni del
rettangolo sono decise dall'utente
*/
import java.util.Scanner;
class VisualizzaRettangolo {
public static void main (String argv[]) {
int i, j, linee, colonne;
Scanner sc = new Scanner(System.in);
do {
System.out.print ("Numero di linee: ");
linee = sc.nextInt();
}
while(linee<1);
do {
System.out.print ("Numero di colonne: ");
colonne = sc.nextInt();
}
while(colonne<1);
for(i=1; i<=linee; i++)
for(j=1; j<=colonne; j++)
if(i==1 || i==linee || j==1 || j==colonne) {
System.out.print ("*");
if(j==colonne) System.out.println ("");
}
else System.out.print ("Q");
}
}
3
/* Determina il maggiore, il minore e la media
dei valori immessi
*/
import java.util.Scanner;
class MaxMinMedia {
public static void main (String argv[]) {
int i, n, numero, max, min, media;
Scanner sc = new Scanner(System.in);
System.out.println ("MAGGIORE MINORE E MEDIA");
do {
System.out.print ("Lunghezza della sequenza: ");
Programmare in Java
Marco Bertacca, Andrea Guidi
Copyright © 2007 – The McGraw-Hill Companies srl
n = sc.nextInt();
}
while(n<1);
System.out.print ("Valore intero: ");
max = min = media = sc.nextInt();
for(i=1; i<n; i++) {
System.out.print ("Valore intero: ");
numero = sc.nextInt();
if(numero>max) max = numero;
else
if(numero<min) min = numero;
media = media+numero;
}
media = media / n;
System.out.print ("Maggiore: ");
System.out.println (max);
System.out.print ("Minore: ");
System.out.println (min);
System.out.print ("Media: ");
System.out.print (media);
}
}
Capitolo 6
1
Il ciclo che effettua la somma deve essere realizzato in modo che l’elemento del secondo array sia simmetrico rispetto al
primo.
for(i=0; i<n; i++)
c[i] = a[i] + b[n-i-1];
2
max = voti[0];
min = voti[0];
media = voti[0];
for(i = 0;i <= 5; i++) {
if(voti[i]>max)
max = voti[i];
else
if(voti[i]<min)
min = voti[i];
media = media+voti[i];
}
11
/* Calcolo media voti per studente e per prova
Nell’esemplificazione utilizziamo 3 studenti e 4 prove */
import java.util.Scanner;
class ProvaStudenti {
public static void main (String argv[]) {
int n=4, m=5, i, j;
float voti[][] = new float[n][m];
Scanner sc = new Scanner(System.in);
Programmare in Java
Marco Bertacca, Andrea Guidi
Copyright © 2007 – The McGraw-Hill Companies srl
System.out.println ("CARICAMENTO DEI VOTI");
for(i=0; i<n-1; i++)
for(j=0; j<m-1; j++) {
System.out.print ("Ins. studente ");
System.out.print (i+1);
System.out.print (" prova ");
System.out.print (j+1);
System.out.print (": ");
voti[i][j] = sc.nextFloat();
sc.nextLine();
};
/* Calcolo medie per studente */
for(i=0; i<n-1; i++) {
voti[i][m-1] = 0;
for(j = 0; j < m-1; j++)
voti[i][m-1] = voti[i][m-1] + voti[i][j];
voti[i][m-1] = voti[i][m-1] / (m-1);
}
/* Calcolo medie per prova */
for(j=0; j<m; j++) {
voti[n-1][j] = 0;
for(i=0; i<n-1; i++)
voti[n-1][j] = voti[n-1][j] + voti[i][j];
voti[n-1][j] = voti[n-1][j]/(n-1);
}
System.out.print ("VISUALIZZAZIONE DELLA MATRICE");
for(i=0; i<n; i++) {
System.out.println ("");
for(j=0; j<m; j++) {
System.out.print (voti[i][j]);
System.out.print (" ");
}
}
}
}
Esempio di esecuzione:
CARICAMENTO DEI
Ins. studente 1
Ins. studente 1
Ins. studente 1
Ins. studente 1
Ins. studente 2
Ins. studente 2
Ins. studente 2
Ins. studente 2
Ins. studente 3
Ins. studente 3
Ins. studente 3
Ins. studente 3
VISUALIZZAZIONE
4.0 5.0 6.0 7.0
8.0 8.0 4.0 6.0
0.0 1.0 2.0 0.0
VOTI
prova
prova
prova
prova
prova
prova
prova
prova
prova
prova
prova
prova
DELLA
5.5
6.5
0.75
1: 4
2: 5
3: 6
4: 7
1: 8
2: 8
3: 4
4: 6
1: 0
2: 1
3: 2
4: 0
MATRICE
Programmare in Java
Marco Bertacca, Andrea Guidi
Copyright © 2007 – The McGraw-Hill Companies srl
4.0 4.6666665 4.0 4.3333335 4.25
14
Qualsiasi soluzione si adotti tra quelle proposte nel testo, l’operatore relazionale dell’if che controlla lo scambio di
valori tra gli elementi deve essere cambiato da > a <.
if(vet[i]<vet[i+1])
Non ci sono altre modifiche da effettuare.
15
/* Ricerca di un valore in una matrice */
import java.util.Scanner;
class RicercaInMatrice {
public static void main (String argv[]) {
int N=10, M=10, n, m, i, j, k;
char alfa[][] = new char[N][M];
char ric;
Scanner sc = new Scanner(System.in);
/* Richiesta delle dimensioni */
do {
System.out.print ("Numero di linee: ");
n = sc.nextInt();
sc.nextLine();
}
while((n>=N) || (n<1));
do {
System.out.print ("Numero di colonne: ");
m = sc.nextInt();
sc.nextLine();
}
while((m>=N) || (m<1));
System.out.println ("CARICAMENTO DELLA MATRICE");
for(i=0; i<n; i++)
for(j=0; j<m; j++) {
System.out.print ("Ins. carattere nella linea ");
System.out.print (i);
System.out.print (" colonna ");
System.out.print (j);
System.out.print (": ");
alfa[i][j] = sc.nextLine().charAt(0);
};
/* Richiesta del carattere da ricercare */
System.out.print ("Carattere da ricercare: ");
ric = sc.nextLine().charAt(0);
System.out.print ("VISUALIZZAZIONE DELLA MATRICE");
for(i=0; i<n; i++) {
System.out.println ("");
for(j=0; j<m; j++) {
System.out.print (alfa[i][j]);
System.out.print (" ");
}
}
Programmare in Java
Marco Bertacca, Andrea Guidi
Copyright © 2007 – The McGraw-Hill Companies srl
/* Ricerca del carattere all'interno della matrice */
System.out.println (" ");
k = 0;
for(i=0; i<n; i++)
for(j=0; j<m; j++) {
if(alfa[i][j]==ric) {
System.out.print (ric);
System.out.print (" in linea ");
System.out.print (i+1);
System.out.print (" colonna ");
System.out.print (j+1);
System.out.print (": ");
k = 1;
}
};
if(k==0) {
System.out.print (ric);
System.out.print (" non presente nella matrice");
}
}
}
Capitolo 7
1
import java.util.Scanner;
class potenze {
public static void main (String argv[]) {
double b, risultato; int e;
Scanner sc = new Scanner(System.in);
System.out.print ("Base: ");
b = sc.nextFloat();
System.out.print ("Esponente: ");
e = sc.nextInt();
risultato = potenza(b, e);
System.out.print ("Potenza: ");
System.out.println (risultato);
}
/* Calcola base elevato a esp (intero positivo) */
static double potenza(double base, int esp) {
double po = 1;
if(esp == 0)
return(1);
else {
while(esp--!=0) po *= base;
return(po);
}
}
}
2
/* Metodo per il calcolo di base elevata a esp.
* esp può essere un intero qualsiasi
static double potenza(double base, int esp) {
boolean s = true;
*/
Programmare in Java
Marco Bertacca, Andrea Guidi
double pot = 1;
if(esp<0) {
esp = -esp;
s = false;
}
if(esp>0)
do
pot = pot*base;
while(--esp>0);
Copyright © 2007 – The McGraw-Hill Companies srl
/* inizializzazione di pot a 1
caso di esponente uguale a zero */
/* l'esponente è negativo ? */
/* calcolo della potenza */
/* b*b*b... n volte */
if(s==true) return(pot);
else
return(1/pot);
}
/* esponente positivo o zero ? */
12
/* Metodo ricorsivo per il calcolo di base elevata a esp.
* esp può essere un intero qualsiasi
static double potenza(double base, int esp) {
if(esp==0)
return(1);
else
if(esp<0)
return(1/potenza(base, -esp));
else
return(base*potenza(base, esp-1));
}
*/
13
/* Massimo comune divisore di due interi positivi */
import java.util.Scanner;
class mcdivisore {
public static void main (String argv[]) {
int a, b;
Scanner sc = new Scanner(System.in);
System.out.print ("Inser. un intero: ");
a = sc.nextInt();
System.out.print ("Inser. un intero: ");
b = sc.nextInt();
System.out.print ("Massimo Comun Divisore: ");
System.out.println (mcd(a, b));
}
/* Metodo ricorsivo per il calcolo del massimo comun divisore */
static int mcd(int a, int b) {
if(b==0)
return(a);
else
if(b>a)
return(mcd(b, a));
else
return(mcd(b, a%b));
}
}
17
È sufficiente aggiungere alla fine del metodo immissione la chiamata al metodo, già presente nel programma, che
effettua l’ordinamento, passandole il numero di elementi immessi dall’utente e l’array stesso:
static int immissione(int MAX_ELE, int vet[]) {
...
ordinamento( n, vet );
return( n );
Programmare in Java
Marco Bertacca, Andrea Guidi
Copyright © 2007 – The McGraw-Hill Companies srl
}
Capitolo 9
6
import java.util.Scanner;
class ProvaVettore {
public static void main (String argv[]) {
Scanner sc = new Scanner(System.in);
VettoreTempo vt = new VettoreTempo (3);
int ore, minuti, secondi;
Tempo.separatore = ':';
for (int i = 0; i < 3; i++) {
do {
System.out.print ("Ore (0-23): ");
ore = sc.nextInt();
}
while (ore < 0 || ore > 23);
do {
System.out.print ("Minuti (0-59): ");
minuti = sc.nextInt();
}
while (minuti < 0 || minuti > 59);
do {
System.out.print ("Secondi (0-59): ");
secondi = sc.nextInt();
}
while (secondi < 0 || secondi > 59);
vt.aggiungi (new Tempo (ore, minuti, secondi));
}
vt.ordina();
for (int i = 0; i < vt.elementi(); i++)
((Tempo)vt.leggi (i)).visualizza(true);
}
}
7
Il metodo maggioreDi di Tempo diventa il seguente:
public boolean maggioreDi (Tempo t) {
if (secondi > t.secondi ||
secondi == t.secondi && minuti > t.minuti ||
secondi == t.secondi && minuti == t.minuti && ore > t.ore)
return true;
else
return false;
}
8
Il metodo ordina di VettoreOrdinato diventa il seguente:
public void ordina () {
int i, j, num;
Object temp;
num = curElementi;
for(j=0;j<num-1; j++)
for(i=0; i<num-1; i++)
Programmare in Java
Marco Bertacca, Andrea Guidi
Copyright © 2007 – The McGraw-Hill Companies srl
if (confronta (vettore[i], vettore[i + 1])) {
temp = vettore[i];
vettore[i] = vettore[j + 1];
vettore[i + 1] = temp;
}
}
9
import java.util.Scanner;
class ProvaVettore {
public static void main (String argv[]) {
VettoreTempo vt = new VettoreTempo (15);
Scanner sc = new Scanner(System.in);
int ore, minuti, secondi, centesimi, centesimiSiNo;
Tempo.separatore = ':';
System.out.print ("Tempo con centesimi (1 per si, 0 per no)? ");
centesimiSiNo = sc.nextInt();
for (int i = 0; i < 12; i++) {
ore = (int) (Math.random () * 24);
minuti = (int) (Math.random () * 60);
secondi = (int) (Math.random () * 60);
if (centesimiSiNo == 0)
vt.aggiungi (new Tempo (ore, minuti, secondi));
else {
centesimi = (int) (Math.random () * 100);
vt.aggiungi (new Tempo2 (ore, minuti, secondi, centesimi));
}
}
vt.aggiungi (new Tempo2 (0, 0, 0, 50));
vt.aggiungi (new Tempo (0, 0, 0));
vt.aggiungi (new Tempo2 (0, 0, 0, 99));
vt.ordina();
for (int i = 0; i < vt.elementi(); i++)
((Tempo)vt.leggi (i)).visualizza(true);
}
}
class Tempo2 extends Tempo {
protected int centesimi;
public void assegnaCentesimi (int cent) {
centesimi = cent;
}
public int leggiCentesimi () {
return centesimi;
}
public Tempo2 () {
centesimi = 0;
}
public Tempo2 (int ora, int minuto, int secondo, int centesimo) {
this();
assegnaTempo (ora, minuto, secondo, centesimo);
}
public int assegnaTempo (int ora, int minuto,
int secondo, int centesimo) {
if (ora >= 0 && ora < 24 &&
minuto >= 0 && minuto < 60 &&
secondo >= 0 && secondo < 60 &&
centesimo >= 0 && centesimo < 100) {
ore = ora;
minuti = minuto;
secondi = secondo;
centesimi = centesimo;
Programmare in Java
Marco Bertacca, Andrea Guidi
return 0;
Copyright © 2007 – The McGraw-Hill Companies srl
}
else
return -1;
}
public void visualizza (boolean ritornoACapo) {
super.visualizza(false);
System.out.print (".");
if (ritornoACapo)
System.out.println (centesimi);
else
System.out.print (centesimi);
}
public boolean maggioreDi (Tempo tt) {
if (tt instanceof Tempo2) {
Tempo2 t =(Tempo2) tt;
if (ore > t.ore ||
ore == t.ore && minuti > t.minuti ||
ore == t.ore && minuti == t.minuti
&& secondi > t.secondi
||
ore == t.ore && minuti == t.minuti
&& secondi == t.secondi && centesimi > t.centesimi)
return true;
else
return false;
} else
return super.maggioreDi (tt);
}
}
10
import java.util.Scanner;
class ProvaVettore {
public static void main (String argv[]) {
VettoreTempo vt = new VettoreTempo (15);
Scanner sc = new Scanner(System.in);
int ore, minuti, secondi, centesimi, centesimiSiNo;
Tempo.separatore = ':';
System.out.print ("Tempo con centesimi (1 per si, 0 per no)? ");
centesimiSiNo = sc.nextInt();
for (int i = 0; i < 3; i++) {
do {
System.out.print ("Ore (0-23): ");
ore = sc.nextInt();
}
while (ore < 0 || ore > 23);
do {
System.out.print ("Minuti (0-59): ");
minuti = sc.nextInt();
}
while (minuti < 0 || minuti > 59);
do {
System.out.print ("Secondi (0-59): ");
secondi = sc.nextInt();
}
while (secondi < 0 || secondi > 59);
if (centesimiSiNo == 0)
vt.aggiungi (new Tempo (ore, minuti, secondi));
else {
do {
System.out.print ("Centesimi (0-100): ");
centesimi = sc.nextInt();
Programmare in Java
Marco Bertacca, Andrea Guidi
Copyright © 2007 – The McGraw-Hill Companies srl
}
while (secondi < 0 || secondi > 59);
vt.aggiungi (new Tempo2 (ore, minuti, secondi, centesimi));
}
}
vt.ordina();
for (int i = 0; i < vt.elementi(); i++)
((Tempo)vt.leggi (i)).visualizza(true);
}
}
Capitolo 10
1
import java.util.Scanner;
public class TestOrdinamento3
{
public static void main (String argv[]) {
Scanner sc = new Scanner(System.in);
VettoreOrdinato vo = new VettoreOrdinato(10);
int x, y;
for (int i = 1; i <= 3; i++) {
System.out.print ("Ascissa: ");
x = sc.nextInt();
System.out.print ("Ordinata: ");
y = sc.nextInt();
vo.aggiungi (new Punto(x,y));
}
vo.ordina();
for (int i = 0; i < vo.elementi(); i++)
System.out.println(((Punto)(vo.leggi (i))).distanza());
}
}