Laboratorio di Matematica e Informatica Luca Manzoni Stefano Beretta [email protected] [email protected] Dipartimento di Informatica, Sistemistica e Comunicazione Università degli Studi di Milano - Bicocca 11 Gennaio 2011 Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica 11 Gennaio 2011 1 / 31 11 Gennaio 2011 2 / 31 Array Outline 1 Array 2 Esercizi su array 3 Array multidimensionali 4 Esercizi su array multidimensionali e di riepilogo Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica Array Motivazioni per l’utilizzo degli array I tipi di dato di base permettono di definire solamente una variabile alla volta. A volte vogliamo tenere traccia di n diverse variabili tutte dello stesso tipo. Esempio Un elenco di temperature rilevate delle quali calcolare mensile e settimanale. Una vettore od una matrice. I voti di un libretto universitario. Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica 11 Gennaio 2011 3 / 31 Array Array Gli array permettono di avere un insieme ordinato di variabili di altro tipo (es. booleani, interi, numeri in virgola mobile, etc.). Il numero di elementi di un array è fissato al momento dell’inizializzazione. Ci si riferisce all’intero array con un solo nome (es. a). Ci si riferisce alle singole variabili all’interno di un array di lunghezza n con un indice in {0, . . . , n − 1} (es. a[3] per il quarto elemento di a). Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica 11 Gennaio 2011 4 / 31 Array Array Gli array permettono di avere un insieme ordinato di variabili di altro tipo (es. booleani, interi, numeri in virgola mobile, etc.). Il numero di elementi di un array è fissato al momento dell’inizializzazione. Ci si riferisce all’intero array con un solo nome (es. a). Ci si riferisce alle singole variabili all’interno di un array di lunghezza n con un indice in {0, . . . , n − 1} (es. a[3] per il quarto elemento di a). Esempio. Un array di 10 elementi. val = 2 4 5 8 1 -5 6 3 -2 9 0 1 2 3 4 7 5 6 8 9 In questo esempio quale è il valore di val[4]? Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica 11 Gennaio 2011 4 / 31 11 Gennaio 2011 5 / 31 Array Array: dichiarazione e inizializzazione Un array in Java viene dichiarato nel seguente modo: int [ ] arrayDiInteri ; double [ ] arrayDiDouble ; oppure: int altroArrayDiInteri [ ] ; double altroArrayDiDouble [ ] ; Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica Array Array: dichiarazione e inizializzazione Un array in Java viene dichiarato nel seguente modo: int [ ] arrayDiInteri ; double [ ] arrayDiDouble ; oppure: int altroArrayDiInteri [ ] ; double altroArrayDiDouble [ ] ; Gli array devono anche essere inizializzati prima di poterli utilizzare: /∗ a r r a y con 10 e l e m e n t i . ∗/ int [ ] arrayDiInteri = new int [ 1 0 ] ; /∗ a r r a y d i 2 e l e m e n t i . ∗/ double [ ] arrayDiDouble = new double [ 2 ] ; /∗ a r r a y d i 5 e l e m e n t i g i a ' i n i z i a l i z z a t i . ∗/ int [ ] altroArrayDiInteri = {1 ,7 , −3 , −8 ,4}; Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica 11 Gennaio 2011 5 / 31 Array Accesso agli array Supponiamo di avere un array a di 5 interi come il seguente: a= -3 2 0 1 4 5 2 2 3 4 Come accedere ai vari elementi? int c = a [ 3 ] ; // A d e s so c v a l e 5 . a [ 0 ] = 2 ; // A de s s o i l p r i m o v a l o r e d i a e ' 2 . Possiamo fare anche cose un poco meno “normali”: a [ a [ 4 ] ] = 1; In questo caso a[4] vale 2, quindi dire a[a[4]] equivale a dire a[2]. Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica 11 Gennaio 2011 6 / 31 Array Accesso agli array Un accesso ad elementi non esistenti di un array provoca una eccezione: int [ ] var = new int [ 1 0 ] ; var [ −1] = 3 ; //ERRORE : s o l o v a l o r i p o s i t i v i . var [ 1 0 ] = 5 ; //ERRORE : l ' u l t i m o e l e m e n t o e ' v a r [ 9 ] . Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica 11 Gennaio 2011 7 / 31 Array Accesso agli array Un accesso ad elementi non esistenti di un array provoca una eccezione: int [ ] var = new int [ 1 0 ] ; var [ −1] = 3 ; //ERRORE : s o l o v a l o r i p o s i t i v i . var [ 1 0 ] = 5 ; //ERRORE : l ' u l t i m o e l e m e n t o e ' v a r [ 9 ] . Spesso può essere utile avere un modo per sapere la lunghezza di un array direttamente dall’array: int [ ] ar = new int [ 1 0 ] ; int len = ar . length ; La variabile len ha valore 10. Se ar fosse stato un array di double avremmo dovuto cambiare il tipo di len? No! Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica 11 Gennaio 2011 7 / 31 Array Esempio: riempire un array di valori pseudocasuali Si riempia un array di interi di 10 elementi con valori pseudocasuali non negativi minori di 100 (si ricordi che Math.random() ritorna valori double in [0, 1)). Si stampi in output il contenuto dell’array. Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica 11 Gennaio 2011 8 / 31 Array Esempio: riempire un array di valori pseudocasuali Si riempia un array di interi di 10 elementi con valori pseudocasuali non negativi minori di 100 (si ricordi che Math.random() ritorna valori double in [0, 1)). Si stampi in output il contenuto dell’array. class Esercizio1 { public static void main ( String [ ] args ) { int [ ] a = new int [ 1 0 ] ; for ( int i = 0 ; i < a . length ; i++) { a [ i ] = ( int ) ( Math . random ( ) ∗ 1 0 0 ) ; } for ( int i = 0 ; i < a . length ; i++) { System . out . println ( ” a [ ” + i + ” ] = ” + a [ i ] ) ; } } } Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica 11 Gennaio 2011 8 / 31 Array Esempio: trovare il massimo in una sequenza - 1 Si riempia un array di 4 valori come nell’esercizio precedente. Si trovi il massimo dei valori dell’array e si stampi in output. Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica 11 Gennaio 2011 9 / 31 Array Esempio: trovare il massimo in una sequenza - 1 Si riempia un array di 4 valori come nell’esercizio precedente. Si trovi il massimo dei valori dell’array e si stampi in output. class Esercizio2 { public static void main ( String [ ] args ) { int [ ] a = new int [ 4 ] ; for ( int i = 0 ; i < a . length ; i++) { a [ i ] = ( int ) ( Math . random ( ) ∗ 1 0 0 ) ; } int max = 0 ; for ( int i = 0 ; i < a . length ; i++) { if ( a [ i ] > max ) max = a [ i ] ; } System . out . println ( ” I l massimo e ' ” + max ) ; } } Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica 11 Gennaio 2011 9 / 31 Array Esempio: trovare il massimo in una sequenza - 2 Esempio di funzionamento su 4 elementi: Primo ciclo max = 19 a= 19 63 41 86 0 1 2 3 i Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica 11 Gennaio 2011 10 / 31 Array Esempio: trovare il massimo in una sequenza - 2 Esempio di funzionamento su 4 elementi: Primo ciclo max = 19 a= 19 63 41 86 0 1 2 3 i Secondo ciclo max = 63 a= 19 63 41 86 0 1 2 3 i Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica 11 Gennaio 2011 10 / 31 Array Esempio: trovare il massimo in una sequenza - 2 Esempio di funzionamento su 4 elementi: Primo ciclo Terzo ciclo max = 63 max = 19 a= a= 19 63 41 86 0 1 2 19 63 41 86 0 3 1 2 3 i i Secondo ciclo max = 63 a= 19 63 41 86 0 1 2 3 i Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica 11 Gennaio 2011 10 / 31 Array Esempio: trovare il massimo in una sequenza - 2 Esempio di funzionamento su 4 elementi: Primo ciclo Terzo ciclo max = 63 max = 19 a= a= 19 63 41 86 0 1 2 19 63 41 86 0 3 1 3 i i Quarto ciclo Secondo ciclo max = 63 a= 2 max = 86 a= 19 63 41 86 0 1 2 3 0 i Luca Manzoni, Stefano Beretta (DISCo) 19 63 41 86 1 2 3 i Laboratorio di Matematica e Informatica 11 Gennaio 2011 10 / 31 Array Esempio: norma di un vettore Dato un array di double (potete generarlo casualmente) consideratelo come un vettore in Rn (con n a vostra scelta) e calcolatene la norma p euclidea Pn (ricordando n 2 che dato v = (v1 , . . . , vn ) ∈ R , la norma euclidea è kvk = i=1 vi ). Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica 11 Gennaio 2011 11 / 31 Array Esempio: norma di un vettore Dato un array di double (potete generarlo casualmente) consideratelo come un vettore in Rn (con n a vostra scelta) e calcolatene la norma p euclidea Pn (ricordando n 2 che dato v = (v1 , . . . , vn ) ∈ R , la norma euclidea è kvk = i=1 vi ). class Esercizio3 { public static void main ( String [ ] args ) { double [ ] a = new double [ 1 0 ] ; for ( int i = 0 ; i < a . length ; i++) { a [ i ] = Math . random ( ) ; } double norma = 0 ; for ( int i = 0 ; i < a . length ; i++) { norma += ( a [ i ] ∗ a [ i ] ) ; } norma = Math . sqrt ( norma ) ; System . out . println ( norma ) ; } } Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica 11 Gennaio 2011 11 / 31 Array Esempio: ordinamento di un array - 1 Un’operazione comune è l’ordinamento di un array. Esistono molti algoritmi per ordinare un array. I più semplici sono, ad esempio, insertion sort, selection sort e bubble sort. Esistono anche algoritmi più efficienti, come il merge sort, heap sort e quicksort. Per ora vedremo l’insertion sort. Descrizione dell’algoritmo Dato un array v: 1 Trova il minimo elemento di v. 2 Scambialo con il primo elemento di v. 3 Se v ha più di un elemento, ripeti i passi precedenti sulla parte rimanente di v. Altrimenti significa che l’array è stato ordinato. Provate ad implementare l’insertion sort utilizzando un array di 10 interi generati casualmente. Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica 11 Gennaio 2011 12 / 31 Array Esempio: ordinamento di un array - 2 // I n s e r i r e q u i l ' i n i z i a l i z z a z i o n e d e l l ' a r r a y a . for ( int i = 0 ; i < a . length ; i++) { // I l c a n d i d a t o minimo e ' i n p o s i z i o n e i . int minPos = i ; for ( int j = i+1; j < a . length ; j++) { // Se s i t r o v a un nuovo c a n d i d a t o minimo // s i a g g i o r n a l a p o s i z i o n e . if ( a [ j ] < a [ minPos ] ) minPos = j ; } // Scambio d i p o s i z i o n e t r a i l v a l o r e i n p o s i z i o n e i // e q u e l l o i n p o s i z i o n e minPos int tmp = a [ minPos ] ; a [ minPos ] = a [ i ] ; a [ i ] = tmp ; } Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica 11 Gennaio 2011 13 / 31 Array Ordinamento di un array - 3 j minPos = 0 a= 18 66 11 45 80 41 17 46 0 1 2 3 4 5 6 7 2 90 8 9 i Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica 11 Gennaio 2011 14 / 31 Array Ordinamento di un array - 3 j minPos = 2 a= 18 66 11 45 80 41 17 46 0 1 2 3 4 5 6 7 2 90 8 9 i Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica 11 Gennaio 2011 14 / 31 Array Ordinamento di un array - 3 j minPos = 2 a= 18 66 11 45 80 41 17 46 0 1 2 3 4 5 6 7 2 90 8 9 i Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica 11 Gennaio 2011 14 / 31 Array Ordinamento di un array - 3 j minPos = 2 a= 18 66 11 45 80 41 17 46 0 1 2 3 4 5 6 7 2 90 8 9 i Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica 11 Gennaio 2011 14 / 31 Array Ordinamento di un array - 3 j minPos = 2 a= 18 66 11 45 80 41 17 46 0 1 2 3 4 5 6 7 2 90 8 9 i Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica 11 Gennaio 2011 14 / 31 Array Ordinamento di un array - 3 j minPos = 2 a= 18 66 11 45 80 41 17 46 0 1 2 3 4 5 6 7 2 90 8 9 i Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica 11 Gennaio 2011 14 / 31 Array Ordinamento di un array - 3 j minPos = 2 a= 18 66 11 45 80 41 17 46 0 1 2 3 4 5 6 7 2 90 8 9 i Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica 11 Gennaio 2011 14 / 31 Array Ordinamento di un array - 3 j minPos = 8 a= 18 66 11 45 80 41 17 46 0 1 2 3 4 5 6 7 2 90 8 9 i Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica 11 Gennaio 2011 14 / 31 Array Ordinamento di un array - 3 j minPos = 8 a= 18 66 11 45 80 41 17 46 0 1 2 3 4 5 6 7 2 90 8 9 i Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica 11 Gennaio 2011 14 / 31 Array Ordinamento di un array - 3 tmp = minPos = 8 a= 2 j 18 66 11 45 80 41 17 46 0 1 2 3 4 5 6 7 2 90 8 9 i Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica 11 Gennaio 2011 14 / 31 Array Ordinamento di un array - 3 tmp = minPos = 8 a= 2 j 18 66 11 45 80 41 17 46 18 90 0 1 2 3 4 5 6 7 8 9 i Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica 11 Gennaio 2011 14 / 31 Array Ordinamento di un array - 3 tmp = minPos = 8 a= 2 0 2 j 66 11 45 80 41 17 46 18 90 1 2 3 4 5 6 7 8 9 i Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica 11 Gennaio 2011 14 / 31 Array Ordinamento di un array - 3 j minPos = 2 a= 2 0 66 11 45 80 41 17 46 18 90 1 2 3 4 5 6 7 8 9 i Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica 11 Gennaio 2011 14 / 31 Array Ordinamento di un array - 3 j minPos = 2 a= 2 0 66 11 45 80 41 17 46 18 90 1 2 3 4 5 6 7 8 9 i Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica 11 Gennaio 2011 14 / 31 Array Ordinamento di un array - 3 j minPos = 2 a= 2 0 66 11 45 80 41 17 46 18 90 1 2 3 4 5 6 7 8 9 i Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica 11 Gennaio 2011 14 / 31 Array Ordinamento di un array - 3 j minPos = 2 a= 2 0 66 11 45 80 41 17 46 18 90 1 2 3 4 5 6 7 8 9 i Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica 11 Gennaio 2011 14 / 31 Array Ordinamento di un array - 3 j minPos = 2 a= 2 0 66 11 45 80 41 17 46 18 90 1 2 3 4 5 6 7 8 9 i Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica 11 Gennaio 2011 14 / 31 Array Ordinamento di un array - 3 j minPos = 2 a= 2 0 66 11 45 80 41 17 46 18 90 1 2 3 4 5 6 7 8 9 i Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica 11 Gennaio 2011 14 / 31 Array Ordinamento di un array - 3 j minPos = 2 a= 2 0 66 11 45 80 41 17 46 18 90 1 2 3 4 5 6 7 8 9 i Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica 11 Gennaio 2011 14 / 31 Array Ordinamento di un array - 3 j minPos = 2 a= 2 0 66 11 45 80 41 17 46 18 90 1 2 3 4 5 6 7 8 9 i Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica 11 Gennaio 2011 14 / 31 Array Ordinamento di un array - 3 tmp = minPos = 2 a= 2 0 11 j 66 11 45 80 41 17 46 18 90 1 2 3 4 5 6 7 8 9 i Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica 11 Gennaio 2011 14 / 31 Array Ordinamento di un array - 3 tmp = minPos = 2 a= 2 0 11 j 66 66 45 80 41 17 46 18 90 1 2 3 4 5 6 7 8 9 i Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica 11 Gennaio 2011 14 / 31 Array Ordinamento di un array - 3 tmp = minPos = 2 a= 2 0 11 j 11 66 45 80 41 17 46 18 90 1 2 3 4 5 6 7 8 9 i Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica 11 Gennaio 2011 14 / 31 11 Gennaio 2011 15 / 31 Esercizi su array Outline 1 Array 2 Esercizi su array 3 Array multidimensionali 4 Esercizi su array multidimensionali e di riepilogo Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica Esercizi su array Quiz - 1 Dato il seguente frammento di codice: int [ ] a = new int [ 4 ] ; for ( int i = 4 ; i > 0 ; i−−) { a [ i ] = 0; } 1 Ogni elemento dell’array ha valore 0. 2 Non compila. 3 Ogni elemento dell’array tranne il primo ha valore 0. 4 Errore a run time. Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica 11 Gennaio 2011 16 / 31 11 Gennaio 2011 16 / 31 Esercizi su array Quiz - 1 Dato il seguente frammento di codice: int [ ] a = new int [ 4 ] ; for ( int i = 4 ; i > 0 ; i−−) { a [ i ] = 0; } 1 Ogni elemento dell’array ha valore 0. 2 Non compila. 3 Ogni elemento dell’array tranne il primo ha valore 0. 4 Errore a run time. Errore a run time. Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica Esercizi su array Quiz - 2 Dato il seguente frammento di codice: int [ ] a = new int [ 5 ] ; a [0] = 2; for ( int i = 1 ; i < a . length ; i++) { a [ i ] = 2∗ a [ i − 1 ] ; } Quale valore è contenuto in a[4]? 1 32 2 Errore a run time. 3 2 4 4 5 Nessuna delle risposte precedenti. Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica 11 Gennaio 2011 17 / 31 11 Gennaio 2011 17 / 31 Esercizi su array Quiz - 2 Dato il seguente frammento di codice: int [ ] a = new int [ 5 ] ; a [0] = 2; for ( int i = 1 ; i < a . length ; i++) { a [ i ] = 2∗ a [ i − 1 ] ; } Quale valore è contenuto in a[4]? 1 32 2 Errore a run time. 3 2 4 4 5 Nessuna delle risposte precedenti. 32 (in posizione i c’è il valore 2i+1 ). Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica Esercizi su array Quiz - 3 Dato il seguente frammento di codice: int [ ] a = new int [ 4 ] ; a [0] = 2; a [1] = 0; a [2] = 3; a [3] = 1; a [ a [ a [ a [ 3 ] ] ] ] = 7; Quale è il contenuto di a? 1 7 0 3 1 2 2 7 3 1 3 2 0 7 1 4 2 0 3 7 Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica 11 Gennaio 2011 18 / 31 Esercizi su array Quiz - 3 Dato il seguente frammento di codice: int [ ] a = new int [ 4 ] ; a [0] = 2; a [1] = 0; a [2] = 3; a [3] = 1; a [ a [ a [ a [ 3 ] ] ] ] = 7; Quale è il contenuto di a? 1 7 0 3 1 2 2 7 3 1 3 2 0 7 1 4 2 0 3 7 2 0 7 1 (a[a[a[a[3]]]] è a[a[a[1]]] che a sua volta è a[a[0]] che è a[2]). Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica 11 Gennaio 2011 18 / 31 Esercizi su array Quiz - 4 Si supponga che l’array a sia già inizializzato con i valori 2 3 5 1 e si consideri il seguente frammento di codice: int x = a [ 0 ] ; for ( int i = 0 ; i < a . length ; i++) { a [ i ] = a [ ( i+1)%(a . length ) ] ; } Quale è il contenuto di a? 1 3 5 1 2 2 3 5 1 3 3 1 2 3 5 4 1 2 3 1 5 Nessuna delle risposte precedenti. Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica 11 Gennaio 2011 19 / 31 Esercizi su array Quiz - 4 Si supponga che l’array a sia già inizializzato con i valori 2 3 5 1 e si consideri il seguente frammento di codice: int x = a [ 0 ] ; for ( int i = 0 ; i < a . length ; i++) { a [ i ] = a [ ( i+1)%(a . length ) ] ; } Quale è il contenuto di a? 1 3 5 1 2 2 3 5 1 3 3 1 2 3 5 4 1 2 3 1 5 Nessuna delle risposte precedenti. 3 5 1 3 Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica 11 Gennaio 2011 19 / 31 Esercizi su array Quiz - 5 Dato il seguente frammento di codice: int [ ] x = new int [ 4 ] ; x [0] = 2; int y = 5 ; y = x; Quale è valore contenuto in y? 1 0 2 2 3 5 4 Errore a run time 5 Non compila Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica 11 Gennaio 2011 20 / 31 11 Gennaio 2011 20 / 31 Esercizi su array Quiz - 5 Dato il seguente frammento di codice: int [ ] x = new int [ 4 ] ; x [0] = 2; int y = 5 ; y = x; Quale è valore contenuto in y? 1 0 2 2 3 5 4 Errore a run time 5 Non compila Non compila. Infatti si tenta di assegnare un array ad un intero. Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica Array multidimensionali Outline 1 Array 2 Esercizi su array 3 Array multidimensionali 4 Esercizi su array multidimensionali e di riepilogo Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica 11 Gennaio 2011 21 / 31 Array multidimensionali Array multidimensionali Gli array multidimensionali sono array di array. Ogni elemento di un array n-dimensionale è denotato da una n-upla di interi: // A r r a y d i d i m e n s i o n e 2 ( 5 r i g h e e 4 c o l o n n e ) int [ ] [ ] a = new int [ 5 ] [ 4 ] ; // Ele me n to i n r i g a 3 e c o l o n n a 2 a [ 3 ] [ 2 ] = 8; // Numero d i r i g h e int row = a . length ; // numero d i c o l o n n e int col = a [ 0 ] . length ; Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica 11 Gennaio 2011 22 / 31 Array multidimensionali Array multidimensionali Un esempio di array 2-dimensionale: 0 1 2 3 4 Un esempio di array 3-dimensionale: 5 3 2 0 1 1 0 2 0 3 1 4 2 5 3 6 0 Codice: int[][] a = new int[7][6]. 1 2 3 Codice: int[][][] b = new int[4][4][4]. Per più di 3 dimensioni mi affido alla vosta immaginazione per ovvi limiti fisici. Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica 11 Gennaio 2011 23 / 31 Array multidimensionali Esempio - 1 Scrivere un programma che inizializzi un array con 10 righe e 8 colonne in modo casuale e lo stampi a schermo. Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica 11 Gennaio 2011 24 / 31 Array multidimensionali Esempio - 1 Scrivere un programma che inizializzi un array con 10 righe e 8 colonne in modo casuale e lo stampi a schermo. class Esercizio5 { public static void main ( String [ ] args ) { int a [ ] [ ] = new int [ 1 0 ] [ 8 ] ; // I n i z i a l i z z a z i o n e for ( int i = 0 ; i < a . length ; i++) for ( int j = 0 ; j < a [ i ] . length ; j++) a [ i ] [ j ] = ( int ) ( Math . random ( ) ∗ 1 0 ) ; // Stampa a schermo for ( int i = 0 ; i < a . length ; i++) { for ( int j = 0 ; j < a [ i ] . length ; j++) System . out . print ( a [ i ] [ j ] + ” ” ) ; System . out . println ( ) ; } } } Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica 11 Gennaio 2011 24 / 31 Array multidimensionali Esempio - 2 Scrivere un programma che inizializzi in modo casuale un array di 10 righe e 10 colonne. Si stampi in output la diagonale dell’array. Si calcoli e si stampi in output la somma degli elementi della diagonale. Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica 11 Gennaio 2011 25 / 31 Array multidimensionali Esempio - 2 Scrivere un programma che inizializzi in modo casuale un array di 10 righe e 10 colonne. Si stampi in output la diagonale dell’array. Si calcoli e si stampi in output la somma degli elementi della diagonale. class Esercizio6 { public static void main ( String [ ] args ) { double a [ ] [ ] = new double [ 1 0 ] [ 1 0 ] ; for ( int i = 0 ; i < 1 0 ; i++) for ( int j = 0 ; j < 1 0 ; j++) a [ i ] [ j ] = Math . random ( ) ; double somma = 0 ; for ( int i = 0 ; i < 1 0 ; i++) { System . out . print ( a [ i ] [ i ] + ” ” ) ; somma += a [ i ] [ i ] ; } System . out . println ( ”\nSomma = ” + somma ) ; } } Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica 11 Gennaio 2011 25 / 31 Array multidimensionali Esempio - 3 Scrivere un programma che inizializzi un array di interi di 4 righe e 3 colonne facendo inserire i valori all’utente. Il programma deve poi stampare l’array trasposto. Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica 11 Gennaio 2011 26 / 31 Array multidimensionali Esempio - 3 Scrivere un programma che inizializzi un array di interi di 4 righe e 3 colonne facendo inserire i valori all’utente. Il programma deve poi stampare l’array trasposto. class Esercizio7 { public static void main ( String [ ] args ) { int a [ ] [ ] = new int [ 4 ] [ 3 ] ; for ( int i = 0 ; i < 4 ; i++) for ( int j = 0 ; j < 3 ; j++) { System . out . print ( ” a [ ” + i + ” ] [ ” + j + ” ] : ” ) ; a [ i ] [ j ] = SavitchIn . readLineInt ( ) ; } for ( int i = 0 ; i < 3 ; i++) { for ( int j = 0 ; j < 4 ; j++) { System . out . print ( a [ j ] [ i ] + ” ” ) ; } System . out . println ( ) ; } } Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica 11 Gennaio 2011 } 26 / 31 Array multidimensionali Esempio - 4 Scrivere un programma che inizializzi due array bidimensionali A e B nel seguente modo: 2 3 2 3 0 4 A = 1 −1 4 B = 3 7 1 7 2 1 −2 2 8 E ne calcoli il prodotto AB. Ricordiamo che il prodotto di una matrice A ∈ M(n, p) per P una matrice p B ∈ M(p, m) è una matrice AB ∈ M(n, m) in cui ABij = k=1 Aik Bkj . Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica 11 Gennaio 2011 27 / 31 Esercizi su array multidimensionali e di riepilogo Outline 1 Array 2 Esercizi su array 3 Array multidimensionali 4 Esercizi su array multidimensionali e di riepilogo Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica 11 Gennaio 2011 28 / 31 Esercizi su array multidimensionali e di riepilogo Esercizi su array multidimensionali 1 Scrivere un programma che faccia inserire all’utente una matrice di 4 righe e 3 colonne. Il programma deve poi stampare la riga la cui somma dei valori inseriti è maggiore. 2 Scrivere un programma che inizializzi casualmente una matrice di 5 righe e 3 colonne con valori interi compresi tra 1 e 10. L’utente deve poi inserire un numero compreso tra 0 e 2. Se la colonna avente l’indice indicato dall’utente è quella il cui valor medio è maggiore allora si dovrà stampare a schermo la scritta Hai vinto!. Altrimenti si dovrà stampare a schermo la scritta Hai perso e quale era la colonna vincente. Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica 11 Gennaio 2011 29 / 31 Esercizi su array multidimensionali e di riepilogo Esercizi di riepilogo 1 Scrivere un programma che prenda in input dall’utente un array di 5 elmenti interi e lo “ruoti”. Ovvero, l’elemento in posizione i viene messo in posizione i + 1 e l’elemento in ultima posizione viene messo in prima. 2 Scrivere un programma che prenda in input dall’utente un intero positivo n ed inizializzi un array di lunghezza n con valori casuali compresi tra −10 e 10. Si stampi in output la media dei valori del vettore. 3 Scrivere un programma che inizializzi casualmente due matrici A e B di 5 righe e 5 colonne. Devono poi venire stampati in output A, B, A + B e A − B. Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica 11 Gennaio 2011 30 / 31 Esercizi su array multidimensionali e di riepilogo Esercizi su array multidimensionali Relazioni binarie Una relazione R ⊆ {1, . . . , n} × {1, . . . , n} può essere rappresentata da una array bidimensionale R di valori booleani in cui R[i][j] è true se e solo se (i + 1, j + 1) ∈ R. Si scriva un programma che inizializzi casualmente un array di booleani di n per n elementi (fare inserire il valore n all’utente). Il programma dovrà dire se la relazione cosı̀ generata è: Riflessiva (∀a ∈ {1, . . . , n} (a, a) ∈ R). Simmetrica ((a, b) ∈ R ⇒ (b, a) ∈ R). Transitiva ((a, b), (b, c) ∈ R ⇒ (a, c) ∈ R). Antisimmetrica ((a, b) ∈ R con a 6= b ⇒ (b, a) ∈ / R). Luca Manzoni, Stefano Beretta (DISCo) Laboratorio di Matematica e Informatica 11 Gennaio 2011 31 / 31