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