Hakan ÖZMEN etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Hakan ÖZMEN etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

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ı

C++ Dersleri | Diziler - Dizilerin Başlatılması ( Array Initialization )

    C++ 'da bir dizi, yalnızca belirli bir değişken türü için sıralı şekilde bellekte yer almasını sağlayan veri bloğudur. C++ 'da bir değişkeni tanımlarken geçerli olan tüm kurallar geçerlidir. Ek olarak bir diziden bahsettiğimiz için, bu veri tipinden bellekte kaç adet saklayacağımızı belirtmemiz gerekir. Bunun için değişken ismine köşeli parantez [] içerisine adedi yazarız.
    Aşağıda int değişken tipi için adı arrInts olan ve 3 elemana sahip olduğu söylenen bir tanımlama görüyoruz :
int arrInts[3];
    Bir dizi tanımlanırken eleman değerleri de verilebilir, buna literatürde initialization deniyor, başlatma olarak çevrilmiş, bunun sebebi bir değişkeni sadece tanımlarsanız sadece tanımlamış olursunuz, değerini vermezseniz başlatmış olmazsınız :) ya compiler kafasına göre bir değer verir ya da vermez sadece adresi ve sığasını biliyor olur ve o anda bellekte o adreste ne veri varsa onun veri tipindeki karşılığını görüyor olursunuz, kararsız bir yapıdan bahsediyoruz yani. Tanımlamayı yaparken verileri gireceksek eşittir deyip süslü parantez içerisine elemanların arasına virgül koyarak yapabiliyoruz :

int arrInts[3] = { 1,256,14153 };

Eğer verileri bu şekilde giriyorsak dizi boyutunu belirtmek zorunlu değil, derleyicimiz 3 değer girildiğine göre boyutu da 3 olmalıdır inisiyatifini kullanabiliyor :

int arrInts[] = { 1,256,14153 };


Boyut belirttim ancak eksik veriler girdim :

int arrInts[5] = { 1,256,14153 };
boyutum beş olur, ilk üç elemanım bellidir diğer ikisi muallak, sıfır diyelim mi.
    Dizilerin içindeki elemana erişmek için index değerini kullanırız: bu değer için pozitif tam sayılardır diyebiliriz, 0 dan başlar birer birer artar. Beş elemanlı bir dizinin ilk elemanı sıfırıncı elemandır, son elemanı dördüncü elemandır. Yukarıdaki dizinin sıfır bir ve ikinci elemanlarına değer verilmiş, üçüncü elemanına değer verilmemiştir. Şu şekilde tekil olarak verebiliyoruz :

arrInts[3] = 15;

Dizideki herhangi bir elemana erişmek için değişken adının yanına erişmek istediğimiz elemanın index numarasını bir köşeli paranteze yazmak yeterlidir, Tüm elemanlarını ekrana yazdıralım dersek for ile şunu yazmak yeterli olacaktır :

for (int i = 0; i < 5; i++)
	cout << arrInts[i] << endl;

1
256
14153
15
0

Önceki Konu : C++ Diziler
Sonraki Konu : C++ 2 Boyutlu Diziler

C++ Dersleri | C++ Diziler [ Array ]

    C++ 'da diziler, aynı veri tipine sahip adetli verilerin tek bir değişken ismiyle erişilebilir hale gelmesine olanak tanır. Ne diyebiliriz; ADC 'den veri okuyoruz, saniyede 100 örnek alacağız, her biri için adcVal1, adcVal2 .. adcVal100 diye yüz adet değişken tanımlayıp her birine verimizi kaydedebiliriz, çok pratik olmayacak gibi geldi bana ve de örnekleme sayımız parametrik ise bu yolu kullanmak zaten imkansız oluyor. Bu noktada dizilerden faydalanıyoruz. AdcVals diye bir dizi oluşturup, boyutunu belirtip hafızada bizim için o veri tipinin yüz adedinin sığabileceği bir bellek alanı ayırmasını söylüyoruz, verilerimizi onun içinde saklayıp yine oradan erişebiliyoruz.

  C++ da bir diziyi her değişkende olduğu gibi önce tanımlamak "declare" sonrasında da dilersek başlatmak "initialize" gerekiyor. Sabit değerli diziler için dizi boyutunu da belirtmek gerekiyor ki hafıza organizasyonu işlevi düzgün görevini yerine getirebilsin. Sabit değerli diye bahsettiğimize göre boyutu sonradan belirlenebilen dinamik dizilerin kullanımı da mümkün. Dizilerin ve göstericilerin "pointer" bir araya geldiği aslında her göstericinin aynı zamanda bir dizi olabildiği falan gibi konuları da yazıyor olacağız.


Önceki Konu : Bit Alanları - Gömülü Sistemler Bellek Organizasyonu

Sonraki Konu : C++ Dizilerin Tanımlanması ve Kullanılması

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...