Corso di Informatica (Programmazione) Esercitazione 1 (26 novembre 2008) 1 Esercizi sugli array Esercizio 1 dato un array A di N interi calcolare la somma degli elementi che sono multipli di 3 Esempio (N=10) A 4 15 20 21 40 6 7 9 10 1 Risultato 15 + 21 + 6 + 9 = 51 2 Esercizi sugli array Algoritmo: dichiaro una variabile s che dovrà contenere il risultato finale e che inizialmente ha valore 0. Scorro gli elementi di A dal primo in posizione 0 (cioè A[0]) all’ultimo in posizione (N-1) (cioè A[N-1]). Aggiungo a s l’elemento che sto considerando nella generica posizione i (cioè A[i]) ogni volta che questo è multiplo di 3. 3 Esercizi sugli array Esecuzione dell’algoritmo per l’array A di 10 interi dell’esempio precedente: - all’inizio ho s=0 - step 1 i=0 (i è l’indice che scandisce gli elementi di A) A 4 15 20 21 40 6 7 9 10 1 A[0] è multiplo di 3? NO! Quindi s rimane a 0 4 Esercizi sugli array - step 2 i=1 A 4 15 20 21 40 6 7 9 10 1 A[1] è multiplo di 3? SI’! Quindi sommo a s il valore di A[1] che è 15 s=s+15=0+15=15 - step 3 i=2 A 4 15 20 21 40 6 7 9 10 1 A[2] è multiplo di 3? NO! Quindi s rimane a 15 5 Esercizi sugli array - step 4 i=3 A 4 15 20 21 40 6 7 9 10 1 A[3] è multiplo di 3? SI’! Quindi sommo a s il valore di A[3] che è 21 s=s+21=15+21=36 - step 5 i=4 A 4 15 20 21 40 6 7 9 10 1 A[4] è multiplo di 3? NO! Quindi s rimane a 36 6 Esercizi sugli array - step 6 i=5 A 4 15 20 21 40 6 7 9 10 1 A[5] è multiplo di 3? SI’! Quindi sommo a s il valore di A[5] che è 6 s=s+6=36+6=42 - step 7 i=6 A 4 15 20 21 40 6 7 9 10 1 A[6] è multiplo di 3? NO! Quindi s rimane a 42 7 Esercizi sugli array - step 8 i=7 A 4 15 20 21 40 6 7 9 10 1 A[7] è multiplo di 3? SI’! Quindi sommo a s il valore di A[7] che è 9 s=s+9=42+9=51 - step 9 i=8 A 4 15 20 21 40 6 7 9 10 1 A[8] è multiplo di 3? NO! Quindi s rimane a 51 8 Esercizi sugli array - step 10 i=9 A 4 15 20 21 40 6 7 9 10 1 A[9] è multiplo di 3? NO! Quindi s rimane a 51 Risultato 51 9 Esercizi sugli array public class SommaMultipliTre { public static void main(String arg[]) { int[] A={4,15,20,21,40,6,7,9,10,1}; int i; int s, length; length=10; i=0; s=0; while(i <= lentgth-1){ //Verifico se l’elemento i-esimo //è multiplo di 3 if(A[i] % 3 == 0){ s=s+A[i]; } i=i+1; } System.out.println(“Somma=“+s); } } 10 Esercizi sugli array Esercizio 2 dato un array A di N interi calcolare contare il numero degli elementi pari Esempio (N=10) A 4 15 20 21 40 6 7 9 10 1 Risultato 5 11 Esercizi sugli array Algoritmo: dichiaro una variabile c che dovrà contenere il risultato finale e che inizialmente ha valore 0. Scorro gli elementi di A dal primo in posizione 0 (cioè A[0]) all’ultimo in Posizione (N-1) (cioè A[N-1]). Incremento c di 1 ogni volta che l’elemento, che sto considerando nella generica posizione i (cioè A[i]), è pari. 12 Esercizi sugli array Esecuzione dell’algoritmo per l’array A di 10 interi dell’esempio precedente: - all’inizio ho c=0 - step 1 i=0 (i è l’indice che scandisce gli elementi di A) A 4 15 20 21 40 6 7 9 10 1 A[0] è pari? SI’! Quindi incremento c di 1, e c va a 1 13 Esercizi sugli array - step 2 i=1 A 4 15 20 21 40 6 7 9 10 1 A[1] è pari? NO! Quindi c rimane a 1 - step 3 i=2 A 4 15 20 21 40 6 7 9 10 1 A[2] è pari? SI’! Quindi incremento c di 1, e c va a 2 14 Esercizi sugli array - step 4 i=3 A 4 15 20 21 40 6 7 9 10 1 A[3] è pari? NO! Quindi c rimane a 2 - step 5 i=4 A 4 15 20 21 40 6 7 9 10 1 A[4] è pari? SI’! Quindi incremento c di 1, e c va a 3 15 Esercizi sugli array - step 6 i=5 A 4 15 20 21 40 6 7 9 10 1 A[5] è pari? SI’! Quindi incremento c di 1, e c va a 4 - step 7 i=6 A 4 15 20 21 40 6 7 9 10 1 A[6] è pari? NO! Quindi c rimane a 4 16 Esercizi sugli array - step 8 i=7 A 4 15 20 21 40 6 7 9 10 1 A[7] è pari? NO! Quindi c rimane a 4 - step 9 i=8 A 4 15 20 21 40 6 7 9 10 1 A[8] è pari? SI’! Quindi incremento c di 1, e c va a 5 17 Esercizi sugli array - step 10 i=9 A 4 15 20 21 40 6 7 9 10 1 A[9] è pari? NO! Quindi c rimane a 5 Risultato 5 Il programma per contare i dispari è analogo! 18 Esercizi sugli array public class ContaPari { public static void main(String arg[]) { int[] A={4,15,20,21,40,6,7,9,10,1}; int i; int c, length; length=10; i=0; c=0; while(i <= lentgth-1){ //Verifico se l’elemento i-esimo //è pari (multiplo di 2) if(A[i] % 2 == 0){ c=c+1; } i=i+1; } System.out.println(“Numero pari=“+c); } } 19 Esercizi sugli array public class ContaDispari { public static void main(String arg[]) { int[] A={4,15,20,21,40,6,7,9,10,1}; int i; int c, length; length=10; i=0; c=0; while(i <= lentgth-1){ //Verifico se l’elemento i-esimo //è dispari (non è multiplo di 2) if(A[i] % 2 != 0){ c=c+1; } i=i+1; } System.out.println(“Numero dispari=“+c); } } 20 Esercizi sugli array Esercizio 3 dato un array A di N interi cercare l’elemento minimo e la sua posizione in A Esempio (N=10) A 4 15 20 21 3 6 7 9 10 40 Risultato 3 21 Esercizi sugli array Algoritmo: dichiaro due variabili, min e posMin, che dovranno contenere i risultati finali (rispettivamente il valore minimo e la sua posizione) e che inizialmente sono uguali rispettivamente al valore del primo elemento di A (cioè A[0]) e al valore della sua posizione in A (cioè 0). Scorro gli elementi di A dal secondo in posizione 1 (cioè A[1]) all’ultimo in posizione (N-1) (cioè A[N-1]). Ogni volta che l’elemento che sto considerando nella generica posizione i (cioè A[i]) è minore del valore di min, allora aggiorno min con il valore di A[i] e posMin con il valore i. 22 Esercizi sugli array Esecuzione dell’algoritmo per l’array A di 10 interi dell’esempio precedente: - all’inizio ho min=A[0]=4 e posMin=0 - step 1 i=1 (i è l’indice che scandisce gli elementi di A) A 4 15 20 21 3 6 7 9 10 40 A[1] è minore di min? NO! Quindi min rimane a 4 e posMin a 0 23 Esercizi sugli array - step 2 i=2 A 4 15 20 21 3 6 7 9 10 40 A[2] è minore di min? NO! Quindi min rimane a 4 e posMin a 0 - step 3 i=3 A 4 15 20 21 3 6 7 9 10 40 A[3] è minore di min? NO! Quindi min rimane a 4 e posMin a 0 24 Esercizi sugli array - step 4 i=4 A 4 15 20 21 3 6 7 9 10 40 A[4] è minore di min? SI’! Quindi min assume il valore 3 e posMin il valore 4 - step 5 i=5 A 4 15 20 21 3 6 7 9 10 40 A[5] è minore di min? NO! Quindi min rimane a 3 e posMin a 4 25 Esercizi sugli array - step 6 i=6 A 4 15 20 21 3 6 7 9 10 40 A[6] è minore di min? NO! Quindi min rimane a 3 e posMin a 4 - step 7 i=7 A 4 15 20 21 3 6 7 9 10 40 A[7] è minore di min? NO! Quindi min rimane a 3 e posMin a 4 26 Esercizi sugli array - step 8 i=8 A 4 15 20 21 3 6 7 9 10 40 A[8] è minore di min? NO! Quindi min rimane a 3 e posMin a 4 - step 9 i=9 A 4 15 20 21 3 6 7 9 10 40 A[9] è minore di min? NO! Quindi min rimane a 3 e posMin a 4 27 Esercizi sugli array Risultato min è 3 e posMin è 4 Il programma per trovare il massimo è analogo! 28 Esercizi sugli array public class TrovaMinimo { public static void main(String arg[]) { int[] A={4,15,20,21,3,6,7,9,10,4}; int i; int min, posMin, length; length=10; i=1; posMin=0; min=A[posMin]; while(i <= lentgth-1){ //Verifico se l’elemento i-esimo //è minore del minimo corrente if(A[i] < min){ min=A[i]; posMin=i; } i=i+1; } System.out.println(“Minimo=“+min+” in posizione “+posMin); } } 29 Esercizi sugli array public class TrovaMassimo { public static void main(String arg[]) { int[] A={4,15,20,21,3,6,7,9,10,4}; int i; int max, posMax, length; length=10; i=1; posMax=0; max=A[posMax]; while(i <= lentgth-1){ //Verifico se l’elemento i-esimo //è maggiore del massimo corrente if(A[i] > max){ max=A[i]; posMax=i; } i=i+1; } System.out.println(“Massimo=“+max+” in posizione “+posMax); } } 30