C
Programlama Dili
DERS – 13


Dizi, benzer elemanlardan oluşur. Diğer bir değişle dizi, aynı tip verilerin oluşturduğu küme biçimidir. Bahsettiğimiz küme ise matematikteki kümelerden biraz farklıdır. Biri dizi tanımlandıktan sonra, dizi elemanları bellekte peşpeşe saklanır. Bu yüzden diziler aynı tip verilerin toplanıp tek isimle adlandırılan veri bölgeleridir. Temel olarak iki özelliği mevcuttur.

  • Dizi elemanlarının bellekte (program çalıştığı sürece) sürekli biçimde bulunması.
  • Dizi elemanlarının aynı türden değişkenler olması.

Dizi elemanlarına ulaşmak için indisler kullanılır. İndisler tam sayı ifadeler olup, n tane dizi elemanının 0 ile n-1 arasında indislere sahip elemanları vardır.

Dizi Tanımı ve Kullanımı

Tip_adı değişken [boyut];

Tip_adı: Dizi elemanlarının tipi (int, float, char, vb.)

değişken: Dizinin adı,

boyut: Dizi boyutu(dizideki eleman sayısı]

ÖRNEK: int a[100];

Burada a isimli değişkenimizi, 100 tam sayı (100 elemanlı) alacak biçimde, bir dizi şeklinde tanıtmış olduk. Bu 100 veriye de a değişkeni ile erişilebilir. Dizideki herhangi bir elemana erişmek için, o elemanın sahip olduğu indis bilgisiyle çağırmak gerekir. Dizilerde ilk eleman 0 indislidir.

int a[100]={8,25,70,5,11,0,9,13,42}; için

a[0]= 8

a[1]= 25

a[5]= 11

a[k]= dizinin k. indisli elemanı olup, dizinin k+1. elemanını belirtir

a[0]= dizinin 1. elemanı

a[1]= dizinin 2. elemanı

a[10]= dizinin 11. elemanı gibi…

Ekran çıktısı:

ÖRNEK: Kullanıcının istediği sayıda dizi elemanı oluşturma.

Yukardaki programı incelersek; int a[100]; ile tamsayı tipinde 100 elemanlı bir a değişkenli dizi tanımladık. printf(“Dizi eleman sayisini gir > “); scanf(“%u”, &n); ile dizimizin kaç elemandan oluşacağını belirledik.

for (i = 0; i < n; i++) { printf(“Dizinin [%u]. elemanini gir > “, i + 1); scanf(“%d”, &a[i]); }

Burada bir döngü oluşturarak dizi elemanlarının scanf ile klavyeden girilmesini sağladık. i=0 döngü başlangıcımız. n değerimiz yani, dizi eleman sayımız 10 olsun. i değeri 10 dan küçük olduğu sürece döngü gövdesi içindeki işlemler devam edecektir. printf(“Dizinin [%u]. elemanini gir > “, i + 1); %u ile ekranda görülmesini istediğimiz işaretsiz tam sayıyı belirttik. bu değerin karşılığı olarakta i+1 değişkenini tanımladık. i+1 yerine i değerini yazsaydık o zaman Dizinin [1]. elemanını girin yerine, Dizinin [0]. elemanını girin yazacaktı. daha iyi anlaşılsın diye i yerine i+1 değerini yazdık. scanf(“%d”, &a[i]); yazarak dizinin i indisli değişkenine değer atadık. Mesela i=0 için 5 yazarsak, a[0]=5 değerini alır. i=1 için125 yazarsak a[1]=125 değerini alır. Döngü sonlanana kadar a[i] değerlerine atamalar yapılır.

