C Programlama İle NxN Matris Determinantı Hesaplama

C Programlama İle NxN Matris Determinantı Hesaplama

Herkese iyi günler dileriz.Bu yazımızda sizlere C programlama dili ile nxn matrislerin determinantını hesaplayan programın kodlarını paylaşacağız.

Özellikle üniversiteye giden öğrenci arkadaşlarımız için ödevlerde ve sınavlarda karşılarına soru olarak çıkabilecek olan determinant hesaplama programının kodlarına aşağıdan ulaşabilirsiniz.Kodların yanlarına açıklamalarını yazdık.Ardından bir ekran görüntüsü de paylaştık.

Kısaca programdan bahsedelim.Programa dışarıdan nxn şeklinde matris giriliyor.Ardından teker teker eleman değerleri de giriliyor.Bu matris 2×2, 3×3, 4×4 vb. şeklinde olmak zorundadır.Çünkü atıyorum 2×3 lük bir matrisin determinantı hesaplanmaz.Determinant hesabı için matrisin satır ve sütun sayıları eşit olmalıdır.Ardından program otomatik işlemleri yapacak ve matrisin determinantını sizlere sunacaktır.

Programda 2 ayrı fonksiyon kullanılmıştır.İlki ana fonksiyon olan “main” ,diğeri de determinant hesabı yapılan “determinant” fonksiyonudur.Burada 1×1 ve 2×2 lik matrislerin determinantları kolaylıkla bulunmaktadır.Diğer uzun matrislerin determinantları ise minör ve kofaktörleri yardımıyla hesaplanır.Yani mesela 3×3 lüğü ele alalım.Burada sırasıyla ilk satır ilk sütun elemanını alıp -1 üzeri bulunduğu sıra yazılıp ardından o sayıya değmeyecek 2×2 lik matrisi alıp onun determinantı şeklinde alınır ve hepsinin toplamı da 3×3’lüğün determinantını vermiş olur.Şimdi kodlara ve anlatımına geçelim.

C Programlama Dili İle NxN Matris Determinantı Hesaplama Programı Kodları

#include<stdio.h> //Kütüphane kodlarımızı ekledik.
#include<conio.h>
#include<math.h>
#define MAX 20 //Bu max değeri matrisimiz için oluşturduğumuz elemanların değeridir.Yani max 20 derseniz maksimum 20 satırlı veya 20 sütunlu matris oluşturabilirsiniz anlamına geliyor.
#include <locale.h>
int determinant(int a[MAX][MAX],int n);
int main() //Ana fonksiyonumuz.
{
setlocale(LC_ALL, "Turkish");  //Türkçe karakter sorunu olmaması için eklediğimiz kod.
 int i,j,r,c,a[MAX][MAX],b[MAX][MAX],deter=0;
 printf("\nLütfen matrisin satır sayısını giriniz= "); //Burada matrisimizin kaça kaçlık olacağını giriyoruz.Sütun ve satır sayısının eşit olması yani kare matris olması gerekiyor.Aksi taktirde determinant hesaplanamaz.
 scanf("%d",&r);
 printf("\nLütfen matrisin sütun sayısını giriniz= ");
 scanf("%d",&c);
 if(r==c)
 {
 printf("\nLütfen matrisin elemanlarını sırasıyla Enter tuşuna basarak giriniz=\n");
 for(i=0;i<r;i++) //Burada ise döngü yardımıyla matrisimizin tüm elemanlarını dışarıdan giriyoruz.
 {
 for(j=0;j<c;j++)
 {
 scanf("%d",&a[i][j]);
 }
 }
 deter=determinant(a,r); //Burada deter değerimiz determinant(a,r) fonksiyonuna gidecek.Ardından ordan alınan sonuçla deter olarak ana fonksiyona geri dönecektir.
 printf("\nVerilen matris:\n");
 for(i=0;i<r;i++)
 {
 for(j=0;j<c;j++)
 {
 printf("%d\t",a[i][j]);
 }
 printf("\n");
 }
 printf("\nMatrisin determinantı: %d\n",deter); //Bu şekilde determinant hesabımız yapılmış oldu.Burada determinant sonucumuz ekrana yazdırılacaktır.
 }
 else
 {
 printf("\nHATA! Determinantın hesaplanması için matrisin satır ve sütun sayıları eşit olmalıdır.\n");
 }
getch();
 return 0;
}
int determinant(int a[MAX][MAX],int n) //Şimdi geldik determinant hesaplayan fonksiyona.
{
 int deter=0,p,h,k,i,j,gecici[MAX][MAX];
 if(n==1)
 {
 return a[0][0];
 }
 else if(n==2)
 {
 deter=(a[0][0]*a[1][1]-a[0][1]*a[1][0]); //Eğer 2x2 lik bir matris ise köşegenlerin çarpımıyla determinant hesaplanır.
 return deter;
 }
 else
 {
 for(p=0;p<n;p++) //Ama 2x2 lik üstü bir matris ise asıl işlemler burada başlıyor.Üstte de yazdığımız gibi 3x3 ve daha üstü matrislerin determinantlarını matrisin majörü ve kofaktörü ile hesaplayacağız.
 {
 h = 0;
 k = 0;
 for(i=1;i<n;i++)
 {
 for( j=0;j<n;j++)
 {
 if(j==p)
 {
 continue; //Devam etme kodumuz.
 }
 gecici[h][k] = a[i][j]; //Burada matris elemanlarımızı determinant hesaplamak için gecici matrisimizin elemanlarına atıyoruz.
 k++;
 if(k==n-1)
 {
 h++;
 k = 0;
 }
 }
 }
 deter=deter+a[0][p]*pow(-1,p)*determinant(gecici,n-1); //Burada ise asıl determinant hesabı yapılıyor.determinant(gecici,n-1) bu ifadenin anlamı ise n sayısı kodlardaki sütun sayısıdır.İlk başta mesela 3 olarak başladıysa burada -1 yapılıyor ve 2x2 lik matrise düşüyor.Haliyle burada direkt olarak köşegenler çarpılarak determinant hesabı yapılmış olacak.Tabii sonra tüm bu işlemler toplanacak ve asıl determinant değerimiz ortaya çıkmış olacaktır.
 }
 return deter; //Fonksiyonu deter olarak dışarı çıkartıyor.Ana fonksiyondan bu fonksyion çağırıldığı zaman deter değeri yani determinant sonucu direkt olarak oraya gitmiş olacak.
 }
}

Kodlar bu şekildedir.Şimdi ekran görüntüsü paylaşalım.

Yukarıda gördüğünüz gibi dışarıdan 3×3 lük bir matris girdik.Elemanlarını ise 1,2,3,4,5,6,7,8,9 olarak girdik.Sonuç olarak program matrisin determinantını hesapladı ve bizlere “0” değerini verdi.Gerçekten de elle yaptığımızda bu matrisin determinantının 0 olduğunu görüyoruz.Sizler de bu kodlar sayesinde determinant hesabı yapabilirsiniz.Kodlar aşağıdaki kaynaklardan alıntıdır.Oradan daha detaylı bakabilirsiniz.

Determinant hesaplama programı bu şekildedir.Umarız faydalı olur.Diğer C dili program kodlarına buradaki sayfadan ulaşabilirsiniz.Herkese iyi çalışmalar dileriz…

Kaynaklar=

https://gist.githubusercontent.com/mertyildiran/8054471/raw/358322962695cb024eedc960ab43311458cf2739/determinant.c

http://www.yildiz.edu.tr/~nguzel/Determinant_Ve_Hesaplanmasi_Ve_Numerik_Yontemler.doc

http://bilgisayarkavramlari.sadievrenseker.com/2012/05/01/matrisin-determinanti-matrix-determinant/
---Bizlere Destek Olmak İçin Aşağıdan Yorum Yazmayı ve Yazılarımızı Sosyal Medyada Paylaşmayı Unutmayınız---
admin

Merhabalar sitemizde sizler için birbirinden kaliteli paylaşımlar yapmaktayız.Her konuda bilgili editör arkadaşlarımızla sizlere faydalı ve eğitici makaleler paylaşmaktayız.Ders notları,seo,oyun,dini bilgiler vb. tüm alanda sizler için en iyi içerikleri üretmekteyiz.Bizleri takip ettiğiniz için teşekkür ederiz...

Benzer Yazılar

Bu yazıya henüz yorum yapılmamıştır, ilk yorumu yapmak için tıklayın.

Bir Cevap Yazın

E-posta hesabınız yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*
*

Time limit is exhausted. Please reload CAPTCHA.