Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <iostream>
- #include <ctime>
- #include <cstdlib>
- //funkcja do wypisywania tablicy do konsoli.
- void show(double** tab, int x, int y)
- {
- for (int i = 0;i < x;++i)
- {
- for (int j = 0;j < y;++j)
- std::cout << tab[i][j] << "\t";
- std::cout << std::endl;
- }
- std::cout << std::endl;
- std::cout << std::endl;
- }
- int main()
- {//wymiar tablicy
- int dim = 0;
- std::cout << "Podaj wymiar Tablicy: ";
- std::cin >> dim;
- std::cout << std::endl;
- //podwojony wymiar, zeby zmiescic tablice jednosci.
- int two = 2 * dim;
- //tworzymy tablice, alokujemy na nia pamiec
- double** matrix = new double* [dim];
- for (int i = 0;i < dim;++i)
- matrix[i] = new double[two];
- //wypelniamy liczbami
- //srand((unsigned int)time(NULL));
- srand(static_cast<unsigned int>(time(NULL)));
- for (int i = 0;i < dim;++i)
- {
- for (int j = 0;j < dim;++j)
- matrix[i][j] = rand() % 10;
- //wypelniamy tablice jednosci
- for (int j = dim;j < two;++j)
- {
- if(j==(dim+i))
- matrix[i][j] = 1;
- else
- matrix[i][j] = 0;
- }
- }
- show(matrix, dim, two);
- std::cout << std::endl << std::endl;
- //tworzymy bufor
- double buf = 0;
- double buff = 0;
- // zaczymany z lewym trojkatem
- for (int i = 0;i < dim;i++)
- {
- //wrzucamy wartosc do bufora
- buf = matrix[i][i];
- for (int j = 0;j < two;j++)
- {
- //sprawdzamy czy na przekatnej jest zero. Jak jest to zamieniamy z wierszem, w ktorym w tym wierszu nie ma zera
- if (buf ==0)
- {
- if (i == j)
- {
- int a = i;
- for (int b = i; b < dim;b++)
- {
- a = b;
- if (matrix[b][j] != 0)
- break;
- }
- for (int k = 0;k < two;k++)
- std::swap(matrix[i][k], matrix[a][k]);
- show(matrix, dim, two);
- std::cout << "zamieniam zera" << std::endl;
- }
- }
- else
- //dzielimy wiersz przez bufor
- matrix[i][j] /= buf;
- show(matrix, dim, two);
- }
- for (int k =(i+1);k < dim;k++)
- {
- //sprawdzamy, czy w kolumnie są zera
- if (matrix[k][i] != 0)
- {
- buff = matrix[k][i];
- if (matrix[k][i] != 1) //jak w kolumnie jest jedynka to pomijamy
- {
- for (int j = i;j < two;j++)
- {
- matrix[k][j] /= buff; // dzielimy cały wiersz przez wyraz w kolumnie
- }
- } // jak juz mamy same jedynki w kolumnie, to odejmujemy od kazdego wiersza wiersz ->
- //nadzedny, jak jest zero to nie robimy nic.
- if (matrix[k][i] == 1)
- {
- for (int j = i;j < two;j++)
- {
- matrix[k][j] -= matrix[i][j];
- }
- }
- }
- }
- show(matrix, dim, two);
- }
- show(matrix, dim, two);
- std::cout << std::endl << "lecimy z gornym trojkatem" << std::endl;
- //lecimy z gornym trojkatem
- for (int i = dim-1;i > 0;i--)//petla do zaczynania z elementem na przekatnej
- {
- for (int k= 0;k <i;k++)// petla do usuwania elementów nadprzekątną
- {
- buf = matrix[k][i];
- {
- for (int j = k;j < two;j++)
- matrix[k][j] -= (matrix[i][j] * buf);
- }
- }
- }
- show(matrix, dim, two);
- system("pause");
- }
Advertisement
Add Comment
Please, Sign In to add comment