salut tout le monde !
je suis plutôt débutant en C et je dois réaliser une classe matrice en C.
J'ai trois fichiers :
matrice.h
matrice.c
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 typedef struct matrice *matrice; /* Fonctions */ matrice initialiserMatriceNulle(int, int); matrice initialiserMatrice(int, int); ///* Procédures */ void afficherMatrice(matrice);
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71 #include "matrice.h" #include <stdio.h> #include <stdlib.h> #include <math.h> struct matrice { int nbLigne; int nbColonne; float **tableau; }; //* Procédures */ //* afficherMatrice(matrice) : Cette procédure affiche une matrice */ void afficherMatrice(matrice m) { int i,j; for(i=0;i<m->nbLigne;i++) { for(j=0;j<m->nbColonne;j++) { printf("\t %lf ",m->tableau[i][j]); } printf("\n"); } } //* Fonctions */ matrice initialiserMatriceNulle(int m, int n) { matrice maMatrice; maMatrice = (matrice)malloc(sizeof(struct matrice)); maMatrice->nbLigne = m; maMatrice->nbColonne = n; maMatrice->tableau = malloc(m*sizeof(*(maMatrice->tableau))); int i,j; for(i=0;i<m;i++) maMatrice->tableau[i] = malloc(n*sizeof(**(maMatrice->tableau))); for(i=0;i<m;i++) for(j=0;j<n;j++) maMatrice->tableau[i][j]= 4; return maMatrice; } matrice initialiserMatrice(int m, int n) { matrice maMatrice = initialiserMatriceNulle(m,n); int i,j; /* m et n doivent être testés avant > 0 et < NMAX */ for(i=0;i<m;i++) { printf("\nLigne %d :\n",i+1); for(j=0;j<n;j++) { printf("\nElement a[%d][%d] = ",i+1,j+1); scanf("%lf",&maMatrice->tableau[i][j]); } } return maMatrice; }
main.c (pour tester)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 #include "matrice.h" #include <stdio.h> #include <stdlib.h> #include <math.h> main() { int m,n; matrice maMatrice,m1,m2; printf("Nombre de lignes : "); scanf("%d",&m); printf("\nNombre de colonnes : "); scanf("%d",&n); maMatrice = initialiserMatriceNulle(m, n); afficherMatrice(maMatrice); m1 = initialiserMatrice(m, n); afficherMatrice(m1); system("PAUSE"); return 0; }: Il m'est imposé de mettre la structure dans matrice.c et de créer un pointeur vers cette structure dans le .h. Ce serait pour "cacher" comment je code une matrice. Quelqu"un pourrait-il m'apporter des infos à ce sujet ? merci.
: La fonction initialiserMatriceNulle semble marcher. (j'ai mis 4 pour voir si ça affichait bien 4). Par contre la fonction initialiserMatrice me donne une matrice de bonne dimension mais avec que des 0 (même pas des 4). J'ai dû oublier un truc élémentaire ?
: Avant de quitter le programme, je dois libérer la mémoire ? Je ne peux pas faire seulement un free(matrice) ? il faut que je désalloue toutes les cases. C'est à ce moment là que je crie ausssssssseeeeeeeecccccourrrrrrrssss je suis perdu !
![]()
Voilà ça fait beaucoup de questions. Je tiens à préciser que je travaille avec dev c++ et que j'ai déjà regardé la faq et quelques sujets pour faire mes allocations mémoires, mais avec la structure ça complique les choses...
Si quelqu'un peu répondre à une des trois questions... hésitez pas !
Merci
Manu
Partager