isotonicq

Untitled

Oct 23rd, 2016
111
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include<iostream>
  2. #include<cmath>
  3. #include<math.h>
  4. #include<string>
  5.  
  6. using namespace std;
  7.  
  8. class Macierz
  9. {
  10. private:
  11.     int ilosc_rownan, kolumna, rownanie;
  12.     double **macierz;
  13.  
  14. public:
  15.  
  16.     double round(double fValue)
  17.     {
  18.         return fValue < 0 ? ceil(fValue - 0.5)
  19.             : floor(fValue + 0.5);
  20.     }
  21.  
  22.     void wpisz_macierz()
  23.     {
  24.         cout << "Podaj ilosc rownan: ";
  25.         cin >> ilosc_rownan;
  26.         double **macierz = new double * [ilosc_rownan];
  27.  
  28.         for (int x = 0; x < ilosc_rownan; x++)
  29.         {
  30.             macierz[x] = new double[kolumna];
  31.  
  32.             for (int y = 0; y < ilosc_rownan+1; y++)
  33.             {
  34.                 if (y < ilosc_rownan)
  35.                 {
  36.                     cout << "A[" << x + 1 << ',' << y + 1 << ']';
  37.                 }
  38.                 else
  39.                 {
  40.                     cout << "B[" << x + 1 << ']';
  41.                 }
  42.                 cin >> macierz[x][y];
  43.             }
  44.         }
  45.     }
  46.  
  47.     void zaokraglij_macierz()
  48.     {
  49.         for (int x = 0; x < ilosc_rownan; x++)
  50.         {
  51.             for (int y = 0; y < ilosc_rownan + 1; y++)
  52.             {
  53.                 macierz[x][y] = round(macierz[x][y]);
  54.             }
  55.         }
  56.     }
  57.  
  58.     void wyswietl_macierz()
  59.     {
  60.         for (int x = 0; x < ilosc_rownan; x++)
  61.         {
  62.             for (int y = 0; y < ilosc_rownan + 1; y++)
  63.             {
  64.                 if (y < ilosc_rownan)
  65.                 {
  66.                     cout << macierz[x][y] << ' ';
  67.                 }
  68.                 else
  69.                 {
  70.                     cout << "| " << macierz[x][y];
  71.                 }
  72.             }
  73.             cout << endl;
  74.         }
  75.     }
  76.  
  77.     void wyswietl_wynik()
  78.     {
  79.         for (int x = 0; x < ilosc_rownan; x++)
  80.         {
  81.             cout << "x" << x + 1 << ':' << macierz[x][ilosc_rownan];
  82.         }
  83.     }
  84.  
  85.  
  86.     void metoda_gaussa()
  87.     {
  88.  
  89.         for (kolumna = 0; kolumna < ilosc_rownan; kolumna++)
  90.         {
  91.             double max = macierz[kolumna][kolumna];
  92.             rownanie = kolumna;
  93.  
  94.             for (int wiersz = kolumna; wiersz < ilosc_rownan; wiersz++)
  95.             {
  96.                 if (abs(macierz[wiersz][kolumna]) > max)
  97.                 {
  98.                     max = abs(macierz[wiersz][kolumna]);
  99.                     rownanie = wiersz;
  100.                 }
  101.             }
  102.  
  103.             if (abs(max) < 1.E-20)
  104.             {
  105.                 cout << "Macierz osobliwa" << endl; break;
  106.             }
  107.  
  108.             for (int x = kolumna; x < ilosc_rownan + 1; x++)
  109.             {
  110.                 double zmienna_tymczasowa = macierz[kolumna][x];
  111.                 macierz[kolumna][x] = macierz[rownanie][x];
  112.                 macierz[rownanie][x] = zmienna_tymczasowa;
  113.             }
  114.  
  115.             double pole = macierz[kolumna][kolumna];
  116.  
  117.             for (int x = kolumna; x < ilosc_rownan + 1; x++)
  118.             {
  119.                 double zmienna_tymczasowa = macierz[kolumna][x] / pole;
  120.                 macierz[kolumna][x] = zmienna_tymczasowa;
  121.             }
  122.  
  123.             for (int x = 0; x < ilosc_rownan; x++)
  124.             {
  125.                 if (x != kolumna)
  126.                 {
  127.                     double g = macierz[x][kolumna];
  128.                     for (int y = kolumna; y < ilosc_rownan + 1; y++)
  129.                     {
  130.                         macierz[x][y] -= (g * macierz[kolumna][y]);
  131.                     }
  132.                 }
  133.             }
  134.         }
  135.     }
  136. };
  137.  
  138. int main()
  139. {
  140.     Macierz *obiekt = new Macierz();
  141.     obiekt->wpisz_macierz();
  142.  
  143.     cout << "Twoja macierz: " << endl;
  144.     obiekt->wyswietl_macierz();
  145.  
  146.  
  147.     obiekt->metoda_gaussa();
  148.     obiekt->zaokraglij_macierz();
  149.     cout << "Macierz po zaokragleniu: " << endl;
  150.     obiekt->wyswietl_macierz();
  151.  
  152.     cout << "Wynik: " << endl;
  153.     obiekt->wyswietl_wynik();
  154.  
  155.     return 0;
  156. }
RAW Paste Data