Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include<math.h>
- #include <random>
- using namespace std;
- double** array1;
- double* x;
- double* r;
- int main()
- {
- int n, i, j, k, choise;
- int min, range, t;
- double s;
- setlocale(LC_ALL, "RUSSIAN");
- cout << "Решение систем уравнени методом Гаусса.\n";
- cout << "1 - случайное заполнение коэффициентов\n2 - ввод коэфициентов с клавиатуры\n3 - использование шаблонной системы\n";
- cin >> choise;
- n = 3;
- if ((choise == 1) || (choise == 2))
- {
- cout << "Введите число переменных: ";
- cin >> n;
- }
- array1 = new double* [n];
- for (i = 0; i < n; i++)
- array1[i] = new double [n + 1];
- x = new double[n];
- r = new double[n];
- if (choise == 1)
- {
- cout << "Введите минимальный возможны коэффициент: ";
- cin >> min;
- cout << "Введите диапозон: ";
- cin >> range;
- cout << "Коэффициенты заполнятся случайными числами от "<<min<<" до "<<range-min-1<<"20.\n";
- for (i = 0; i < n; i++)
- for (j = 0; j < n + 1; j++)
- array1[i][j] = (rand() % range + min);
- }
- else if (choise == 2)
- {
- for (i = 0; i < n; i++)
- {
- cout << "Введите коэффициенты для " << i + 1 << "-ой строки и результат уравнения " << i + 1 << "-ой строки:\n";
- for (j = 0; j < n + 1; j++)
- cin >> array1[i][j];
- }
- }
- else
- {
- array1[0][0] = 10.1;
- array1[0][1] = -1.35;
- array1[0][2] = 0.9;
- array1[0][3] = 9.9;
- array1[1][0] = 0.95;
- array1[1][1] = -0.7;
- array1[1][2] = 2.35;
- array1[1][3] = 10.2;
- array1[2][0] = 1.75;
- array1[2][1] = -2.63;
- array1[2][2] = 13.44;
- array1[2][3] = 11.0;
- }
- for (i = 0; i < n; i++)
- {
- cout << array1[i][0] << "*x" <<1;
- for (j=1;j<n;j++)
- cout <<" + "<< array1[i][j] << "*x" << j + 1;
- cout << " = " << array1[i][n] << endl;
- }
- for (i = 0; i < n - 1; i++)
- {
- t = 0;
- for (j = 0; j < n + 1; j++)
- {
- if (array1[i][j] == 0)
- t++;
- }
- if (t == n && abs(array1[i][n])>0.00001)
- {
- cout << "Ранг матрицы A меньше ранга матрицы A|B, решенией системы нет." << endl;
- return(0);
- }
- if (t == n + 1)
- {
- r[i] = 1;
- continue;
- }
- else
- {
- r[i] = 0;
- }
- for (j = i + 1; j < n; j++)
- {
- s = array1[j][i] / array1[i][i];
- for (k = i; k < n; k++)
- array1[j][k] = array1[j][k] - s * array1[i][k];
- array1[j][n] = array1[j][n] - s * array1[i][n];
- }
- }
- t = 0;
- for (j = 0; j < n + 1; j++)
- {
- if (array1[n-1][j] == 0)
- t++;
- }
- if (t == n && abs(array1[i][n]) > 0.00001)
- {
- cout << "Ранг матрицы A меньше ранга матрицы A|B, решенией системы нет." << endl;
- return(0);
- }
- if (t == n + 1)
- {
- r[n-1] = 1;
- }
- else
- {
- r[n-1] = 0;
- }
- for (i = n - 1; i >= 0; i--)
- {
- if (r[i] == 1)
- x[i] = 1;
- else
- x[i] = 0;
- }
- for (i = n-1; i >= 0; i--)
- {
- if (r[i] !=1)
- {
- x[i] = array1[i][n];
- for (j = 0; j < n ; j++)
- if (j!=i)
- x[i] = x[i] - array1[i][j] * x[j];
- x[i] = x[i] / array1[i][i];
- }
- }
- for (i = 0; i < n; i++)
- {
- cout << "x" << i + 1 << " = " << x[i];
- if (r[i] == 1)
- cout << " (корень был выбран как 1, но он является свободным и может принимать любое значение)";
- cout << endl;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement