C kökenli dillerde indisler neden sıfırdan başlar ?

Pascal vb. programlama dilleriyle uzun süre uğraşmış kişiler C kökenli programlama dillerinde dizi indislerinin 0’dan başlamasına anlam veremezler ve bunu gereksizlik olarak görürler. Böyle iki farklı şeklin oluşmasının sebebi şu iki farklı gösterim biçimi kullanılmasından kaynaklanır:

  • Sıraya göre gösterim
  • Konuma göre gösterim

Günlük hayatta kullandığımız sıralı gösterim yönteminde, içerisinde bir hacim olan varlıklar tek bir sayıyla gösterilerek sayılır. Bellekteki herhangi bir tamsayı da bir hacim kaplar.
Eğer bu alana bellekteki 1. alan dersek, bu sıraya göre gösterimdir. Eğer, 1. alanın nereden başladığını soracak olursak, bu da konuma göre gösterimdir.

C dilinde açılmış dizilerde elemanlar 1 birim kabul edilir. Elemanın indisi olarak olarak bu birimin başlangıcı seçilir. Dolayısıyla 1. elemanın konumu 0 kabul edilir. Bu durumda [0-1) birim’lik alan 1. yerdir. Bu 1. yer, [0-1) birim arası tüm uzayın ifade edilme şeklidir.
Yani C’ de konuma göre gösterim yapıyoruz.

Konum gösterimini çoğu zaman farketmeden sıralı gösterime çeviririz.
Bu dönüşümün doğal olarak yapıldığını şuradan farkettim:
Çoğu zaman elimizdeki bir kağıda hızlıca, 5 gözlü bir dizi çizmek istediğimizde;
önce dikdörtgenin dış hatlarını çizip, sonra soldan itibaren belli aralıklara bölerek gidersek, son göz eksik kalabilmekte ya da fazla olabilmektedir. En azından kontrol amaçlı kaç tane göz oluşturduğumuzu sayarız. Bunun sebebi, hızlıca çizerken bazen gözleri bazen de çizgileri saymamızdır.

Bu konu için, matrisleri eşit uzunlukta gruplanmış sayı dizileri olarak düşünelim.
Aşağıdaki matrisler 7’şerli olarak gruplanmış 4 adet sayı dizisi gösterir.

Elimizde eşit uzunlukta gruplanmış sayı dizileri varsa, sayıların yerlerini göstermek için sıralı gösterim yerine konum gösterimi kullanmak bence daha anlaşılır olacaktır.

Şöyle bir senaryo düşünelim
Bir okulda 4 kat var ve her bir katta da 7 tane derslik var.
Her bir dersliğe ilk kattan başlanarak sırayla derslik numarası verilmiş durumdadır.
Yani şu durumda bir dersliğin okulun kaçıncı dersliği olduğu söylenebilir.

Herhangi bir dersliğin,bulunduğu katın kaçıncı dersliği olduğunu bulmak istersek;
Burada katlar eşit uzunluklu sayı grupları olarak düşünülebilir.

i: kat numarası (1,2,…,4)
j: dersliğin bulunduğu katta baştan itibaren kaçıncı derslik olduğu (1,2,…7)
sn: dersliğin genel sıra numarası (1,2,3…,28)

j= (sn-1) MOD 7 // 0,1,2,3,4,5,6
burada sn sıralı gösterimdir.
(sn-1) MOD 7 ile konum gösteren temsil şekline geçildi.

bu ifadeye eklenen +1, ile sayı gösteren temsil şekline geçilir.
j=((sn-1) MOD 7) +1 // 1,2,3,4,5,6,7

Örnek: Yukarıda, soldaki matris için. (Sıralı Gösterim)
28. Eleman:
(28-1) / 7 + 1 = 4. satır (Sıralı gösterim)
(28-1) MOD 7 + 1 = 7. sütun

1. Eleman:
(1-1) / 7 + 1 = 1. Satır
(1-1) MOD 7 + 1 = 1. Sütun

Bu işlem C dilinde kodlanmış olsaydı,
+1 kullanılmayacaktı. Çünkü, burada +1 ile konum gösteriminden sıralı gösterime geçiliyor.
Ayrıca,
sn dizisi de 0 dan başlamış olsaydı -1 kullanılmayacaktı. Burada sıralı gösterimden konum gösterimine geçilmiş olacaktı.

Copyright © 2010 – Taha Yavuz Bodur
Not: Burada sıralı gösterim ve konum gösterimi benim koyduğum tabirlerdir.
Not – 2: Bu yazı herhangi bir kaynağa bakılmadan hazırlanmıştır. Dolayısıyla, bu yazıda yazdıklarımın hiçbirinin doğruluğunu iddia etmiyorum. Bu nedenle yoruma açıktır.

Advertisements

Leave a comment

Filed under Life

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s