Advertisement
Guest User

Untitled

a guest
Oct 16th, 2019
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.13 KB | None | 0 0
  1. #include <math.h>
  2. #include <stdio.h>
  3. #include <fenv.h>
  4.  
  5. void afficher_matrice(float* m, int l, int c){
  6. int i,j;
  7. for(i=0 ; i<c ; i++){
  8. for(j=0 ; j<l ; j++){
  9. printf("%f\t",m[i*c+j]);
  10. }
  11. printf("\n");
  12. }
  13.  
  14. }
  15.  
  16. void gausspv(float *a, float *b, int n)
  17. {
  18. int i,j,k,il;
  19. float aux, aux2;
  20. for(i=0;i<n-1;i++)
  21. {
  22. aux=fabs(*(a + i*n + i));
  23. il=i;
  24. for(k = i+1; k < n; k++)
  25. if (aux<fabs(*(a + k*n + i)))
  26. {
  27. aux = fabs(*(a + k*n + i));
  28. il = k;
  29. };
  30. if (il != i)
  31. {
  32. for(j=i;j<n;j++)
  33. {
  34. aux = *(a + il*n + j);
  35. *(a + il*n + j) = *(a + i*n + j);
  36. *(a + i*n + j) = aux;
  37. }
  38. aux = *(b + il);
  39. *(b + il) = *(b + i);
  40. *(b + i) = aux;
  41. }
  42. aux = *(a + i*n + i);
  43. for(i=0;i<n-1;i++)
  44. {
  45. aux = *(a + i*n + i);
  46. for(k=i+1; k<n; k++)
  47. *(a + i*n + k) /= aux;
  48. *(b + i) /= aux;
  49. for(k=i+1;k<n;k++){
  50. aux2 = *(a + k*n + i);
  51. for(j=i+1;j<n;j++)
  52. *(a + k*n + j) -= aux2 * *(a + i*n + j);
  53. *(b + k) -= aux2 * *(b+i);
  54. }
  55. }
  56. *(b + n-1) /= *(a + n*n -1);
  57. for(i=n-2;i>=0;i--){
  58. aux= *(b + i);
  59. for(k=i+1;k<n;k++)
  60. aux -= *(a + i*n + k) * *(b + k);
  61. *(b + i) = aux;
  62. }
  63. }
  64.  
  65.  
  66. void main(){
  67. 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};
  68. float b[4]={11.11,10.67,12.41,10.52};
  69. 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};
  70. float d[4]={153.1,849.74,7.7816,2.6};
  71. int mode_arrondi;
  72. int choix;
  73. printf("Choisissez le mode d'arrondi : \nFE_TOWARDZERO : 0\nFE_TONEAREST : 1\nFE_DOWNWARD : 2\nFE_UPWARD : 3\n");
  74. choix = scanf("%d",&mode_arrondi);
  75. switch (choix){
  76. case 0:
  77. fesetround(FE_TOWARDZERO);
  78. case 1:
  79. fesetround(FE_TONEAREST);
  80. case 2:
  81. fesetround(FE_DOWNWARD);
  82. case 3:
  83. fesetround(FE_UPWARD);
  84. }
  85.  
  86. //test de la fonction avec pivot sur le cas de la première activité:
  87. gausspv(a,b,4);
  88. afficher_matrice(a,4,4);
  89. afficher_matrice(b,4,1);
  90.  
  91.  
  92. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement