La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array, matrici Marco D. Santambrogio – Ver. aggiornata al 21 Marzo 2013.

Presentazioni simili


Presentazione sul tema: "DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array, matrici Marco D. Santambrogio – Ver. aggiornata al 21 Marzo 2013."— Transcript della presentazione:

1 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array, matrici Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al 21 Marzo 2013

2 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONEWAT? Questa volta… … non ce ne sono 2 WAT

3 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONEObiettivi Gli array, questi sconosciuti Gli array in C Array n-dimensionali 3

4 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Frase… insieme di caratteri Che cosa è una frase? Un insieme di caratteri Come la rappresento? Un insieme, di tante variabili carattere? Una variabile, insieme di caratteri? supercali fragili stiche spiralidoso 4

5 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 5 Gruppi di celle consecutive Rappresentano gruppi di variabili con lo stesso nome e lo stesso tipo Per riferirsi a un elemento, si specificano: Il nome dellarray La posizione dellelemento (indice) Sintassi: [ ] Il primo elemento ha indice 0 Ln° elemento dellarray v è v[n-1] v[6] -45 6 0 72 1543 -89 0 62 -3 1 6453 78 dichiarazione v[0] v[1] v[2] v[3] v[11] v[10] v[9] v[8] v[7] v[5] v[4] posizione elemento int v[12]; nome array Gli array

6 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 6 Gli elementi di un array sono normali variabili: vett[0] 3; printf("%d", vett[0]); > 3 scanf("%d", &vett[1]); > 17vett[1] assume valore 17 Si possono usare espressioni come indici: se x 3 vett[5 2] è equivalente a vett[3] ed è equivalente a vett[x] Gli array

7 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE La gara di nuoto: con salvataggio Problema Si hanno10 giudici 1 giudice = 1 voto Si vogliono memorizzare i 10 voti, per poterli rileggere Ogni voto è nellitervallo 0-10 Dato un tuffo, calcolare La media dei voti Il voto massimo ed il voto minimo 7

8 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Come salvare i voti... 8

9 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Un primo incontro con gli array Array: collezione di dati omogenei Dichiare il tipo dei suoi dati Dichiarare la sua dimensione Come si accede ai dati di un array? Come a normali variabili Esempio di scrittura Esempio di lettura 9

10 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 10 Sintassi compatta: int n[5] {1, 2, 3, 4, 5}; Inizializzazione parziale: gli elementi più a destra sono posti a 0 int n[5] {13}; tutti gli altri elementi sono posti a 0 Specificare troppi elementi tra le graffe è un errore di sintassi Se la lunghezza dellarray è omessa, gli inizializzatori la determinano: int n[] {5, 47, 2, 0, 24}; è equivalente a: int n[5] {5, 47, 2, 0, 24}; In tal caso la dimensione è inferita automaticamente, e si avranno 5 elementi nellarray Inizializzazione di un array

11 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 11 Si opera sui singoli elementi, uno per volta Non è possibile operare sullintero array, agendo su tutti gli elementi simultaneamente / come ricopiare array1 in array2 / int array1[10], array2[10]; int i;... array2 array1;/ ERRATO /... for( i 0; i 10; i ) array2[i] array1[i];/ CORRETTO / Operazioni sugli array

12 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 12 Problema: sequenza di interi Mostrare una sequenza di 10 interi nell'ordine inverso rispetto a quello con cui è stata introdotta dallutente Con un array? Senza array?

13 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Sequenza: possibile soluzione 13

14 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 14 In testa al programma: #defineLUNG_SEQ 100 Così possiamo adattare la lunghezza del vettore alle eventuali mutate esigenze senza riscrivere la costante 100 in molti i punti del programma Il preprocessore sostituisce nel codice LUNG_SEQ con 100 prima della compilazione La lunghezza dellarray, quindi, anche in questo caso è decisa al momento della compilazione del programma Nella dichiarazione degli array non si usano mai variabili per specificarne la dimensione "Generalizziamo" con la direttiva #define

15 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Sequenza con define 15

16 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 16 Problema: ???

17 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Element Value Histogram 0 19 ******************* 1 3 *** 2 15 *************** 3 7 ******* 4 11 *********** 5 9 ********* 6 13 ************* 7 5 ***** 8 17 ***************** 9 1 * Output del programma

18 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Pausa 10 18

19 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONEImmagini 19 Come si rappresenta? Creiamo una griglia (aka matrice) Ma cosa contiene la matrice? I punti rappresentati, ad esempio, come int 100 57 17 11 07 28 09 12 Osservazioni Come rappresento i colori? Lo vedremo domani… Come aumento la risoluzione?

