bonsoir tout le monde,
donc voici mon code j'ai pas trouve le probleme !
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
 
int lectsec()
{
    int val=0;
    char ch[2]="0",lire[256]="";
 
    do
    {
        fgets(lire,255,stdin);
        val=atoi(lire);
        if(val==0 && strcmp(lire,ch)!=0)  printf(" ERREUR ! caractere non autoriser veuillez reessayer : ");
        }
        while (val==0 && strcmp(lire,ch)!=0);
 
        return val;
        }
 
 
void allocation(double ***a,double **x, int n, int m)
{
     int i;
         (*x)=(double *)malloc(n*m*sizeof(double));
         (*a)=(double **)malloc(n*sizeof(double *));
         for(i=0; i<n; i++)
            (*a)[i]=(*x)+i*m;
}
 
 
void lecture(double ***a, int n, int m, double **x) //**a contient l'adresse de la matrice donc pour modifier cette adresse je dois ajouter une étoile pour pointer sur l'adresse de cette adresse 
{                                             //j'ai ajouté le x en mode entree sortie car j'ai besoin de lui dans les fonctions compactage ...
     int i,j;
 
     //allocation
     allocation(a,x,n,m); //a et x sont des adresses donc ce n'est pas la peine d'ajouter &
 
     //la lecture de la matrice 
     printf("\n entrer les elements de la matrice :\n\n");
     for(i=0; i<n; i++)
     {
              for(j=0; j<m; j++)
              {
                            printf(" entrez l element [%d][%d] de la matrice : ",i,j); 
                            scanf("%lf",&(*a)[i][j]);
                            }
     }         
}
 
void affichage(double **a, int n, int m)
{
     int i,j;
 
     for (i=0; i<n; i++)
     {
         for(j=0; j<m; j++)
         {
                  printf("  %lf",a[i][j]); sleep(800);  }
         printf("\n");
         }
}
 
void somme(int n, int m, double ***res)
{
     int i,j;
     double **a=NULL, **b=NULL,*x, *x1, *x2;  // x, x1, x2 se sont des vecteurs qui contiendront les éléments des matrices a, b et res 
 
     printf("\n la 1ere matrice :\n");
     lecture(&a,n,m,&x1);
 
     printf("\n la 2eme matrice :\n");
     lecture(&b,n,m,&x2);
 
     // allocation de la mémoire pour res
     allocation(res,&x,n,m);
 
     //traitement
     for (i=0; i<n; i++)
     {
         for(j=0; j<m; j++)
         (*res)[i][j]=a[i][j]+b[i][j];
         }
     //affichage
     printf("\n\n la somme de ces deux matrices est : \n\n");
     affichage(*res,n,m);
 
}
 
 
int main(int argc, char *argv[])
{  
    int n1,n2,m1,m2,boo=0;
    double **res;
    int p=0;    
 
                          do
                           {
                              printf("\n entrez le nombre de ligne de la premiere matrice : ");
                              n1=lectsec();
                              printf("entrez le nombre de colonne de la premiere matrice : ");
                              m1=lectsec();
                              printf("entrez le nombre de ligne de la deuxieme matrice : ");
                              n2=lectsec();
                              printf("entrez le nombre de colonne de la deuxieme matrice : ");
                              m2=lectsec();
 
                              somme(n1,m1,&res);
                              p++;
                              }
                              while(p!=3);
  system("PAUSE");	
  return 0;
}
dans le premier traitement de la boucle il affichera
entrez le nombre de ligne de la premiere matrice :
ce qui est normal mais dans le 2eme traitement il affichera :
entrez le nombre de ligne de la premiere matrice : ERREUR ! caractere non autoriser veuillez reessayer :
voila je ne sais pas pourquoi !!!!
merci d'avance pour votre aide
a+