c ++ Работа в классе Matrix, проблемы с адаптацией конкретной функции с рекурсией для нее - PullRequest
0 голосов
/ 11 октября 2019

Я пытаюсь разработать класс для матриц в c ++, и у меня есть старая функция, которая использует рекурсию для вычисления nxn определителей, которые я хочу внедрить в de Class. В течение нескольких дней безуспешно возился с этим.

Итак, основная проблема, которую я нахожу, связана с рекурсивной частью функции, она была ранее разработана для некоторых школьных занятий, я не уверен, как сохранить параметрыфункции, работающей для класса, я был бы признателен за некоторые указатели.

Это класс

class matriz
{   private:

    int a=0, b=0;
    float m[MAX][MAX], aux[MAX][MAX], aux2[MAX][MAX];

    public:  
        matriz(int);
        matriz(float *, int);
        matriz(float *, int, int); 
        void size_input();
        void printm();
        void rand_populate();
        float mute_det(float *, int);

};

и упомянутая функция

float matriz::mute_det(float* , int a)
{   
    int i=0, j=0, k=0, n1=0, n2=0;
    float det=m[0][0] * m[1][1] - m[1][0] * m[0][1];
    float d=aux[0][0] * aux[1][1] - aux[1][0] * aux[0][1];

    if(a==1)
    {
        return m[0][0];
    }
    else if(a==2)
    {
        return det;
    }

    for(k=0;k<a;k++)
    {   
        n1=0;
        n2=0;
        for(i=1;i<a;i++)
        {   
            =0;
            for(j=0;j<a;j++)
            {   
                if(j==k)
                {
                    j++;
                }

                aux[n1][n2]=m[i][j];
                n1++;
            }
            n2++;
        }   

        if (k%2==0)
        {   
            if (a==2)
            {
                d=d+m[0][k]*mute_det(aux, a);
            }
            else if(a!=2 && k==0)
            {
                d=d*m[0][0]+mute_det(aux, a-1)*m[0][1];
            }
            else if(a!=2 && k!=0)
            {
                d=d+mute_det(aux, a-1)*m[0][k];
            }

        }else
        {        
            if (a==2)
            {
                d=d-m[0][k]*mute_det(aux, a);
            }
            else if(a!=2 && k==0)
            {
                d=d*m[0][0]-mute_det(aux, a-1)*m[0][1];
            }
            else if(a!=2 && k!=0)
            {
                d=d-mute_det(aux, a-1)*m[0][k];
            }
        }
    }

    return d;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...