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

Documenti analoghi
Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni

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

Algoritmi di Ricerca. Esempi di programmi Java

Algoritmi di Ricerca. Esempi di programmi Java

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro

Programmazione 1 A.A. 2015/2016

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

Esercizi di Algoritmi e Strutture Dati

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

Algoritmi di Ricerca. Esempi di programmi Java

public static boolean mr (String[] a, String[] b) { 2. Esercizio 3. Scrivere una versione ricorsiva del metodo definito per risolvere l Esercizio 2.

Costrutti iterativi. Utilizzo dei costrutti iterativi

COMPITO DI LABORATORIO DI PROGRAMMAZIONE Luglio Soluzione degli Esercizi

Programmazione a Oggetti e JAVA. Prof. B.Buttarazzi A.A. 2012/2013

Metodi statici. Dichiarazione e chiamata di metodi statici

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

Le strutture di controllo in C++

Esercitazione n 2. Obiettivi

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

Laboratorio di Programmazione 1 [Java]

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1

Fondamenti di Informatica. Algoritmi di Ricerca e di Ordinamento

Capitolo 9. Tipi enumerativi, tipi generici e interfacce. c 2005 Pearson Education Italia Capitolo 9-1 / 73

n deve essere maggiore di 0, altrimenti il metodo restituisce null.

Esempi di Problemi Iterativi

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

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

Ricerca e ordinamento su array di oggetti. Corso di Programmazione 2 Esercitazione 5

7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari

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

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

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

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

osservazione: 1 MCD(m,n) min(m,n) = si provano i numeri compresi tra 1 e min(m,n) conviene iniziare da min(m,n) e scendere verso 1

Programmazione 1 A.A. 2015/2016

Esempio: Interfacce. Gioco Interfacce

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

Lezione 6 programmazione in Java

Java, Oggetti e Strutture Dati di G. Callegarin - Edizioni CEDAM

Esempio: Interfacce. Gioco Interfacce

Le basi del linguaggio Java

Compitino di Laboratorio di Informatica CdL in Matematica 13/11/2007 Teoria Compito A

Esercitazione 15. Il problema dello Sleeping Barber

Esempio: L EURO-CONVERTITORE (1) Scopo

5 - Istruzioni condizionali

IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale

Esercizi di Algoritmi e Strutture Dati

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

ARRAY RESTITUITI DA FUNZIONI

ERRATA CORRIGE. void SvuotaBuffer(void); void SvuotaBuffer(void) { if(getchar()!=10) {svuotabuffer();} }

Esercitazione. Docente Ing. Mariateresa Celardo

Linguaggi di programmazione II AA 2010/2011 Esercitazione 2

Esercizi su programmazione ricorsiva 1. Pericle Perazzo 23 marzo 2012

Ordinamento. Scoperta guidata di tipici algoritmi: selection sort, bubble sort

Esercizi di riepilogo (Fondamenti di Informatica 1 Walter Didimo)

Transcript:

Metodi iterativi con array monodimensionali 1. Scrivere un metodo che, dato un array di interi a, restituisce il valore minimo in a. public static int minimo (int[] a) { int min = a[0]; for (int i=1; i<a.length; i++) if (a[i] < min) min = a[i]; return min; Scrivere un metodo che, dato un array di interi a, restituisce il valore massimo in a. 2. Scrivere un metodo che, dati un array di interi a ed un intero n, restituisce il numero delle occorrenze di n in a. public static int occorrenze (int[] a, int n) { int cont = 0; cont++; return cont; 3. Scrivere un metodo che, dato un array di interi a, restituisce la somma degli elementi in a. public static int sommaa (int[] a) { int sum = 0; sum = sum + a[i]; return sum; Scrivere un metodo che, dato un array di interi a, restituisce il prodotto degli elementi in a. 4. Scrivere un metodo che, dati un array di interi a ed un intero n, restituisce true se n compare in a, false altrimenti. public static boolean occorre (int[] a, int n) { boolean trovato = false;

while (i<a.length &&!trovato) { trovato = true; return trovato; Un metodo equivalente che sfrutta il costrutto return senza introdurre una variabile booleana è il seguente: public static boolean occorre (int[] a, int n) { while (i<a.length) { return true; return false; 5. Scrivere un metodo che, dati un array di interi a ed un intero n, restituisce la posizione della prima occorrenza di n in a, e -1 se n non compare in a. public static int posizione (int[] a, int n) { boolean trovato = false; while (i<a.length &&!trovato) { trovato = true; else if (trovato) return i; else return -1; 6. Scrivere un metodo che, dati un array di interi a ed un intero k, restituisce true se in a compaiono almeno k numeri strettamente positivi, false altrimenti. public static boolean almenokpos (int[] a, int k) { int i = 0, cont = 0; while (i<a.length) { if (a[i] > 0) { cont++; if (cont >= k) return true; return false;

In modo equivalente, mettendo la condizione (cont < k) nella guardia del while, si può scrivere: public static boolean almenokpos (int[] a, int k) { int i = 0, cont = 0; while (i<a.length && cont < k) { if (a[i] > 0) cont++; return (cont >= k); 7. (Esame scritto del 17/7/2002, 3.) Scrivere un metodo in linguaggio Java che dato un array di interi restituisca true se tutti i suoi elementi sono identici, e false altrimenti. public static boolean uguali (int[] a) { boolean equal = true; while(i<a.length-1 && equal) { if (a[i]!= a[i+1]) equal = false; else return equal; 8. (Esame scritto del 18/9/2002, 3.) Scrivere un metodo in linguaggio Java che, dato un array di interi a, restituisca true se i suoi elementi sono in ordine non decrescente (a[0] a[1]...), e false altrimenti. public static boolean nondecr (int[] a) { boolean cond = true; while (i<a.length-1 && cond) { if (a[i] > a[i+1]) { cond = false; return cond; Un semplice metodo main per provare i metodi uguali e nondecr è il seguente (si assume che entrambi i metodi siano definiti in una classe ArrayProp):

public static void main (String[] args) { int[] a = new int[args.length]; a[i] = Integer.parseInt(args[i]); System.out.println("Elementi identici? " + ArrayProp.uguali(a)); System.out.println("Elementi non decrescenti? " + ArrayProp.nondecr(a)); Scrivere una versione diversa per i metodi uguali e nondecr in cui, invece di definire la variabile booleana, vengono utilizzate opportune istruzioni di return. 9. (Esame scritto del 14/7/2004, 3.) Scrivereunmetodoche,datiduearrayaebdiinteri,restituiscetrue setuttiglielementi dell array b compaiono nell array a nello stesso ordine in cui compaiono in b, altrimenti il metodo restituisce false. Ad esempio, dati gli array a = {-5,4,7,-1,10,21,9,-7 e b = {4,-1,9,-7, il metodo restituisce true. public static boolean ordinearray (int[] a, int[] b) { int i = 0, j = 0; while (j < b.length && i < a.length) { if (b[j] == a[i]) { j++; else if (j == b.length) return true; else return false; 10. (Esame scritto del 18/9/2002, 1.) Si consideri il seguente metodo in linguaggio Java. public static boolean metodo (int[] a) { boolean condizione = true; for ( i < a.length-1; i++) { if (a[i]!= 2*a[i+1]) { condizione = false; return condizione; (a) Determinare quale caratteristica deve soddisfare l array a perché il metodo restituisca il valore true. (b) Riscrivere il metodo usando il ciclo while. Spiegare quale delle due soluzioni sia la piú efficiente e il perché.

Soluzione 1. Affinché il metodo restituisca il valore true, gli elementi dell array a devono essere ciascuno il doppio dell elemento successivo in a. 2. Soluzione con il while: public static boolean metodo (int[] a) { boolean condizione = true; while (i < a.length-1 && condizione) { if (a[i]!= 2*a[i+1]) { condizione = false; return condizione; La soluzione piú efficiente è quella con il while, in quanto nel caso in cui l array non soddisfi la caratteristica detta al punto 1., l iterazione termina non appena si trova un elemento dell array che non è il doppio del successivo, senza scandire tutto l array. Tale scansione di tutto l array viene invece sempre eseguita dalla soluzione con il for indipendentemente dal valore finale di condizione.