31.05.2013 Views

Esercizi e progetti di programmazione - Apogeo

Esercizi e progetti di programmazione - Apogeo

Esercizi e progetti di programmazione - Apogeo

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

ESERCIZI E PROGETTI DI PROGRAMMAZIONE E–59<br />

* <strong>Esercizi</strong>o P13.2. Mo<strong>di</strong>fi cate l’algoritmo <strong>di</strong> or<strong>di</strong>namento per selezione in modo da or<strong>di</strong>nare un<br />

array <strong>di</strong> monete in base al loro valore.<br />

** <strong>Esercizi</strong>o P13.3. Scrivete un programma che generi automaticamente la tabella dei tempi delle<br />

esecuzioni <strong>di</strong> prova dell’or<strong>di</strong>namento per selezione. Il programma deve chiedere i valori minimo<br />

e massimo <strong>di</strong> n e il numero <strong>di</strong> misurazioni da effettuare, per poi attivare tutte le esecuzioni <strong>di</strong><br />

prova.<br />

* <strong>Esercizi</strong>o P13.4. Mo<strong>di</strong>fi cate l’algoritmo <strong>di</strong> or<strong>di</strong>namento per fusione in modo da or<strong>di</strong>nare un<br />

array <strong>di</strong> stringhe in or<strong>di</strong>ne lessicografi co.<br />

*** <strong>Esercizi</strong>o P13.5. Scrivete un programma per consultare l’elenco del telefono. Leggete un insieme<br />

<strong>di</strong> dati contenente 1000 nomi e i relativi numeri <strong>di</strong> telefono, memorizzati in un fi le che contiene<br />

i dati in or<strong>di</strong>ne casuale. Gestite la ricerca sia in base al nome sia in base al numero <strong>di</strong> telefono,<br />

utilizzando una ricerca binaria per entrambe le modalità <strong>di</strong> consultazione.<br />

** <strong>Esercizi</strong>o P13.6. Scrivete un programma che misuri le prestazioni dell’algoritmo <strong>di</strong> or<strong>di</strong>namento<br />

per inserimento descritto in Argomenti avanzati 13.1.<br />

*** <strong>Esercizi</strong>o P13.7. Scrivete un programma che or<strong>di</strong>ni un esemplare <strong>di</strong> ArrayList in or<strong>di</strong>ne<br />

decrescente, in modo che la moneta <strong>di</strong> valore maggiore si trovi all’inizio del vettore. Usate una<br />

classe che implementa Comparator.<br />

** <strong>Esercizi</strong>o P13.8. Considerate l’algoritmo <strong>di</strong> ricerca binaria del Paragrafo 13.7: se non trova<br />

l’elemento cercato, il metodo search restituisce –1. Mo<strong>di</strong>fi catelo in modo che, se a non viene<br />

trovato, venga invece restituito il valore –k–1, dove k è la posizione prima della quale l’elemento<br />

dovrebbe essere inserito (che è il comportamento <strong>di</strong> Arrays.binarySearch).<br />

** <strong>Esercizi</strong>o P13.9. Realizzate senza ricorsione il metodo sort dell’algoritmo <strong>di</strong> or<strong>di</strong>namento<br />

per fusione, nell’ipotesi che la lunghezza dell’array sia una potenza <strong>di</strong> 2. Prima fondete le regioni<br />

a<strong>di</strong>acenti <strong>di</strong> <strong>di</strong>mensione 1, poi le regioni a<strong>di</strong>acenti <strong>di</strong> <strong>di</strong>mensione 2, quin<strong>di</strong> le regioni a<strong>di</strong>acenti <strong>di</strong><br />

<strong>di</strong>mensione 4 e così via.<br />

*** <strong>Esercizi</strong>o P13.10. Realizzate senza ricorsione il metodo sort dell’algoritmo <strong>di</strong> or<strong>di</strong>namento<br />

per fusione, nell’ipotesi che la lunghezza dell’array sia un numero arbitrario. Procedete fondendo<br />

regioni a<strong>di</strong>acenti la cui <strong>di</strong>mensione sia una potenza <strong>di</strong> 2 e fate attenzione all’ultima regione, che<br />

può avere <strong>di</strong>mensione inferiore.<br />

*** <strong>Esercizi</strong>o P13.11. Usate l’or<strong>di</strong>namento per inserimento e la ricerca binaria dell’<strong>Esercizi</strong>o P13.8<br />

per or<strong>di</strong>nare un array secondo quanto descritto nell’<strong>Esercizi</strong>o R13.14. Realizzate tale algoritmo<br />

e misuratene le prestazioni.<br />

* <strong>Esercizi</strong>o P13.12. Scrivete una classe Person che realizzi l’interfaccia Comparable, confrontando<br />

persone in base al loro nome. Chiedete all’utente <strong>di</strong> inserire <strong>di</strong>eci nomi e generate <strong>di</strong>eci oggetti <strong>di</strong><br />

tipo Person. Usando il metodo compareTo, determinate la prima e l’ultima persona dell’insieme,<br />

e stampatele.<br />

** <strong>Esercizi</strong>o P13.13. Or<strong>di</strong>nate un vettore <strong>di</strong> stringhe in or<strong>di</strong>ne crescente <strong>di</strong> lunghezza. Suggerimento:<br />

progettate un apposito Comparator.<br />

*** <strong>Esercizi</strong>o P13.14. Or<strong>di</strong>nate un vettore <strong>di</strong> stringhe in or<strong>di</strong>ne crescente <strong>di</strong> lunghezza, in modo che<br />

stringhe della stessa lunghezza vengano <strong>di</strong>sposte in or<strong>di</strong>ne lessicografi co. Suggerimento: progettate<br />

un apposito Comparator.<br />

Cay Horstmann: Concetti <strong>di</strong> informatica e fondamenti <strong>di</strong> Java 5 a ed. - Copyright 2010 <strong>Apogeo</strong> srl

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!