20 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 20 Gli array a 1D realizzano i vettori, quelli a 2D realizzano le matrici, …e così via Dichiarazione: int A[20][30]; A è una matrice di 20 30 elementi interi (600 variabili distinte) float F[20][20][30]; F è una matrice 3D di 20 20 30 variabili di tipo float (12.000!) Oppure a quattro dimensioni, ecc… Array a più dimensioni

21 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Excursus Matematico – Le Matrici In matematica, una matrice è uno schieramento rettangolare di oggetti (di solito numeri), organizzati in righe (orizzontali) e colonne (verticali) In generale, una matrice ha m righe e n colonne, con m e n interi positivi fissati. Spesso una matrice è descritta indicando con a ij il generico elemento posizionato alla riga i-esima e alla colonna j-esima I vettori si possono considerare matrici con una sola riga o una sola colonna (detti più precisamente vettore riga e vettore colonna) Se la matrice si chiama A, l'elemento a i,j può essere indicato anche come A[i,j]. La notazione A = (a i,j ) indica che A è una matrice e che i suoi elementi sono denotati con a i,j Gli elementi con i due indici di riga e di colonna uguali, cioè gli elementi della forma a ii costituiscono la diagonale principale della matrice. 21

22 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Excursus Matematico – Le Matrici Somma Due matrici A e B si possono sommare se hanno le stesse dimensioni La loro somma A + B è definita come la matrice i cui elementi sono ottenuti sommando i corrispettivi elementi di A e B. Formalmente: (A + B) i,j : = A i,j + B i,j Per esempio Moltiplicazione per uno scalare È un'operazione che, data una matrice A ed un numero c (detto scalare), costruisce una nuova matrice cA, il cui elemento è ottenuto moltiplicando l'elemento corrispondente di A per c (cA) ij : = cA i,j. Esempio: 22

23 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Excursus Matematico – Le Matrici Prodotto riga per colonna La moltiplicazione tra due matrici A e B è un'operazione più complicata delle precedenti. A differenza della somma, non è definita sommando semplicemente gli elementi aventi lo stesso posto La definizione di moltiplicazione che segue è motivata dal fatto che una matrice modellizza una applicazione lineare, e in questo modo il prodotto di matrici corrisponde alla composizione di applicazioni lineari La moltiplicazione è definita soltanto se il numero di righe di B coincide con il numero n di colonne di A. Il risultato è una matrice con lo stesso numero di righe di A e lo stesso numero di colonne di B Lelemento di posizione (i,j) è dato dalla somma 23

24 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Excursus Matematico – Le Matrici 24

25 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Somma di matrici 37100 13112 58924 0 1 2 0123 2105 7962 5124 + = 58105 812174 1091128 c[i][j] = a[i][j] + b[i][j] #i nclude #define N 3 #define M 4 int main() { int a[N][M], b[N][M], c[N][M]; int i, j; //leggo la prima matrice for (i=0; i<N; i++) for (j=0; j<M; j++) scanf(%d, &a[i][j]); //leggo la seconda matrice for (i=0; i<N; i++) for (j=0; j<M; j++) scanf(%d, &b[i][j]); //calcolo e stampo la somma for (i=0; i<N; i++){ for (j=0; j<M; j++){ c[i][j]=a[i][j]+b[i][j]; printf(%d, c[i][j]); } printf(\n); } return 0; } 0 1 2 0 1 2 25

26 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Prodotto di matrici #define N 3 #define M 4 #define L 5..... for (i=0; i<N; i++){ for (j=0; j<L; j++){ c[i][j] = 0; for (k=0; k<M; k++) c[i][j] = c[i][j]+(a[i][k]*b[k][j]); printf(%d, c[i][j]); } printf(\n); } 37100 13112 58924 0 1 2 0123 3 * 0 1 2 c[1][2] = ( a[1][k]*b[k][2]), con k = 0,..., 3 21043 79612 51250 110387 01234 18+ 22+6 0 1 2 01234 26

27 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 27 Problemi di fine giornata… Si scriva un programma che visualizzi gli istogrammi verticalmente: * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 19 3 15 7 11 9 13 5 17 1 0 1 2 3 4 5 6 7 8 9

28 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Fonti per lo studio + Credits Fonti per lo studio Informatica arte e mestiere, S. Ceri, D. Mandrioli, L. Sbattella, McGrawHill Capitolo 5 Credits Daniele Braga - http://home.dei.polimi.it/braga/ 28


Scaricare ppt "DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array, matrici Marco D. Santambrogio – Ver. aggiornata al 21 Marzo 2013."

Presentazioni simili


Annunci Google