DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array, matrici Marco D. Santambrogio –...

28
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array, matrici Array, matrici Marco D. Santambrogio – [email protected] Ver. aggiornata al 21 Marzo 2013

Transcript of DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array, matrici Marco D. Santambrogio –...

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Array, matriciArray, matrici

Marco D. Santambrogio – [email protected]. aggiornata al 21 Marzo 2013

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

WAT?WAT?

Questa volta… Questa volta…

… … non ce ne sono non ce ne sono

2

WAT

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

ObiettiviObiettivi

• Gli array, questi sconosciuti• Gli array in C• Array n-dimensionali

3

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Frase… insieme di Frase… insieme di carattericaratteri

• 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

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

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 dell’array La posizione dell’elemento (indice)

• Sintassi: <nomearray>[<posizione>] Il primo elemento ha indice 0 L’n° elemento dell’array 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 arrayGli array

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

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]);

> 17 vett[1] assume valore 17

• Si possono usare espressioni come indici:se x 3

vett[52] è equivalente a vett[3]ed è equivalente a vett[x]

Gli arrayGli array

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

La gara di nuoto: La gara di nuoto: con con salvataggiosalvataggio

• Problema Si hanno10 giudici

• 1 giudice = 1 voto Si vogliono memorizzare i 10 voti, per

poterli rileggere Ogni voto è nell’itervallo 0-10 Dato un tuffo, calcolare

• La media dei voti• Il voto massimo ed il voto minimo

7

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Come Come salvaresalvare i voti... i voti...

8

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Un primo incontro con gli Un primo incontro con gli arrayarray

• 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

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

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 0int n[5] {13}; tutti gli altri elementi sono posti a

0 Specificare troppi elementi tra le graffe è un errore di

sintassi

• Se la lunghezza dell’array è 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 nell’array

Inizializzazione di un arrayInizializzazione di un array

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

11

• Si opera sui singoli elementi, uno per volta• Non è possibile operare sull’intero 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 arrayOperazioni sugli array

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

12

Problema: sequenza di Problema: sequenza di interiinteri

• Mostrare una sequenza di 10 interi nell'ordine inverso rispetto a quello con cui è stata introdotta dall’utente Con un array? Senza array?

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Sequenza: Sequenza: possibile soluzionepossibile soluzione

13

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

14

• In testa al programma:#define LUNG_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 dell’array, 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 "Generalizziamo" con la direttiva ##definedefine

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Sequenza con Sequenza con definedefine

15

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

16

Problema: ???Problema: ???

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

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 Output del programmaprogramma

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Pausa 10’Pausa 10’

18

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

ImmaginiImmagini

19

Come si rappresenta?Creiamo una griglia(aka matrice)

Ma cosa contiene la matrice?I punti rappresentati, ad esempio, come int

100100

100

57

17 11 07

28 09 12

Osservazioni

Come rappresento i colori?Lo vedremo domani…

Come aumento la risoluzione?

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

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 202030 variabili di tipo float

(12.000!)

• Oppure a quattro dimensioni, ecc…

Array a più dimensioniArray a più dimensioni

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Excursus Matematico – Le Excursus Matematico – Le MatriciMatrici

• 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 aij 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 ai,j può essere indicato anche come A[i,j]. La notazione A = (ai,j) indica che A è una matrice e che i suoi elementi sono denotati con ai,j

• Gli elementi con i due indici di riga e di colonna uguali, cioè gli elementi della forma aii costituiscono la diagonale principale della matrice.

21

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Excursus Matematico – Le Excursus Matematico – Le MatriciMatrici

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: = Ai,j + Bi,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: = cAi,j. Esempio:

22

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Excursus Matematico – Le Excursus Matematico – Le MatriciMatrici

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

• L’elemento di posizione (i,j) è dato dalla somma

23

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Excursus Matematico – Le Excursus Matematico – Le MatriciMatrici

24

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Somma di matriciSomma di matrici

3 7 10 0

1 3 11 2

5 8 9 24

0

1

2

0 1 2 3

2 1 0 5

7 9 6 2

5 1 2 4

+

=

5 8 10 5

8 12 17 4

10 9 11 28

c[i][j] = a[i][j] + b[i][j]#include <stdio.h>#define N 3#define M 4int main() { int a[N][M], b[N][M], c[N][M];

int i, j;//leggo la prima matricefor (i=0; i<N; i++) for (j=0; j<M; j++) scanf(“%d”, &a[i][j]);

//leggo la seconda matricefor (i=0; i<N; i++) for (j=0; j<M; j++) scanf(“%d”, &b[i][j]); //calcolo e stampo la sommafor (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

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Prodotto di matriciProdotto 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”);

}

3 7 10 0

1 3 11 2

5 8 9 24

0

1

2

0 1 2 3

3

*

0

1

2

c[1][2] =∑(a[1][k]*b[k][2]), con k = 0, ..., 3

2 1 0 4 3

7 9 6 1 2

5 1 2 5 0

11 0 3 8 7

0 1 2 3 4

18+22+6

0

1

2

0 1 2 3 4

26

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

27

Problemi di fine giornata…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

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Fonti per lo studio + Fonti per lo studio + CreditsCredits• 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