Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneria... · Laboratorio di...
Transcript of Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneria... · Laboratorio di...
![Page 1: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneria... · Laboratorio di Informatica Pagina 30 2014/2015 Matrici Unità 7. Prodotto di matrici (1/2) Si scriva un](https://reader036.fdocument.pub/reader036/viewer/2022071004/5fc10c86cafc811b364af702/html5/thumbnails/1.jpg)
Corso di Laboratorio di Informatica
Ingegneria Clinica – BCLR
Unità 7
Matrici
Domenico Daniele Bloisi
![Page 2: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneria... · Laboratorio di Informatica Pagina 30 2014/2015 Matrici Unità 7. Prodotto di matrici (1/2) Si scriva un](https://reader036.fdocument.pub/reader036/viewer/2022071004/5fc10c86cafc811b364af702/html5/thumbnails/2.jpg)
Docente
Ing. Domenico Daniele Bloisi, PhD
Ricercatore
Dipartimento di Ingegneria Informatica, Automatica
e Gestionale “Antonio Ruberti”
Via Ariosto 25
(adiacente Piazza Dante,
Manzoni
Tram 3 fermata via Labicana)
email: [email protected]
home page:
Laboratorio di Informatica
2014/2015
Matrici
Unità 7
Pagina 2
http://www.dis.uniroma1.it/~bloisi
![Page 3: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneria... · Laboratorio di Informatica Pagina 30 2014/2015 Matrici Unità 7. Prodotto di matrici (1/2) Si scriva un](https://reader036.fdocument.pub/reader036/viewer/2022071004/5fc10c86cafc811b364af702/html5/thumbnails/3.jpg)
Ricevimento
In aula, subito dopo le lezioni
Su appuntamento (tramite invio di una email)
presso:
Dipartimento di Ingegneria Informatica,
Automatica e Gestionale “Antonio Ruberti”,
via Ariosto 25 - II piano, stanza A209
Si invitano gli studenti a controllare regolarmente la
bacheca degli avvisi
http://www.dis.uniroma1.it/~bloisi/didattica/labinf1415.html#Avvisi
Pagina 3Laboratorio di Informatica
2014/2015
Matrici
Unità 7
![Page 4: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneria... · Laboratorio di Informatica Pagina 30 2014/2015 Matrici Unità 7. Prodotto di matrici (1/2) Si scriva un](https://reader036.fdocument.pub/reader036/viewer/2022071004/5fc10c86cafc811b364af702/html5/thumbnails/4.jpg)
Orari
Lunedì 12.00 – 13.30
Aula 4, via del Castro Laurenziano 7A
Martedì 14.00 – 17.15
Aula 15, Laboratorio Didattico via Tiburtina 205
Mercoledì 12.00 – 13.30
Aula 4, via via del Castro Laurenziano 7A
Pagina 4Laboratorio di Informatica
2014/2015
Matrici
Unità 7
![Page 5: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneria... · Laboratorio di Informatica Pagina 30 2014/2015 Matrici Unità 7. Prodotto di matrici (1/2) Si scriva un](https://reader036.fdocument.pub/reader036/viewer/2022071004/5fc10c86cafc811b364af702/html5/thumbnails/5.jpg)
Sommario – Unità 7
• Array come collezione di elementi
• Dichiarazione di variabili array
• Creazione di array
• Accesso agli elementi di un array
• Espressioni che rappresentano array
• Passaggio di parametri di tipo array
• Variabili array e puntatori
• Ordinamento degli elementi di un array
• Ricerca tra gli elementi di un array
• Matrici
Pagina 5Laboratorio di Informatica
2014/2015
Matrici
Unità 7
![Page 6: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneria... · Laboratorio di Informatica Pagina 30 2014/2015 Matrici Unità 7. Prodotto di matrici (1/2) Si scriva un](https://reader036.fdocument.pub/reader036/viewer/2022071004/5fc10c86cafc811b364af702/html5/thumbnails/6.jpg)
Variabili array e puntatori
int A[4] = {1, 2, 3, 4};
int *B;
B = A;
int i;
for (i = 0; i < 4; i++)
printf("%d\n", B[i]);
B[0] = 10;
printf("A[0] = %d\n", A[0]);
La variabile array A può essere assegnata a una variabile
puntatore a int B.
Dopo l’assegnazione, B può essere usata come una
variabile array.
Pagina 6Laboratorio di Informatica
2014/2015
Matrici
Unità 7
![Page 7: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneria... · Laboratorio di Informatica Pagina 30 2014/2015 Matrici Unità 7. Prodotto di matrici (1/2) Si scriva un](https://reader036.fdocument.pub/reader036/viewer/2022071004/5fc10c86cafc811b364af702/html5/thumbnails/7.jpg)
Esecuzione
Se eseguito, il frammento di codice precedente produce il
seguente output
1
2
3
4
A[0] = 10
Nota: una variabile array non può essere assegnata a
un’altra variabile array.
Pagina 7Laboratorio di Informatica
2014/2015
Matrici
Unità 7
![Page 8: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneria... · Laboratorio di Informatica Pagina 30 2014/2015 Matrici Unità 7. Prodotto di matrici (1/2) Si scriva un](https://reader036.fdocument.pub/reader036/viewer/2022071004/5fc10c86cafc811b364af702/html5/thumbnails/8.jpg)
Ricerca sequenziale di un elemento in un
arraySi scriva una funzione cercaArray che prenda come
parametri un array di interi a, un intero n (corrispondente alla
dimensione dell’array) e un intero e da ricercare nell’array.
La funzione deve restituire 1 se il valore e è presente
nell’array, 0 altrimenti:
int cercaArray(int a[], int n, int e) {
int i;
for (i = 0; i < n; i++) {
if (e == a[i])
return 1; //true
}
return 0; //false
}Pagina 8Laboratorio di Informatica
2014/2015
Matrici
Unità 7
![Page 9: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneria... · Laboratorio di Informatica Pagina 30 2014/2015 Matrici Unità 7. Prodotto di matrici (1/2) Si scriva un](https://reader036.fdocument.pub/reader036/viewer/2022071004/5fc10c86cafc811b364af702/html5/thumbnails/9.jpg)
Esempio d’uso
int main() {
const int n = 3;
int x[n];
x[0] = 1; x[1] = 2; x[2] = 3;
printf("Array-x:\n");
int i;
for (i = 0; i < n; i++)
printf("%d\n", x[i]);
// cerca il valore 2 nell’array x
if ( cercaArray(x, n, 2) ) {
// l’elemento è stato trovato
printf("trovato\n");
}
else {
// l’elemento non è stato trovato
printf("non trovato\n");
}
}
Pagina 9Laboratorio di Informatica
2014/2015
Matrici
Unità 7
![Page 10: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneria... · Laboratorio di Informatica Pagina 30 2014/2015 Matrici Unità 7. Prodotto di matrici (1/2) Si scriva un](https://reader036.fdocument.pub/reader036/viewer/2022071004/5fc10c86cafc811b364af702/html5/thumbnails/10.jpg)
Esecuzione
Array-x:
1
2
3
trovato
Pagina 10Laboratorio di Informatica
2014/2015
Matrici
Unità 7
![Page 11: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneria... · Laboratorio di Informatica Pagina 30 2014/2015 Matrici Unità 7. Prodotto di matrici (1/2) Si scriva un](https://reader036.fdocument.pub/reader036/viewer/2022071004/5fc10c86cafc811b364af702/html5/thumbnails/11.jpg)
Ricerca del valore massimo in un array
Si scriva una funzione massimoArray che prenda come
parametri un array di long a e la sua lunghezza n,
restituendo il massimo valore in a.
Si assuma che l’array contenga almeno un elemento.
long massimoArray(long a[], int n) {
long max = a[0];
int i;
for (i = 1; i < n; i++)
if (a[i] > max)
max = a[i];
return max;
}
Pagina 11Laboratorio di Informatica
2014/2015
Matrici
Unità 7
![Page 12: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneria... · Laboratorio di Informatica Pagina 30 2014/2015 Matrici Unità 7. Prodotto di matrici (1/2) Si scriva un](https://reader036.fdocument.pub/reader036/viewer/2022071004/5fc10c86cafc811b364af702/html5/thumbnails/12.jpg)
Esempio d’uso
int main () {
// creazione array x di 5 long
long x[5] = { 5, 3, 9, 1, 2 };
int i;
for (i = 0; i < 5; i++) // stampa 5 3 9 1 2
printf("%ld ", x[i]);
printf("\nmassimo = %ld\n",
massimoArray(x,5));
}
Output5 3 9 1 2
massimo = 9
Pagina 12Laboratorio di Informatica
2014/2015
Matrici
Unità 7
![Page 13: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneria... · Laboratorio di Informatica Pagina 30 2014/2015 Matrici Unità 7. Prodotto di matrici (1/2) Si scriva un](https://reader036.fdocument.pub/reader036/viewer/2022071004/5fc10c86cafc811b364af702/html5/thumbnails/13.jpg)
Rovesciare i valori di un array
Si scriva una funzione rovesciaArray che prenda come
parametri un array di interi a e la sua dimensione n.
La funzione deve modificare il contenuto di a posizionando gli
elementi in ordine inverso, dall’ultimo al primo.
void swap(int *i, int *j) {
int temp=*i; *i=*j; *j=temp;
}
void rovesciaArray(int a[], int n) {
int temp;
int i;
for (i=0; i < n/2; i++)
swap(&a[i],&a[n-i-1]);
return;
}Pagina 13Laboratorio di Informatica
2014/2015
Matrici
Unità 7
![Page 14: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneria... · Laboratorio di Informatica Pagina 30 2014/2015 Matrici Unità 7. Prodotto di matrici (1/2) Si scriva un](https://reader036.fdocument.pub/reader036/viewer/2022071004/5fc10c86cafc811b364af702/html5/thumbnails/14.jpg)
Esempio d’uso
int main () {
const int n = 5;
// creazione array x di 5 int
int x[n];
// inizializzazione
x[0] = 5; x[1] = 3; x[2] = 9; x[3] = 5; x[4] = 12;
int i;
for (i = 0; i < n; i++) // stampa 5 3 9 5 12
printf("%d ", x[i]);
printf("\n");
rovesciaArray(x, n); // rovescia l’array x
for (i = 0; i < n; i++) // stampa 12 5 9 3 5
printf("%d ", x[i]);
printf("\n");
return EXIT_SUCCESS;
}
Pagina 14Laboratorio di Informatica
2014/2015
Matrici
Unità 7
![Page 15: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneria... · Laboratorio di Informatica Pagina 30 2014/2015 Matrici Unità 7. Prodotto di matrici (1/2) Si scriva un](https://reader036.fdocument.pub/reader036/viewer/2022071004/5fc10c86cafc811b364af702/html5/thumbnails/15.jpg)
Esecuzione
5 3 9 5 12
12 5 9 3 5
Il meccanismo di passaggio dei parametri fornisce come parametro attuale al metodo rovesciaArray
il riferimento all'array x e non una copia di x. Tale
riferimento viene poi copiato nel parametro formale a.
Quindi, a ed x si riferiscono al medesimo array.
Pagina 15Laboratorio di Informatica
2014/2015
Matrici
Unità 7
![Page 16: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneria... · Laboratorio di Informatica Pagina 30 2014/2015 Matrici Unità 7. Prodotto di matrici (1/2) Si scriva un](https://reader036.fdocument.pub/reader036/viewer/2022071004/5fc10c86cafc811b364af702/html5/thumbnails/16.jpg)
Array come risultato di una funzione
int* copiaInversa(int a[], int n) {
int* temp = (int*)malloc(n * sizeof(int));
if(temp != NULL) {
int i;
for (i = 0; i < n; i++) {
temp[n-1-i] = a[i];
}
}
return temp;
}
La funzione copiaInversa prende come parametri un array
a e la sua dimensione n, restituendo un nuovo array con gli
elementi in ordine inverso rispetto ad a.
In questo esempio, poiché si vuole
restituire un array, tale array viene creato
dinamicamente all’interno della funzione copiaInversa.
cast (opzionale)
Pagina 16Laboratorio di Informatica
2014/2015
Matrici
Unità 7
![Page 17: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneria... · Laboratorio di Informatica Pagina 30 2014/2015 Matrici Unità 7. Prodotto di matrici (1/2) Si scriva un](https://reader036.fdocument.pub/reader036/viewer/2022071004/5fc10c86cafc811b364af702/html5/thumbnails/17.jpg)
Esempio d’uso
int main () {
const int n = 5;
int x[n];
x[0] = 5; x[1] = 3; x[2] = 9; x[3] = 5; x[4] = 12;
int i;
for (i = 0; i < n; i++) // stampa 5 3 9 5 12
printf("%d ", x[i]);
printf("\n");
int * y = copiaInversa(x, n);
if(y == NULL) {
printf("ERRORE\n");
return EXIT_FAILURE;
}
for (i = 0; i < n; i++) // stampa 12 5 9 3 5
printf("%d ", y[i]);
printf("\n");
return EXIT_SUCCESS;
}Pagina 17Laboratorio di Informatica
2014/2015
Matrici
Unità 7
![Page 18: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneria... · Laboratorio di Informatica Pagina 30 2014/2015 Matrici Unità 7. Prodotto di matrici (1/2) Si scriva un](https://reader036.fdocument.pub/reader036/viewer/2022071004/5fc10c86cafc811b364af702/html5/thumbnails/18.jpg)
Nota
Il risultato di una funzione può essere un riferimento
a un array, ma occorre usare come tipo di ritorno un puntatore, cioè non si può scrivere int [] come
risultato della funzione, bensì si deve usare int *
In alternativa, si sarebbe potuto usare un parametro
di tipo array anche per il risultato, con la relativa
dichiarazione fatta (staticamente) nella funzione
invocante. Ad esempio:void copiaInversa(int a[], int n, int res[])
Pagina 18Laboratorio di Informatica
2014/2015
Matrici
Unità 7
![Page 19: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneria... · Laboratorio di Informatica Pagina 30 2014/2015 Matrici Unità 7. Prodotto di matrici (1/2) Si scriva un](https://reader036.fdocument.pub/reader036/viewer/2022071004/5fc10c86cafc811b364af702/html5/thumbnails/19.jpg)
Nota
Array allocati nello stack non devono essere deallocati esplicitamente. L’array x nell’esempio precedente sarà
deallocato automaticamente al termine del bloccodi codice in cui è definito (cioè nel main).
Invece, quando si alloca dinamicamente (nello heap) un array,
al termine del suo uso è necessario deallocare la memoria occupata esplicitamente, tramite la funzione free.
Nell’esempio precedente si può aggiungere nellafunzione main la seguente istruzione per rilasciare la memoria
allocata nella funzione:
free(y);
Pagina 19Laboratorio di Informatica
2014/2015
Matrici
Unità 7
![Page 20: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneria... · Laboratorio di Informatica Pagina 30 2014/2015 Matrici Unità 7. Prodotto di matrici (1/2) Si scriva un](https://reader036.fdocument.pub/reader036/viewer/2022071004/5fc10c86cafc811b364af702/html5/thumbnails/20.jpg)
Matrici
Una matrice è una collezione in forma tabellare di
elementi dello stesso tipo, ognuno dei quali è
indicizzato da una coppia di numeri che
rappresentano riga e colonna dell’elemento.
Una matrice può essere rappresentata in C
mediante un array multidimensionale.
Pagina 20Laboratorio di Informatica
2014/2015
Matrici
Unità 7
![Page 21: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneria... · Laboratorio di Informatica Pagina 30 2014/2015 Matrici Unità 7. Prodotto di matrici (1/2) Si scriva un](https://reader036.fdocument.pub/reader036/viewer/2022071004/5fc10c86cafc811b364af702/html5/thumbnails/21.jpg)
Esempi
Dichiarazione di una matrice 3x5 accessibile mediante la variabile m:
int m[3][5];
Pagina 21
? ? ? ? ?
? ? ? ? ?
? ? ? ? ?
Laboratorio di Informatica
2014/2015
Matrici
Unità 7
![Page 22: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneria... · Laboratorio di Informatica Pagina 30 2014/2015 Matrici Unità 7. Prodotto di matrici (1/2) Si scriva un](https://reader036.fdocument.pub/reader036/viewer/2022071004/5fc10c86cafc811b364af702/html5/thumbnails/22.jpg)
Accesso agli elementi della matrice
// assegnazione dell’elemento della matrice m
// alla riga 1, colonna 2
m[1][2] = 39;
// assegnazione dell’elemento della matrice m
// alla riga 0, colonna 0
m[0][0] = 4;
printf("%d\n", m[1][2]); // stampa 39
Pagina 22
4 ? ? ? ?
? ? 39 ? ?
? ? ? ? ?
Laboratorio di Informatica
2014/2015
Matrici
Unità 7
![Page 23: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneria... · Laboratorio di Informatica Pagina 30 2014/2015 Matrici Unità 7. Prodotto di matrici (1/2) Si scriva un](https://reader036.fdocument.pub/reader036/viewer/2022071004/5fc10c86cafc811b364af702/html5/thumbnails/23.jpg)
Rappresentazione grafica
Pagina 23
?? ? ?
? ? ??
? ? ?? ?
Laboratorio di Informatica
2014/2015
Matrici
Unità 7
![Page 24: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneria... · Laboratorio di Informatica Pagina 30 2014/2015 Matrici Unità 7. Prodotto di matrici (1/2) Si scriva un](https://reader036.fdocument.pub/reader036/viewer/2022071004/5fc10c86cafc811b364af702/html5/thumbnails/24.jpg)
Espressioni che denotano oggetti matrice
Poiché una matrice è semplicemente un array i cui elementi
sono a loro volta array, nella definizione di matrici è possibile
utilizzare espressioni che denotano matrici come nel
seguente esempio:
int m[][2] = {
{ 3, 5 },
{ 9, 12 }
};
Si noti che solo la prima dimensione dell’array
può essere non specificata.
Pagina 24Laboratorio di Informatica
2014/2015
Matrici
Unità 7
![Page 25: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneria... · Laboratorio di Informatica Pagina 30 2014/2015 Matrici Unità 7. Prodotto di matrici (1/2) Si scriva un](https://reader036.fdocument.pub/reader036/viewer/2022071004/5fc10c86cafc811b364af702/html5/thumbnails/25.jpg)
Esempio
int main () {
int m[][2] = {
{ 3, 5 },
{ 9, 12 }
};
int i, j;
for(i = 0; i < 2; i++) {
for(j = 0; j < 2; j++) {
printf("%d ", m[i][j]);
}
printf("\n");
}
}
Cosa stampa questo
programma?
Pagina 25Laboratorio di Informatica
2014/2015
Matrici
Unità 7
![Page 26: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneria... · Laboratorio di Informatica Pagina 30 2014/2015 Matrici Unità 7. Prodotto di matrici (1/2) Si scriva un](https://reader036.fdocument.pub/reader036/viewer/2022071004/5fc10c86cafc811b364af702/html5/thumbnails/26.jpg)
Esecuzione
La definizione di matrice
int m[][2] = {
{ 3, 5 },
{ 9, 12 }
};
è equivalente a:
int m[2][2];
m[0][0] = 3;
m[0][1] = 5;
m[1][0] = 9;
m[1][1] = 12;
Pagina 26Laboratorio di Informatica
2014/2015
Matrici
Unità 7
![Page 27: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneria... · Laboratorio di Informatica Pagina 30 2014/2015 Matrici Unità 7. Prodotto di matrici (1/2) Si scriva un](https://reader036.fdocument.pub/reader036/viewer/2022071004/5fc10c86cafc811b364af702/html5/thumbnails/27.jpg)
Numero di righe e colonne di una matrice
Usando la funzione sizeof è possibile risalire al numero di
elementi dell’array, anche nel caso multidimensionale.
int x[][2] = {{ 3, 5}, {9, 12}};
printf("dimensione array %d byte\n",
sizeof(x));
stampa il valore 16, che corrisponde al numero di byte per memorizzare 4 int (4 byte ciascuno)
Pagina 27Laboratorio di Informatica
2014/2015
Matrici
Unità 7
![Page 28: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneria... · Laboratorio di Informatica Pagina 30 2014/2015 Matrici Unità 7. Prodotto di matrici (1/2) Si scriva un](https://reader036.fdocument.pub/reader036/viewer/2022071004/5fc10c86cafc811b364af702/html5/thumbnails/28.jpg)
Stampa di una matrice per righe
for (i = 0; i < N; i++) {
for (j = 0; j < M; j++)
printf("%d ", m[i][j]);
printf("\n");
}
stampa di una matrice NxM per righe
Si noti che per accedere a tutti gli elementi della matrice m vengono usati
due cicli for annidati:
1) un for esterno che scandisce le righe (i)
2) un for interno che scandisce gli elementi di ogni riga (j).
Quando tutti gli elementi di una riga sono stati stampati, viene stampato
un ritorno a capo.
Pagina 28Laboratorio di Informatica
2014/2015
Matrici
Unità 7
![Page 29: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneria... · Laboratorio di Informatica Pagina 30 2014/2015 Matrici Unità 7. Prodotto di matrici (1/2) Si scriva un](https://reader036.fdocument.pub/reader036/viewer/2022071004/5fc10c86cafc811b364af702/html5/thumbnails/29.jpg)
Stampa di una matrice per colonne
for (i = 0; i < N; i++) {
for (j = 0; j < M; j++)
printf("%d ", m[j][i]);
printf("\n");
}
Esercizio 7.5
Scrivere un programma che stampi prima per righe e poi
per colonne la matrice1 2 3
4 5 6
Stampa di una matrice NxM per colonne
Pagina 29Laboratorio di Informatica
2014/2015
Matrici
Unità 7
![Page 30: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneria... · Laboratorio di Informatica Pagina 30 2014/2015 Matrici Unità 7. Prodotto di matrici (1/2) Si scriva un](https://reader036.fdocument.pub/reader036/viewer/2022071004/5fc10c86cafc811b364af702/html5/thumbnails/30.jpg)
Somma di matrici
Si assuma che A e B abbiano le stesse dimensioni (stesso
numero di righe e stesso numero di colonne).Si vogliono definire i valori di una nuova matrice C ottenuta
sommando gli elementi corrispondenti di A e B.
for (i = 0; i < N; i++)
for (j = 0; j < M; j++)
C[i][j] = A[i][j] + B[i][j];
Per accedere a tutti gli elementi della matrice A (e a quelli di
B) usiamo due cicli for annidati:
1) for esterno che scandisce le righe (i),
2) for interno che scandisce gli elementi di ogni riga (j).
Pagina 30Laboratorio di Informatica
2014/2015
Matrici
Unità 7
![Page 31: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneria... · Laboratorio di Informatica Pagina 30 2014/2015 Matrici Unità 7. Prodotto di matrici (1/2) Si scriva un](https://reader036.fdocument.pub/reader036/viewer/2022071004/5fc10c86cafc811b364af702/html5/thumbnails/31.jpg)
Prodotto di matrici (1/2)
Si scriva un frammento di codice che definisca i valori di una nuova matrice C ottenuta come
prodotto di A e B.
Si assuma che
1. Le matrici siano quadrate, cioè abbiano lo
stesso numero di righe e colonne
2. Le matrici abbiano le stesse dimensioni.
Pagina 31Laboratorio di Informatica
2014/2015
Matrici
Unità 7
![Page 32: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneria... · Laboratorio di Informatica Pagina 30 2014/2015 Matrici Unità 7. Prodotto di matrici (1/2) Si scriva un](https://reader036.fdocument.pub/reader036/viewer/2022071004/5fc10c86cafc811b364af702/html5/thumbnails/32.jpg)
Prodotto di matrici (2/2)
Ogni elemento C[i][j] del prodotto di matrici A・B è ottenuto come prodotto scalare della riga i di A
con la colonna j di B,
cioè per ogni coppia di indici i,j, si ha:
Pagina 32Laboratorio di Informatica
2014/2015
Matrici
Unità 7
![Page 33: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneria... · Laboratorio di Informatica Pagina 30 2014/2015 Matrici Unità 7. Prodotto di matrici (1/2) Si scriva un](https://reader036.fdocument.pub/reader036/viewer/2022071004/5fc10c86cafc811b364af702/html5/thumbnails/33.jpg)
Esecuzione
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) {
C[i][j] = 0;
for (k = 0; k < N; k++)
C[i][j] += A[i][k] * B[k][j];
}
}
Si noti che per calcolare il prodotto delle matriciC = A x B si usano tre cicli for annidati:
1) for esterno che scandisce le righe (i) di C,
2) for intermedio che scandisce le colonne (j) di C,
3) for più interno che calcola il prodotto scalare della riga i
di A con la colonna j di B, che viene salvato in C[i][j].
Pagina 33Laboratorio di Informatica
2014/2015
Matrici
Unità 7
![Page 34: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneria... · Laboratorio di Informatica Pagina 30 2014/2015 Matrici Unità 7. Prodotto di matrici (1/2) Si scriva un](https://reader036.fdocument.pub/reader036/viewer/2022071004/5fc10c86cafc811b364af702/html5/thumbnails/34.jpg)
Passaggio di parametri matrice
Nel passaggio dei parametri per per array multi-dimensionali è
necessario specificare nell’intestazione della funzione tutte le
dimensioni dell’array, eccetto la prima.
Per le matrici è, quindi, necessario specificare il numero delle
colonne, mentre il numero delle righe può essere omesso.
void stampaMatrice (int A[][3], int N) {
//corpo della funzione
...
}
Pagina 34Laboratorio di Informatica
2014/2015
Matrici
Unità 7
![Page 35: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneria... · Laboratorio di Informatica Pagina 30 2014/2015 Matrici Unità 7. Prodotto di matrici (1/2) Si scriva un](https://reader036.fdocument.pub/reader036/viewer/2022071004/5fc10c86cafc811b364af702/html5/thumbnails/35.jpg)
Passaggio di parametri matrice
La funzione stampaMatrice stamperà solo matrici
con 3 colonne!
Dovendo esplicitare il numero di colonne non è
possibile scrivere una funzione che stampi matrici di dimensione NxN, ma solo Nx3
Per ovviare a questo inconveniente possono essere
utilizzate
1) opportune strutture di dati che consentano di
manipolare strutture bi-dimensionali2) apposite librerie matematiche (e.g., gsl).
Pagina 35Laboratorio di Informatica
2014/2015
Matrici
Unità 7
![Page 36: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneria... · Laboratorio di Informatica Pagina 30 2014/2015 Matrici Unità 7. Prodotto di matrici (1/2) Si scriva un](https://reader036.fdocument.pub/reader036/viewer/2022071004/5fc10c86cafc811b364af702/html5/thumbnails/36.jpg)
Esercizi
Esercizio 7.6
Scrivere una funzioneint arrayUguali(int[] A, int[] B, int n)
che restituisca
1 se gli array A e B sono uguali (cioè hanno tutti
gli elementi corrispondenti uguali)
0 altrimenti
Pagina 36Laboratorio di Informatica
2014/2015
Matrici
Unità 7
![Page 37: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneria... · Laboratorio di Informatica Pagina 30 2014/2015 Matrici Unità 7. Prodotto di matrici (1/2) Si scriva un](https://reader036.fdocument.pub/reader036/viewer/2022071004/5fc10c86cafc811b364af702/html5/thumbnails/37.jpg)
Esercizi
Esercizio 7.7Una matrice M si dice diagonale se tutti gli elementi
M[i][j] con i diverso da j (cioè non appartenenti
alla diagonale principale) valgono zero.
Scrivere una funzione che restituisca 1 se la matrice M è diagonale e 0 altrimenti.
Pagina 37Laboratorio di Informatica
2014/2015
Matrici
Unità 7