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;
} |
Partager