Bonsoir,

Je souhaite faire un petit "programme" pour automatise la somme, la soustraction, la multiplication, calculer le determinant de matrice dont on connait le nombre de colonnes et le nombre de lignes ( elles ne sont pas necessairement carrées à part pour les sommes et la soustration ).

Bref dans le code ci dessous, la compilation a lieu mais au final le programme n'arrive pas à la fin de l'execution i.e "la pause system" mais il plante en cour d'execution.

Je suppose que cela vient de l'allocation en mémoire des matrices mais je ne comprends pas pourquoi.

Merci d'avance.


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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
 
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#include"./../bibliotheque.h"
 
int  **Allouer_Matrice     ( int **Matrice, int Colonne, int Ligne);
int  **Sommer_Matrice      ( int **Matrice, int **MatriceA, int **MatriceB, int Taille);
int  **Initialiser_Matrice ( int **Matrice, int Colonne, int Ligne);
void   Afficher_Matrice    ( int **Matrice, int Colonne, int Ligne);
void   Desallouer_Matrice  ( int **Matrice, int Ligne );
 
int main (void)
{
    int **MatriceA;
    //int **MatriceB;
    //int **Matrice;
 
    Allouer_Matrice( MatriceA, 4, 4 );
    //Allouer_Matrice( MatriceB, 4, 4 );
    //Allouer_Matrice( Matrice, 4, 4 );
 
    Initialiser_Matrice( MatriceA, 4, 4 );
    //Initialiser_Matrice( MatriceB, 4, 4 );
 
    Afficher_Matrice( MatriceA, 4, 4 );
    //Afficher_Matrice( MatriceB, 4, 4 );
 
    //Sommer_Matrice( Matrice, MatriceA, MatriceB, 4 );
    //Afficher_Matrice( Matrice, 4, 4 );
 
//    int i, j;
//    for ( i=0 ; i<4 ; i++ )
//        {
//            for ( j=0 ; j<4 ; j++ )
//                {
//                    printf("Matrice[%d][%d]= %d + %d = %d\Ligne", (i+1), (j+1), MatriceA[i][j], MatriceB[i][j], Matrice[i][j]);
//                }
//        }
 
    Desallouer_Matrice( MatriceA, 4 );
    //Desallouer_Matrice( MatriceB, 4 );
    //Desallouer_Matrice( Matrice, 4 );
 
    system("pause");
 
}
 
int **Allouer_Matrice(int **Matrice, int Colonne, int Ligne)
{
      // Allouer les colonnes
      Matrice = malloc( Colonne*sizeof(int*) );
 
      int i;
 
      // Allouer les lignes
      for ( i=0 ; i<Ligne ; i++)
          {
             Matrice[i]=malloc( Ligne*sizeof(int) );
          }  
 
      return Matrice;
}
 
int **Initialiser_Matrice(int **Matrice, int Colonne, int Ligne)
{
     int i, j;
 
     for ( i=0 ; i<Colonne ; i++ )
         {
               for ( j=0 ; j<Ligne ; j++ )
                   {
                        Matrice[i][j]=rand()%10;
                   }   
         }
 
     return Matrice;
}
 
int **Sommer_Matrice( int **Matrice, int **MatriceA, int **MatriceB, int Taille)
{
     int i,j;
 
     for ( i=0 ; i<Taille ; i++ )
         {
             for ( j=0 ; j<Taille ; j++ )
                 {
                     Matrice[i][j]=MatriceA[i][j]+MatriceB[i][j];
                 }
         }
 
     return Matrice;
}
 
void Afficher_Matrice(int **Matrice, int Colonne, int Ligne)
{
    int i, j;
 
    for ( i=0 ; i<Colonne ; i++ )
        {
              for ( j=0 ; j<Ligne ; j++)
                  {
                        printf("\nMatrice[%d][%d]=%d", i, j, Matrice[i][j]);
                  }
        }        
}                   
 
 
void Desallouer_Matrice( int **Matrice, int Ligne )
{
               int i;
 
               for ( i=1 ; i<Ligne ; i++ )
                   {
                         free(Matrice[i]);
                   }
 
               free(Matrice);
}