DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Array n-dimensionali
e tipi di dati strutturati
Marco D. Santambrogio – [email protected]
Ver. aggiornata al 5 Novembre 2013
Info di servizio
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• Demo 1mo compitino
 In LM5 @ 12pm - venerdì 8 Nov
 In L06 @ 6.30pm – martedì 12 Nov
• Correzione demo
 In LM5 @ 12pm – venerdì 15 Nov
2
Obiettivi
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• Array n-dimensionali: le matrici
• Dichiarazione di nuovi tipi di dato
• Dato strutturati
3
Immagini
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
17
11
28
07
09
12
Come si rappresenta?
Creiamo una griglia
(aka matrice)
100
Ma cosa contiene la matrice?
I punti rappresentati, ad esempio, come int
100
100
Osservazioni
57
Come aumento la risoluzione?
Come rappresento i colori?
Lo vedremo dopo la pausa…
4
Array a più dimensioni
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• 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…
5
Excursus Matematico – Le Matrici
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
•
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 jesima
•
I vettori si possono considerare matrici con una sola riga o una sola
colonna (detti più precisamente vettore riga e vettore colonna)
6
Le Matrici: gli elementi
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
•
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.
7
Le Matrici: somma
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• 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
8
Somma di matrici
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
c[i][j] = a[i][j] + b[i][j]
0
1
2
3
0
3
7
10
0
1
1
3
11
2
2
5
8
9
24
+
0
2
1
0
5
1
7
9
6
2
2
5
1
2
4
=
0
5
8
10
5
1
8
12
17
4
2
10
9
11
28
#include <stdio.h>
#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;
}
9
Le Matrici: moltiplicazione per uno scalare
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• È 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.
10
Le Matrici: moltiplicazione tra matrici
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
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
11
Le Matrici: moltiplicazione - esempio
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
12
Prodotto di matrici
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
0
1
2
3
0
3
7
10
0
1
1
3
11
2
2
5
8
9
24
0
1
2
3
4
2
1
0
4
3
7
9
6
1
2
5
1
2
5
0
11
0
3
8
7
*
0
1
2
c[1][2] =∑(a[1][k]*b[k][2]),
con k = 0, ..., 3
3
0
1
2
3
#define N 3
#define M 4
0
#define L 5
18+
1
22+6
.....
for (i=0; i<N; i++){
2
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”);
}
4
13
Pausa 15’
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
14
Come rappresento un pixel?
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Il pixel è Il colore
Come ottengo il verde?
Con il formato RGB
R: 91
G: 191
B: 33
PIXEL = {R, G, B}
15
Tipi di dati strutturati: pixel
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
struct pixel{
char G;
char R;
char B;
};
16
Tipi di dati strutturati
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
struct miastruttura
{
char campo1;
float campo2;
int campo3[2];
};
miastruttura
?
campo1
?
?
?
campo2
campo3
17
Definire un nuovo tipo
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Sinonimi:
typedef int Intero;
Intero a;
int b;
typedef char Stringa[10];
Stringa c;
char d[10];
Tipi enumerativi:
typedef enum {lun,mar,mer,gio,ven,sab,dom} Settimana;
Settimana giorno;
giorno = lun;
giorno = 3;
/* 3 equivale a gio */
Non funziona con scanf() e printf().
18
Definire un nuovo tipo
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Tipi strutturati:
typedef struct
{
char campo1;
float campo2;
int campo3[2];
} Record;
ilMioRecord
?
A
campo1
?
24.56
?
23
?
45
campo2
campo3
Record ilMioRecord;
ilMioRecord.campo1 = 'A';
ilMioRecord.campo2 = 24.56;
ilMioRecord.campo3[0] = 23;
ilMioRecord.campo3[1] = 45;
19
Numeri complessi: problema
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• L’utente inserisce due numeri complessi
(parte reale e parte immaginaria) e
l’elaboratore esegue l’operazione di
somma
 Es: 3+4i + 5-6i = 8-2i
• Il programma chiede all’utente se vuole
calcolare un’altra somma. Se l’utente
inserisce il carattere ‘q’ il programma
termina, altrimenti ricomincia daccapo.
20
Numeri complessi
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
21
Numeri complessi: note
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
"%f" stampa un numero float con il
segno “-” se è negativo, senza segno se
è positivo
"%+f" stampa un numero float con il
segno “-” se è negativo, con il segno
“+” se è positivo
"i" non fa parte degli specificatori di
formato
22
Schedine: problema
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• Il programma, partendo da un array di
dimensione prefissata che contiene in ogni
cella:
 data della giocata
 colonna con i tredici segni
• Copia in un altro vettore solo le giocate
dell’anno 2012
• Quindi, visualizza queste giocate.
23
Schedine: dati
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
24
Schedine: inserimento dati
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
25
Schedine: copia valori
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
26
Schedine: stampa dei risultati
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
27
Problemi di fine giornata…
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• Si scriva un programma che visualizzi gli
istogrammi verticalmente:
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
19
0
*
*
*
3
1
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
15
2
*
*
*
*
*
*
*
7
3
*
*
*
*
*
*
*
*
*
*
*
11
4
*
*
*
*
*
*
*
*
*
9
5
*
*
*
*
*
*
*
*
*
*
*
*
*
13
6
*
*
*
*
*
5
7
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
17
8
*
1
9
28
Fonti per lo studio + Credits
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• Fonti per lo studio
 Informatica arte e mestiere, S. Ceri, D.
Mandrioli, L. Sbattella, McGrawHill
• Credits
 Vito Perrone, Daniele Braga
29
Scarica

PPT - V2 - Dipartimento di Elettronica ed informazione