21
AN FI 98-99 Array Collezioni di dati uniformi in tipo Array

AN FI 98-99 Array Collezioni di dati uniformi in tipo Array

Embed Size (px)

Citation preview

Page 1: AN FI 98-99 Array Collezioni di dati uniformi in tipo Array

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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