Advertisement
MaPV

VP_1_GAUS

Oct 25th, 2016
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.02 KB | None | 0 0
  1. #include<iostream>
  2. #include <math.h>
  3. #include <stdlib.h>
  4. using namespace std;
  5.  
  6. void print_m (float **ma,int size_i, int size_j){
  7.     cout << "matrix: " << endl;
  8.     for (int i = 0; i<size_i; i++){
  9.         for (int j = 0; j<size_j; j++)
  10.             if (j>size_j - 2) cout << "| " << ma[i][j]; else
  11.                 cout << ma[i][j] << " ";
  12.         cout << endl;
  13.     }
  14.  
  15. }
  16.  
  17. int main (){
  18.     setlocale(LC_ALL,"Ru");
  19.     int i,j,n,m;
  20.    
  21.     cout << "введите число уравнений: ";
  22.     cin >> n;
  23.     cout << "введите число неизвестных: ";
  24.     cin >> m;
  25.     m++;
  26.    
  27.     float **matrix = new    float *[n];
  28.     for (i = 0; i<n; i++)
  29.         matrix[i] = new float[m];
  30.  
  31.     for (i = 0; i<n; i++){
  32.         for (j = 0; j<m; j++){
  33.             cout << "уравнение " << i + 1 << "-е коэффициент " << j + 1 << " : ";
  34.             cin >> matrix[i][j];
  35.             }
  36.         cout<<endl;
  37.         }
  38.  
  39.     cout<<"\n";
  40.     print_m(matrix,n,m);
  41.     cout << endl;
  42.  
  43.     //Метод Гаусса------------------------------------------------------------------------------------
  44.     int k;
  45.     float tmp;
  46.     float *xx=new float[n];
  47.  
  48.     //Прямой ход, приведение к верхнетреугольному виду
  49.     for (i = 0; i<n; i++){
  50.         tmp = matrix[i][i];
  51.         for (j = n; j >= i; j--)
  52.             matrix[i][j] /= tmp;  //получаем строку с 1 на ii
  53.         for (j = i + 1; j<n; j++){ //на строку вниз
  54.             tmp = matrix[j][i]; //храним tmp iго столбца нижней строки
  55.             for (k = n; k >= i; k--)
  56.                 matrix[j][k] -= tmp*matrix[i][k]; //от нижней строки отнимаем верхнюю *tmp, получаем строку вида 0..x..x
  57.         }
  58.     }
  59.  
  60.     //обратный ход
  61.     xx[n - 1] = matrix[n - 1][n];
  62.     for (i = n - 2; i >= 0; i--){
  63.         xx[i] = matrix[i][n];
  64.         for (j = i + 1; j<n; j++) xx[i] -= matrix[i][j] * xx[j];
  65.     }
  66.  
  67.     //Выводим решения
  68.     for (i = 0; i<n; i++)
  69.         cout << xx[i] << " ";
  70.     cout <<"\n"<< endl;
  71.  
  72.     system ("pause");
  73.     for (i = 0; i < n; i++){
  74.         delete[] matrix[i];
  75.     }
  76.     delete[] matrix;
  77.     delete[] xx;
  78.     return 0;
  79. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement