Richiami di Fondamenti di Informatica - 1

Documenti analoghi
Iterazione. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa E07. C. Limongelli Novembre 2007

Iterazione (introduzione)

Corso di Laurea Ingegneria Civile Fondamenti di Informatica. Esercizi sui metodi. Carla Limongelli. Maggio Esercizi 1

Array. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 11. A. Miola Dicembre 2007

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1

Algoritmi di Ricerca. Esempi di programmi Java

Problemi, algoritmi e oggetti

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Algoritmi di Ricerca. Esempi di programmi Java

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro

Array e Oggetti. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 12. A. Miola Dicembre 2006

Array di array. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 03. A. Miola Febbraio 2008

Esempi di Problemi Iterativi

Corso di Laurea Ingegneria Civile Elementi di Informatica. Esercizi. Carla Limongelli. Esercizi 1

Dall analisi alla codifica (1)

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Esempi di Problemi Iterativi

Classi e array. Viene ora affrontato un problema di definizione di una classe in cui una variabile d istanza è di tipo array

Esercizi su Array e Oggetti

Definizione di classi

Metodi statici. Dichiarazione e chiamata di metodi statici

Definizione di metodi

Algebra di Boole: Concetti di base. E un algebra basata su tre operazioni logiche

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a luglio 2011

Corso di Laurea in Ingegneria Gestionale Esame di Informatica - a.a. 2016/ Giugno 2017

Esercizi di riepilogo (Fondamenti di Informatica 1 Walter Didimo)

Lezione 6 programmazione in Java

9 - Array. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

