Проблемы с матрицей.

148
02 марта 2018, 17:43

И снова возможно глупые вопросы. Нужно посчитать определитель матрици через её триангуляцию(приведение к треугольному виду). В чем проблемам. Оно не треангулирует если матрица больше 3х3. Если кому не сложно будет разобраться в моем говнокоде буду благодарен.

    //подключаемые библиотеки
    #include <iostream>
    #include <vector>
    #include <cmath>
    //Класс матрици
    using namespace std;
    class matrix{
    private:
      int size;
      vector<vector<int> > mat;
      int swapCount;
    public:
      matrix(){cout<<"Exploit"<<endl;};
      void getparam(){
        cout<<"Введите размерность"<<endl;
        cin>>size;
        mat.reserve(size);
        for(int i=0;i<size;i++){
          mat[i].reserve(size);
        }
        cout<<"Заполните матрицу"<<endl;
        for(int i=0; i<size;i++){
          for(int j=0;j<size;j++){
            cout<<"Елемент х["<<i<<"]["<<j<<"] = ";
            cin>>mat[i][j];
          }
        }
      }
      int max_col(int i){
                double max= abs(mat[i][i]);
                int maxPos= size-1;
                for(int j=i+1; j<size;j++){
                  double element = abs(mat[j][i]);
                  if(element>max){
                    max=element;
                    maxPos=i;
                  }
                }
                return maxPos;
                }
      int triangulat(){
        swapCount=0;
          for(int i=0;i<size;i++){
            int imax= max_col(i);
            if(i != imax){
              swap(mat[i],mat[imax]);
              ++swapCount;
            }
            for(int j = i+1; j<size;j++){
              double mul = -mat[j][i]/mat[i][i];
              for(int k = i;k<size; k++){
              mat[j][k] += mat[i][k]*mul;
              }
            }
          }
          return swapCount;
      }
      void print(){
        for(int i=0;i<size;i++){
          for(int j=0;j<size;j++){
            cout<<mat[i][j]<<"  ";
          }
          cout<<""<<endl;
        }
      }
      ~matrix(){};
      double Opredel(){
        double opredel=0;
        for(int i=0;i<size;i++){
          opredel*=mat[i][i];
        }
        return opredel;
      }
    };
    //Основной модуль программы
    int main(){
      matrix b;
      b.getparam();
      b.print();
      cout<<""<<endl;
      int swapc=b.triangulat();
      b.print();
      double opredel;
      if(swapc % 2 == 0){
      opredel = b.Opredel();
    }else{
      opredel = b.Opredel();
      opredel *= -1;
    }
      cout<<""<<endl;
      cout<<"Определитель этой матрици равен = " << opredel<<endl;
      return 0;
    }
READ ALSO
С++ Что означает запись: float (*func4(double)(void))[10];?

С++ Что означает запись: float (*func4(double)(void))[10];?

Есть такая строка кода: float (*func4(double)(void))[10];Не могу понять, что это такое

170
Подключение графического интерфейса

Подключение графического интерфейса

Начал делать масштабный проект через консольное приложение, с мыслью «вот сейчас наберусь опыта в кодописании, а потом просто подключу интерфейс,...

154
Поиск блондина с максимальным ростом

Поиск блондина с максимальным ростом

Какие-то ошибки в коде, функция поиска просто выводит последнего человека, внесённого в список, а должна выводить блондина с максимальным...

122