Advertisement
Guest User

schodkowanie

a guest
Jan 9th, 2021
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.39 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4.  
  5. struct Matrix {
  6.     int r,c;
  7.     double** a;
  8. };
  9.  
  10. void schodkowanie(struct Matrix* m) {
  11.     int q,s;
  12.     double max_so_far;
  13.     for (int k=0;k<m->c;k++) {
  14.         s=0;
  15.         max_so_far=abs(m->a[k][k]);
  16.         for (int i=k+1;i<m->r;i++) {
  17.             if (abs(m->a[i][k])>max_so_far) {
  18.                 max_so_far=abs(m->a[i][k]);
  19.                 s=1;
  20.                 q=i;
  21.             }
  22.         }
  23.         if (s==1) {
  24.             for (int j=0;j<m->r;j++) {
  25.                 double temp=m->a[k][j];
  26.                 m->a[k][j]=m->a[q][j];
  27.                 m->a[q][j]=temp;
  28.             }
  29.         }
  30.         if (m->a[k][k]==0) return;
  31.         for (int w=k+1;w<m->r;w++) {
  32.             double wsp=m->a[w][k]/m->a[k][k];
  33.             for (int j=k;j<m->c;j++) {
  34.                 m->a[w][j]-=m->a[k][j]*wsp;
  35.             }
  36.         }
  37.     }
  38. }
  39.  
  40. int main() {
  41.     struct Matrix* m=malloc(sizeof(*m));
  42.  
  43.     m->r=3;
  44.     m->c=3;
  45.     m->a=malloc(m->r*sizeof(*m->a));
  46.     for (int i=0;i<m->r;i++) {
  47.         m->a[i]=malloc(m->c*sizeof(**m->a));
  48.     }
  49.  
  50.     for (int i=0;i<3;i++) {
  51.         for (int j=0;j<3;j++)
  52.         fscanf(stdin, "%lf", &m->a[i][j]);
  53.     }
  54.  
  55.     schodkowanie(m);
  56.  
  57.     for (int i=0;i<3;i++) {
  58.         for (int j=0;j<3;j++) {
  59.             printf("%lf ", m->a[i][j]);
  60.         }
  61.         printf("\n");
  62.     }
  63. }
  64.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement