DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Array n-dimensionali
e tipi di dati strutturati
Marco D. Santambrogio – [email protected]
Ver. aggiornata al 3 Aprile 2014
Feedback Lezioni
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
E' importante dare enfasi sull'aspetto più
'generale' delle funzioni, non 'fare solo pura
sintassi del C".
Secondo il mio onesto parere forse un po'
però questa sintassi si sta trascurando.
A lezione sembra tutto più o meno
chiaro...poi quando arrivo a casa e devo
applicare non so da dove iniziare a scrivere il
codice, pur avendo magari l'algoritmo già
fatto.
2
Feedback Lezioni
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
3
Feedback Lezioni
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
4
Obiettivi
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• Array n-dimensionali: le matrici
• Dichiarazione di nuovi tipi di dato
• Dato strutturati
5
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…
6
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…
7
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)
8
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.
9
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
10
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;
}
11
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.
12
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
13
Le Matrici: moltiplicazione - esempio
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
14
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
15
Pausa 15’
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
16
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}
17
Tipi di dati strutturati: pixel
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
struct pixel{
char G;
char R;
char B;
};
18
Tipi di dati strutturati
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
struct miastruttura
{
char campo1;
float campo2;
int campo3[2];
};
miastruttura
?
campo1
?
?
?
campo2
campo3
19
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().
20
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;
21
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.
22
Numeri complessi: completo
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
23
Numeri complessi: dati
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
24
Numeri complessi: Input
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
25
Numeri complessi: calcolo
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
26
Numeri complessi: Struct != Typedef
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
27
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
28
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 2010
• Quindi, visualizza queste giocate.
29
Schedine: dati
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
30
Schedine: inserimento dati
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
31
Schedine: copia valori
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
32
Schedine: stampa dei risultati
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
33
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
34
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
35
Scarica

PPT - V3