14
Kas'10

Matrislerde Çarpma (C Programlama Dili)

Merhaba,

Matrislerde çarpım yapabilen bir program dediğimizde bazı eksikleri olduğunu biliyoruz.Ben de dedim ki matrisin kaça kaçlık olacağını bizden alsın ve sadece kare matrisleri değil çarpılabilecek tüm matrisleri çarpabilen bir program olsun.Bunun için biraz uğraştım.Çıkan sonuç beni memnun etti.Umarım sizinde işinize yarar.

Programın Kodları:

//Matrislerde Çarpma

#include <stdio.h>
#include <conio.h>

main(){

   int j,i,n,m,a,k,A[10][10],B[10][10],C[10][10]={};

   //C matrisini sıfırlayalım
   for(i=0;i<10;i++){
     for(j=0;j<10;j++){
       C[i][j]=0;
     }
   }

   //Matrislerin boyutlarını alalım.

   do{
      printf("matrisler = n x m => n=?,m=? :");
      scanf("%d %d",&n,&m);

      printf("matrisler = m x a => a=? :");
      scanf("%d",&a);

      if(n>10 || m>10 || a>10)
         printf("n,a veya m 10'dan buyuk olamaz.\n\n");
   }while(n>10 || m>10 || a>10);

   //Matrislerin elemanlarını girelim
   for(i=0;i<n;i++){
      for(j=0;j<m;j++){
        printf("A[%d][%d] : ",i+1,j+1);
        scanf("%d",&A[i][j]);
      }
   }

   for(i=0;i<m;i++){
      for(j=0;j<a;j++){
        printf("B[%d][%d] : ",i+1,j+1);
        scanf("%d",&B[i][j]);
      }
   }

   printf("\nMatrislerin Carpim Sonucu : \n\n");

   //işlem kısmı
   for(i=0;i<n;i++){
      for(j=0;j<a;j++){
         for(k=0;k<m;k++){
             C[i][j]+=A[i][k]*B[k][j];
         }
         printf("%d ",C[i][j]);
      }
      printf("\n");
    }

   printf("\nCarpim sonucu n x a 'lik bir matristir.");

   getch();

}

23-37 satırları arasında do-while ile matris boyutlarının 10’dan kucuk girilmesini sağladım.

İlk önce 1. matrisin boyutlarını n x m olarak aldık.Çarpım işlemi yapılabilmesi için 2. matrisin m tane satırı olmalıdır.

Bu yuzden 2. matrisin sadece stun sayısını kullanıcıdan aldık.

 

41-49 arasında kullanıcıdan A matrisinin elamanlarını istedim.İki boyutlu matris kullandığımız için iki tane for döngüsü kullandım.

1.for döngüsünde matrisin satırlarını ilerletirken diğer for ile stunlarını ilerlettim.

B matrisi için de aynısını yaptıktan sonra işlem kısmına geldim.En önemli kısmı da burası zaten.3 tane for döngüsünün amacını açıklamaya çalışacağım.

En içteki k değişkeni ile kurduğumuz for döngüsü çarpma işlemi yapılırken bir elemanın bulunması için birden fazla toplama yapmamızı sağlıyor.

Mesela 3×3 lük A ve B matrisleri için ilk eleman bulunacakken A11*B11+A12*B21+A13*B31 işlemi bize sonuç matrisimizin C11 elamanını bulduruyor.İşte en içteki for döngüsü ile bu işlemi yapıyoruz.

Diğer 2 for döngüsü yine sıradaki elemanı bulmak için işimize yarıyor.

Şimdi gelelim bu 3 for döngüsünün neden n,a ve m ‘e kadar dönmesini istediğimize.

 

İlk for döngüsünün n kadar dönmesini istiyoruz çünkü sonuç matrisinin, 1. matrisin satır sayısı olan n kadar satır elamanı olacak.

 

İkinci for a kadar dönüyor çünkü 1. matrisin herhangi bir satırı ile 2. matrisin bütün stunları çarpılacak.İkinci for döngüsü 2. matrisin stunlarında bir sonrakine geçmemizi sağlıyor.

 

Üçüncü for ise m kadar dönüyor çünkü m bizim 2. matrisimizin satır sayısı.Çarpıp toplama işlemi de 2. matrisin satır sayısı kadar yapılıyor.

Hatalarım varsa kusura bakmayın.Belirtirseniz düzeltmeye çalışırım.Herkese iyi çalışmalar.

  • onur cece

    helal bee:):)

Yeni makaleleri E-Mail ile takip edin!