printf(“\n\nOlusturulan dizi ve elemanlari :\n a[%d] = \{ “, n); for (i = 0; i < n; i++) { printf(“%d, “, a[i]); }

Yukardaki kodlardan da anlaşılacağı şeklide artık oluşturduğumuz diziyi ekranda yazdırmak istiyoruz. printf(“\n\nOlusturulan dizi ve elemanlari :\n a[%d] = \{ “, n); ile döngüye girmeden önce ekranda görülmesini istediğimiz yazıları yazıyoruz. Eğer bunları döngü içerisine yazsaydık, o zaman i nin her değeri için bu yazıyı yazacak ve karmaşık bir durum ortaya çıkacaktı. for (i = 0; i < n; i++) ile i=0 dan başlıyarak koşul sağlandığı müddetçe döngü gövdesinin işlemesini sağlıyoruz. printf(“%d, “, a[i]); ile %d yerine i indisli atanmış değerleri yazdırıyoruz. n=10 için a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], indisli elemanları sırayla yazdırmış oluyoruz.

#define ön işlemci komutu (preprocessor directive)

#define ön işlemci komutu sembolik sabit tanımlamada kullanılır. Diğer bir değişle, kaynak dosyada bir isim yerine başka bir ismin yerleştirilmesini sağlar. Programda kullanılan bu simgesel isimler ana programda kullanıldığı gibi, alt programlarda da aynı değere sahiptir. #define ön işlemci komutuyla tanımlanan şey, bütün fonksiyonlarda kullanılabilir. Bir çeşit, global (genel) değişken gibi davranır. Oldukça basit bir kullanımı vardır. Tek yapmamız gereken, neyin yerine neyi kullanacağımızın kararını vermektir.

Kullanım Şekli:

#define sabit_adı değeri

#define PI 3.1415926

#define : Ön işlemci komutuyla sembolik sabit tanımlanacağı belirtilir.

sabit_adı : İşlemlerde kullanacağımız adı belirtir (PI).

değeri : sabit_adı yazdığımız zaman alacağı değeri belirtir (3.1415926).

Basit bir örnekle başlayalım.

Daha önce yazmış olduğumuz programda #define ön işlemcisini kullanarak yazalım.

#define MAX 10 ile simgesel olarak tanıttığımız MAX isminin değerinin 10 olduğunu belirtiyoruz. Artık MAX yazdığımız her yerde 10 değeri atamış oluyoruz.

#define komutuyla basit ve sabit ifadeler yazabiliriz. Ancak kullanımı bununla kalmaz. İstersek bazı fonksiyonların isimlerini bile değiştirebiliriz. Bazı örneklerle açıklamaya çalışalım.

#define ALAN 12.46

#define CEVRE 14.10

Yukardaki örneklerde bir yerin alanını ve çevresini sembolik olarak tanıttık. Artık işlemlerde alan veya çevre değerlerini kullanmak istediğimizde sadece önişlemci adını yazarak bu değerlere ulaşabiliriz.

Yukarıdaki yazılımı derleyiciyle çalıştırdığımızda değişen bir şeyin olmadığını göreceğiz. Burada EKRAN simgesiyle printf fonksiyonu tanımlanmış oldu. Mesela scanf fonksiyonu içinde #define KLAVYE scanf şeklinde bi tanımlama yapabiliriz.

Dizilerde Sıralama

Bazı uygulamalarda bir kısım sayıların büyükten küçüğe ya da küçükten büyüğe sıralanması istenebilir. Bu aslında yazılım uygulamalarının en önemli problemlerinden biridir. Bu problemi çözmek için çeşitli algoritmalar oluşturulmuştur. En basit yöntem ise yer değiştirme yöntemidir. Örnek olarak 5 elemanlı bir diziyi küçükten büyüğe sıralayalım.

Sıralamasını yapmak istediğimiz dizi int dizi[5] = {10, 8, 3, 1, 6} olsun.

Yer değiştirme işlemi geçici bir değişken kullanılarak yapılır. bu değişkenimizin ismi gecici ( temp) olsun.

gecici = dizi[i];

dizi[i] = dizi[j];

dizi[j] = gecici;

a[0] a[1] a[2] a[3] a[4]
i=0 j=0 10 8 3 1 6
i=0 j=1 8 10 3 1 6
j=2 3 10 8 1 6
j=3 1 10 8 3 6
j=4 1 10 8 3 6
i=1 j=2 1 8 10 3 6
j=3 1 3 10 8 6
j=4 1 3 10 8 6
i=2 j=3 1 3 8 10 6
j=4 1 3 6 10 8
i=3 j=4 1 3 6 8 10

Örnek: Basit sıralama ile dizi elemanlarını küçükten büyüğe doğru sıralama.

ÖRNEK: Dizide ilk 25 fibonacci sayısını oluşturan program. ÖRNEK: Dizi elemanlarının değeri kadar şekil oluşturan program. ÖRNEK: Dizideki elemanları küçükten büyüğe sıralayan, en küçük ve en büyük elemanı bulan program. ÖRNEK: Klavyeden girilen sayıya kadar olan sayılardan tek ve çift olanları görüntüleyen program. ÖRNEK: Dizideki en büyük sayı ile en küçük sayı arasındaki farkı bulan program. ÖRNEK: Klavyeden 10 sayı girilerek ve tersten okuyarak sıralayan program .