Upload
tatiana-battaglia
View
222
Download
1
Embed Size (px)
Citation preview
AN FI 98-99 Array
Collezioni di dati uniformi in tipo
Array
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
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
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]
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]
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]
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
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
AN FI 98-99 Array
Inizializzazione di array in Java
a
30
20
10
a[0]a[1]
a[2]
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)
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
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]
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
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
AN FI 98-99 Array
Esempio (java)
int sumArray(int a[], int n){
retun( n==0 ) ? a[0] :
a[n]+sumArray(a,n-1);
}
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) ; }
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); }
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
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]);
}
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]);
}
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