1 Corso di Informatica (Programmazione) Esercitazione 3 (5 dicembre 2008)
2 Esercizi sugli array Esercizio 1 dato un array A di N interi calcolare la media e contare gli elementi > della media Esempio (N=10) Risultato 58 (in realtà 58.8) e ci sono 5 elementi superiori a 58 A
3 Esercizi sugli array Algoritmo: eseguo la somma S di tutti gli elementi di A scandendo gli elementi di A dal primo (in posizione 0) allultimo (in posizione N-1). Divido poi S per la dimensione N ottenendo la media M dei valori. Esamino di nuovo uno alla volta gli elementi di A dal primo allultimo e incremento di 1 un contatore (variabile conta) ogni volta che la posizione i...
4 Esercizi sugli array … contiene un valore A[i] > M.
5 Esercizi sugli array A Esecuzione dellalgoritmo per larray A di 10 interi dellesempio precedente: - allinizio ho somma=0 - step 1 i=0 (i è lindice che scandisce gli elementi di A) somma = somma+A[0] = =
6 Esercizi sugli array A - step 2 i=1 - step 3 i= somma = somma+A[1] = = 190 A somma = somma+A[2] = = 210
7 Esercizi sugli array A - step 4 i=3 - step 5 i= somma = somma+A[3] = = 250 A somma = somma+A[4] = = 296
8 Esercizi sugli array A - step 6 i=5 - step 7 i= somma = somma+A[5] = = 356 A somma = somma+A[6] = = 360
9 Esercizi sugli array A - step 8 i=7 - step 9 i= somma = somma+A[7] = = 452 A somma = somma+A[8] = = 467
10 Esercizi sugli array A - step 10 i= somma = somma+A[9] = = step 11 calcolo la media: M=somma / 10 = 588 /10 = 58 (arrotondo perché uso variabili intere)
11 Esercizi sugli array A - step 12 conta = 0 - step 13 i=0 (nuova inizializzazione di i) - step 14 i= A[0] è > 58? Sì! Quindi conta = conta + 1 = = 1 A A[1] è > 58? Sì! Quindi conta = conta + 1 = = 2
12 Esercizi sugli array A - step 15 i=2 - step 16 i= A[2] è > 58? NO! Quindi conta rimane a 2 A A[3] è > 58? NO! Quindi conta rimane a 2
13 Esercizi sugli array A - step 17 i=4 - step 18 i= A[4] è > 58? NO! Quindi conta rimane a 2 A A[5] è > 58? SI! Quindi conta = conta + 1 = 2 +1 = 3
14 Esercizi sugli array A - step 19 i=6 - step 20 i= A[6] è > 58? NO! Quindi conta rimane a 3 A A[7] è > 58? SI! Quindi conta = conta + 1 = 3 +1 = 4
15 Esercizi sugli array A - step 21 i=8 - step 22 i= A[8] è > 58? NO! Quindi conta rimane a 4 A A[9] è > 58? SI! Quindi conta = conta + 1 = 4 +1 = 5
16 Esercizi sugli array public class CalcoloMedia { public static void main(String arg[]) { int[] A={4,15,20,21,40,6,7,9,10,1}; int i; int length; int somma=0, media=0, conta=0; length=10; i=0; while(i <= lentgth-1){ somma=somma+A[i]; i=i+1; } media=somma/length; i=0; while(i <= lentgth-1){ if(A[I] > media){ conta=conta+1; } i=i+1; } System.out.println(conta+ elementi sono > di +media); }
17 Esercizi sugli array Esercizio 2 dato un array A di N interi verificare se A contiene almeno 3 elementi consecutivi Esempio (N=10) Risultato il vettore contiene almeno 3 elementi consecutivi A
18 Esercizi sugli array Algoritmo: dichiaro la variabile booleana threeElements che allinizio ha valore false (cioè parto dallipotesi che larray non abbia almeno 3 elementi consecutivi). Poi scandisco larray dal primo elemento (in posizione 0) a quello in posizione N-3 (ovvero lultimo elemento dellarray che è seguito da almeno 2 elementi), dove N è la lunghezza dellarray.
19 Esercizi sugli array …Se trovo che, per la posizione generica i, A[i] è uguale a A[i+1] e A[i+1] è uguale a A[i+2], allora posso dire che nellarray ci sono almeno 3 elementi consecutivi. In tale caso assegno true alla variabile threeElements e interrompo la scansione dellarray.
20 Esercizi sugli array A Esecuzione dellalgoritmo per larray A di 10 interi dellesempio precedente: - allinizio threeElements è false - step 1 i=0 (i è lindice che scandisce gli elementi di A) A[0] è uguale a A[1] e A[1] è uguale a A[2]? NO! Allora proseguo
21 Esercizi sugli array A - step 2 i=1 - step 3 i=2 A[1] è uguale a A[2] e A[2] è uguale a A[3]? NO! Allora proseguo A A[2] è uguale a A[3] e A[3] è uguale a A[4]? SI! Allora assegno true a threeElements e interrompo la scansione
22 Esercizi sugli array public class ThreeElements { public static void main(String arg[]) { int[] A={4,15,20,21,40,6,7,9,10,1}; int i; int length; boolean trhreeElements=false; length=10; i=0; while(i <= lentgth-1 && threeElements == false){ if(A[i]==A[i+1] && A[i+1]==A[i+2]){ threeElements=true; } i=i+1; } System.out.print(Ci sono 3 elementi consecutivi: ); System.out.println(trhreeElements); }
23 Esercizi sugli array Esercizio 3 dato un array A di N interi e un intero k verificare se A contiene k Esempio (N=10, k=40) Risultato il vettore contiene A
24 Esercizi sugli array Algoritmo: dichiaro la variabile booleana found che allinizio ha valore false (cioè parto dallipotesi che larray non contenga lintero k). Poi scandisco larray dal primo elemento (in posizione 0) allultimo (in posizione N-1). Se trovo una posizione i tale che A[i] è uguale a k, allora assegno alla variabile found il valore true e interrompo la scansione
25 Esercizi sugli array A Esecuzione dellalgoritmo per larray A di 10 interi dellesempio precedente: - allinizio found è false - step 1 i=0 (i è lindice che scandisce gli elementi di A) A[0] è uguale a 40? NO! Allora proseguo
26 Esercizi sugli array A - step 2 i=1 - step 3 i=2 A[1] è uguale a 40? NO! Allora proseguo A A[2] è uguale a 40? NO! Allora proseguo
27 Esercizi sugli array A - step 4 i=3 - step 5 i=4 A[3] è uguale a 40? NO! Allora proseguo A A[2] è uguale a 40? SI! Allora assegno true a found e interrompo la scansione
28 Esercizi sugli array public class SearchK { public static void main(String arg[]) { int[] A={4,15,20,21,40,6,7,9,10,1}; int i, k; int length; boolean found=false; length=10; i=0; k=40; while(i <= lentgth-1 && found == false){ if(A[i]==k){ found=true; } i=i+1; } System.out.print(Trovato: +found); }
29 Esercizi sugli array NOTA BENE: il programma precedente vale anche nel caso in cui A sia un array di caratteri e al posto dellintero k ci sia un carattere c. La modifica del codice è contenuta nella slide successiva.
30 Esercizi sugli array public class SearchChar { public static void main(String arg[]) { char[] A={a,b,c,d,e,f,g,h,i,l}; int i; char c; int length; boolean found=false; length=10; i=0; c=b; while(i <= lentgth-1 && found == false){ if(A[i]==c){ found=true; } i=i+1; } System.out.print(Trovato: +found); }
31 Esercizi sugli array Esercizio 4 dato un array A di N interi e un intero k contare le occorrenze di k in A Esempio (N=10, k=40) Risultato 40 compare 3 volte A
32 Esercizi sugli array Algoritmo: dichiaro la variabile intera count che alla fine conterrà il numero di occorrenze di k in A. Poi scandisco larray dal primo elemento (in posizione 0) allultimo (in posizione N-1) e incremento di 1 la variabile count ogni volta che incontro una posizione i in cui A[i] è uguale a k.
33 Esercizi sugli array A Esecuzione dellalgoritmo per larray A di 10 interi dellesempio precedente: - allinizio count è 0 - step 1 i=0 (i è lindice che scandisce gli elementi di A) A[0] è uguale a 40? NO! Allora proseguo
34 Esercizi sugli array A - step 2 i=1 - step 3 i=2 A[1] è uguale a 40? SI! Allora count = count +1 = = 1 A A[2] è uguale a 40? NO! Allora count rimane a
35 Esercizi sugli array A - step 4 i=3 - step 5 i=4 A[3] è uguale a 40? NO! Allora count rimane a 1 A A[4] è uguale a 40? SI! Allora count = count + 1 = =
36 Esercizi sugli array A - step 6 i=5 - step 7 i=6 A[5] è uguale a 40? NO! Allora count rimane a 2 A A[6] è uguale a 40? NO! Allora count rimane a
37 Esercizi sugli array A - step 8 i=7 - step 9 i=8 A[7] è uguale a 40? NO! Allora count rimane a 2 A A[8] è uguale a 40? SI! Allora count = count + 1 = =
38 Esercizi sugli array A - step 10 i=9 A[9] è uguale a 40? NO! Allora count rimane a
39 Esercizi sugli array public class CountK { public static void main(String arg[]) { int[] A={4,15,20,21,40,6,7,9,10,1}; int i, k; int length, count; length=10; i=0; k=40; count=0; while(i <= lentgth-1){ if(A[i]==k){ count=count+1; } i=i+1; } System.out.print(Occorrenze=+count); }
40 Esercizi sugli array NOTA BENE: il programma precedente vale anche nel caso in cui A sia un array di caratteri e al posto dellintero k ci sia un carattere c. La modifica del codice è contenuta nella slide successiva.
41 Esercizi sugli array public class CountChar { public static void main(String arg[]) { char[] A={a,b,c,a,e,f,a,h,i,l}; int i; char c; int length, count; length=10; i=0; c=a; count=0; while(i <= lentgth-1){ if(A[i]==c){ count=count+1; } i=i+1; } System.out.print(Occorrenze=+count); }
42 Esercizi sugli array Esercizio 5 dato un array A di N interi e un intero k verificare che tutti gli elementi sono < k Esempio (N=10, k=40) Risultato non tutti gli elementi sono < A
43 Esercizi sugli array Algoritmo: dichiaro la variabile booleana ok che inizializzo a true in quanto faccio lipotesi che tutti gli elementi di A siano < k. Poi scandisco larray dal primo elemento (in posizione 0) allultimo (in posizione N-1) e se trovo una posizione i in cui A[i] >= k, allora la mia ipotesi di partenza è falsa, quindi assegno alla variabile ok il valore false e interrompo la scansione.
44 Esercizi sugli array A Esecuzione dellalgoritmo per larray A di 10 interi dellesempio precedente: - allinizio ok è true - step 1 i=0 (i è lindice che scandisce gli elementi di A) A[0] è < 40? SI! Allora proseguo
45 Esercizi sugli array A - step 2 i=1 - step 3 i=2 A[1] è < 40? SI! Allora proseguo A A[3] è < 40? SI! Allora proseguo
46 Esercizi sugli array A - step 4 i=3 - step 5 i=4 A[3] è < 40? SI! Allora proseguo A A[4] è < 40? NO! Allora false a ok e interrompo
47 Esercizi sugli array public class CheckLessThanK { public static void main(String arg[]) { int[] A={4,15,20,21,40,6,7,9,10,1}; int i, k; int length; boolean ok=true; length=10; i=0; k=40; while(i <= lentgth-1 && ok == true){ if(A[i]>=k){ ok=false; } i=i+1; } System.out.print(Sono tutti < k: +ok); }
48 Esercizi sugli array NOTA BENE: il programma precedente può essere esteso agli altri tipi di confronto: - Verifica che tutti gli elementi sono uguali a k il test dellif diventa: A[i] != k - Verifica che tutti gli elementi sono diversi da k il test dellif diventa: A[i] == k - Verifica che tutti gli elementi sono > k il test dellif diventa: A[i] <= k
49 Esercizi sugli array... - Verifica che tutti gli elementi sono <= k il test dellif diventa: A[i] > k - Verifica che tutti gli elementi sono >= k il test dellif diventa: A[i] < k
50 Esercizi sugli array Esercizio 6 dato un array A di N interi scambiare il lelemento in posizione I (compresa tra 0 e N-1) con lelemento in posizione j (compresa tra 0 e N-1) diversa da i
51 Esercizi sugli array Esempio (N=10, i=0, j=9) A
52 Esercizi sugli array Algoritmo: dichiaro la variabile intera help che mi serve per conservare il valore di A[i] prima di sovrascriverlo con A[j]. Poi assegno a A[i] il valore di A[j] e a A[j] il valore di help a cui era stato assegnato il valore originale di A[i].
53 Esercizi sugli array A Esecuzione dellalgoritmo per larray A di 10 interi dellesempio precedente: - step 1 help = A[0] - step 2 A[0] = A[9] step 3 A[9] = help A
54 Esercizi sugli array public class Scambia { public static void main(String arg[]) { int[] A={4,15,20,21,40,6,7,9,10,1}; int i, j; int length, help; length=10; i=0; j=9; help=A[i]; A[i]=A[j]; A[j]=help; }
55 Esercizi sugli array Esercizio 6 dato un array A di N invertire gli elementi di A Esempio (N=10) A A
56 Esercizi sugli array Algoritmo: eseguo uno scambio dellelemento in posizione i e del suo simmetrico in posizione N-i-1. Questo scambio lo faccio per tutte le posizioni i che vanno da 0 a N/2-1
57 Esercizi sugli array A Esecuzione dellalgoritmo per larray A di 10 interi dellesempio precedente: - step 1 i=0 (i è lindice che scandisce gli elementi di A) scambio A[0] con A[9]
58 Esercizi sugli array A - step 2 i=1 scambio A[1] con A[8]
59 Esercizi sugli array A - step 3 i=2 scambio A[2] con A[7]
60 Esercizi sugli array A - step 4 i=3 scambio A[3] con A[6]
61 Esercizi sugli array A - step 5 i=4 (N/2-1=10/2-1=4) scambio A[4] con A[5] Risultato finale
62 Esercizi sugli array public class InvertArray { public static void main(String arg[]) { int[] A={4,15,20,21,40,6,7,9,10,1}; int i; int length; int help; length=10; i=0; while(i <= lentgth/2-1){ help=A[i]; A[i]=A[j]; A[j]=help; i=i+1; }
63 Esercizi sugli array NOTA BENE: il programma precedente vale anche nel caso in cui N sia dispari. Le posizioni da scambiare sono sempre I e N-I-1 con I che va da 0 a N/2-1, in quanto esiste un elemento centrale in posizione N/2 che rimane fisso nella stessa posizione.
64 Esercizi sugli array Esercizio 7 dato un array A di N calcolare per ogni A[i] la somma dei primi A[i] interi (da 1 a A[i]) Esempio (N=10) A per i=0, calcolo …+30 per i=1, calcolo …+25...
65 Esercizi sugli array Algoritmo: eseguo una scansione di A per i che va da 0 a N-1 e per ogni A[i] eseguo un ciclo più interno che calcola la somma …A[i].
66 Esercizi sugli array public class InvertArray { public static void main(String arg[]) { int[] A={4,15,20,21,40,6,7,9,10,1}; int i, j; int length; int somma; length=10; i=0; while(i <= lentgth-1){ j=1; somma=0; while(j<=A[i]){ somma=somma+j; j=j+1 } System.out.println(Somma=+somma); i=i+1; }