Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <math.h>
- #include <stdio.h>
- #include <fenv.h>
- void afficher_matrice(float* m, int l, int c){
- int i,j;
- for(i=0 ; i<c ; i++){
- for(j=0 ; j<l ; j++){
- printf("%f\t",m[i*c+j]);
- }
- printf("\n");
- }
- }
- void gausspv(float *a, float *b, int n)
- {
- int i,j,k,il;
- float aux, aux2;
- for(i=0;i<n-1;i++)
- {
- aux=fabs(*(a + i*n + i));
- il=i;
- for(k = i+1; k < n; k++)
- if (aux<fabs(*(a + k*n + i)))
- {
- aux = fabs(*(a + k*n + i));
- il = k;
- };
- if (il != i)
- {
- for(j=i;j<n;j++)
- {
- aux = *(a + il*n + j);
- *(a + il*n + j) = *(a + i*n + j);
- *(a + i*n + j) = aux;
- }
- aux = *(b + il);
- *(b + il) = *(b + i);
- *(b + i) = aux;
- }
- aux = *(a + i*n + i);
- for(i=0;i<n-1;i++)
- {
- aux = *(a + i*n + i);
- for(k=i+1; k<n; k++)
- *(a + i*n + k) /= aux;
- *(b + i) /= aux;
- for(k=i+1;k<n;k++){
- aux2 = *(a + k*n + i);
- for(j=i+1;j<n;j++)
- *(a + k*n + j) -= aux2 * *(a + i*n + j);
- *(b + k) -= aux2 * *(b+i);
- }
- }
- *(b + n-1) /= *(a + n*n -1);
- for(i=n-2;i>=0;i--){
- aux= *(b + i);
- for(k=i+1;k<n;k++)
- aux -= *(a + i*n + k) * *(b + k);
- *(b + i) = aux;
- }
- }
- void main(){
- float a[16]={2.5,1.5,1.7,2.5,1.7,1.8,2.2,1.8,2.0,1.2,2.5,3.0,2.1,1.2,2.2,1.5};
- float b[4]={11.11,10.67,12.41,10.52};
- float c[16]={21.0,130.0,0.0,2.1,13.0,80.0,4.74,752.0,0.0,-0.4,3.9816,4.2,0.0,0.0,1.7,0.9};
- float d[4]={153.1,849.74,7.7816,2.6};
- int mode_arrondi;
- int choix;
- printf("Choisissez le mode d'arrondi : \nFE_TOWARDZERO : 0\nFE_TONEAREST : 1\nFE_DOWNWARD : 2\nFE_UPWARD : 3\n");
- choix = scanf("%d",&mode_arrondi);
- switch (choix){
- case 0:
- fesetround(FE_TOWARDZERO);
- case 1:
- fesetround(FE_TONEAREST);
- case 2:
- fesetround(FE_DOWNWARD);
- case 3:
- fesetround(FE_UPWARD);
- }
- //test de la fonction avec pivot sur le cas de la première activité:
- gausspv(a,b,4);
- afficher_matrice(a,4,4);
- afficher_matrice(b,4,1);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement