C++ Bir Matrisin Determinantını Hesaplama

Bir matrisin determinantını hesaplayan programın kodu aşağıdaki gibidir. Program öncelikle hesaplanacak olan matrisin boyutunu istemektedir. (örnek: matris 5x5 ise boyut 5'tir) Sonrasında ise kullanıcıdan matrise ait tüm elemanların değerlerinin girilmesi istenmektedir. Devamında determinant_hesapla() fonksiyonuna argüman olarak girilen matris gönderilmektedir ve determinant hesaplanmaktadır, elde edilen sonuç geri döndürülmektedir:
#include <iostream>

void determinant();
float determinant_hesapla(float (*T1)[50], int);

int main(){
    determinant();
    
    return 0;
}

void determinant(){
    int m;
    std::cout << "m (mxm): ";
    std::cin >> m;
    float matris[50][50];

    float determinant;
    
    for(int i=0; i < m; i++){
        for(int j=0; j < m; j++){
            std::cout << "matris[" << i+1 << "][" << j+1 << "] = ";
            std::cin >> matris[i][j];
        }
    }
    std::cout << "Matrisin Determinantı: ";

    determinant = determinant_hesapla(matris, m);
    std::cout << determinant << std::endl;
}

float determinant_hesapla(float matris[50][50], int boyut){
    if(boyut == 1){
        return matris[0][0];
    }

    float yeni_matris[50][50];

    float determinant = 0; // 0'da başlatıldı
    int m, n, sutun;
    float isaret = 1;

    for (int sutun = 0; sutun < boyut; sutun++)
    { 
        m = 0;
        n = 0;
        for(int i = 0; i < boyut; i++){
            for (int j = 0; j < boyut; j++)
            {
                yeni_matris[i][j] = 0;
                if(i!=0 && j!=sutun){

                    yeni_matris[m][n] = matris[i][j];
                    if(n < (boyut-2)){ // satır sonunda değilse sütunu arttır
                        n++;
                    } 
                    else{
                        m++; // 1. sütuna dön ve satır satır ilerle
                        n = 0;
                    }
                }
            }  
        }
        determinant = determinant + isaret * (matris[0][sutun] * determinant_hesapla(yeni_matris, boyut-1));
        isaret = isaret * (-1);
    }
    return determinant;
}

Hiç yorum yok:

Yorum Gönderme