La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Matrici come array di puntatori a righe

Presentazioni simili


Presentazione sul tema: "Matrici come array di puntatori a righe"— Transcript della presentazione:

1 Matrici come array di puntatori a righe
Una rappresentazione che risolve il problema di passare array multidimensionali a funzioni

2 Problema :funzione per sommare matrici m per n
#include <stdio.h> #define M 2 #define N 3 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 (j=0; j<M;j++) scanf("%d",&(a[i][j]));} }

3 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); }

4 Esempio: matrice n per m
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]

5 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]; }

6 Esempio: matrice 4 per 3 A A000 A004 A008 A00C AB00 AB04 AB08 BB10
AB0C AB10 AB14 A[3][0] A[3][1] A[3][2]

7 Esempio: matrice 4 per 3 A Il nome della matrice È il puntatore A
double ** AB00 AB04 AB08 A000 A[0][0] A[0][1] A[0][2] A004 BB10 BB14 BB18 A008 A[1][0] A[1][1] A[1][2] A00C 1B00 1B04 1B08 L'accesso a un elemento avviene correttamente con l' usuale operatore [...][...] A[2][0] A[2][1] A[2][2] AB0C AB10 AB14 A[3][0] A[3][1] A[3][2]

8 Esempio: matrice 4 per 3 A Esempio di accesso A000 A[2][2] A004
AB00 AB04 AB08 A000 A[0][0] A[0][1] A[0][2] A004 A[2][2] (A[2])[2] BB10 BB14 BB18 A008 A[1][0] A[1][1] A[1][2] A00C 1B00 1B04 1B08 A[2][0] A[2][1] A[2][2] AB0C AB10 AB14 A[3][0] A[3][1] A[3][2]

9 Esempio: matrice 4 per 3 A Esempio di accesso A000 A[2][2] A004
AB00 AB04 AB08 A000 A[0][0] A[0][1] A[0][2] A004 A[2][2] (A[2])[2] (*(A + 2))[2] BB10 BB14 BB18 A008 A[1][0] A[1][1] A[1][2] A00C 1B00 1B04 1B08 A[2][0] A[2][1] A[2][2] AB0C AB10 AB14 A[3][0] A[3][1] A[3][2]

10 Esempio: matrice 4 per 3 A Esempio di accesso A000 A[2][2] A004
AB00 AB04 AB08 A000 A[0][0] A[0][1] A[0][2] A004 A[2][2] (A[2])[2] (*(A + 2))[2] *(1B00 + 2) BB10 BB14 BB18 A008 A[1][0] A[1][1] A[1][2] A00C 1B00 1B04 1B08 A[2][0] A[2][1] A[2][2] AB0C AB10 AB14 A[3][0] A[3][1] A[3][2]

11 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);} }

12 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; }

13 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 * )); {(*a)[i]=malloc(m*sizeof(int)); for (j=0; j<m;j++) { printf("immetti intero\n"); scanf("%d",((*a)[i])+j);}} }

14 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; 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”);}


Scaricare ppt "Matrici come array di puntatori a righe"

Presentazioni simili


Annunci Google