C ile Matris Tanımlanması ve Çarpımı

Bu yazıda vereceğim kod kullanıcıdan iki matris için önce boyutlarını alıyor, sonra onlara göre birer dizi oluşturup kullanıcıdan matris elemanlarını alıyor. En son da matrisleri çarpıp sonucu yine bir matris şeklinde ekrana yazdırıyor. Bir arkadaşım yazabilir miyiz demişken oturdum, kodu temizleme/kısaltma üzerinde çalışmadığım için fazla gereksiz yerler görebilirsiniz. Mesela dizileri bir fonksiyona nasıl göndereceğime pointer içerdiğini hatırladığım için şu anlık bakmadım, bu işlem kodu oldukça kısaltacağı gibi modülerliğini de artırırdı(modülerlik bir Python alışkanlığı). Daha fazla uzatmadan kodu koyayım, kısaltmak isterseniz en basidinden matrisleri ekrana yazdıran ve kullanıcıdan matris alan kısımları birer fonksiyona taşısanız önemli ölçüde rahatlayacaktır.

#include <stdio.h>

int main(void){
    /* Biraz Kod Ameleliği de Olsa, İki Kez Ayrı Ayrı Alıp Göstersin: */
    int satir, sutun, satirSay = 0, sutunSay = 0;
    printf("Kac satir?: ");
    scanf("%d", &satir);
    printf("Kac Sutun?: ");
    scanf("%d", &sutun);
    int matris[satir][sutun];

    for(satirSay = 0; satirSay < satir; satirSay++){
        for(sutunSay = 0; sutunSay < sutun; sutunSay++){
            printf("%d satir %d sutun: ",satirSay+1,sutunSay+1);
            scanf("%d", &matris[satirSay][sutunSay]);
            printf("\n");
            }
        }

    for(satirSay = 0; satirSay < satir; satirSay++){
        for(sutunSay = 0; sutunSay < sutun; sutunSay++){
            printf("%3d", matris[satirSay][sutunSay]);
            }
        printf("\n");
        }

    /* 2. Matris İçin Bilgileri Alalım */
    int satir1, sutun1;
    printf("*********************\nIkinci matris icin: \n");
    printf("Kac satir?: ");
    scanf("%d", &satir1);
    printf("Kac Sutun?: ");
    scanf("%d", &sutun1);
    int matris1[satir1][sutun1];

    for(satirSay = 0; satirSay < satir1; satirSay++){
        for(sutunSay = 0; sutunSay < sutun1; sutunSay++){
            printf("%d satir %d sutun: ",satirSay+1,sutunSay+1);
            scanf("%d", &matris1[satirSay][sutunSay]);
            printf("\n");
            }
        }

    for(satirSay = 0; satirSay < satir1; satirSay++){
        for(sutunSay = 0; sutunSay < sutun1; sutunSay++){
            printf("%3d", matris1[satirSay][sutunSay]);
            }
        printf("\n");
        }

    if(sutun != satir1){
    printf("Matrislerin boyutlari uyumsuz. Islem iptal edildi.");
    return 0;
    }

    printf("\nCarpma islemi basliyor:\n");
    int sayac, satirSayac, sutunSayac, deger;
    int sonucMatrisi[satir][sutun1];
    for(satirSayac = 0; satirSayac<satir; satirSayac++){
        for(sutunSayac = 0; sutunSayac<sutun1; sutunSayac++){
            deger = 0;
            for(sayac = 0; sayac<sutun; sayac++){
                deger += matris[satirSayac][sayac]*matris1[sayac][sutunSayac];
                }       
            sonucMatrisi[satirSayac][sutunSayac] = deger;
            }

    }

    for(satirSay = 0; satirSay < satir; satirSay++){
        for(sutunSay = 0; sutunSay < sutun1; sutunSay++){
            printf("%3d", sonucMatrisi[satirSay][sutunSay]);
            }
        printf("\n");
        }

    return 0;
}

Kodlarla ilgili sıkıntınız olursa http://www.ufakseyleratolyesi.com/sorucevap/ adresinden sormaya çekinmeyin.

 
comments powered by Disqus