public static boolean occorre (int[] a, int n) { int i = 0; boolean trovato = false;

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a settembre 2012

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

ELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli

Esercizi su Array e Oggetti

Algoritmi di Ricerca. Esempi di programmi Java

Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni

Corso: Fondamenti di Informatica (Gruppo 2) a.a Corsi di laurea: Ing. Settore Informazione

Esercitazione n 2. Obiettivi

Definizione di metodi

Calcolare x n = x x x (n volte)

Istruzioni Condizionali

Fondamenti di Informatica T2 Modulo 2. Corso di Laurea in Ingegneria Informatica Anno accademico 2008/2009. Enumerativi

Rappresentazione degli algoritmi

Fondamenti di Informatica T-1 Modulo 2

Cognome Nome Matricola Postazione PC. Corso di Laurea in Ingegneria Gestionale Esame di Informatica - a.a Gennaio 2015

7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari

Corso di Laurea Ingegneria Civile Fondamenti di Informatica. Dispensa 16 Tipi riferimento e stringhe. Carla Limongelli.

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a febbraio 2013

Fondamenti di Informatica 6. Algoritmi e pseudocodifica

Programmazione 1 A.A. 2015/2016

Array mono- e bi-dimensionali Cicli while e do-while

Esercitazione 11. Liste semplici

Dall analisi alla codifica (2)

3. un metodo che restituisce l elenco delle matricole di tutti gli studenti del corso;

Esempio su strutture dati dinamiche: ArrayList

Le Stringhe. Usare la classe java.lang.string

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

18 - Vettori. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Programmazione con Java

Variabili e Metodi di classe Interfacce e Package Gestione di File in Java

Istruzioni di ripetizione in Java 1

Laboratorio di Programmazione Ottobre. Simone Zaccaria

Basi della programmazione in Java. Anteprima. Uso delle variabili. Il concetto di variabile Uso delle variabili. Input da tastiera I tipi Esercizi

Esempio: L EURO-CONVERTITORE (1) Scopo

Uso di metodi statici. Walter Didimo

Esempio su strutture dati dinamiche: ArrayList

Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre Negli esercizi proposti si utilizzano le seguenti classi:

Fondamenti di Informatica T-1

Esercitazione 3. Espressioni booleane I comandi if-else e while

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a I scritto Febbraio 11 Febbraio 2011

STRINGHE IN JAVA In Java, le stringhe non sono pezzi di memo-ria con dentro dei caratteri, come in C: sono oggetti appartenenti alla classe

Insieme.java. Printed by Paolo. Feb 24, 04 16:44 Page 1/1 class Insieme { private int[] elementi; Tuesday February 24, /10

19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale

Fondamenti di Informatica L-B Esercitazione n 5 Java: Interfaccia Comparable, Array

Esercizio 2 (punti 7) Dato il seguente programma C: #include <stdio.h> int swap(int * nome, int length);

Introduzione all uso degli oggetti in Java (parte II) Walter Didimo

Fondamenti di Informatica. Dichiarazione, creazione e gestione di array in Java

Programmazione Java Struttura di una classe, Costruttore, Riferimento this

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a luglio 2011

6 - Blocchi e cicli. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Studente (Cognome Nome):

Fondamenti di Informatica. Algoritmi di Ricerca e di Ordinamento

Indice. Prefazione. 3 Oggetti e Java 53

14 - Metodi e Costruttori

Array multidimensionali e stringhe

Programmazione II Compitino (Vers. B)

Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

Corso di Laurea Ingegneria Civile Fondamenti di Informatica. Dispensa 17. Correttezza. Maggio Correttezza

Costrutti iterativi. Utilizzo dei costrutti iterativi

Esercitazione 6. Array

Una introduzione al linguaggio Java

Laboratorio di Programmazione Lezione 3. Cristian Del Fabbro

Programmazione I - corso B a.a prof. Viviana Bono

Esercizio 1: calcolo insieme intersezione

Esempio: Tombola! Vogliamo progettare una applicazione che realizza il gioco della tombola Versione semplificata: un banco, un

Le basi del linguaggio Java

Transcript:

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1 Dispensa 2 Richiami di Fondamenti di Informatica - 1 A. Miola Febbraio 2008 http://www.dia.uniroma3.it/~java/fondinf1/ Richiami di FdI-1 1

Contenuti Alcuni argomenti fondamentali Tipi primitivi e tipizzazione delle espressioni Istruzioni semplici e strutturate Linguaggi e grammatiche Legame dei parametri Iterazione Verifiche esistenziali Verifiche universali Tipi riferimento Stringhe Array Array di oggetti http://www.dia.uniroma3.it/~java/fondinf1/ Richiami di FdI-1 2

Alcuni argomenti fondamentali Per un migliore apprendimento degli argomenti del corso di Fondamenti di Informatica 2 è indispensabile riprendere alcuni capitoli importanti del precedente corso di Fondamenti di Informatica 1 In particolare : Tipi primitivi e tipizzazione delle espressioni Istruzioni semplici e strutturate Linguaggi e grammatiche http://www.dia.uniroma3.it/~java/fondinf1/ Richiami di FdI-1 3

Legame di parametri - primitivi class LegameParametri_1 { public static void alfa(int b, int a) { System.out.println("2: a vale " +a+ ", b vale "+b); a = a - 3; b = b + 6; System.out.println("3: a vale " +a+ ", b vale "+b); } public static void main(string[] args) { double a, b; a = 3.0; b = 6.0; System.out.println("1: a vale " +a+ ", b vale "+b); alfa( (int) (a/b + 2.1), (int) (b/a - 1.2)); System.out.println("4: a vale " +a+ ", b vale "+b); } } 1: a vale 3.0, b vale 6.0 2: a vale 0, b vale 2 3: a vale -3, b vale 8 4: a vale 3.0, b vale 6.0 http://www.dia.uniroma3.it/~java/fondinf1/ Richiami di FdI-1 4

Legame di parametri - primitivi class LegameParametri_2 { public static void alfa(double b, double a) { System.out.println("2: a vale " +a+ ", b vale "+b); a = a/5+1; b = b*2+2; System.out.println("3: a vale " +a+ ", b vale "+b); } public static void main(string[] args) { int a, b; a = 2; b = 5; System.out.println("1: a vale " +a+ ", b vale "+b); alfa(a/b-1,b/a+2); System.out.println("4: a vale " +a+ ", b vale "+b); } } 1: a vale 2, b vale 5 2: a vale 4.0, b vale -1.0 3: a vale 1.8, b vale 0.0 4: a vale 2, b vale 5 http://www.dia.uniroma3.it/~java/fondinf1/ Richiami di FdI-1 5

Legame di parametri - riferimento class LegameParametri_3 { public static void alfa(triangoloequilatero q, TriangoloEquilatero p) { System.out.println("2: Il lato di p vale " + p.getlato()+ ", Il lato di q vale " + q.getlato() ); p = new TriangoloEquilatero(2); q.setlato(4); System.out.println("3: Il lato di p vale " + p.getlato()+ ", Il lato di q vale " + q.getlato() ); } public static void main(string[] args) { TriangoloEquilatero p = new TriangoloEquilatero (3); TriangoloEquilatero q = new TriangoloEquilatero (5); System.out.println("1: Il lato di p vale " + p.getlato()+ ", Il lato di q vale " + q.getlato()); alfa(p,q); System.out.println("4: Il lato di p vale " + p.getlato() + ", Il lato di q vale " + q.getlato()); } } 1: Il lato di p 3, Il lato di q 5 2: Il lato di p 5, Il lato di q 3 3: Il lato di p 2, Il lato di q 4 4: Il lato di p 4, Il lato di q 5 http://www.dia.uniroma3.it/~java/fondinf1/ Richiami di FdI-1 6

Legame di parametri - riferimento class LegameParametri_4 { public static void alfa(quadrato q, Quadrato p) { System.out.println("2: Il lato di p vale " + p.getlato()+ ", Il lato di q vale " + q.getlato() ); p = new Quadrato(5); q.setlato(7); System.out.println("3: Il lato di p vale " + p.getlato()+ ", Il lato di q vale " + q.getlato() ); } public static void main(string[] args) { Quadrato p = new Quadrato(4); Quadrato q = new Quadrato(6); System.out.println("1: Il lato di p vale " + p.getlato()+ ", Il lato di q vale " + q.getlato()); alfa(p,q); System.out.println("4: Il lato di p vale " + p.getlato() + ", Il lato di q vale " + q.getlato()); } } 1: Il lato di p 4, Il lato di q 6 2: Il lato di p 6, Il lato di q 4 3: Il lato di p 5, Il lato di q 7 4: Il lato di p 7, Il lato di q 6 http://www.dia.uniroma3.it/~java/fondinf1/ Richiami di FdI-1 7

Iterazione Bisogna anche riprendere tutti gli argomenti e gli esercizi relativi ai problemi di iterazione: Verifiche esistenziali Verifiche universali Ricerca http://www.dia.uniroma3.it/~java/fondinf1/ Richiami di FdI-1 8

Verifica esistenziale Bisogna determinare se una sequenza di elementi contiene almeno un elemento che soddisfa una certa proprietà in altre parole: si vuole verificare che in una sequenza di elementi a 1,, a n esiste almeno un elemento che verifica una data proprietà p cioè che i {1,..,n}, p(a i ) = true N.B. Una sequenza può essere ad esempio una stringa o un array http://www.dia.uniroma3.it/~java/fondinf1/ Richiami di FdI-1 9

Verifica esistenziale: schema risolutivo Viene usata una variabile booleana che indica se la sequenza contiene almeno un elemento che soddisfa la proprietà Inizialmente si assegna alla variabile booleana un valore che indica convenzionalmente che la sequenza non contiene nessun elemento che soddisfa la proprietà (false) http://www.dia.uniroma3.it/~java/fondinf1/ Richiami di FdI-1 10

schema risolutivo A partire dal primo elemento della sequenza si verifica se l elemento corrente soddisfa la proprietà se l elemento corrente soddisfa la proprietà, allora si assegna alla variabile booleana un valore che indica convenzionalmente che la sequenza contiene almeno un elemento che soddisfa la proprietà (true) Quando si trova un elemento che soddisfa la proprietà ci si ferma (non ha senso esaminare oltre perché il problema è risolto) http://www.dia.uniroma3.it/~java/fondinf1/ Richiami di FdI-1 11

schema risolutivo boolean proprietasoddisfatta; // almeno un elemento // soddisfa la proprietà proprietasoddisfatta = false;... altre inizializzazioni... finche non trovo un elemento che soddisfa la proprieta while (!proprietasoddisfatta && sequenza non terminata) {... accedi al prossimo elemento... if (l elemento corrente soddisfa la proprietà) proprietasoddisfatta = true; }... altre elaborazioni... usare un nome opportuno per la variabile booleana http://www.dia.uniroma3.it/~java/fondinf1/ Richiami di FdI-1 12

Un errore comune Un errore comune nella verifica esistenziale ri-assegnare alla variabile booleana usata per la verifica esistenziale il valore che gli è stato assegnato nella sua inizializzazione contienezero = false; while (!Lettore.in.eoln()&&!contieneZero) { /* legge il prossimo elemento della sequenza */ numero = Lettore.in.leggiInt(); /* se numero vale zero, allora la sequenza * contiene almeno uno zero */ if (numero==0) contienezero = true; else contienezero = false; } Se nella condizione del while non compare!contienezero il programma verifica se l ultimo elemento della sequenza letta vale zero Se nella condizione del while compare!contienezero l ultimo else e inutile http://www.dia.uniroma3.it/~java/fondinf1/ Richiami di FdI-1 13

Verifica se una sequenza contiene almeno uno zero... legge una sequenza di numeri interi e verifica se contiene almeno uno zero... int numero; // elemento corrente della sequenza boolean contienezero; // la sequenza contiene almeno // un elemento uguale a zero... visualizza un messaggio... /* legge la sequenza e verifica * se contiene almeno uno zero */ contienezero = false; while (!Lettore.in.eoln() &&!contienezero) { /* legge il prossimo elemento della sequenza */ numero = Lettore.in.leggiInt(); /* se numero vale zero, allora la sequenza * contiene almeno uno zero */ if (numero==0) contienezero = true; }... il risultato è contienezero... http://www.dia.uniroma3.it/~java/fondinf1/ Richiami di FdI-1 14

Verifica universale Un problema di verifica universale consiste nel verificare se tutti gli elementi di una sequenza a 1,, a n soddisfano una certa proprietà p una variante (duale) dei problemi di verifica esistenziale In altre parole: Un problema di verifica universale è soddisfatto, se tutti gli elementi verificano una data proprietà p: i {1,..,n}, p(a i ) = true Oppure un problema di verifica universale non è soddisfatto se esiste almeno un elemento che non verifica p: i {1,..,n}, p(a i ) = false La verifica universale si può sempre ricondurre alla verifica esistenziale http://www.dia.uniroma3.it/~java/fondinf1/ Richiami di FdI-1 15

Verifica universale: schema risolutivo Un problema di verifica universale può essere sempre ricondotto a un problema di verifica esistenziale il problema diventa quello di verificare se non esiste nessun elemento della sequenza che non soddisfa la proprietà inizialmente si assegna alla variabile booleana un valore che indica convenzionalmente che tutti gli elementi della sequenza soddisfano la proprietà (true) per ogni elemento della sequenza, si verifica se l elemento corrente non soddisfa la proprietà se l elemento corrente non soddisfa la proprietà, allora si assegna alla variabile booleana un valore che indica convenzionalmente che non tutti gli elementi della sequenza soddisfano la proprietà (false) http://www.dia.uniroma3.it/~java/fondinf1/ Richiami di FdI-1 16

Verifica universale:schema risolutivo boolean proprietasoddisfatta; /* assumo che tutti gli elementi soddisfano la proprieta */ proprietasoddisfatta = true;... altre inizializzazioni... finche non trovo un elemento che non soddisfa la proprieta while (proprietasoddisfatta && la sequenza non e finita){... accedi al prossimo elemento... if (l elemento corrente non soddisfa la proprietà) proprietàsoddisfatta = false; }... altre elaborazioni... usare un nome opportuno per la variabile booleana http://www.dia.uniroma3.it/~java/fondinf1/ Richiami di FdI-1 17

Verifica se una sequenza di dieci elementi è crescente... legge una sequenza di dieci numeri interi e verifica se è crescente... int numero; // elemento corrente della sequenza int precedente; // elemento che precede numero // nella sequenza int i; // per contare i numeri letti boolean crescente; // la sequenza è crescente /* il primo elemento della sequenza è il * precedente del prossimo che sarà letto */ precedente = Lettore.in.leggiInt(); /* finora la sequenza letta è crescente */ crescente = true; i=0; /* legge e elabora gli altri elementi della sequenza */ while(i<10 && crescente) { /* legge il prossimo numero e verifica che * la sequenza sia ancora crescente */ numero = Lettore.in.leggiInt(); if (precedente>=numero) crescente = false; i++; /* prepara la prossima iterazione */ precedente = numero; }... il risultato della verifica è crescente... http://www.dia.uniroma3.it/~java/fondinf1/ Richiami di FdI-1 18

Verifica l uguaglianza tra stringhe Scrivere un metodo boolean uguali(string s, String t) che verifica se le stringhe s e t sono uguali si comporta come s.equals(t) ad esempio, uguali("alfa", "alfa") deve restituire true, mentre uguali("alfa", "beta") deve restituire false due stringhe s e t sono uguali se s e t hanno la stessa lunghezza ciascun carattere della stringa s è uguale al carattere della stringa t che occupa la stessa posizione http://www.dia.uniroma3.it/~java/fondinf1/ Richiami di FdI-1 19

Uguaglianza tra stringhe Algoritmo: continua il confronto tra le stringhe solo se finora non sono state riscontrate differenze /* verifica se s e t sono uguali */ if (s.length()==t.length()) { /* s e t hanno la stessa lunghezza: s e t /* possono essere uguali, ma sono diverse * se contengono almeno un carattere diverso */ uguali = true; i = 0; while (uguali && i<s.length()) { if (s.charat(i)!= t.charat(i)) uguali = false; i = i+1; } else /*s e t hanno lunghezza diversa, quindi sono diverse */ uguali = false; http://www.dia.uniroma3.it/~java/fondinf1/ Richiami di FdI-1 20

Verifica esistenziale e verifica universale Verifica esistenziale: Si vuole verificare che in una sequenza di elementi a 1,, a n esiste almeno un elemento che verifica una data proprietà p cioè che Verifica universale: i {1,..,n}, p(a i ) = true Si vuole verificare che in una sequenza di elementi a 1,, a n tutti gli elementi della sequenza verificano una data proprietà p cioè che i {1,..,n}, p(a i ) = true Oppure si può verificare che esiste almeno un elemento che non verifica la proprietà p: in tal caso la verifica universale non è soddisfatta i {1,..,n}, p(a i ) = false http://www.dia.uniroma3.it/~java/fondinf1/ Richiami di FdI-1 21

Altri argomenti fondamentali Per un migliore apprendimento degli argomenti del corso di Fondamenti di Informatica 2 è indispensabile riprendere anche altri capitoli importanti del precedente corso di Fondamenti di Informatica 1 In particolare quelli relativi ai Tipi riferimento : Stringhe Array Array di oggetti http://www.dia.uniroma3.it/~java/fondinf1/ Richiami di FdI-1 22

Ancora sulla classe libro Data la classe Libro per rappresentare oggetti libro con il nome dell autore, il titolo e il numero di pagine e con i relativi metodi d istanza Costruire un array di oggetti di tipo Libro: elencolibri (già fatto) scrivere un metodo che, ricevendo come parametro un array di stringhe (selezionelibri) che rappresentano ciascuna il nome di un autore, calcola e restituisce un array di libri formato da tutti e soli i libri degli autori indicati e presenti nell elenco elencolibri http://www.dia.uniroma3.it/~java/fondinf1/ Richiami di FdI-1 23

Esempio Dato il seguente elenco di libri : elencolibri = new Libro[10]; elencolibri[0] = new Libro("Esopo","Le storie dell'asino",20); elencolibri[1] = new Libro("Italo Calvino", "Il visconte dimezzato",158); elencolibri[2] = new Libro("Esopo","Le storie del cane",20); elencolibri[3] = new Libro("Esopo","Le favole piu' belle",98); elencolibri[4] = new Libro("Gianni Rodari","Filastrocche lunghe e corte",80); elencolibri[5] = new Libro("Italo Calvino","le cosmicomiche",250); elencolibri[6] = new Libro("Gianni Rodari","Enciclopedia della favola",1120); elencolibri[7] = new Libro("Italo Calvino","Il barone rampante",135); elencolibri[8] = new Libro("Fratelli Grimm","Raperonzolo",36); elencolibri[9] = new Libro("Italo Calvino","Il cavaliere inesistente",124); http://www.dia.uniroma3.it/~java/fondinf1/ Richiami di FdI-1 24

Esempio E dato l array di autori { Fratelli Grimm, Gianni Rodari }, viene creato un nuovo array selezionelibri formato da: selezionelibri[0] = Libro("Gianni Rodari","Filastrocche lunghe e corte",80); selezionelibri[1] = Libro("Gianni Rodari","Enciclopedia della favola",1120); selezionelibri[2] = Libro("Fratelli Grimm","Raperonzolo",36); http://www.dia.uniroma3.it/~java/fondinf1/ Richiami di FdI-1 25

L algoritmo per selezionare l elenco Utilizzo un array di booleani ok (inizializzato tutto a false) parallelo ad elenco per spuntare i libri degli autori indicati (autori) e allo stesso tempo conto il numero di elementi spuntati (dim), che corrisponderà alla dimensione del nuovo array Creo il nuovo array res di dimensione dim Esamino l array di booleani ed inserisco nel nuovo array solo i libri il cui corrispondente valore booleano nell array ok è true http://www.dia.uniroma3.it/~java/fondinf1/ Richiami di FdI-1 26

Il metodo seleziona Dichiarazioni e inizializzazioni public static Libro[] seleziona(libro[] elenco, String[] autori){ int i,j; // per scorrere gli array int k; // per scorrere l'array risultato da creare boolean[] ok; // per tenere nota dei libri da // memorizzare nel risultato int dim; Libro[] res; String app; // per calcolare la dimensione // del nuovo array da creare /* inizializzo l'array di booleani */ ok = new boolean[elenco.length]; for (i=0; i< elenco.length; i++) ok[i] = false; http://www.dia.uniroma3.it/~java/fondinf1/ Richiami di FdI-1 27

Il metodo seleziona Spunta dei libri degli autori indicati nell array autori dim = 0; /* i scorre gli autori, j scorre tutto l'elenco di libri e l'array (parallelo) di booleani */ for (i=0; i<autori.length; i++){ app = autori[i]; //seleziono l'autore da cercare for (j=0; j<elenco.length; j++) if (elenco[j].getautore().equals(app)){ ok[j] = true; dim++; } } http://www.dia.uniroma3.it/~java/fondinf1/ Richiami di FdI-1 28

Il metodo seleziona Creazione dell array risultato res } /* creo il nuovo array */ res = new Libro[dim]; k=0; /* scorro l'array di booleani per vedere gli autori da inserire */ for (i=0; i<elenco.length; i++) if (ok[i] == true){ res[k] = elenco[i]; k++; } return res; http://www.dia.uniroma3.it/~java/fondinf1/ Richiami di FdI-1 29

Esempio d esecuzione ==================================== ========== ELENCO LIBRI ============ ==================================== AUTORE: Esopo TITOLO: Le storie dell'asino N. PAGINE: 20 AUTORE: Italo Calvino TITOLO: Il visconte dimezzato N. PAGINE: 158 AUTORE: Esopo TITOLO: Le storie del cane N. PAGINE: 20 AUTORE: Esopo TITOLO: Le favole piu' belle N. PAGINE: 98 AUTORE: Gianni Rodari TITOLO: Filastrocche lunghe e corte N. PAGINE: 80 AUTORE: Italo Calvino TITOLO: le cosmicomiche N. PAGINE: 250 AUTORE: Gianni Rodari TITOLO: Enciclopedia della favola N. PAGINE: 1120 AUTORE: Italo Calvino TITOLO: Il barone rampante N. PAGINE: 135 AUTORE: Fratelli Grimm TITOLO: Raperonzolo N. PAGINE: 36 AUTORE: Italo Calvino TITOLO: Il cavaliere inesistente N. PAGINE: 124 ******* ******* ELENCO SELEZIONATO ********* ==================================== ========== ELENCO LIBRI ============ ==================================== AUTORE: Italo Calvino TITOLO: Il visconte dimezzato N. PAGINE: 158 AUTORE: Italo Calvino TITOLO: le cosmicomiche N. PAGINE: 250 AUTORE: Italo Calvino TITOLO: Il barone rampante N. PAGINE: 135 AUTORE: Fratelli Grimm TITOLO: Raperonzolo N. PAGINE: 36 AUTORE: Italo Calvino TITOLO: Il cavaliere inesistente N. PAGINE: 124 Press any key to continue... http://www.dia.uniroma3.it/~java/fondinf1/ Richiami di FdI-1 30

Considerazioni Per ogni autore da selezionare devo esaminare tutto l elenco dei libri: è realistico? Immaginiamo un vero catalogo di una biblioteca Se l array fosse già ordinato, per esempio per autore e se anche la lista di autori fosse ordinata, come cambierebbe l algoritmo? http://www.dia.uniroma3.it/~java/fondinf1/ Richiami di FdI-1 31