C dili ile özel matris yapımı

Başlatan M4DMAX, 27 Mart 2016 - 19:53:57

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

M4DMAX

Şimdi elimizde fix bi kare matris var şu şekilde  yani köşegen 1 üstü 0 altı 2 lerden oluşuyor burda programın yapacağı matrisin boyutunu değiştirmek yani örnekteki 
1 0 0 0                                                                     
2 1 0 0
2 2 1 0
2 2 2 1

4x4 matris i 5x5 yada kullanıcı kaç girdiyse o değer şeklinde yapacak 5x5 derse  şekline getirmeli.Benim yapabildigim girilen değer boyutunda oluşturuyor ama aynı  kalıbı nasıl büyütür onu yapamadım.
1 0 0 0 0                                                                                                                   
2 1 0 0 0
2 2 1 0 0
2 2 2 1 0
2 2 2 2 1

bugra9

Senin büyütme olarak tanımladığın şey, yeni satır ve sütunun, bir önceki satır ve sütun ile aynı olması.

Örnek olarak senin verdiğin 4x4'den 5x5'e dönüşümü ele alalım. Yeni matrisin eski matrisinin tüm elemanlarını kendi yerlerinde barındırıyor. İlave olarak matris[0][0 ... 4] ve matris[0 ... 4][0] değerlerini tanımlaman gerekiyor. Dikkat ettiysen bu da aşağıdaki gibi olmalı.

matris[4][1] = matris[3][0], matris[4][2] = matris[3][1], matris[4][3] = matris[3][2], matris[4][4] = matris[3][3]
matris[1][4] = matris[0][3], matris[2][4] = matris[1][3], matris[3][4] = matris[2][3]

Yani yeni tüm elemanlar bir önceki sütun ve satırdaki değer ile dolduruluyor. matris[satır][sütun] = matris[satır-1][sütun-1]

Bir de ilk elemanlar matris[4][0] ile matris[0][4] kaldı. Onlar da bir üstüyle ve bir yanıyla eşit.

Sözde kod ile yazarsak


function matrisGenişlet(matris)
    n = matris.uzunluk + 1
    // Yeni matris tanımla
    yeniMatris = [n][n]

    // Eski matrisi aynen kopyala
    for i: 0 -> n-2
        for i2: 0 -> n-2
            yeniMatris[i][i2] = matris[i][i2]

    // Yeni satırı doldur
    for i: 1 -> n-1
        yeniMatris[n-1][i] = yeniMatris[n-2][i-1]

    // Yani sütunu doldur
    for i: 1 -> n-2
        yeniMatris[i][n-1] = yeniMatris[i-1][n-2]

    // Doldurulmamış ilk elemanlar tanımlanıyor
    yeniMatris[n-1][0] = yeniMatris[n-2][0]
    yeniMatris[0][n-1] = yeniMatris[0][n-2]

    return yeniMatris

       

erdemakin09

Sana kod yazmıcam çünkü bir şey öğrenemezsin. Ama kodu nasıl yazıcağını anlatıcam.
Edit:

Çok uğraşmadım algoritma için 2 dakkada aklıma ilk geleni yazdım. Biraz düşünerek daha iyi şeyler yapılabilir.

1. Matrisi Tanımla.
2. Kullanıcıdan Matrisin Boyutunu iste.
3 Kullanıcının istediği değerde yeni matris tanımla.
4. for( int i= 0; i < Kullanıcıdan Alınan Matrisin boyutu; i++)
          for ( int j= 0; j < Kullanıcıdan Alınan Matrisin Boyutu; j++)
              if( i<j) { yenimatris[i][j]=2}
              elseif(i == j) {yenimatris[i][j] =0 }
              else { yenimatris[i][j] = 1}
Her Can Bir Gün Ölümü Tadacaktır!

ShangriLa

Ben soyle birsey yapardim:

int main (int argc, char *argv[]) {
    unsigned boyut = 0, i, j;
    printf("Matris boyutunu giriniz:"); scanf("%d", &boyut);
    int **matris = (int **) malloc(boyut * sizeof(int *));
    for (i = 0; i < boyut; ++i) {
        matris[i] = (int *) malloc(boyut * sizeof(int));
        for (j = 0; j < boyut; ++j)
            matris[i][j] = i > j ? 2 : i == j ? 1 : 0;
    }
    return 0;
}
Ubuntu Mate Trusty