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
Scarica

Laboratorio di Matematica e Informatica