Je veux écrire un programme qui renvois le produit de deux matrices, j'essaye un peu de controler l'affichage de la matrice car la largeur de la console est limité mais je ne sais pas ou je foire mon code. Un coup de main s'il vous plaît
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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
 
#include<stdio.h>
#include<stdlib.h>
#include <math.h>  //J'aurai besoin vers la fin de mon programme de la fonction qui retourne la valeur absolut
 
 
int main()
{
    int n=0,p=0,m=0;
    printf("Entrez le nombre de lignes  de la premiere matrice:\n");
 
    scanf("%d",&n);
 
    printf("Entrez le nombre de colones de la premier matrice :\n");
 
    scanf("%d",&p);
    printf("Entrez le nombre de colones de la deuxieme matrice:\n\n");
   do{
 
        printf("Ce nombre doit etre inferieur strictement a 5\n\n");
 
        scanf("%d",&m);
   }while(m>=5);  /*J'ai limité le nombre de colone de la matrice2(c'est à dire la matrice3 aussi) à 4 pour éviter les problème
                    d'affichage puisque la largeur de la console est fixe*/
 
    double **matrice3,**matrice1,**matrice2;
 
 
                //=========On crée trois tableaux de pointeurs sur pointeurs de taille n par allocation dynamique=========
 
 
    matrice1=malloc(n*sizeof(double*));
 
    matrice2=malloc(p*sizeof(double*));
 
    matrice3=malloc(n*sizeof(double*));
 
                             //=========Tester si l'allocation s'est bien passée=========
 
 
    if (matrice3== NULL)
    {
        printf("l'allocation est impossible\n");
 
        exit(0);
    }
    if (matrice1== NULL)
    {
        printf("l'allocation est impossible\n");
 
        exit(0);
    }if (matrice2== NULL)
    {
        printf("l'allocation est impossible\n");
 
        exit(0);
    }
 
                            //==========Création des tableaux de taille p(les colonnes)============
 
    int c=0;                   //Les élements(pointeurs)) des trois premiers tableaux crées pointent sur ces nouveaux tableaux
 
    for (c=0; c<n ;c++)
    {
        matrice1[c]=malloc(p*sizeof(double));
 
        matrice2[c]=malloc(m*sizeof(double));
 
        matrice3[c]=malloc(m*sizeof(double));
 
        if (matrice3[c]==NULL)
        {
            printf("L'allocation est impossible\n");
 
            exit(0);
        }
        if (matrice1[c]==NULL)
        {
            printf("L'allocation est impossible\n");
 
            exit(0);
        }
        if (matrice2[c]==NULL)
        {
            printf("L'allocation est impossible\n");
 
            exit(0);
        }
    }
    printf("Il est temps que vous remplissez vos deux matrices:\n\n\n");
 
  //On a donc: la matrice1 est de taille (n,p), la matrice2 de taille (p,m) et la matrice3 de taille (n,m)
 
                            //==========On remplis les deux matrices: matrice1 et matrice2===========
 
    double e=0;//Cette variable va ma servir pour remplire les deux matrices: matrice1 et matrice2
 
    printf("Remplissage de la matrice2 de taille (p,m):\n\n");
 
        int i=0;
 
        for (i=0;i<p;i++)
        {
            int j=0;
            for (j=0 ; j<m ;j++)
            {   do{
                e=0;
                printf("Entrer une valeur dans la case de coordonnees (%d,%d) dans la matrice2\n",i,j);
 
                scanf("%lf",&e);
 
                if (e>=99999999)printf("Entrez un nombre entre -99999999 et 99999999\n\n");
 
                matrice2[i][j]=e;
                }while(e>=99999999 || e<=-99999999);                       //Boucle pour tester que le chiffre entré ne depasse pas le plafond
            }
        }
 
 
    printf("Remplissage de la matrice1 de taille(n,p):\n\n"); /*On plafone la valeur entrée à pour éviter des
                                                                                    problème d'affichage*/
 
        int k=0,r=0;
        i=0;
        for(i=0;i<n;i++)
        {       
                int j=0;
                refaire: for (j=0 ; j<p ;j++)
                {
 
                    e=0;
                        //On limite la valeur entrée à 99999999 pour éviter des problème d'affichage car la largeur de la console est fixe
                    printf("Entrer une valeur dans la case de coordonnees (%d,%d) dans la matrice1\n\n",i,j);
 
                    scanf("%lf",&e);
 
                    matrice1[i][j]=e;
 
 
                }
 
            matrice3[i][k]=0;
            int s=0;
            for(k=0;k<m;k++){
 
                for(s=0;s<p;s++){ //Remplissage de la case (i,k) de la matrice3
 
                    matrice3[i][k]=matrice3[i][k]+matrice1[i][s]*matrice2[s][k];}
 
 
            }
 
 
            if(matrice3[i][k]>=99999999){/*On teste si l'élément inseré dans la case (i,k) de matrice3 ne vérifie pas les bonnes
                                          conditions et dans ce cas on refais le remplissage de la première ligne de la matrice1*/
 
                printf("Vous avez entre de grands nombre\n\nReessayez avec des nombre moins grands\n\n ");
 
                goto refaire;}
 
 
          }
 
 
 
 
 
 
 
 
    printf("Maintenant on va afficher le produit des deux matrices:\n\n\n");
 
                                        //=========Affichage du résultat et remplissage de la matrice3==========
 
    int l=0;
 
    k=0;
//==========Je fais un teste pour organiser l'affichage de la matrice===========
    for (k=0;k<n;k++)
    {
        for (l=0;l<m;l++)
 
        {
 
            if(matrice3[k][l]<100)printf("%f       ",matrice3[k][l]);
            if(matrice3[k][l]>=100 && matrice3[k][l]<1000  )printf("%f      ",matrice3[k][l]);
            if(matrice3[k][l]>=1000 && matrice3[k][l]<10000 )printf("%f     ",matrice3[k][l]);
            if(matrice3[k][l]>=10000 && matrice3[k][l]<100000)printf("%f    ",matrice3[k][l]);
            if(matrice3[k][l]>=100000 && matrice3[k][l]<1000000)printf("%f   ",matrice3[k][l]);
            if(matrice3[k][l]>=1000000 && matrice3[k][l]<10000000)printf("%f  ",matrice3[k][l]);
            if(matrice3[k][l]>=10000000 && matrice3[k][l]<100000000)printf("%f ",matrice3[k][l]);
 
        }
        printf("\n\n");
 
    }
 
                       //==========On libère la mémoire dont on a plus besoin==============
    free(matrice1);
 
    free(matrice2);
 
    return 0;
}