Guest User

Untitled

a guest
Nov 7th, 2020
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.12 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <iostream>
  3. #include <ctime>
  4. #include <cstdlib>
  5.  
  6. //funkcja do wypisywania tablicy do konsoli.
  7. void show(double** tab, int x, int y)
  8. {
  9.     for (int i = 0;i < x;++i)
  10.     {
  11.         for (int j = 0;j < y;++j)
  12.             std::cout << tab[i][j] << "\t";
  13.         std::cout << std::endl;
  14.     }
  15.     std::cout << std::endl;
  16.     std::cout << std::endl;
  17. }
  18.  
  19. int main()
  20. {//wymiar tablicy
  21.     int dim = 0;
  22.     std::cout << "Podaj wymiar Tablicy: ";
  23.     std::cin >> dim;
  24.     std::cout << std::endl;
  25.     //podwojony wymiar, zeby zmiescic tablice jednosci.
  26.     int two = 2 * dim;
  27.     //tworzymy tablice, alokujemy na nia pamiec
  28.     double** matrix = new double* [dim];
  29.     for (int i = 0;i < dim;++i)
  30.         matrix[i] = new double[two];
  31.     //wypelniamy liczbami
  32.     //srand((unsigned int)time(NULL));
  33.     srand(static_cast<unsigned int>(time(NULL)));
  34.    
  35.     for (int i = 0;i < dim;++i)
  36.     {
  37.         for (int j = 0;j < dim;++j)
  38.             matrix[i][j] = rand() % 10;
  39.  
  40.         //wypelniamy tablice jednosci
  41.         for (int j = dim;j < two;++j)
  42.         {
  43.             if(j==(dim+i))
  44.             matrix[i][j] = 1;
  45.             else
  46.             matrix[i][j] = 0;
  47.  
  48.         }
  49.     }
  50.     show(matrix, dim, two);
  51.     std::cout << std::endl << std::endl;
  52.  
  53.     //tworzymy bufor
  54.     double buf = 0;
  55.     double buff = 0;
  56.  
  57.     // zaczymany z lewym trojkatem
  58.  
  59.     for (int i = 0;i < dim;i++)
  60.     {
  61.         //wrzucamy wartosc do bufora
  62.         buf = matrix[i][i];
  63.         for (int j = 0;j < two;j++)
  64.         {
  65.  
  66.            
  67.            
  68.             //sprawdzamy czy na przekatnej jest zero. Jak jest to zamieniamy z wierszem, w ktorym w tym wierszu nie ma zera
  69.             if (buf ==0)
  70.             {
  71.                     if (i == j)
  72.                     {
  73.                         int a = i;
  74.                         for (int b = i; b < dim;b++)
  75.                         {
  76.                             a = b;
  77.                             if (matrix[b][j] != 0)
  78.                                 break;
  79.                         }
  80.                        
  81.                             for (int k = 0;k < two;k++)
  82.                                 std::swap(matrix[i][k], matrix[a][k]);
  83.                                 show(matrix, dim, two);
  84.                                 std::cout << "zamieniam zera" << std::endl;
  85.                        
  86.                     }
  87.                                
  88.             }
  89.             else
  90.                 //dzielimy wiersz przez bufor
  91.             matrix[i][j] /= buf;
  92.             show(matrix, dim, two);
  93.            
  94.  
  95.         }
  96.         for (int k =(i+1);k < dim;k++)
  97.         {
  98.  
  99.            
  100.             //sprawdzamy, czy w kolumnie są zera
  101.             if (matrix[k][i] != 0)
  102.             {
  103.                 buff = matrix[k][i];
  104.                 if (matrix[k][i] != 1) //jak w kolumnie jest jedynka to pomijamy
  105.                 {
  106.                     for (int j = i;j < two;j++)
  107.                     {
  108.                         matrix[k][j] /= buff; // dzielimy cały wiersz przez wyraz w kolumnie
  109.                     }
  110.                    
  111.                 } // jak juz mamy same jedynki w kolumnie, to odejmujemy od kazdego wiersza wiersz ->
  112.                     //nadzedny, jak jest zero to nie robimy nic.
  113.                 if (matrix[k][i] == 1)
  114.                 {
  115.                     for (int j = i;j < two;j++)
  116.                     {
  117.                         matrix[k][j] -= matrix[i][j];
  118.                        
  119.                     }
  120.                 }
  121.  
  122.                
  123.  
  124.  
  125.             }
  126.  
  127.         }
  128.            
  129.         show(matrix, dim, two);
  130.     }
  131.                
  132.            
  133.        
  134.    
  135.         show(matrix, dim, two);
  136.         std::cout << std::endl << "lecimy z gornym trojkatem" << std::endl;
  137.         //lecimy z gornym trojkatem
  138.  
  139.         for (int i = dim-1;i > 0;i--)//petla do zaczynania z elementem na przekatnej
  140.         {
  141.             for (int k= 0;k <i;k++)// petla do usuwania elementów nadprzekątną
  142.             {
  143.                 buf = matrix[k][i];
  144.                 {
  145.                     for (int j = k;j < two;j++)
  146.  
  147.                         matrix[k][j] -= (matrix[i][j] * buf);
  148.                 }
  149.             }
  150.         }
  151.             show(matrix, dim, two);
  152.  
  153.  
  154.             system("pause");
  155.  
  156.  
  157. }
Advertisement
Add Comment
Please, Sign In to add comment