Csharpta Matris Çarpımı

Uzun zamandır c# hakkında yazı yazmamam, java vizesinden bir gün önce bu yazıyı yazmama sebep oldu diyebilirim. Belki zamansız bir yazı oldu benim için ama bir matris çarpımı programının sitede bulunması da gerekiyordu.

Aslında matris çarpımı klasik bir çok boyutlu dizi örneğidir. Bildiğiniz üzere matrisler iki boyutlu dizilerde tutulur. Ben de doğal olarak programda iki boyutlu dizi kullandım. Matris çarpım programının çarpım aşamasındaki indislerini, işlemin matematiksel boyutunu göz önüne alarak kolaylıkla oluşturabilirsiniz. Üç boyutlu iki kare matrisin çarpımını düşünün, a ve b matrisi olsun bunlar. Rastgele bir satırın sonucu şu şekilde olur:

sonuc32=a31*b12+a32*b22+a33*b32

gördüğünüz gibi üstteki ifade 3. satır, 2. sütundaki sonucun hesaplanma aşamasını göstermektedir. Çarpılan matrislerde birbirinden bağımsız değişiklik gösteren 3 değişken vardır. Yani bu da bizim çarpım aşamasında 3 farklı indis(i,j,k gibi) kullanmamız gerektiğini belirtiyor. Bu ifadeyi de programlamaya uyarlayacak olursak, 3 for döngüsü içinde çarpma işlemini gerçekleştirmek, en doğru çözüm gibi görünüyor.

Programı aşağıda verdim. Gayet açık olan programı bir de ben özetlemek istiyorum. Kod, dizi elemanlarını, parametre olarak iki boyutlu bir dizi alan diziElemaniOlustur isimli metodda, klavyeden alıyor. Bu kısmı, metoda dizi gönderiminin ve kullanımının öğrenilmesi için bu şekilde yaptım. İki diziyi de aldıktan sonra 3 for döngüsü içinde yukarda anlattığım prensiplere uyarak çarpma işlemini gerçekleştiriyor.


[cc lang = ‘csharp’]
using System;
namespace matris
{
class MatrisCarpimi
{
public static void Main()
{
int[,] matris1 = new int[3, 3];
int[,] matris2 = new int[3, 3];
int[,] sonuc = {{0,0,0},{0,0,0},{0,0,0}};
int i, j, k;
MatrisCarpimi matCarp = new MatrisCarpimi();
Console.WriteLine(“Birinci matrisin elemanlarını giriniz”);
matCarp.diziElemaniOlustur(matris1);
Console.WriteLine(“İkinci matrisin elemanlarını giriniz”);
matCarp.diziElemaniOlustur(matris2);
for (i = 0; i < 3; i++) { for (j = 0; j < 3; j++) { for (k = 0; k < 3; k++) { sonuc[i, j] += matris1[i, k] * matris2[k, j]; } Console.Write(sonuc[i, j] + "\t"); } Console.WriteLine(); } } public void diziElemaniOlustur(int[,] dizi) { int i, j; for (i = 0; i < 3; i++) { for (j = 0; j < 3; j++) { dizi[i, j] = Convert.ToInt16(Console.ReadLine()); } } } } } [/cc] Basit bir matris çarpım programıydı. Tabi programlamaya yeni başlayanların moralini bozmasın bu cümle. Zamanım kısıtlı olduğu için programı yeterince süsleyemedim. Mesela dizi boyutu kullanıcıdan alınabilirdi. “Bu kısımları da ilgilenen okuyucuların tamamlayabileceğini düşünüyorum” diyerek yazıma son veriyorum. İyi çalışmalar…

Bir cevap yazın

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