C++ Dersleri | C++ 2 Boyutlu Diziler

     C++ ile iki boyutlu eleman sayısı önceden belirli 'sabit' diziler de oluşturmak mümkündür, yapı tek boyutlu dizi tanımlamasıyla mantıksal olarak benzer yapıda. Neyin ne olduğunu anlamak için dizi elaman sayılarını sabitlere atayarak şöyle tanımlamış olalım :

int const n_satir = 3;
int const n_sutun = 7;
int const m[n_satir][n_sutun] = 
{
    { 1, 2, 3, 4, 5, 6, 7 },
    { 8, 9, 10, 11, 12, 13, 14 },
    { 15, 16, 17, 18, 19, 20, 21 }
};

    Sabit kelimesine dikkat edelim, bu değer sabit olmak zorunda. Hazıfazada ne kadar yer ayıracağını bilmek istiyor sevgili derleyicimiz. 3 satırlı, 7 sütunlu ve 2 boyutlu dizi tanımlamış ve değerlerini yukarıdaki şekilde belirlemiş olduk, bu yapıyı matematikteki matriks yapısına benzetebiliriz. Yapı karmaşık görünse de aslında çok basit bit mantığa dayanır, int tipinde bir dizinin dizisidir demek tam anlamını karşılayabilir. Örnek olsun diye değeri 10 olan elemana ulaşmak istediğimizde m[1][2] yazabiliriz. Nerden geldik -> sıfırıncı satırda 10 yok, birinci satırda var, birinci satırın sıfırıncı elemanında ve birinci elemanında yok ikinci elemanında var.


For döngüsü ile 1 'den 20 'ye kadar bunları yazdıralım dersek kullanmamız gereken kod :

for (int y = 0; y < n_rows; ++y)
{
    for (int x = 0; x < n_cols; ++x)
    {
	cout << setw(4) << m[y][x];
    }
    cout << '\n';
}

Çıktımız :   

   1   2   3   4   5   6   7

   8   9  10  11  12  13  14

  15  16  17  18  19  20  21

    İç içe for kullanırken dikat edeceğimiz şeylerden biri, hangisinin daha hızlı döndüğüdür. Hızlı dönmekten kastımız nedir? y 'yi itarete eden for 1 artar, bu bir defa y artışı içerisinde x tam bir döngü tamamlar, yani x iterasyonu daha hızlıdır. Bu bize dizide neyi hızlı döndüreceğimizi belirlemekte faydalı olur, Şunu demeye çalışıyorum: önce satır seç, sonra sutün seç demiş oluyoruz, bu durumda sutün elemanları daha hızlı dönmüş oluyor. Bu sebeple m[x][y] yerine m[y][x] yazıyoruz.

    Kod içerisindeki setw fonksiyonuna takılmayın, çıktı için girilen her elemanın ne kadar karakter alanında yazdırılabileceğini ayarlayan özel bir fonksiyon, aksi halde hepsini bitişik yazardı, yine de merak edenler için söylemiş olalım kullanmak için :

#include <iomanip>

kütüphanesini koda dahil etmeniz yeterlidir. Bir de söylemek de fayda gördüğüm başka nokta m[x,y] gibi birşey yazmıyoruz :) m[x][y], söz dizimi önemli!

Önceki konu : C++ Diziler

Sonraki konu : C++ Dinamik Diziler tanımlanması ve kullanılması

Hiç yorum yok:

Yorum Gönder

Türksat Saat Kanalı ve IRIG-B Time Code

Türksat Saat Kanalından Saat Bilgisi Nasıl Alınır? Uyduda kanalları dolaşırken, şu Türksat Saat kanalı hep dikkatimi çekmiştir. Özellikle  S...