Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <iomanip>
- #include <cmath>
- #include <fstream>
- #include <algorithm>
- #include <cstddef>
- using namespace std;
- const double eps = 1e-12; // stała przybliżenia zera
- bool gauss(int n, double** AB, double* X)// za pomocą tej funkcji wykonuje się cały algorytm eliminacji gaussa
- {
- double m, s;
- // przy pomocy poniższych forów eliminuje współczynniki
- for (int i = 0; i < n - 1; i++)
- {
- for (int j = i + 1; j < n; j++)
- {
- if (fabs(AB[i][i]) < eps)
- {
- return false;
- }
- m = -AB[j][i] / AB[i][i];
- AB[j][i] = 0;
- for (int k = i + 1; k <= n; k++)
- {
- AB[j][k] += m * AB[i][k];
- }
- }
- }
- // przy pomocy poniższych forów wyliczam niewiadome
- for (int i = n - 1; i >= 0; i--)
- {
- s = AB[i][n];
- for (int j = n - 1; j >= i + 1; j--)
- {
- s -= AB[i][j] * X[j];
- }
- if (fabs(AB[i][i]) < eps)
- {
- return false;
- }
- X[i] = s / AB[i][i];
- }
- for (int i = 0; i < n; i++)
- {
- for (int j = 0; j < n + 1; j++)
- {
- cout << AB[i][j] << " ";
- }
- cout << endl;
- }
- cout << endl << "--------------------------------------------------------------------------------" << endl;
- return true;
- }
- //------------------------------------------------------------------------------------------------------
- int main()
- {
- //double** AB;
- double* X;
- //cout << "Podaj wielkosc macierzy: " << endl;
- //cin >> n; //przyjęcie ilości niewiadomych (pierwsza liczba w pliku)
- //cout << "Wpisz macierz: " << endl;
- fstream file;
- file.open("", ios::in);//TODO ścieżka do pliku wejściowego
- int n;
- file >> n;
- // tworzenie tablicy dynamicznej dla macierzy dowolnej wielkości
- double** AB = new double* [n + 1];
- for (int i = 0; i < n + 1; i++)
- {
- AB[i] = new double[n+1];
- }
- // wpisywanie danych z pliku do tablicy
- for (int x = 0; x < n; x++)
- {
- for (int y = 0; y < n + 1; y++)
- {
- double k;
- file >> k;
- AB[x][y] = k;
- }
- }
- file.close();
- //AB = new double* [n];
- X = new double[n];
- //for (int i = 0; i < n; i++)
- //{
- // AB[i] = new double[n + 1];
- //}
- //for (int i = 0; i < n; i++)// poniższe pętgle wczytują dane do tablicy AB
- //{
- // for (int j = 0; j <= n; j++)
- // {
- // cin >> AB[i][j];
- // }
- //}
- //cout << endl << "--------------------------------------------------------------------------------" << endl;
- for (int i = 0; i < n; i++)
- {
- for (int j = 0; j < n + 1; j++)
- {
- cout << AB[i][j] << " ";
- }
- cout << endl;
- }
- cout << endl << "--------------------------------------------------------------------------------" << endl;
- if (gauss(n, AB, X)) // uruchamiamy naszą funkcję liczącą (eliminację gaussa)
- {
- for (int i = 0; i < n; i++)
- {
- cout << "x" << i + 1 << " = " << X[i] << endl; // wypisanie wyników
- }
- }
- else
- {
- cout << "DZIELNIK ZERO" << endl; // jeśli będziemy dzielić przez 0 kompilator to wypisze
- }
- for (int i = 0; i < n; i++)
- {
- delete[] AB[i];
- }
- delete[] AB;
- delete[] X;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement