#include #include int** creerMatrice(size_t nbL, size_t nbC) { int** mat; mat = calloc(nbL, sizeof(int*)); if (mat != NULL) { int *m =(int *) calloc(nbL * nbC, sizeof(int)); mat[0] = m; if (m != NULL) { for (int l = 1; l < nbL; l++) { mat[l] = &m[l * nbC]; } } else { free(mat); mat = NULL; } } return mat; } void detruireMatrice(int** mat) { if (mat != NULL) { if (mat[0] != NULL) { free(mat[0]); mat[0] = NULL; } free(mat); mat = NULL; } } long long calculerNombreOccurrences(int** mat, size_t nbL, size_t nbC, int v) { long long cpt = 0; if (mat != NULL) { for (int l = 0; l < nbL; l++) { for (int c = 0; c < nbC; c++) { if (mat[l][c] == v) { cpt++; } } } } return cpt; } void initialiser(int** mat, size_t nbL, size_t nbC, int v) { if (mat != NULL) { for (int l = 0; l < nbL; l++) { for (int c = 0; c < nbC; c++) { mat[l][c] = v; } } } } int main(void) { int** m1 = creerMatrice(1, 1); printf("m1 : %p\n", m1); initialiser(m1, 1, 1, 10); printf("Nombre de valeurs egales a 10 : %lld\n", calculerNombreOccurrences(m1, 1, 1, 10)); printf("\n"); detruireMatrice(m1); size_t nbC = 5000000; printf("Nombre de colonnes : %zu\n", nbC); m1 = NULL; for (int i = 1; i <= 25; i++) { size_t nbL = i * (size_t) 200; int** m = creerMatrice(nbL, nbC); printf("Matrice de %4zu lignes : %20p\n", nbL, m); initialiser(m, nbL, nbC, i); printf("Nombre de valeurs : %20lld\n", calculerNombreOccurrences(m, nbL, nbC, i)); detruireMatrice(m); m = NULL; } return 0; }