AN FI 98-99 Array Collezioni di dati uniformi in tipo Array.
-
Upload
tatiana-battaglia -
Category
Documents
-
view
222 -
download
1
Transcript of AN FI 98-99 Array Collezioni di dati uniformi in tipo Array.
![Page 1: AN FI 98-99 Array Collezioni di dati uniformi in tipo Array.](https://reader036.fdocuments.us/reader036/viewer/2022062319/5542eb5a497959361e8c67ba/html5/thumbnails/1.jpg)
AN FI 98-99 Array
Collezioni di dati uniformi in tipo
Array
![Page 2: AN FI 98-99 Array Collezioni di dati uniformi in tipo Array.](https://reader036.fdocuments.us/reader036/viewer/2022062319/5542eb5a497959361e8c67ba/html5/thumbnails/2.jpg)
AN FI 98-99 Array
Array
Una collezione di dimensione prefissata di variabili anonime dello stesso tipo, ciascuna selezionabile attraverso una notazione ad indice – La prima componente viene
referenziata con indice 0 Una funzione dal dominio dell’indice
al dominio degli elementi
![Page 3: AN FI 98-99 Array Collezioni di dati uniformi in tipo Array.](https://reader036.fdocuments.us/reader036/viewer/2022062319/5542eb5a497959361e8c67ba/html5/thumbnails/3.jpg)
AN FI 98-99 Array
A[i]
detto A l’identificatore che denota un array di 10 elementi, la notazione A[i] (0<=i<=9) puo’ essere interpretata come l’applicazione della funzione A con argomento i, che restituisce il valore della i-ma componente di A
![Page 4: AN FI 98-99 Array Collezioni di dati uniformi in tipo Array.](https://reader036.fdocuments.us/reader036/viewer/2022062319/5542eb5a497959361e8c67ba/html5/thumbnails/4.jpg)
AN FI 98-99 Array
Definizione di array in C
<tipo> <var>[<esprIntera>]
int a[4];
Viene allocata memoria equivalente a 4 variabili di tipo int.
a a[0]a[1]
a[2]a[3]
![Page 5: AN FI 98-99 Array Collezioni di dati uniformi in tipo Array.](https://reader036.fdocuments.us/reader036/viewer/2022062319/5542eb5a497959361e8c67ba/html5/thumbnails/5.jpg)
AN FI 98-99 Array
Inizializzazione di array in C
int a[3] = {10,20,30};
inizializza il blocco di memoria associato ad a
30
a
20
10
a[0]a[1]
a[2]
![Page 6: AN FI 98-99 Array Collezioni di dati uniformi in tipo Array.](https://reader036.fdocuments.us/reader036/viewer/2022062319/5542eb5a497959361e8c67ba/html5/thumbnails/6.jpg)
AN FI 98-99 Array
Array name in C
il simbolo a viene usato come sinonimo del riferimento alla prima cella del blocco riservato per l'array.
a e’ sinomimo di 30
a
20
10
a[0]a[1]
a[2]
![Page 7: AN FI 98-99 Array Collezioni di dati uniformi in tipo Array.](https://reader036.fdocuments.us/reader036/viewer/2022062319/5542eb5a497959361e8c67ba/html5/thumbnails/7.jpg)
AN FI 98-99 Array
Dichiarazione di array in Java
<tipo> <var>[ ]; //oppure <tipo>[] <var>;
int a[];int[] a; La dimensione non e’ specificata. Alla variabile a viene associato il
valore-riferimento nulla null
![Page 8: AN FI 98-99 Array Collezioni di dati uniformi in tipo Array.](https://reader036.fdocuments.us/reader036/viewer/2022062319/5542eb5a497959361e8c67ba/html5/thumbnails/8.jpg)
AN FI 98-99 Array
Inizializazione di array in Java
int a[] = {10,20,30};//oppure
int[] a = {10,20,30}; associa alla variabile a l'indirizzo di
partenza del blocco di memoria allocato nell’heap che contiene la rappresentazione binaria dei tre valori interi specificati.
crea (concettualmente) una nuova classe di dati
![Page 9: AN FI 98-99 Array Collezioni di dati uniformi in tipo Array.](https://reader036.fdocuments.us/reader036/viewer/2022062319/5542eb5a497959361e8c67ba/html5/thumbnails/9.jpg)
AN FI 98-99 Array
Inizializzazione di array in Java
a
30
20
10
a[0]a[1]
a[2]
![Page 10: AN FI 98-99 Array Collezioni di dati uniformi in tipo Array.](https://reader036.fdocuments.us/reader036/viewer/2022062319/5542eb5a497959361e8c67ba/html5/thumbnails/10.jpg)
AN FI 98-99 Array
Array name in Java
il simbolo a denota una normale variabile il cui valore e' un riferimento (a un oggetto-array)
![Page 11: AN FI 98-99 Array Collezioni di dati uniformi in tipo Array.](https://reader036.fdocuments.us/reader036/viewer/2022062319/5542eb5a497959361e8c67ba/html5/thumbnails/11.jpg)
AN FI 98-99 Array
Accesso alle componenti a[i]
in Java: dereferenziamento della variabile a e
indirizzamento della prima cella che rappresenta la variabile ima dell'array.
in C:– valutazione dell'espressione a+i, con le
regole dell’aritmetica dei puntatori, che produce l'indirizzo della prima cella che rappresenta la variabile ima dell'array
![Page 12: AN FI 98-99 Array Collezioni di dati uniformi in tipo Array.](https://reader036.fdocuments.us/reader036/viewer/2022062319/5542eb5a497959361e8c67ba/html5/thumbnails/12.jpg)
AN FI 98-99 Array
A[i] in C
int a[3] = {10,20,30};
a[2] : valore della cella a+2 = + 2 =
30
a
20
10
a[0]a[1]
a[2]
![Page 13: AN FI 98-99 Array Collezioni di dati uniformi in tipo Array.](https://reader036.fdocuments.us/reader036/viewer/2022062319/5542eb5a497959361e8c67ba/html5/thumbnails/13.jpg)
AN FI 98-99 Array
Trasferimento di array a funzioni
Sia in C che in Java gli argomenti delle funzioni possono essere dichiarati come array
tipoOut f(tipoIn m[],int n){
… } m puo’ ricevere un qualunque array di
elementi di tipo compatibile con tipoIn di dimensione fisica inferiore o uguale al valore attuale specifcato per n
![Page 14: AN FI 98-99 Array Collezioni di dati uniformi in tipo Array.](https://reader036.fdocuments.us/reader036/viewer/2022062319/5542eb5a497959361e8c67ba/html5/thumbnails/14.jpg)
AN FI 98-99 Array
Trasferimento di array a funzioni
I vettori non vengono mai trasferiti per copia, ne' in C ne' in Java
Sia in Java che in C si trasmette un riferimento. – sono trasferiti per copia i riferimenti
![Page 15: AN FI 98-99 Array Collezioni di dati uniformi in tipo Array.](https://reader036.fdocuments.us/reader036/viewer/2022062319/5542eb5a497959361e8c67ba/html5/thumbnails/15.jpg)
AN FI 98-99 Array
Esempio (java)
int sumArray(int a[], int n){
retun( n==0 ) ? a[0] :
a[n]+sumArray(a,n-1);
}
![Page 16: AN FI 98-99 Array Collezioni di dati uniformi in tipo Array.](https://reader036.fdocuments.us/reader036/viewer/2022062319/5542eb5a497959361e8c67ba/html5/thumbnails/16.jpg)
AN FI 98-99 Array
SumArray (java)
int testArray(){
int v1[] = {10,20,30};
int v2[] = {10,20,30,40};
return sumArray(v1,v1.length-1)
+
sumArray(v2,v2.length-1) ; }
![Page 17: AN FI 98-99 Array Collezioni di dati uniformi in tipo Array.](https://reader036.fdocuments.us/reader036/viewer/2022062319/5542eb5a497959361e8c67ba/html5/thumbnails/17.jpg)
AN FI 98-99 Array
Versione con processo iterativo
int sumArray(int a[],int n, int v){//v e’ la somma degli elementi dall’ultimo ad a[n+1]
// inizialmente, n vale a.length-1, v vale 0
if( n==0 ) return a[0]+v;
else
return sumArray(a,n-1,a[n]+v); }
![Page 18: AN FI 98-99 Array Collezioni di dati uniformi in tipo Array.](https://reader036.fdocuments.us/reader036/viewer/2022062319/5542eb5a497959361e8c67ba/html5/thumbnails/18.jpg)
AN FI 98-99 Array
Valutazione di un polinomio
an * xn + an-1 * xn-1 + ... a1* x + a0* x0 =
( ... ( ( an*x + an-1) *x + an-2 ) * x + ... + a1)* x + a0
v = an;
v = v * x + ai per i = n-1,…,0
![Page 19: AN FI 98-99 Array Collezioni di dati uniformi in tipo Array.](https://reader036.fdocuments.us/reader036/viewer/2022062319/5542eb5a497959361e8c67ba/html5/thumbnails/19.jpg)
AN FI 98-99 Array
Valutazione di un polinomio (java)
double horner(double x,double[] a){
return
pol(x,a,a.length-1,a[a.length-1]);
}
![Page 20: AN FI 98-99 Array Collezioni di dati uniformi in tipo Array.](https://reader036.fdocuments.us/reader036/viewer/2022062319/5542eb5a497959361e8c67ba/html5/thumbnails/20.jpg)
AN FI 98-99 Array
L’algoritmo di horner
double pol( double x,double[] a,int i, double v){
//x : valore della variabile//a : vettore dei coefficienti//i : indice coefficiente corrente in a che ha determinato v//v : valore iniziale
return (i==0) ? v :pol(x,a,i-1,v*x+a[i-1]);
}
![Page 21: AN FI 98-99 Array Collezioni di dati uniformi in tipo Array.](https://reader036.fdocuments.us/reader036/viewer/2022062319/5542eb5a497959361e8c67ba/html5/thumbnails/21.jpg)
AN FI 98-99 Array
Array come risultati di funzione
In C una funzione non puo' restituire come informazione di uscita un array.
In Java cio’ e’ possibileint[] theSame( int a[] ){return a; } – la funzione restituisce (il riferimento al)
l'array ricevuto in ingresso