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
| #include<stdio.h>
#include <stdlib.h>
main()
{
int n,m ,i,j , h , k ;
do // -------------- forcage pour prendre m>1 et n> 1
{
printf("saisir n le nombre de ligne puis m le nombre de colonnes de la matrice T : ");
scanf("%d%d",&n,&m);
}
while(n<1 || m<1 );
float **A , *X , *Y ;
A=malloc(n*sizeof(float*)); //-----------reservation de la memoire
if (A==NULL) exit(0) ;
for(i=0;i<n;i++)
{
A[i]=malloc(m*sizeof(float)); //////////// ------------- ....
if (A[i]==NULL) exit(0) ;
}
X=malloc(m*sizeof(float));
if (X==NULL) exit(0) ;
Y=calloc(n,sizeof(float));
if (Y==NULL) exit(0) ;
for(i=0;i<n;i++) // La saisie de la matrice A :
{
for(j=0;j<m;j++)
{
printf("Saisir A[%d][%d] : \t",i,j);
scanf("%f",A[i]+j);
}
}
// la saisie de la matrice unidimensionnelle X
for(i=0;i<m;i++)
{
printf("Saisir X[%d]: \t",i);
scanf("%f",X+i);
}
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
*(Y+i)+=*(A[i]+j)**(X+j); // ou bien Y[i]=A[i][j]*X[j] ;
}
} // affichage du résultat :
printf("les valeurs de Y sont : ");
for(i=0;i<n;i++)
{
printf("%f \t",*(Y+i));
} // 2 eme manche
// h et k sont de valeur ajoutées a n et m ;
printf("Saisir h : \t ");
scanf("%d",&h);
printf("Saisir k : \t ");
scanf("%d",&k);
// pointeurs doubles temporaires :
float **tempA , *tempX , *tempY ;
tempA=realloc(A,(n+h)*sizeof(float*));
if (tempA==NULL) exit(0) ;
A=tempA ;
for(i=0;i<n;i++)
{
tempA[i]=realloc(A[i],(m+k)*sizeof(float));
if (tempA[i]==NULL) exit(0) ;
A[i]=tempA[i] ;
}
tempX=realloc(X,(m+k)*sizeof(float));
if (tempX==NULL) exit(0) ;
X=tempX ;
tempY=realloc(Y,(n+h)*sizeof(float));
if (tempY==NULL) exit(0) ;
Y=tempY ;
// saisie du reste de la matrice A
for(i=0;i<n;i++)
{
for(j=m;j<m+k;j++)
{
printf("Saisir A[%d][%d]",i,j);
scanf("%f",A[i]+j);
}
}
for(i=n;i<n+h;i++)
{
for(j=0;j<m+k;j++)
{
printf("Saisir A[%d][%d]",i,j);
scanf("%f",A[i]+j);
}
}
// le reste de X
for(i=m;i<m+k;i++)
{
printf("Saisir X[%d]",i);
scanf("%f",X+i);
}
// calcule du reste de Y
for(i=0;i<n;i++)
{
for(j=m;j<m+k;j++)
{
*(Y+i)+=*(A[i]+j)**(X+j) ;
}
}
for(i=n;i<n+h;i++)
{
*(Y+i)=0 ;
}
for(i=n;i<n+h;i++)
{
for(j=0;j<m+k;j++)
{
*(Y+i)+=*(A[i]+j)**(X+j) ;
}
}
// nouvel affichage de la matrice A
printf("les valeur de A : \n ");
for(i=0;i<n+h;i++)
{
for(j=0;j<m+k;j++)
{
printf("%f",*(A[i]+j)) ;
}
printf("\n");
}
// affcihage de X
printf("les valeurs de X sont : \b");
for(i=0;i<m+k;i++)
{
printf("%f \t",*(X+i));
}
// affichage de Y
printf("les valeurs de Y sont : \b");
for(i=0;i<n+h;i++)
{
printf("%f \t",*(Y+i));
}
return 0 ;
} |
Partager