matrici come array di puntatori a righe -...
TRANSCRIPT
![Page 1: Matrici come array di puntatori a righe - unipi.itdidawiki.di.unipi.it/lib/exe/fetch.php/fisica/informatica/201516/... · Matrici come array di puntatori a righe Una rappresentazione](https://reader030.vdocumenti.com/reader030/viewer/2022021710/5c73ed3b09d3f2a80a8bb4e4/html5/thumbnails/1.jpg)
Matrici come array dipuntatori a righe
Una rappresentazione che risolve il problema dipassare array multidimensionali a funzioni
![Page 2: Matrici come array di puntatori a righe - unipi.itdidawiki.di.unipi.it/lib/exe/fetch.php/fisica/informatica/201516/... · Matrici come array di puntatori a righe Una rappresentazione](https://reader030.vdocumenti.com/reader030/viewer/2022021710/5c73ed3b09d3f2a80a8bb4e4/html5/thumbnails/2.jpg)
Problema :funzione persommare matrici m per n
void somma_mat(int a[][M], int b[][M], unsigned n ){ int i, j; for (i=0; i<n; i++) for (j=0; j<M; j++) a[i][j]+= b[i][j]; }
void new_mat(int a[][M], unsigned n ) { int i,j;for (i=0; i<n; i++) for (j=0; j<M;j++) scanf("%d",&(a[i][j]));}}
#include <stdio.h> #define M 2#define N 3
![Page 3: Matrici come array di puntatori a righe - unipi.itdidawiki.di.unipi.it/lib/exe/fetch.php/fisica/informatica/201516/... · Matrici come array di puntatori a righe Una rappresentazione](https://reader030.vdocumenti.com/reader030/viewer/2022021710/5c73ed3b09d3f2a80a8bb4e4/html5/thumbnails/3.jpg)
void stampa(int a[][M], unsigned n ) {
int i,j;for (i=0; i<n; i++) for (j=0; j<M;j++) printf("%d ",a[i][j]); printf("\n"); }}}
int main (void){int a[N][M];int b[N][M];new_mat(a,N);new_mat(b,N);somma_mat(a,b, N);stampa(a,N);
}
![Page 4: Matrici come array di puntatori a righe - unipi.itdidawiki.di.unipi.it/lib/exe/fetch.php/fisica/informatica/201516/... · Matrici come array di puntatori a righe Una rappresentazione](https://reader030.vdocumenti.com/reader030/viewer/2022021710/5c73ed3b09d3f2a80a8bb4e4/html5/thumbnails/4.jpg)
Esempio: matrice n per m
A[0][0] A[0][1] A[0][m-1]
A[1][0] A[1][1] A[1][m-1]
A[n-1][0] A[n-1][1] A[n-1][m-1]
![Page 5: Matrici come array di puntatori a righe - unipi.itdidawiki.di.unipi.it/lib/exe/fetch.php/fisica/informatica/201516/... · Matrici come array di puntatori a righe Una rappresentazione](https://reader030.vdocumenti.com/reader030/viewer/2022021710/5c73ed3b09d3f2a80a8bb4e4/html5/thumbnails/5.jpg)
Cosa vogliamo poter fare
/* somma di matrici */
void somma_mat(double** a, double ** b, unsigned n,unsigned m ) {
int i, j;
for (i=0; i<n; i++)
for (j=0; j<m; j++)
a[i][j]+= b[i][j];
}
![Page 6: Matrici come array di puntatori a righe - unipi.itdidawiki.di.unipi.it/lib/exe/fetch.php/fisica/informatica/201516/... · Matrici come array di puntatori a righe Una rappresentazione](https://reader030.vdocumenti.com/reader030/viewer/2022021710/5c73ed3b09d3f2a80a8bb4e4/html5/thumbnails/6.jpg)
Esempio: matrice 4 per 3
A[0][0] A[0][1]
A[1][0] A[1][1]
A
A000
A004
A008
A00C
A[0][2]
A[1][2]
A[2][0] A[2][1] A[2][2]
A[3][0] A[3][1] A[3][2]
AB00 AB04 AB08
BB10 BB14 BB18
1B00 1B04 1B08
AB0C AB10 AB14
![Page 7: Matrici come array di puntatori a righe - unipi.itdidawiki.di.unipi.it/lib/exe/fetch.php/fisica/informatica/201516/... · Matrici come array di puntatori a righe Una rappresentazione](https://reader030.vdocumenti.com/reader030/viewer/2022021710/5c73ed3b09d3f2a80a8bb4e4/html5/thumbnails/7.jpg)
Esempio: matrice 4 per 3
A[0][0] A[0][1]
A[1][0] A[1][1]
A
A000
A004
A008
A00C
A[0][2]
A[1][2]
A[2][0] A[2][1] A[2][2]
A[3][0] A[3][1] A[3][2]
AB00 AB04 AB08
BB10 BB14 BB18
1B00 1B04 1B08
AB0C AB10 AB14
Il nome della matriceÈ il puntatore Adouble **
L'accesso a un elemento avviene correttamentecon l' usuale operatore[...][...]
![Page 8: Matrici come array di puntatori a righe - unipi.itdidawiki.di.unipi.it/lib/exe/fetch.php/fisica/informatica/201516/... · Matrici come array di puntatori a righe Una rappresentazione](https://reader030.vdocumenti.com/reader030/viewer/2022021710/5c73ed3b09d3f2a80a8bb4e4/html5/thumbnails/8.jpg)
Esempio: matrice 4 per 3
A[0][0] A[0][1]
A[1][0] A[1][1]
A
A000
A004
A008
A00C
A[0][2]
A[1][2]
A[2][0] A[2][1] A[2][2]
A[3][0] A[3][1] A[3][2]
AB00 AB04 AB08
BB10 BB14 BB18
1B00 1B04 1B08
AB0C AB10 AB14
Esempio di accesso
A[2][2]
(A[2])[2]
![Page 9: Matrici come array di puntatori a righe - unipi.itdidawiki.di.unipi.it/lib/exe/fetch.php/fisica/informatica/201516/... · Matrici come array di puntatori a righe Una rappresentazione](https://reader030.vdocumenti.com/reader030/viewer/2022021710/5c73ed3b09d3f2a80a8bb4e4/html5/thumbnails/9.jpg)
Esempio: matrice 4 per 3
A[0][0] A[0][1]
A[1][0] A[1][1]
A
A000
A004
A008
A00C
A[0][2]
A[1][2]
A[2][0] A[2][1] A[2][2]
A[3][0] A[3][1] A[3][2]
AB00 AB04 AB08
BB10 BB14 BB18
1B00 1B04 1B08
AB0C AB10 AB14
Esempio di accesso
A[2][2]
(A[2])[2]
(*(A + 2))[2]
![Page 10: Matrici come array di puntatori a righe - unipi.itdidawiki.di.unipi.it/lib/exe/fetch.php/fisica/informatica/201516/... · Matrici come array di puntatori a righe Una rappresentazione](https://reader030.vdocumenti.com/reader030/viewer/2022021710/5c73ed3b09d3f2a80a8bb4e4/html5/thumbnails/10.jpg)
Esempio: matrice 4 per 3
A[0][0] A[0][1]
A[1][0] A[1][1]
A
A000
A004
A008
A00C
A[0][2]
A[1][2]
A[2][0] A[2][1] A[2][2]
A[3][0] A[3][1] A[3][2]
AB00 AB04 AB08
BB10 BB14 BB18
1B00 1B04 1B08
AB0C AB10 AB14
Esempio di accesso
A[2][2]
(A[2])[2]
(*(A + 2))[2]
*(1B00 + 2)
![Page 11: Matrici come array di puntatori a righe - unipi.itdidawiki.di.unipi.it/lib/exe/fetch.php/fisica/informatica/201516/... · Matrici come array di puntatori a righe Una rappresentazione](https://reader030.vdocumenti.com/reader030/viewer/2022021710/5c73ed3b09d3f2a80a8bb4e4/html5/thumbnails/11.jpg)
Esempio: allocazione
/* creazione di una matrice (nXm) */
void new_mat(int ***a, unsigned n, unsigned m ) {
int i,j;
*a=malloc(n*sizeof(int * ));
for (i=0; i<n; i++)
{(*a)[i]=malloc(m*sizeof(int));
for (j=0; j<m;j++)
{ printf("immetti intero\n");
scanf("%d",((*a)[i])+j);}
}
![Page 12: Matrici come array di puntatori a righe - unipi.itdidawiki.di.unipi.it/lib/exe/fetch.php/fisica/informatica/201516/... · Matrici come array di puntatori a righe Una rappresentazione](https://reader030.vdocumenti.com/reader030/viewer/2022021710/5c73ed3b09d3f2a80a8bb4e4/html5/thumbnails/12.jpg)
Esempio: deallocazione
/* deallocazione di una matrice */
void free_mat(int*** a, unsigned n ) {
int i;
for (i=0; i<n; i++)
free((*a)[i]);
free(*a);
*a=NULL;
}
![Page 13: Matrici come array di puntatori a righe - unipi.itdidawiki.di.unipi.it/lib/exe/fetch.php/fisica/informatica/201516/... · Matrici come array di puntatori a righe Una rappresentazione](https://reader030.vdocumenti.com/reader030/viewer/2022021710/5c73ed3b09d3f2a80a8bb4e4/html5/thumbnails/13.jpg)
Esempio: somma di matrici
void somma_mat(int** a, int ** b, unsigned n, unsigned m ){ int i, j; for (i=0; i<n; i++) for (j=0; j<m; j++) a[i][j]+= b[i][j]; }
void new_mat(int *** a, unsigned n, unsigned m ) { int i,j;
*a=malloc(n*sizeof(int * ));for (i=0; i<n; i++) {(*a)[i]=malloc(m*sizeof(int)); for (j=0; j<m;j++) { printf("immetti intero\n"); scanf("%d",((*a)[i])+j);}}}
![Page 14: Matrici come array di puntatori a righe - unipi.itdidawiki.di.unipi.it/lib/exe/fetch.php/fisica/informatica/201516/... · Matrici come array di puntatori a righe Una rappresentazione](https://reader030.vdocumenti.com/reader030/viewer/2022021710/5c73ed3b09d3f2a80a8bb4e4/html5/thumbnails/14.jpg)
void stampa(int ** a, unsigned n, unsigned m ) { int i,j; for (i=0; i<n; i++) {for (j=0; j<m;j++) printf("%d ",a[i][j]); printf("\n");}}
void free_mat(int*** a, unsigned n ) { int i; for (i=0; i<n; i++)
free((*a)[i]); free(*a);*a=NULL;
}
int main (void){int ** a;int ** b;new_mat(&a,N,M);new_mat(&b, N,M);somma_mat(a,b,N,M);stampa(a,N,M);free_mat(&a ,N);if (a==NULL) printf(“Lista vuota”);}