Advertisement
Guest User

Untitled

a guest
Apr 24th, 2019
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.41 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <string>
  4. #include <iomanip>
  5. int n = 5; // liczba elementow
  6. double A[5][5]; /* zestaw 3= {10,1,1,1,2,10,1,4,2,1,5,1,2,9,5,3,0,1,10,1,6,2,1,1,20};*/ /* zestaw 1= { 10, 1, 1, 1, 2, 3, 20, 4, 2, 1, 5, 1, 40, 9, 5, 3, 0, 1, 10, 1, 6, 2, 1, 1, 20 };*/
  7. double U[5][5];
  8. double L[5][5];
  9. double B[5]; /*z3= {15,18,22,15,30};*/ /*z1= { 15, 30, 60, 15, 30 };*/
  10. double Y[5];
  11. double X[5];
  12.  
  13. void zad3()
  14. {
  15.     Y[0] = B[0];
  16.     double temp;
  17.     for (int i = 1; i < n; i++)
  18.     {
  19.         temp = 0;
  20.         for (int k = 0; k <= i - 1; k++)
  21.         {
  22.             temp += L[i][k] * Y[k];
  23.         }
  24.         Y[i] = B[i] - temp;
  25.     }
  26.     if (U[n - 1][n - 1] == 0)
  27.         return;
  28.     X[n - 1] = Y[n - 1] / U[n - 1][n - 1];
  29.     double temp2;
  30.     for (int i = n - 2; i >= 0; i--)
  31.     {
  32.         temp2 = 0;
  33.         for (int k = i + 1; k <= n; k++)
  34.         {
  35.             temp2 += U[i][k] * X[k];
  36.         }
  37.         X[i] = (Y[i] - temp2) / U[i][i];
  38.     }
  39. }
  40. void zad2()
  41. {
  42.     for (int i = 0; i < n; i++)     // zerowanie macierzy L i U
  43.     {
  44.         for (int j = 0; j < n; j++)
  45.         {
  46.             L[i][j] = 0;
  47.             U[i][j] = 0;
  48.         }
  49.     }
  50.     for (int i = 0; i < n; i++)     // ustawienie przekatnej L na wartosc 1
  51.     {
  52.         L[i][i] = 1;
  53.     }
  54.     int i = 0;
  55.     int j = 0;
  56.     int k = 0;
  57.     for (j = 0; j < n; j++)
  58.     {
  59.         U[i][j] = A[i][j];
  60.     }
  61.     if (U[0][0] == 0)
  62.     {
  63.         std::cout << "nie moze byc xd";
  64.         return;
  65.     }
  66.     for (j = 1; j < n; j++)
  67.     {
  68.         L[j][0] = A[j][0] / U[0][0];
  69.     }
  70.     j = 0;
  71.     double temp = 0;
  72.     for (i = 1; i < n; i++)
  73.     {
  74.         // liczenie U
  75.         for (j = i; j < n; j++)
  76.         {
  77.             temp = 0;
  78.             for (k = 0; k <= i - 1; k++)
  79.             {
  80.                 temp += (L[i][k] * U[k][j]);
  81.             }
  82.             U[i][j] = A[i][j] - temp;
  83.         }
  84.         // liczenie L
  85.         for (int j = i + 1; j < n; j++)
  86.         {
  87.             temp = 0;
  88.             for (int k = 0; k <= i - 1; k++)
  89.             {
  90.                 temp += L[j][k] * U[k][i];
  91.             }
  92.             if (U[i][i] == 0) return;
  93.             L[j][i] = (A[j][i] - temp) / U[i][i];
  94.  
  95.         }
  96.     }
  97.  
  98.  
  99.     return;
  100. }
  101. void zad1() // dane do pliku podajemy: kazda liczba w osobnej linice, wierszami od lewej do prawej, bardzo wazne aby podac prawidlowy rozmiar. Najpierw macierz A potem wektor B
  102. {
  103.     std::ifstream file;
  104.     file.open("test2.txt");
  105.     if (file.is_open())
  106.     {
  107.         std::cout << "podaj rozmiar: ";
  108.         std::cin >> n;
  109.         for (int i = 0;i < n;i++)
  110.         {
  111.             for (int j = 0;j < n;j++)
  112.             {
  113.                 file >> A[i][j];
  114.             }
  115.         }
  116.  
  117.         for (int i = 0;i < n;i++)
  118.         {
  119.             file >> B[i];
  120.         }
  121.  
  122.         file.close();
  123.         return;
  124.     }
  125.  
  126.     else std::cout << "Couldn't open the file";
  127.     return;
  128.  
  129. }
  130. void zad4()
  131. {
  132.     std::ofstream file;
  133.     file.open("raport.txt");
  134.     if (file.is_open())
  135.     {
  136.         // dane wejsciowe
  137.  
  138.         file << "Dane wejsciowe\nMacierz A:\n";
  139.         for (int i = 0; i < n; i++) // macierz A
  140.         {
  141.             for (int j = 0; j < n; j++)
  142.             {
  143.                 file << A[i][j] <<"  ";
  144.             }
  145.             file << "\n";
  146.         }
  147.         file << "\n";
  148.         file << "Wektor B:\n";
  149.        
  150.         for (int i = 0; i < n; i++) // wektor B
  151.         {
  152.                 file << B[i]<< "  ";
  153.         }
  154.         file << "\n\n";
  155.  
  156.         // dane posrednie
  157.  
  158.         file << "Dane posrednie\nMacierz U:\n";
  159.         for (int i = 0; i < n; i++)         // macierz U
  160.         {
  161.             for (int j = 0; j < n; j++)
  162.             {
  163.                 file << U[i][j] << "  ";
  164.             }
  165.             file << "\n";
  166.         }
  167.         file << "\n";
  168.         file << "Macierz L:\n";
  169.         for (int i = 0; i < n; i++)         // macierz L
  170.         {
  171.             for (int j = 0; j < n; j++)
  172.             {
  173.                 file << L[i][j] << "  ";
  174.             }
  175.             file << "\n";
  176.         }
  177.         // wyniki obliczen Wektory Y i X
  178.         file << "\n";
  179.         file << "wektor X:\n";
  180.         //for (int i = 0;i < n;i++) // wektor X
  181.         //{
  182.         //  file << X[i] << " ";
  183.         //}
  184.         //file << "\n";
  185.         //for (int i = 0;i < n;i++) // wektor X
  186.         //{
  187.         //  file << std::scientific<< X[i] << " ";
  188.         //}
  189.         //file << "\n";
  190.         for (int i = 0;i < n;i++) // wektor X
  191.         {
  192.             file << std::scientific << std::setprecision(10) << X[i] << " ";
  193.         }
  194.         file << "\n";
  195.         file << "\n";
  196.         file << "wektor Y:\n";
  197.         for (int i = 0;i < n;i++) // wektor Y
  198.         {
  199.             file << std::scientific << std::setprecision(10) << Y[i] << " ";
  200.         }
  201.         file << "\n";
  202.         file.close();
  203.         return;
  204.     }
  205.  
  206.     return;
  207. }
  208. // funckje pomocnicze do testowania
  209. void outputL()
  210. {
  211.     int i = 0, j = 0;
  212.     for (i = 0; i < n; i++)
  213.     {
  214.         for (j = 0; j < n; j++)
  215.         {
  216.             printf("%f ", L[i][j]);
  217.         }
  218.         std::cout << "\n";
  219.     }
  220. }
  221. void outputU()
  222. {
  223.     int i = 0, j = 0;
  224.     for (i = 0; i < n; i++)
  225.     {
  226.         for (j = 0; j < n; j++)
  227.         {
  228.             printf("%f ", U[i][j]);
  229.         }
  230.         std::cout << "\n";
  231.     }
  232. }
  233. void output2()
  234. {
  235.     int i = 0;;
  236.     for (i = 0; i < n; i++)
  237.     {
  238.         std::cout << X[i] << std::endl;
  239.  
  240.     }
  241. }
  242. int main()
  243. {
  244.     zad1();
  245.     zad2();
  246.     zad3();
  247.     zad4();
  248.     system("pause");
  249.     return 0;
  250. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement