daily pastebin goal
18%
SHARE
TWEET

Untitled

a guest Mar 24th, 2019 49 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // Wyznacznik wg rekurencyjnego rozwinięcia Laplace'a
  2. // Data   : 8.02.2011
  3. // (C)2012 mgr Jerzy Wałaszek
  4. //----------------------------
  5.  
  6. #include <iostream>
  7. #include <iomanip>
  8.  
  9. using namespace std;
  10.  
  11. // Rekurencyjna funkcja obliczająca rozwinięcie Laplace'a
  12. //-------------------------------------------------------
  13. double det(int n, int w, int * WK, double ** A)
  14. {
  15.   int    i,j,k,m, * KK;
  16.   double s;
  17.  
  18.   if(n == 1)                                    // sprawdzamy warunek zakończenia rekurencji
  19.  
  20.     return A[w][WK[0]];                         // macierz 1 x 1, wyznacznik równy elementowi
  21.  
  22.   else
  23.   {
  24.  
  25.     KK = new int[n - 1];                        // tworzymy dynamiczny wektor kolumn
  26.  
  27.     s = 0;                                      // zerujemy wartość rozwinięcia
  28.     m = 1;                                      // początkowy mnożnik
  29.  
  30.     for(i = 0; i < n; i++)                      // pętla obliczająca rozwinięcie
  31.     {
  32.  
  33.       k = 0;                                    // tworzymy wektor kolumn dla rekurencji
  34.  
  35.       for(j = 0; j < n - 1; j++)                // ma on o 1 kolumnę mniej niż WK
  36.       {
  37.         if(k == i) k++;                         // pomijamy bieżącą kolumnę
  38.         KK[j] = WK[k++];                        // pozostałe kolumny przenosimy do KK
  39.       }
  40.  
  41.       s += m * A[w][WK[i]] * det(n - 1,w  + 1, KK, A);
  42.  
  43.       m = -m;                                   // kolejny mnożnik
  44.  
  45.     }
  46.  
  47.     delete [] KK;                               // usuwamy zbędną już tablicę dynamiczną
  48.  
  49.     return s;                                   // ustalamy wartość funkcji
  50.  
  51.   }
  52. }
  53.  
  54. //*** PROGRAM GŁÓWNY ***
  55. //----------------------
  56.  
  57. int main()
  58. {
  59.   int       n,i,j;                              // stopień macierzy
  60.   int     * WK;                                 // wektor kolumn
  61.   double ** A;                                  // macierz
  62.  
  63.   cout << fixed << setprecision(4);
  64.  
  65.   cin >> n;                                     // odczytujemy stopień macierzy
  66.  
  67.   A = new double * [n];                         // tworzymy macierz wskaźników
  68.  
  69.   for(i = 0; i < n; i++)
  70.   {
  71.  
  72.     A[i] = new double[n];                       // tworzymy wiersz
  73.  
  74.     for(j = 0; j < n; j++) cin >> A[i][j];      // czytamy wiersz macierzy
  75.      
  76.   }
  77.  
  78.   WK = new int[n];                              // tworzymy wiersz kolumn
  79.  
  80.   for(i = 0; i < n; i++)                        // wypełniamy go numerami kolumn
  81.     WK[i] = i;
  82.  
  83.   cout << endl;
  84.  
  85.   cout << det(n, 0, WK, A) << endl; // obliczamy i wyświetlamy wyznacznik
  86.  
  87.   delete [] WK;                                 // usuwamy tablice dynamiczne
  88.  
  89.   for(i = 0; i < n; i++) delete [] A[i];
  90.  
  91.   delete [] A;
  92.  
  93. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top