Corso di Informatica (Programmazione) Esercitazione 4 (10 dicembre 2008) 1 Esercizi sugli array Esercizio 1 dato un array A di N caratteri verificare se la sequenza che contiene è palindroma Esempio (N=10) A a b c d e e d c b a Risultato la sequenza abcdeedcba è palindroma 2 Esercizi sugli array Algoritmo: per verificare che una sequenza di caratteri è palindroma basta verificare che vale A[i] uguale a A[N-i-1] per ogni i che va da 0 a N/2-1. Cioè basta verificare che ogni carattere della sequenza è uguale al suo simmetrico rispetto al centro della sequenza. Ciò vale sia per N pari che per N dispari. Dichiaro quindi la variabile booleana isP... 3 Esercizi sugli array …che all’inizio ha valore true (parto cioè dall’ipotesi che la sequenza sia palindroma). Poi scandisco l’array dal primo elemento (in posizione 0) all’elemento in posizione N/2-1. Se trovo che per la generica posizione i, A[i] è diverso da A[N-i-1] allora assegno il valore false alla variabile isP e interrompo la scansione. 4 Esercizi sugli array public class Palindroma { public static void main(String arg[]) { char[] A={‘a’,’b’,’c’,’d’,’e’,’e’,’d’,’c’,’b’,’a’}; int i; int length; boolean isP=true; length=10; i=0; while(i <= lentgth/2-1 && isP == true){ if(A[i]!=A[length-i-1]){ isP=false; } i=i+1; } System.out.print(“Palindroma: “+isP); } } 5 Esercizi sugli array Esercizio 2 dato un array A di N interi verificare che gli elementi in posizione pari sono pari e quelli in posizione dispari sono dispari Esempio (N=10) A 2 3 56 11 20 9 24 21 22 67 Risultato nelle posizioni 0,2,4,6,8 gli elementi sono pari e nelle posizioni 1,3,5,7,9 gli elementi sono dispari 6 Esercizi sugli array Algoritmo: dichiaro la variabile booleana evenOdd che all’inizio ha valore true (faccio cioè l’ipotesi che l’array abbia elementi pari in posizione parti ed elementi dispari in posizione dispari. Poi scandisco l’array dal primo elemento (in posizione 0) all’ultimo elemento (in posizione N-1). Se trovo che per la generica posizione i, A[i] è pari se i è dispari oppure A[i] è dispari... 7 Esercizi sugli array …se i è pari, allora assegno il valore false alla variabile evenOdd e interrompo la scansione. 8 Esercizi sugli array public class PariDispari { public static void main(String arg[]) { int[] A={2,13,16,21,42,25,28,31,44,11}; int i; int length; boolean evenOdd=true; length=10; i=0; while(i <= lentgth-1 && evenOdd == true){ if((i%2==1 && A[i]%2==0) || (i%2==0 && A[i]%2==1)){ isP=false; } i=i+1; } System.out.print(“Palindroma: “+isP); } } 9 Esercizi sugli array Esercizio 3 dati due array A e B rispettivamente di N N e M interi, verificare che tutti gli elementi di B sono contenuti in A Esempio (N=10, M=5) A 2 B 56 2 21 9 67 3 56 11 20 9 24 21 22 67 10 Esercizi sugli array Algoritmo: dichiaro la variabile booleana allIn che ha valore iniziale true (faccio l’ipotesi che tutti gli elementi di B siano contenuti in A. Scandisco l’array B dal primo elemento (in posizione 0) all’ultimo (in posizione M-1). Se per la generica posizione i trovo che B[i] non è contenuto in A, allora assegno il valore false alla variabile allIn e interrompo la scansione... 11 Esercizi sugli array …su B. L’algoritmo presenta due cicli: uno per scandire B e uno più interno che verifica se il generico elemento B[i] è contenuto in A. Quindi esiste una seconda variabile booleana found che gestisce la verifica precedente (vedere Esercizio 3 dell’Esercitazione 3). 12 Esercizi sugli array public class PariDispari { public static void main(String arg[]) { int[] A={2,13,16,21,42,25,28,31,44,11}; int[] B={21,13,28,11,44}; int i, j; int lengthA, lengthB; boolean allIn=true, found=false; lengthA=10; lengthB=5; i=0; while(i <= lentgthB-1 && allIn == true){ j=0; found=false; while(j <= lengthA-1 && found == false){ if(B[i]==A[j]){ found=true; } j=j+1; } ==>(continua) 13 Esercizi sugli array <==(continua) if(found == false){ allIn=false; } i=i+1; } System.out.print(“B contenuto in A: “+allIn); } } 14