AN FI Array Collezioni di dati uniformi in tipo Array
AN FI 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 u Una funzione dal dominio dellindice al dominio degli elementi
AN FI Array ARRAY (vettori) Un array è una collezione finita di N variabili dello stesso tipo, ognuna identificata da un indice compreso fra 0 e N-1 v 0123 v[0] v[1] v[2] v[3]
AN FI Array A[i] detto A lidentificatore che denota un array di 10 elementi, la notazione A[i] ( 0<=i<=9 ) può essere interpretata come lapplicazione della funzione A con argomento i, che restituisce il valore della i-ma componente di A
AN FI Array Definizione di array in C [ ] int a[4]; Viene allocata memoria equivalente a 4 variabili di tipo int. aa[0] a[1] a[2] a[3]
AN FI Array Inizializzazione di array in C int a[3] = {10,20,30}; inizializza il blocco di memoria associato ad a u int a[] = {10,20,30}; 30 a a[0] a[1] a[2]
AN FI Array Array name in C il simbolo a viene usato come sinonimo del riferimento alla prima cella del blocco riservato per l'array. a è sinomimo di 30 a a[0] a[1] a[2]
AN FI Array Uso degli array u Accesso alle componenti u Trasmissione di un array ad una funzione o procedura u Restituzione di una array da parte di una funzione o procedura
AN FI Array Accesso alle componenti a[i] valutazione dell'espressione a+i, con le regole dellaritmetica dei puntatori, che produce l'indirizzo della prima cella che rappresenta la variabile i ma dell'array
AN FI Array A[i] in C int a[3] = {10,20,30}; a [2] : valore della cella a +2 = + 2 = 30 a a[0] a[1] a[2]
AN FI Array Trasferimento di array a funzioni u In C gli argomenti delle funzioni possono essere dichiarati come array tipoOut f(tipoIn m[],int n){ …} m può ricevere un qualunque array di elementi di tipo compatibile con tipoIn concettualmente di dimensione fisica superiore o uguale al valore attuale specificato per n
AN FI Array Trasferimento di array a funzioni u I vettori non vengono mai trasferiti per copia, ma solo per riferimento. – sono trasferiti per copia i riferimenti u In C una funzione non può restituire come informazione di uscita un array.
AN FI Array ESEMPIO Codifica: #define DIM 4 main() { int v[DIM] = {43,12,7,86}; int i, max=v[0]; for (i=1; i<DIM; i++) if (v[i]>max) max = v[i]; /* ora max contiene il massimo */ } Espressione di inizializzazione di un array
AN FI Array ESEMPIO Codifica: #define DIM 4 main() { int v[] = {43,12,7,86}; int i, max=v[0]; for (i=1; i<DIM; i++) if (v[i]>max) max = v[i]; /* ora max contiene il massimo */ } Se vi è una inizializzazione esplicita, la dimensione del- larray può essere omessa!
AN FI Array ESEMPIO - UNA VARIANTE Anziché inizializzare larray a priori, calcoliamo i valori iniziali come parte dellalgoritmo. #define DIM 4 main() { int i, max, v[DIM]; for (i=0; i<DIM; i++) v[i]=i+1; for (max=v[0], i=1; i<DIM; i++) if (v[i]>max) max = v[i]; } Nessuna inizializzazione Calcolo valori iniziali Inizializzazione di due variabili
AN FI Array DIMENSIONE FISICA vs. LOGICA Un array è una collezione finita di N celle dello stesso tipo Questo non significa che si debba per forza usarle sempre tutte! La dimensione logica di un array può essere inferiore (mai superiore!) alla sua dimensione fisica Spesso, la porzione di array realmente uti- lizzata dipende dai dati dingresso.
AN FI Array DIMENSIONE FISICA vs. LOGICA Esempio È data una serie di rilevazioni di temperature espresse in gradi Kelvin. Ogni serie è composta di al più 10 valori, ma può essere più corta. Il valore -1 indica che la serie delle temperature è finita. Scrivere un programma che, data una serie di temperature memorizzata in un vettore, calcoli la media delle temperature fornite.
AN FI Array DIMENSIONE FISICA vs. LOGICA Esempio È data una serie di rilevazioni di temperature espresse in gradi Kelvin. Ogni serie è composta di al più 10 valori, ma può essere più corta. Il valore -1 indica che la serie delle temperature è finita. Scrivere un programma che, data una serie di temperature memorizzata in un vettore, calcoli la media delle temperature fornite. Il vettore deve essere dimensionato per 10 celle (caso peggiore)... … ma la porzione realmente usata può essere minore!
AN FI Array Dimensionamento locale u Una funzione (procedura) può definire variabili locali che rappresentano array u La dimensione di un array locale deve essere denotata da una costante: int f( int n){ int a[n];... }
AN FI Array ESEMPIO Problema: È dato un vettore di al più 10 interi non negativi, che rappresentano temperature in gradi Kelvin. Calcolare la media delle temperature fornite. Specifica di I livello: calcolare la somma di tutti gli elementi del vettore, e nel frattempo contare quanti sono il risultato è il rapporto fra la somma degli elementi così calcolata e il numero degli elementi.