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()); } }