Diziler, Göstericiler ve Dizgiler
Diziler nedir?
C Programlamada diziler, aynı tipte olan birbirleri ile ilişkili verilerin veya değişkenlerin bellli bir indis sırasına göre tek bir değişken adı altında bir arada tutulmasını sağlayan yapılardır. Kodlama ihtiyacına göre, program kodunun çalıştırılmasından itibaren işlem yapılacak veri listesinin belli bir sıraya göre düzenli bir şekilde hafızada tutulmasını ve erişilmesini sağlarlar.
int k[5] şeklinde bir dizi tanımlanması neden daha kullanışlı bir çözüm sunar?
Veri değişken türlerini tanımlarken, tam sayı tipinde dört farklı değişkene ihtiyaç olduğunda, “int k1, k2, k3, k4,k5 ;” şeklinde tanımlama yapılabiliyordu. Ancak bu değişkenlerin hepsi aynı türde ve özellikle de bu değişkenler sırasıyla belli bir algoritmaya göre hesaplamaya tabi tutulacak ise, int k[5] ; şeklinde bir dizi tanımlanması daha kullanışlı bir çözüm sunmaktadır. Çünkü program kodlarımızda, ne kadar çok değişken olursa, kod blokları içerisinde kontrol edilmesi de bir o kadar zor olacaktır. Bu örnekte yalnızca 5 farklı değişken için bir dizi oluşturulmuş olmasına rağmen, değişken sayısının çok fazla olup. (örneğin 1000), elle tek tek tanımlanması imkânsız olan durumlarda dizilerin kullanımının önemi ortaya çıkmaktadır. Böylece yinelemeler ve daha sonraki bölümde anlatılacak olan fonksiyonlarla birlikte daha kolay ve düzenli bir veri kullanımına olanak sağladığı görülecektir.
Dizi tanımlanırken genel ifade nasıl yazılır?
Dizi tanımlanırken genel ifade, tip dizi_adı[ BOYUT] ; şeklindedir. tip ifadesi int, char, float, double vb. değişken türlerinden herhangi birisi olabilir. Köşeli parantez [ ] ifadesi içerisinde belirtilen, BOYUT ise dizi içerisinde saklanacak, işlem yapılacak olan toplam veri sayısı olup, tanımlanan dizinin genel kapasitesini-boyutunu ifade eder. Buna göre, int k[5] ifadesi, tam sayı türünde 5 elemanlı k adında bir dizi tanımlar.
Bir dizinin ilk elemanın indisi hangi sayı ile başlar?
Dizilerde dikkat edilmesi gereken önemli bir nokta, BOYUT kadar elemana sahip bir dizinin ilk elemanının indisi 0 (sıfır) ile başlamasından dolayı, dizinin son elemanının indis değeri sayısal olarak BOYUT-1 olmaktadır. int k[5]; örneğimizde, ilk eleman k[0] olmakla birlikte, elemanlar k[1], k[2], k[3] şeklinde devam ederek sonuncu, yani dördüncü eleman ise k[4] nolu dizi elemanı olacaktır.
C program kodlarındaki satırların bitiminden sonra kullanılan /* ve */ işaretlerinin görevi nedir?
Program kodlarındaki satırların bitiminden sonra /* ve */ işaretleri arasında yer alan metinler derleyici tarafından program satırı olarak dikkate alınmaz ve derlenmez. Bu işaretler arasına yazılan metinler ilgili satırı açıklamak amacıyla yazılmıştır.
C programlama dilinde printf komutu ne ifade eder?
printf komutu yardımıyla da her elemanın ekrana yazdırma işlemi gerçekleştirilmektedir.
#include <stdio.h>
#include <conio.h> /*getch fonksiyonunu kullanabilmek icin*/ /*tanimlanmistir.*/
int main( void)
{
int k[5]; /*k adinda dizi tanimlamasi*/ int i; /* sayaç-indis degeri*/
printf(“Ilk tanimlama sonrasi k dizisi elemanlari:\n”); /*Aciklama*/
for ( i = 0; i < 5; i++ ) /* k dizisinin elemanlarini ekrana yazan yineleme*/
{ printf(“k[%d] = %d\n”, i , k[i]); }
for ( i = 0; i < 5; i++ )/*0 dan 4’ e kadar toplam 5 adet yineleme indisi*/
{ k[i] = 0; } /*Sifirlama*/
printf(“Sifirlama sonrasi k dizisi elemanlari:\n”); /*Aciklama*/
for ( i = 0; i < 5; i++ )/*k dizisinin elemanlarini ekrana yazar*/ { printf(“k[%d] = %d\n”, i , k[i]); }
getch(); /*Program ciktisini ekranda bekletebilmek icin*/
return 0; }
Yukarıdaki kod bloğuna göre program çıktısı nasıl olacaktır?
Program Çıktısı
Tanimlama Sonrasi k dizisi elemanlari: k[0] = 0
k[1] = 0
k[2] = 2686832
k[3] = 328
k[4] = 320
Sifirlama Sonrasi k dizisi elemanları: k[0] = 0
k[1] = 0
k[2] = 0
k[3] = 0
k[4] = 0
Dizilerde # define ifadesinin işlevi nedir?
Dizilerin boyut bilgilerinde kullanılabilecek ve programlamada büyük esneklik sağlayan yapılardan biri de # define ifadesidir. Main fonksiyonundan önce önişlemci tanımları bölümünde kullanılan bu yapı önişlemci komutudur.
#define BOYUT 5 ifadesi, sembolik sabit olan BOYUT’un değerinin 5 olduğunu belirtir. Önişlemci tarafından, kodun derleme işleminden önce dikkate alınarak BOYUT yazan her yere 5 ifadesini yerleştiren bir tanımdır.
#include <stdio.h>
#include <conio.h> /*getch fonksiyonunu kullanabilmek icin*/ #define BOYUT 5
int main(void)
{
int k [BOYU T ]; /* k adinda dizi tanimlamasi*/
int i; /*sayac-indis degeri*/
printf(“k dizisi elemanlarina %d adet deger atayiniz\n”, BOYUT );
for ( i = 1; i <= BOYUT ; i++ ) /*0 dan 4’ e kadar toplam 5 adet indis*/
{ printf(“ k[%d] degerini giriniz:”,(i-1) );
scanf (“ %d “, &k[i-1] );
}
printf(“\n k dizisine klavyeden girdiginiz %d adet sayi degerleri
:\n”, BOYU T );
for ( i = 1; i <= BOYU T ; i++ ) /* 0 dan 4’ e kadar toplam 5 adet indis*/
{ printf(“ k[%d] = %d \n”, (i-1) , k[i-1] ); }
getch(); /*Program ciktisini ekranda bekletebilmek için*/
return 0; }
yukarıdaki kod bloğunun program çıktısı nasıl olacaktır?
Program Çıktısı
k dizisi elemanlarina 5 adet deger atayiniz k[0] degerini giriniz: 10
k[1] degerini giriniz: 20
k[2] degerini giriniz: 30
k[3] degerini giriniz: 40
k[4] degerini giriniz: 50
k dizisine klavyeden girdiginiz 5 adet sayi degerleri : k[0] : 10
k[1] : 20
k[2] : 30
k[3] : 40
k[4] : 50
Aynı anda, aynı türden birden fazla dizi tanımlaması ne demektir?
Dizi tanımlamalarında üzerinde durulması gerekli bir diğer önemli durum ise, aynı anda, aynı türden birden fazla dizi tanımlamasıdır. Bu durumla ilgili olarak, çoklu değiş- ken tanımlamada da geçerli olan kurallar diziler için de geçerli olup her yeni dizi birbirinden virgül işareti “,” ile ayrılarak tanımlanmaktadır.
Örnek olarak, “int k[5], not[50]; ” şeklindeki tanımlamada tam sayı türünden, birbirinden bağımsız içeriklere sahip, 5 elemanlı k ve 50 elemanlı not dizileri aynı satırda tanımlanabilmektedir.
int arasinav2[5]={60,70,80}; şeklindeki bir tanımlamada a[3]. ve a[4]. elemanlar hangi değeri alır?
Doğrudan atama işlemli dizi tanımlaması yapılırken, {, } arasına dizinin eleman sayısından daha az değişken değeri yazılması durumunda eksik bırakılan değerler en sondaki değerler kabul edilerek bu değerlere doğrudan 0 değeri atanır. Buna göre int arasinav2[5]={60,70,80}; şeklindeki bir tanımlamada a[3]. ve a[4]. elemanlar 0 kabul edilir.
int final [ ]={40, 70, 50, 30, 80}; tanımlamasında final dizisinin boyutu derleyici tarafından kaç olarak algılanır?
int final [ ]={40, 70, 50, 30, 80}; tanımlamasında {} parantezler içerisinde 5 adet sayı tanımlanmış olup, [ ] köşeli parantez içerisine dizinin kapasitesi ile ilgili bir değer yazılmamış olmasına rağmen { } parantezleri içerisinde 5 değer olduğu için final dizisinin boyutu derleyici tarafından 5 olarak algılanır.
İki boyutlu diziler ile tek boyutlu diziler arasında kapasite açısından ne gibi farklılıklar bulunur?
İki boyutlu diziler, tek boyutlu dizilerden farklı olarak birden fazla satır ve sütunlardan oluşan tablolardır. Aynı kapasite-eleman sayısına sahip, tek boyutlu ve iki boyutlu diziler kapasite açısından karşılaştırılırsa, tek boyutlu bir dizinin elemanlarının dizilimi 1xmxn şeklinde iken, iki boyutlu dizinin elemanlarının dizilimi ise mxn şeklindedir.
İndis değerleri bakımından İki boyutlu diziler ile tek boyutlu diziler arasında ne gibi farklılıklar bulunur?
Tek boyutlu dizilerde indis değerleri tek bir yönde birer birer artarken, iki boyutlu dizilerde iki yönde de indis değerleri değişmektedir. Böylece, iki boyutlu bir dizideki bir elemanın içeriğine erişmek için hangi satır ve sütun değerine sahip ise, iki boyutlu bir düzlemdeki bir koordinat şeklinde; dikeyde y, yatayda x bir değişken gibi kabul edilir ise, b[y][x] şeklinde, x ve y indis değerleri ile ulaşılır. Dizinin satır ve sütun için ilk indis değeri tek boyutlu dizilerde olduğu gibi yine 0’dan başlamaktadır. m satır, n sütun sayısı olmak üzere, mxn’lik bir dizinin m*n adet farklı değere sahip eleman sayısı mevcuttur. Her satırda, sonuncu eleman b[y][n-1]., her sütunda sonuncu eleman b[m-1][x]. elemandır.
İki boyutlu dizinin elemanlarına erişimde b[y][x] yerine b[y, x] şeklindeki kullanım mümkün müdür?
İki boyutlu dizinin elemanlarına erişimde b[y][x] yerine yanlışlıkla b[y, x] şeklindeki kullanım hatalı bir kullanımdır. C Programlamada derleyici tarafından b[y, x] ifadesi b[x] olarak algılanır.
C Programlamada Göstericiler neyi ifade eder?
C Programlamada tanımlanan değişkenler, tiplerine göre bellekte değişik byte uzunlukla- rında alanlar kaplamaktadırlar. Normal değişkenler içeriklerinde programlarda kullanılacak değişkenlerin sayısal değerini içerirken, göstericiler bağlantıda olduğu değişkenlerin adreslerini içerirler. Böylece dolaylı olarak değişkenlere ulaşmayı sağlarlar. Göstericiler, programda fonksiyonlar arasında aynı anda birden fazla değişken aktarımı gibi işlemlerde oldukça büyük kolaylık sağlayan yapılardır.
C programlamada göstericiler nasıl tanımlanır?
Göstericiler (ingilizce ifadesi: pointerlar) programlarda kullanımlarından önce tanımlanmaları gerekmektedir. Gösterici bildiriminde, normal değişken bildiriminden farklı olarak, gösterici adı önünde ‘*’ karakteri kullanılmaktadır.
tip * degisken_adı;
şeklinde tanımlanmaktadır. tip değişkenler için de kullanılan int, float, char vb. türlerinden herhangi birisi olabilir. Ancak dikkat edilmesi gereken nokta, gösterici ile göstericiye bellek adresi atanacak değişkenin veri tipi aynı olmalıdır.
sizeof() fonksiyonunun işlevi nedir?
Dizilerin veya göstericilerin hafızada kapsadığı alanların analizi için sizeof() fonksiyonu kullanılabilir. sizeof() fonksiyonu girdi olarak aldığı değişkenin hafızada byte olarak kapladığı alanı geri döndürecektir.
C programlama dilinde dizgiler neyi ifade eder?
C programlama dilinde, dizgiler için tanımlanmış bir veri tipi bulunmamaktadır. Dizgiler karakterlerden oluşan diziler veya göstericiler olarak tanımlanabilir. Bu nedenle, dizgi tanımlarında tek boyutlu diziler tanımlanmaktadır. Normal dizilerden farklı olarak son elemanı NULL(0) (‘\0’) değeri ile sonlandırılmaktadır. Bu özelliklerinden dolayı karakter dizilerini, dizginin içereceği karakter sayısından bir karakter fazla kapasiteli olacak şekilde tanımlamak gerekmektedir.
char ad[] = “neslihan” tanımlamasına göre dizi boyutu kaçtır?
char d[10];
şeklindeki bir dizgi tanımlamasında, dizginin d[9] indis nolu elemanı NULL değere sahiptir. Bu durumda d dizgisine 9 karakterli bir kelime yazılabilir. d dizgisi içerisindeki karakterler hafızada okunurken NULL’ a kadar okunur, NULL bir sınır değeri oluşturur.
char ad[] = “neslihan”;
tanımlamasında 8 adet karakter içerilmektedir. Dizi boyutu verilmemiştir. Bu nedenle NULL karakteri de dahil olmak üzere toplamda 9 karakter kapasitesine sahip bir karakter dizisi yani dizgi tanımlanmıştır. Sırasıyla ‘n’, ‘e’, ‘s’, ‘l’, ‘i’, ‘h’, ‘a’, ‘n’, ‘\0’ karakterlerini içeren ad dizgisinin ilk elemanı olan ad [0] ‘n’, 7 indis nolu ad[7] elemanı ise yine ‘n’ harfini içermektedir. ad[8] nolu elemanı ise kelime sonu anlamına gelen ‘ \0 ’ NULL karakterini içerir.