Advertisement
Guest User

cramer

a guest
Jun 21st, 2018
204
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.36 KB | None | 0 0
  1. //przykladowe uruchomienie:
  2. //  gcc -Wall -o cram cramer.c
  3. //  ./cram dane.txt
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <string.h>
  7.  
  8. //wyznacznik metoda sarrusa
  9. float sar(int n, float A[20][20])
  10. {
  11.  
  12.     float det;
  13.  
  14.     if(n==1)
  15.         return A[0][0];
  16.     else if(n==2)
  17.     {
  18.         det = A[0][0]*A[1][1]-A[0][1]*A[1][0];
  19.         return det;
  20.     }
  21.     else
  22.     {
  23.         det = A[0][0]*A[1][1]*A[2][2] + A[0][1]*A[1][2]*A[2][0] + A[0][2]*A[1][0]*A[2][1] - A[0][2]*A[1][1]*A[2][0] - A[0][0]*A[1][2]*A[2][1] - A[0][1]*A[2][2]*A[1][0];
  24.     }
  25.     return det;
  26. }
  27.  
  28.  
  29. int main(int argc,char **argv)
  30. {
  31.     FILE *plik = fopen(argv[1],"r");
  32.     char tab[20], *token;
  33.     float c[20][20], w[20][20], tmpW[20][20], b[20], x[5];
  34.     int s, i, j, row = 0, col;
  35.    
  36.     //odczyt macierzy z pliku
  37.     while(!feof(plik))
  38.     {
  39.         if(fgets(tab, 255, plik) == NULL) continue;
  40.  
  41.         token = strtok(tab," ");
  42.         col = 0;
  43.         while(token != NULL)
  44.         {
  45.             c[row][col] = atof(token);
  46.             token = strtok(NULL," ");
  47.             col++;
  48.         }
  49.         row++;
  50.     }
  51.     //przykładowa macierz C odczytana z pliku(taka jak w instrukcji):
  52. //     |2 3 2 22|
  53. // C = |4 8 4 48|
  54. //     |5 1 3 32|
  55.  
  56.     //przypisanie elementow z macierzy C(poza ostatnia kolumna) do macierzy W
  57.     for(i=0; i<row; i++)
  58.         for(j=0; j<row; j++)
  59.             w[i][j] = c[i][j];
  60.  
  61.     //przypisanie elementow z ostatniej kolumny macierzy C do wektora B
  62.     for(i=0; i<row; i++)
  63.             b[i] = c[i][col-1];
  64.  
  65.  
  66.     printf("Macierz W:\n");
  67.     for(i=0; i<row; i++)
  68.     {
  69.         for(j=0; j<row; j++)
  70.         {
  71.             printf("%0.f ",w[i][j]);
  72.         }
  73.         printf("\n");
  74.     }
  75.  
  76.     printf("Wektor B:\n");
  77.     for(i=0; i<row; i++)
  78.     {
  79.         printf("%0.0f\n",b[i]);
  80.     }
  81.  
  82.     printf("Wyznacznik W = %0.2f\n",sar(row,w));
  83.  
  84.     s = 0;
  85.     while(s != row)
  86.     {  
  87.         //przypisanie do macierz tmpW elementow z tablicy w
  88.         for(i=0; i<row; i++)
  89.             for(j=0; j<row; j++)
  90.                 tmpW[i][j] = w[i][j];
  91.        
  92.         //zamiana elementow z danej kolumny na elementy z wektora wyrazow wolnych
  93.         for(i=0; i<row; i++)
  94.             tmpW[i][s] = b[i];
  95.  
  96.         printf("Wyznacznik W%d = %0.2f\n",s+1,sar(row,tmpW));
  97.         //wyznacznie rozwiazania
  98.         x[s] = sar(row,tmpW)/sar(row,w);
  99.        
  100.         s++;       
  101.     }
  102.  
  103.     printf("\nSzukane niewiadome:\n");
  104.     for(i=0; i<row; i++)
  105.         printf("x%d = %0.1f\n",i+1,x[i]);
  106.  
  107.     free(token);
  108.     fclose(plik);
  109.     return 0;
  110. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement