(Dizim) Array. 1.1 Array Nedir?
|
|
|
- Nergis Çubukçu
- 10 yıl önce
- İzleme sayısı:
Transkript
1 1 Array (Dizim) 1.1 Array Nedir? Array (dizim), aynı veri tipinden çok sayıda değişkeni barındıran bir yapıdır. Array e ait değişkenler, sıra numarası verilmiş bir liste gibidir. Listedeki öğelere sıra numarasıyla erişilir. Matematikteki sonlu dizidir. Örnekse, matematikte 100 öğesi olan bir sonlu diziyi a = {a 0, a 1, a 2,..., a 99 (1.1) biçiminde gösteririz; yani diziye ait öğeleri alt indisleriyle belirtiriz. a 7 simgesi, dizinin indisi 7 olan öğesini belirtir. Ayrıca, diziyi tanımlarken, öğelerinin hangi kümeden (veri tipi) alındığı belirtilir. Örneğin, "tamsayı dizisi", dersek, öğelerin tam sayılar kümesinden seçileceği anlaşılır. Bunu ya sözle ifade ederiz, ya da a i Z, (i = 0, 1, 2,..., 99) (1.2) simgesiyle belirtiriz.
2 2 BÖLÜM 1. ARRAY 1.2 Array Bildirimi Önce array in veri tipi belirtilir, sonra array e bir ad verilir. Array in adını izleyen köşeli parantez ( [ ]) içine arrayin bileşen sayısı yazılır. Çok boyutlu arrayler için, her boyuta karşılık bir köşeli parantez kullanılır ve içine o boyuttaki bileşen sayısı yazılır. Örnekler: 1 i n t i n t A r r [ 100 ] ; / 100 b i l e ş e n l i tek boyutlu i n t t i p i n d e n array b i l d i r i m i / f l o a t f l o a t A r r [ 9 0 ] ; / 90 b i l e ş e n l i tek boyutlu f l o a t t i p i n d e n array b i l d i r i m i / i n t tabloarr [ 5 ] [ 3 ] ; / 5 s a t ı r ve 3 kolonu olan i n t t i p i n d e n i k i boyutlu array / Bilgisayar programları basit editörlerle yazılır. O editörler a i simgesindeki gibi alt indis koyamaz. Üstelik, derleyiciler de alt indisi anlamaz. O nedenle, alt indis işlevini görmek üzere, indisler köşeli parantez içine yazılır. Dolayısıyla, arrayin öğeleri a = {a[0], a[1], a[2],..., a[99] (1.3) biçiminde yazılır. Arrayin öğelerinin, örneğin int veri tipinden olacağını belirtmek için de int a[n]; (1.4) deyimini yazarız. Buradaki [ ] simgesine array operatörü denilir. Görüldüğü gibi, bu operatörün iki işlevi vardır: 1. (1.4) deyiminde array bildirimi yapar. 2. (1.3) ifadesine { içindeki a[i] terimleri, arrayin bileşenleridir. Genel olarak, array adından sonra gelen [ ] içindeki tamsayı, arrayin hangi bileşeni olduğunu gösterir. Dikkatle incelersek, (1.1) ile (1.3) benzerdir. (1.2) ile (1.4) aynı işleve sahiptirler. Array yapısı hemen her dilde çok önemli roller üstlenir. İlk yaratılan üst düzeyli dillerden itibaren her dilde bu yapı vardır. Sonra yazılan C, C#, python, ruby gibi diller, bu yapıya, klasik array yapısındaki kısıtları kaldıran nitelikler eklemişlerdir. Matematikteki sonlu dizi kavramına benzeyen array kavramına her programlama dilinde gerekseme duyulması nedeni çok açıktır. Aynı veri tipinden birkaç değişken tanımlamak için genel kural izlenerek gerekli sayıda
3 1.3. TEK BOYUTLU ARRAY 3 değişken bildirimi yapılabilir. Ama, aynı veri tipinden, onlarca, yüzlerce ve hatta binlerce değişkene gerekseme duyuyorsak, onları tek tek tanımlamak, pratikte, olanaksız değilse bile çok çok zordur. Öte yandan, array yapısı içinde yer alan çok sayıda bileşen (herbiri bir değişkendir) ile ilgili işleri yapmak için özel fonksiyonlar yazılmıştır. Söz konusu fonksiyonlar, array yaratma, arraylerle işlem yapma, array içinde bileşen arama ve array in bileşenlerini sıralama, kopyalama gibi array ile ilgili hemen her işi yapmaya yeterlidir. Bu fonksiyonlar her array e uygulanabilecek biçimde yazıldılar. Böylece, başka programlarda yeniden kullanılabilir (reusable) niteliğe kavuştular. C dilinde array ile ilgili işleri yapan çok sayıda fonksiyon vardır. Özellikle, arama ve sıralama foksiyonları arrayler üzerinde etkilidirler. Ayrıca string ler birer char arrayidir. Stringlerle yapılan işlemlerin hepsini array yapısından yararlanarak yaparız. Onların başlıcalarını ilerleyen sayfalarda ele alacağız. C dilinde her veri tipinden array tanımlanabilir. Onların herbirisi için tek boyutlu ya da çok boyutlu arrayler yaratılabilir. Array in bileşen türü int, float, char, vb ne olursa olsun, onun anabellekte konuşlanış ilkesi değişmez. Array in adı bir referans (işaretçi, pointer) tipidir; array yapısının anabellekteki ilk bileşeninin adresini işaret eder. Array in sonraki bileşenleri anabellekte ardışık adreslere yerleşir. Bu adresler, array in veri tipinin büyüklüğüne göre array in öğelerine atanacak değerlerin sığacağı büyüklükteki hücrelerdir. Daha açık bir deyişle, char tipi array için bileşenlere 1 byte, int tipi array için bileşenlere 2 byte (ya da 4 byte), float tipi için 4 byte, vb ayrılır. Bu özelik, array in bileşenlerine seçkili (random) erişimi sağlar. O erişimin nasıl sağlandığını biraz sonra göreceğiz. Array ile pointer tipleri birbirlerinden farklı iki yapısal tiptir. Ama, uygulamada array, bir pointer gibi kullanılabilir. 1.3 Tek Boyutlu Array Çok boyutlu array lerin nitelikleri tek boyutlu arraylerinki gibidir. O nedenle, arraylerin özeliklerini tek boyutlu arrayler üzerinde söylemek yeterlidir. Daha sonra çok boyutlu array lere örnekler vereceğiz. Tek boyutlu array, matematikteki tek boyutlu sonlu dizidir; onlar tek indisli (index, damga) dizimlerdir. 0-ıncı bileşenden başlayıp sonuncu bileşenine kadar indis sırasıyla dizilirler. İndisler negatif olmayan tam sayılardan (doğal sayılar) seçilir.
4 4 BÖLÜM 1. ARRAY 1.4 [ ] Operatörü [ ] operatörünün iki işlevi olduğunu söylemiştik: Birincisi, (1.4) deyiminde olduğu gibi, array bildirimindeki işlevidir. İkincisi ise (1.3) gösteriminde olduğu gibi, arrayin bileşenlerinin sıra numarasını (indis) içermesidir. (1.3) gösterimindeki a[i] (i = 0, 1, 2,...) öğelerine arrayin öğeleri, arrayin terimleri ya da arrayin bileşenleri denilir. Bu terimler eş anlamlıdır. [ ] operatörü, arrayin bileşenlerini (terim, öğe), indisleriyle (damga, index) belirler. a[i] simgesinde köşeli parantez içindeki i tam sayısına indis (index, damga) denilir. Arrayde indisler daima tam sayıdır ve 0 dan başlar. n bileşeni olan arrayin indisleri (i = 0, 1, 2,... n 1) olur. [ ] operatörünün işlevlerini birazdan daha yakından inceleyeceğiz. 1.5 Array Yaratma Şekil 1.1: Array Bir array yaratmak, bir değişken yaratmak gibidir. Her değişkenin bir adı, ana bellekte bir adresi ve o adrese konulan değeri vardır. Değişken adı, ana bellekte ona ayrılan yeri işaret eden bir işaretçidir (pointer). Array için de aynı kural geçerlidir. Her array in bir adı, ana bellekte bir adresi ve o adrese konulan bileşen değerleri vardır. Array in adı, ana bellekte arraye ayrılan yerin ilk hücresini işaret eden bir referanstır (işaretçi, pointer). Array yaratmak, bir veri tipinden değişken yaratmaya benzer. Bir değişken bildirimi yapılınca, ana bellekte ona bir adres ayrılır ve o değişken adı, kendisine ayrılan adresi işaret etmeye başlar. Değişkenin bir tek adresi (hücre) vardır ve o adrese tek bir değer konulabilir. Array bildiriminde ise, tek deyim ile aynı ad ve aynı veri tipinden çok sayıda değişken aynı anda yaratılmış olur.
5 1.5. ARRAY YARATMA 5 Değişken bildirimi ile array bildirimi arasındaki önemli iki fark şudur: 1. Array adı, bildirimi yapılan array in ana bellekteki ilk bileşeninin adresini işaret eder. 2. Array sonlu bir dizidir. Onun bileşenlerine ana bellekte ardışık hücreler ayrılır. Hücre sayısı bileşen sayısı kadardır. Bu hücrelere (adres), sırasıyla, array in terimlerinin değerleri atanır. Kısaca söylersek, C dilinde bir array yaratmanın iki aşaması vardır: 1. Birinci Aşama : Array bildirimi 2. İkinci Aşama : Array in bileşenlerine değer atama Bu iki aşama birleştirilip tek deyim haline getirilebilir. Şimdi bu iki aşamanın nasıl yapıldığını bir örnek üzerinde görelim. Örnekler: Bir toptancı mağazasında mevcut malları gösteren bir stok kontrol programı düşünelim. Tabii, stok kontrol programı, çok daha elverişli yapılarla kurulmalıdır. Ama şimdilik, depodaki her eşyaya bir numara vermek için bir array yaratalım. Array e depodaki nesneleri ifade etmek üzere mal, emtia, eşya gibi çağrışım yapan bir ad vermek uygun olur. Ama gösterimlerde kısalığı sağlamak için, arrayin adını a koyalım. int a[5]; (1.5) deyimi int tipinden a adlı bir array bildirimidir. (1.5) deyimi bileşenleri (terimleri, öğeleri) int tipi olan 5 bileşenli bir array bildirir. Her birine int tipi bir değer atanacağna göre, bileşenlere ayrılan bellek adreslerinin büyüklüğü 2 şer (ya da 4 er) byte olmalıdır. Beş bileşen olduğuna göre, arrayy e ayrılan toplam adres 2 5 = 10 byte boyundadır. Bazı sistemlerde int veri tipine 4 byte ayrılır. O sistemler için, (1.5) arrayine anabellekte 4 5 = 20 byte boyunda yer ayrılır. Array in adı, C dilinde adlandırma kuralına göre verilir ve öteki değişken adlarının oynadığı role benzer bir rol üstlenir. Daha önce söylediğimiz gibi, array adı, array yapısına ana bellekte ayrılan ardışık adreslerin ilkini gösterir; yani array in ilk bileşeninin adresini işaret eder. Böyle olduğunu görmek için, a nın ve a[0] ın adreslerini yazan Program 1.1 nin çıktısına bakınız. İki bellek adresinin aynı olduğunu göreceksiniz.
6 6 BÖLÜM 1. ARRAY Şekil 1.2: Boş Array Program i n t main ( ) { i n t i ; i n t a [ 5 ] ; 6 9 p r i n t f ( "&a = %d \n ", &a ) ; p r i n t f ( "&a [ 0 ] = %d ] \ n ", &a [ 0 ] ) ; r e t u r n 0 ; 1 / &a = &a [ 0 ] = / [ ] simgesi array operatörüdür; a ise, arrayin adıdır. Array in adı değişken adı gibidir. Nasıl ki değişken adı, onun ana bellekteki adresini işaret ediyorsa, örneğimizdeki, (1.5) deyimi ile tanımlanan a, array in ilk bileşeninin adresini işaret edecek bir referanstır. (1.5) bildirimi bu aşamasında a array i için ana bellekte bir yer ayırmıştır, ama henüz array in bileşenlerine hiç değer atanmamıştır. (1.5) deyiminde a arrayin adı, [ ] ise array yaratan operatördür. [5] ifadesi int tipi veri tutacak 5 hücre yaratır. Tabii, 5 yerine, istenilen başka bir sayı konulabilir. O sayı arrayin bileşen (terim) sayısıdır. Benzer olarak, int yerine başka bir veri tipi konulabilir. Ana bellekte arrayin bileşenleri olarak ayrılan her hücre, arrayin ait olduğu veri tipinden verilerin sığacağı büyüklüktedir. Örneğimizde a arrayi int tipi olduğundan, ona ayrılan bileşen hücrelerinin herbirisi 2 8 = 16 bit boyundadır. Bazı sistemlerde 4 8 = 32 bit boyunda olabilir. int yerine double tipten bir array olsaydı, herbir bileşen hücresi 64 bit boyunda olurdu. Bu aşamada, (1.5) deyimi a tarafından işaret edilen bir array yarattı. Başka bir deyişle, ana bellekte 5 tane int değer tutacak bir yer (5 hücre)
7 1.6. ARRAYIN BOYU (UZUNLUĞU) 7 ayırdı. Bunu Şekil 1.2 deki gibi gösterebiliriz. a bellekte ayrılan bu beş hücrelik yerin ilk hücresini; yani a[0] bileşeninin olduğu adresi işaret eder. a ya referans (işaretçi, pointer) denmesinin nedeni budur. 1.6 Arrayin Boyu (Uzunluğu) Tanım 1.1. Bir arrayin boyu (uzunluğu) onun bileşenlerinin sayısıdır. Program 1.1 Örneğinde, arrayin işaret ettiği adreste, int tipi veri tutacak şekilde yaratılan 5 tane bellek adresi (5 hücre) ana bellekte ardışıktırlar. Arrayin terimleri (bileşenleri) [ ] içine yazılan indislerle numaralanır. İlk hücrenin adresi daima 0 indisiyle başlar. a[0] ilk hücreyi temsil eden değişken adıdır. Sonrakiler artan numara sırası izler. Özetle, Liste 1.1. a [ 0 ] 2 a [ 1 ] a [ 2 ] a [ 3 ] 5 a [ 4 ] adları, arrayin bileşenlerini gösterirler.onların herbirisi int tipi bir değişkendir. Dolayısıyla, int tipi değişkenlerle yapılabilen her işlem, onlara da uygulanabilir. sizeof() fonksiyonu, bir değişkene ya da yapısal bir veri tipine ana bellekte ayrılan bellek adresinin büyüklüğünü byte cinsinden verir. Bu demektir ki, array e ana bellekte ayrılan adresin boyunu byte cinsinden bulabiliriz. Arrayin veri tipi bilindiğine göre, her bileşene ayrılan bellek büyüklüğü bellidir. Dolayısıyla, arraye ayrılan bellek büyüklüğünü, bir bileşenine bellekte ayrılan büyüklüğe bölersek, arrayin kaç bileşeni olduğu ortaya çıkar. Program 1.2 in çıktısı, char, int, float, double veri tipleri ile int tipinden array ve float tipinden array için ana bellekte ayrılan bellek büyüklüklerini byte cinsinden gösteriyor. Program i n t main ( ) {
8 8 BÖLÜM 1. ARRAY 4 c h a r ch ; i n t i ; f l o a t x ; 7 d o u b l e w; i n t a [ 5 ] ; 10 f l o a t b [ 5 ] ; p r i n t f ( " char t i p i n e a y r ı l a n yer :%d byte d i r \n ", s i z e o f ( ch ) ) ; 13 p r i n t f ( " i n t t i p i n e a y r ı l a n yer :%d byte d i r \n ", s i z e o f ( i ) ) ; p r i n t f ( " f l o a t t i p i n e a y r ı l a n yer :%d byte d i r \n ", s i z e o f ( x ) ) ; p r i n t f ( " double t i p e a y r ı l a n yer :%d byte d i r \n ", s i z e o f (w) ) ; p r i n t f ( " f l o a t t i p i n d e n b a r r a y i n e yer %d byte d i r \n ", s i z e o f ( b ) ) ; p r i n t f ( " i n t t i p i n d e n a a r r a y i n e a y r ı l a n yer %d byte d i r \n ", s i z e o f ( a ) ) ; r e t u r n 0 ; / char t i p i n e a y r ı l a n yer : 1 byte d i r 3 i n t t i p i n e a y r ı l a n yer : 4 byte d i r f l o a t t i p i n e a y r ı l a n yer : 4 byte d i r double t i p e a y r ı l a n yer : 8 byte d i r 6 f l o a t t i p i n d e n b a r r a y i n e a y r ı l a n yer 20 byte d i r i n t t i p i n d e n a a r r a y i n e a y r ı l a n yer 20 byte d i r / Array in Boyunu Bulma C dilinde arrayin boyunu bulan bir fonksiyon yoktur. Ama yukarıda söylediğimiz gibi, böyle bir fonksiyonu kolayca yazabiliriz. 1 boy = s i z e o f ( a r r ) / s i z e o f ( a r r [ 0 ] ) ; formülü ile bulunabilir. Array in a adı ile a[0] ilk bileşeninin adreslerinin aynı olduğu, sonraki bileşenlere de ardışık hücrelerin ayrıldığını görmek için, Program 1.2 nin çıktısına bakmak yetecektir. Örnekler: Program i n t main ( ) { 5 i n t a [ ] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ;
9 1.7. ARRAY IN BILEŞENLERI 9 8 i n t boy = s i z e o f ( a ) / s i z e o f ( i n t ) ; p r i n t f ( " Array i n boyu = %d ", boy ) ; r e t u r n 0 ; / 2 Array i n boyu = 10 / Program 1.4, array boyunu makro olarak tanımlıyor. Program #d e f i n e BOY( a r r ) s i z e o f ( a r r ) / s i z e o f ( a r r [ 0 ] ) i n t main ( ) { 6 c h a r k e n t l e r [ ] = { " Ankara ", " Mardin ", " Edirne " ; p r i n t f ( " Array i n uzunlugu = %d ", BOY( k e n t l e r ) ) ; 1 / Array i n boyu = 3 / Program 1.5 örneğinde de, array boyunu makro olarak tanımlıyor ve array bir pointer gibi kullanılıyor. Program #d e f i n e ARRAY_BOY( x ) ( s i z e o f ( x ) / s i z e o f ( x ) ) i n t main ( ) { 6 i n t t e k l e r [ ] = { 1, 3, 5, 7, 9, 1 1, 1 3, 1, 5, 1, 7, 1 9 ; p r i n t f ( " Array i n uzunlugu = %d ", ARRAY_BOY( t e k l e r ) ) ; 1 / Array i n boyu = 12 / 1.7 Array in Bileşenleri int a[ ]= {0,1,2,3,4) array bildirimi yapılınca a[i] (i = 0, 1, 2, 3, 4) öğelerine a arrayinin bileşenleri demiştik. Bileşenler, yaratılan array içinde birer değişkendir. Bu değişkenler sayesinde, array beş tane int tipi veriyi
10 10 BÖLÜM 1. ARRAY bir arada tutabilme yeteneğine sahip olur. Bu değişkenlere array in öğeleri (terimleri) de denilir. Bu terimleri eşanlamlı sayacağız. 0, 1, 2, 3, 4 sayıları bileşenlerin sıra numaralarıdır; Index (indis, damga) adını alırlar. Sıra numaraları (indis) daima 0 dan başlar, birer artarak gider. n tane bileşeni olan bir array in ilk bileşeninin damgası 0, son bileşeninin damgası (n 1) olur. Bir array in boy (uzunluk, length) onun bileşenlerinin sayısıdır. 1.8 Array in Bileşenlerine Erişim Daha önce de söylediğimiz gibi, bir değişkene erişmek demek, ona değer atamak, atanan değeri okumak ve gerektiğinde değerini değiştirmek demektir. Array in bileşenleri de birer değişken olduklarından, onlara istendiğinde değer atanabileceği, istenirse atanan değerlerin değiştirilebileceği açıktır. arr int tipinden bir array ise a r r [ 3 ] = 1 2 ; gibi bir atamanın yapılabilmesi, arrayin her hangi bir bileşenine direk erişilebildiği anlamına gelir. Seçkili erişim, array lerin üstün bir niteliğini ortaya koyar. Array in istenen bileşenine indis (index) sayısı ile seçkili (doğrudan, random) erişmek mümkündür. Her bileşen bir değişken olduğu için, o bileşen tipiyle yapılabilen her işlem onlar için de yapılabilir, değişkenlerle ilgili kurallar bileşenler için de aynen geçerlidir. Gerçekten, yukarıdaki deyim, indisi 3 olan bileşene 12 değerini atamıştır Örnekler Program i n t main ( ) { i n t i ; 5 c h a r kent [ 5 ] = { "Van", " Trabzon ", " Kayseri ", " Mardin ", " Adana " ; f o r ( i = 0 ; i < 5 ; i ++) p r i n t f ( " kent [%d ] = %s \n ", i, kent [ i ] ) ; 8 1 / kent [ 0 ] = Van kent [ 1 ] = Trabzon 4 kent [ 2 ] = Kayseri kent [ 3 ] = Mardin kent [ 4 ] = Adana 7 /
11 1.9. BILEŞENLERIN ÖNDEĞERLERI 11 C dilinde her veri tipinden array yaratılabilir. Örneğin, yukarıdaki c h a r kent [ ] = { "Van", " Trabzon ", " Kayseri ", " Mardin ", " Adana " ; deyimi char tipinden bir array bildirmiş, onun bileşenlerine string tipinden değerler atamıştır. Bu atama kent [ 0 ] = "Van" ; 2 kent [ 1 ] = " Trabzon " ; kent [ 2 ] = " Kayseri " ; kent [ 3 ] = " Mardin " ; 5 kent [ 4 ] = " Adana " ; atamalarına denktir. Yukarıda yaptıklarımızı özetleyelim. 1 v e r i T i p i arrayadı [ b i l e ş e n _ s a y ı s ı ] ; // array b i l d i r i m i Array nesnesi yaratmak demek, ana bellekte array in bileşenlerine birer yer (bileşen adresi, göze) ayırmak demektir. array nesnesi yaratılırken, bileşenlerine ilk değerler atanabilir. Ama ilk değerler atanmazsa, bileşenlere değerleri sonradan atanabilir. Ancak, değer atanmadan önce bileşen değerleri kullanılmamalıdır. Arrray bileşenlerine değer atama: Array nesnesi yaratıldıktan sonra onun bileşenlerine değer atama eylemi, diğer değişkenlere değer atama gibidir. İstenen bileşen indeks sayısı ile seçilerek (seçkili, random) değer atanabilir. Örneğin, yukarıda yapıldığı gibi, kent [ 2 ] = " Kayseri " // atama deyimi kent adlı array in 3.bileşenine "Kayseri" değerini atamaktadır. 1.9 Bileşenlerin Öndeğerleri Anımsayacaksınız, auto depo sınıfında olan değişkenlerin öndeğerleri yoktur. Bunlar yerel değişkenlerdir. Eğer kendilerine bir değer atanmadan önce kullanılırlarsa çöp (garbage values) toplarlar. Yani, kendi adreslerinde eskiden arta kalan değerleri kullanırlar. static, global ve extern depo sınıfında olan değişkenlerin öndeğerleri 0 dır. Kendilerine değer atanmadan kullanılırlarsa, 0 değerini kullanırlar. Array in bileşenleri de birer değişken olduğuna göre, aynı kurala uyarlar. Buna göre, 1. Array tanımı bir blok içinde ise, onun bütün değişkenleri yereldir; yani auto depo sınıfındadırlar. Dolayısıyla onların öndeğerleri yoktur. Değer atanmadan kullanılan bileşenler çöp toplar.
12 12 BÖLÜM 1. ARRAY 2. Array tanımı bütün blokların dışında ise, onun bütün bileşenleri global olur. Dolayısıyla öndeğerleri 0 dır. Array bir blok içinde ama static nitelemli ise, onun bütün bileşenleri static depo sınıfında olur. Hepsinin öndeğeri 0 dır. Array extern depo sınıfında ise, onun bütün bileşenleri de extern olacağından, öndeğerleri 0 dır. 3. Bu kurallar çok boyutlu arrayler için de geçerlidir. Unutmayalım ki, C derleyicisi veri tipi denetimi yapmaz. Değer atanmamış bir değişken ya da array bileşeni kullanıldığında, hiçbir uyarı yapmadan, onun öndeğerini kullanır. Böyle olması ciddi hatalara neden olabilir. Örnekler: Program 1.7, global arraylerin bileşenlerine 0 öndeğerinin (default) olarak atandığını gösteriyor. Program i n t g a r r [ 5 ] ; 5 i n t main ( ) { i n t i ; 8 f o r ( i =0; i <5; i ++) p r i n t f ( "%d\ t ", g a r r [ i ] ) ; 11 r e t u r n 0 ; / / Açıklamalar: Hiç bir fonksiyonun ya da blokun içinde olmayan değişken ve arrayler global dır. Global değişkenlere ve arraylere, programın her tarafından erişilebilir. Program 1.7 örneğinde garr arrayi global dir. garr arrayinin bileşenlerine değer atanmadığ halde, bileşen değerleri 0 olmuştur. Çünkü, global array lerin bileşenlerine 0 öndeğeri (default) atanır. Bildirim anında önüne static nitelemi konulan yerel değişkenler ve arrayler static olurlar. static değişkenlerin adresleri, program boyunca korunur. Değer atanmamış static değişkenlerin öndeğeri (default) 0 dır. Ancak yerel değişkenler static nitelemi alabilir; global ve extern değişkenler static olamazlar. Onlar zaten program süresince adreslerini korurlar.
13 1.10. SEÇKILI (RANDOM) ERIŞIM 13 Şekil 1.3: static, global ve extern bileşenlerin Öndeğerleri (default) Program i n t main ( ) { i n t i ; 6 s t a t i c i n t s t a r r [ 5 ] ; f o r ( i =0; i <5; i ++) 9 p r i n t f ( "%d\ t ", s t a r r [ i ] ) ; 12 r e t u r n 0 ; / / Açıklamalar: starr arrayinin bileşenlerine değer atanmadığ halde, 9.satırın verdiği çıktıda bileşen değerleri 0 olmuştur. Çünkü, arraylerin bileşenlerine 0 öndeğeri (default) atanır Seçkili (random) Erişim Liste 1.2.
14 14 BÖLÜM 1. ARRAY 3 i n t main ( ) { i n t i ; 6 i n t a [ 5 ] ; p r i n t f ( "&a = %d \n ", &a ) ; 9 f o r ( i =0; i <5; i ++) p r i n t f ( "&a[% i ] = %d \n ", i, &a [ i ] ) ; r e t u r n 0 ; 12 / &a = &a [ 0 ] = &a [ 1 ] = &a [ 2 ] = &a [ 3 ] = &a [ 4 ] = / Program 1.2, int tipe 4 byte ayıran bir bilgisayarda yazılmıştır. Bileşenlerin adreslerine bakarsanız, ardışık ikisi arasında 4 byte olduğunu göreceksiniz. Array adı, anabellekte &a= adresini gösteriyor. &a= &a[0] dır. &a[1] adresini bulmak için, a[0] adresine 4 byte ekliyor. Benzer olarak &a[2], &a[3] ve &a[4] bileşen adreslerini bulmak için, &a adresine, sırasıyla, 2 4, 3 4, 4 4 byte ekliyor. Bu işi derleyici yapıyor. Programda arrayin bileşenlerinin adreslerini belirtmeye gerek yoktur. Bu olgu, array e özgü bir niteliktir. Bu nitelik, arrayin bileşenlerine seçkili (random) erişimi sağlar. Doğal olarak, indis sırası kullanılırsa, arrayin bileşenlerine sıralı erişilebilir. Ama, özünde yapılan iş gene seçkili erişimdir Bileşenlere Değer Atama Yöntemleri Seçkili (random) Atama 1 a [ 2 ] = ; ataması, array in üçüncü bileşenine 1234 değerini atar. Öteki bileşenlere de benzer yolla atamalar yapılabilir. Derleyici, bileşenlerin adreslerini yukarda söylenen yöntemle bulur. Öneğin, &a[2] adresini bulmak için a nın adresine, bir bileşeninin büyüklüğünün iki katını ekler. &a[2]= &a+ (2 4 byte) olur.
15 1.11. BILEŞENLERE DEĞER ATAMA YÖNTEMLERI Bildirim Anında Atama Bildirim ve seçkili atama aşamalarını birleştirerek tek bir deyimle her ikisini bir arada yapabibiliriz. Örneğin, int a[ ] = {1123, 1125, 1234, 1256, 1321; (1.6) deyimi hem array bildirimini hem bileşenlere değer atamasını birlikte yapar. Bileşenlere atanacak değerler, sırasıyla, { parantezi içine, virgül ile birbirlerinden ayrılarak yazılmıştır. Bu atama yönteminde, bütün bileşenlere sırasıyla değer atanıyor. a arrayinin bileşen sayısını ayrıca yazmaya gerek kalmıyor; çünkü bileşenlere atanan değerler, bileşenlerin sayısını ve sırasını belirliyor 1. Bunu görmek için Program 1.9 i çözümleyiniz. Program i n t main ( ) { i n t i ; 5 i n t a [ ] = {1123, 1125, 1234, 1256, 1321 ; p r i n t f ( "%d\n ", &a ) ; 8 f o r ( i =0; i <5; i ++) p r i n t f ( " a[% i ] = %d \n ", i, a [ i ] ) ; r e t u r n 0 ; 11 1 / &a = a [ 0 ] = a [ 1 ] = 1125 a [ 2 ] = 1234 a [ 3 ] = a [ 4 ] = 1321 / deyimi ile bildirim aşaması (ilk aşama) tamamlanır, bileşenlere değer atama işi sonra seçkili atama ile yapılabilir. Aşağıdaki iki yöntem aynı işi yapar. 1.Yöntem: [ ] operatörü ile array yaratırken boyunu belirleyip, sonradan bileşenlerine seçkili (random) değer atama. 1 i n t = a r r [ 1 0 ] ; a r r [ 6 ] = 7 0 ; a r r [ 1 ] = 2 0 ; a r r [ 2 ] = 3 0 ; a r r [ 7 ] = 8 0 ; a r r [ 4 ] = 5 0 ; a r r [ 3 ] = 4 0 ; a r r [ 0 ] = 1 0 ; a r r [ 8 ] = 9 0 ; a r r [ 9 ] = ; a r r [ 5 ] = 6 0 ; 1 C 99 sürümünde bileşenlere sıralı olmayan atamalar yapılabilir
16 16 BÖLÜM 1. ARRAY Şekil 1.4: Arayin Bileşenlerinin Hepsine Değer Atama deyimi 10 bileşenli arr adlı array yaratır sonra bileşenlerine seçkili (random) değer atar. 2.Yöntem: [ ] operatörü ile array i yaratırken, bileşenlerine sırayla ilk değerlerini atama. i n t a r r [ ] = { 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 ; deyimi 10 bileşenli bir array yaratır ve bileşenlerine sırayla değerler atar. arr[] ifadesi array in boyunu belirlemez; ancak { bloku içine sırayla yazılan değerler array boyunu ve her bileşene sırayla atanan değeri kesinlikle belirler. { içindeki değerlerin yazılış sırası ile bileşenlerin indis sırası uyumludur. Örneğin, { içindeki 7.değer 7.bileşene aittir. Tabii, 7.bileşenin indisinin 6 olduğunu biliyoruz; çünkü damgalama işlemi 1 den değil 0 dan başlar. O nedenle arr[6] = 70 dir. Array lerde bu özeliği daima anımsamalıyız. İstenirse, Örnekler Liste 1.3. i n t d e r s l i k [ 3 ] ; 2 i n t d e r s l i k [ 3 ] = {0, 1, 2 ; 5 s t r i n g kent [ ] = { " Erzurum ", " Van ", " Samsun ", " Adana ", " Muğla " ;
17 1.12. BILEŞENLERLE İŞLEM 17 s t r i n g kent [ 5 ] = {" Erzurum ", "Van", " Samsun ", " Adana ", " Muğla " ; 8 s t r i n g kent [ 5 ] ; kent [ 4 ] =" Muğla " ; kent [ 1 ] = "Van" ; kent [ 3 ] = " Adana " ; kent [ 2 ] = " Samsun " ; kent [ 0 ] =" Erzurum " ; Açıklamalar: 1. İlk satır: int tipinden derslik adlı 3 bileşenli array bildirimini yapıyor. Bileşenlere değer atamıyor. 2. İkinci satır: önce int tipinden derslik adlı 3 bileşenli array bildirimini yapıyor. Bileşenlere sırayla değer atıyor. 3. Dördüncü satır: string tipinden kent adlı beş bileşenli bir array bildiriyor. Ama atanan değerlerin sayısı bileşen sayısını ve sırasını belirliyor. Bileşenlere yapılan atama, arrayin boyunu dinamik olarak, belirliyor. Tabii, bu atama deyiminden sonra yeni atamalar yapılarak, kent arrayinin boyu değiştirilemez. 4. Altıncı satır: String tipinden kent adlı beş bileşenli bir array bildiriyor. Sonra bileşenlere ilk değerlerini sırayla atıyor. 5. Sekizinci satır: String tipinden beş bileşeni olan kent adlı bir array bildiriyor. Bildirim anında array yaratılmış olur. Sonra bileşenlere ilk değerleri seçkili (random) atanıyor Bileşenlerle İşlem Array aynı veri tipinden çok sayıda değişkenin bir deyimle bildirilmesini sağlayan yapısal bir tiptir. Arrayin her öğesi bir değişkendir. Ona indisiyle her zaman erişilebilir. O halde, onlarla, ait olduğu veri tipinde yapılabilen bütün işler yapılabilir. Örneğin int tipinden bir arrayin öğeleri arasında int tipinden değişkenler için yapılabilen bütün işlemler yapılabilir. Ayrıca, aynı tipten olan arraylerin bileşenleri arasında da işlemler yapılabilir Atama Yöntemiyle Değer Aktarma Bir arrayin bileşenlerinin değerleri aynı veri tipinden başka değişkenlere aktarılabilir. Doğal olarak, bu işin tersi de yapılabilir. Aslında, aktarma işlemi, atama deyimi ile yapılan kopyalama işlemidir. Burada atama ile yapılabilen kopyalama eylemlerine örnekler vereceğiz. x değişkeninin veri tipi a arrayi ile aynı olsun. Örneğin,
18 18 BÖLÜM 1. ARRAY 1 i n t x ; i n t a [ 5 ] ; bildirimleri yapılmışsa a[2] = 1234; atamasından sonra 1 x = a [ 2 ] ; ataması, a[2] bileşeninin değerini x değişkenine aktarır; öyleyse, bu atama deyimi x = 1234 ; atamasına denktir. Tersine olarak, y aynı tipten bir değişken ise, yani int y; bildirimi yapılmışsa, i n t y = ; 2 a [ 2 ] = y ; ataması geçerlidir. Bu atama y nin değerini a[2] bileşenine aktarır; dolayısıyla, 1 a [ 2 ] = ; atamasına denktir. Array in bir bileşeninin değeri başka bir bileşenine aktarılabilir. Örneğin, a [ 3 ] = a [ 2 ] ; ataması geçerlidir Array Üzerinde Döngü Array yapısının çok işe yaradığı yerlerden birisi döngülerdir. Daha önceleri genel for döngüsünü kullanmayı öğrendik. For döngüsünde sayaç olarak arrayin indisleri alınırsa, arrayin bileşenleri üzerinde for döngüsü kurulmuş olur. Array üzerinde for döngüsü kullanılarak array kopyalanabilir, arrayin öğeleri toplanabilir, sıralanabilir, array içinde bir öğenin olup olmadığı araştırılabilir, arrayin en büyük ve en küçük öğeleri bulunabilir. Bu eylemlerin yapılışını örneklerle göreceğiz Array Öğelerini Toplama Program 1.10 arrayin öğelerini topluyor.
19 1.15. ARRAY KOPYALAMA 19 Program i n t main ( ) { i n t i, toplam = 0 ; 5 i n t a [ 1 0 ] = { 1 0, 2 0, 3 0, 4 0, 5 0, 6 0, 7 0, 8 0, 9 0, ; f o r ( i =0; i <10; i ++) toplam = toplam + a [ i ] ; 8 p r i n t f ( "%d ", toplam ) ; / / 1.15 Array Kopyalama C dilinde bir arrayi başkasına bir bütün olarak kopyalayan deyim yoktur. O nedenle, bir döngü yardımıyla kaynak arrayin bileşenleri başka bir arrayin bileşenlerine kopyalanabilir. Ancak, array bir string ise, strcopy() fonksiyonu kullanılabilir. Program 1.11 bir stringi (char arrayi) strcpy() fonksiyonu ile başka bir array üzerine kopyalıyor strcpy() ile char array kopyalama Program #i n c l u d e <s t r i n g. h> 3 i n t main ( ) { 6 c h a r kaynak [ ], hedef [ ] ; p r i n t f ( " Input a s t r i n g \n " ) ; 9 g e t s ( kaynak ) ; s t r c p y ( hedef, kaynak ) ; p r i n t f ( " Kaynak s t r i n g : \"% s \"\ n ", kaynak ) ; p r i n t f ( " Hedef s t r i n g : \"% s \"\ n ", hedef ) ; r e t u r n 0 ;
20 20 BÖLÜM 1. ARRAY 1 / Input a s t r i n g C d i l i n i öğreniyorum 4 Kaynak s t r i n g : "C d i l i n i öğreniyorum " Hedef s t r i n g : "C d i l i n i öğreniyorum " / strcopy() fonksiyonu Bölüm?? de yeniden ele alınacaktır Döngü ile array kopyalama Program 1.12 int arrayini döngü ile başka bir array üzerine kopyalıyor. Program i n t main ( ) { s h o r t a [ ] = { 2 1, 3 2, 2 4, 3 5 ; s h o r t b [ 4 ] ; 6 i n t i =0; f o r ( i =0; i <4; i ++) 9 b [ i ] =a [ i ] ; 12 f o r ( i =3; i >=0; i ) p r i n t f ( "%d\ t ", b [ i ] ) ; 15 r e t u r n 0 ; Program 1.13 char arrayini döngü ile başka bir array üzerine kopyalıyor. Program #i n c l u d e <s t r i n g. h> 4 v o i d copy_string ( c h a r [ ], c h a r [ ] ) ; i n t main ( ) { 7 c h a r s [ ], d [ ] ; p r i n t f ( " Input a s t r i n g \n " ) ; 10 g e t s ( s ) ; 13 copy_string ( d, s ) ; p r i n t f ( " Source s t r i n g : \"% s \"\ n ", s ) ; p r i n t f ( " D e s t i n a t i o n s t r i n g : \"% s \"\ n ", d ) ;
21 1.15. ARRAY KOPYALAMA r e t u r n 0 ; v o i d copy_string ( c h a r d [ ], c h a r s [ ] ) { i n t c = 0 ; 22 w h i l e ( s [ c ]!= \0 ) { d [ c ] = s [ c ] ; 25 c++; d [ c ] = \0 ; Arrayler Üzerinde İstatistik Program 1.14 örneği, bir arrayin bileşen değerlerinin aritmetik ortalamasını buluyor. Program #d e f i n e BOY 5 i n t main ( ) { 5 i n t ortalama = 0 ; i n t toplam =0; i n t x=0; 8 i n t a r r [BOY] ; 11 / a r r a y i n b i l e ş e n / f o r ( x=0; x < BOY; x++) { p r i n t f ( " s a y ı l a r ı g i r i n i z %d\n ", x ) ; 14 s c a n f ( "%d ", &a r r [ x ] ) ; f o r ( x = 0 ; x < BOY; x++) { 17 toplam += a r r [ x ] ; 20 ortalama = toplam /BOY; p r i n t f ( " Ortalama : %d ", ortalama ) ; r e t u r n 0 ; 23 1 / s a y ı l a r ı g i r i n i z s a y ı l a r ı g i r i n i z 1 45 s a y ı l a r ı g i r i n i z s a y ı l a r ı g i r i n i z 3 23
22 22 BÖLÜM 1. ARRAY 10 s a y ı l a r ı g i r i n i z 4 64 Ortalama : / Array Sıralama Bir veri topluluğunu artan ya da azalan sıraya dizmek, bütün programlama dillerinde önem taşır. Programlama tarihi boyunca, çok farklı sıralama algoritmaları geliştirilmiştir. Bu algoritmalar arasında en iyisi yoktur. Sıraya konulacak veri topluluğuna göre bazen birisi bazen ötekisi etkin olur. Sıralama algoritmalarının hemen hepsi, topluluktan seçtiği iki öğeyi mukayese eder, artan sıraya dizecekse, küçük olanı öne alır. Bu bir takas (swap) eylemidir. Şimdilik çok ayrıntıya inmeden, sıralamanın nasıl yapıldığını göstermek için, köpük sıralaması (buble sort) denilen algoritmaya bir örnek vereceğiz. Hemen belirtelim ki, köpük sıralaması, sıralama algoritmaları arasında en yavaş olanıdır. Ama sıralamanın nasıl olduğunu göstermesi bakımından, öğretici değeri vardır. Program #d e f i n e BOY 10 i n t main ( ) { 5 i n t a [BOY] = { 4 3, 5, 1 4, 5 9, 0, 2 7, 7 8, 5, 6 5, 3 5 ; i n t i, adim, yedek ; p r i n t f ( " Kaynak array \n\n " ) ; 8 // Kaynak a r r a y i g ö s t e r f o r ( i = 0 ; i < BOY; i ++) p r i n t f ( "%d ", a [ i ] ) ; 11 // sıralama // a r d ı ş ı k öğe ç i f t l e r i n i k a r ş ı l a ş t ı r ; küçük o l a n ı öne a l f o r ( adim = 1 ; adim < BOY; adim++) 14 f o r ( i = 0 ; i < BOY; i ++) // s e t the c o n d i t i o n i f ( a [ i ] > a [ i + 1 ] ) { // takas yedek = a [ i ] ; 20 // put the a [ i + 1 ] i n a [ i ] a [ i ] = a [ i + 1 ] ; 23 a [ i + 1 ] = yedek ; p r i n t f ( " \n\ n a r r a y i n artan s ı r a d a d i z i l m i ş h a l i : \ n\n " ) ; 26 f o r ( i = 0 ; i < BOY; i ++)
23 1.16. ARAMA 23 p r i n t f ( "%4d ", a [ i ] ) ; 29 p r i n t f ( " \n\n " ) ; r e t u r n 0 ; / 2 Kaynak array : a r r a y i n artan s ı r a d a d i z i l m i ş h a l i : / Açıklamalar: 5.satır: Sıralanacak arrayin bildirimidir. 8.satır: for döngüsü ile kaynak arrayin öğeleri yazılıyor. 15.satırdaki içteki for döngüsü ardışık iki öğeyi mukayese ediyor; küçük olanı öne alıyor (takas). 13.satır: dıştaki for döngüsü arrayin ilk öğesinden başlayarak, her öğeyi arrayin öteki öğeleriyle mukayese etmesi için içteki for döngüsüne yolluyor. 27.satır: Sıralanmış arrayi yazıyor Arama Bir verinin array içinde olup olmadığını bulmak için, arrayin her öğesi aranan öğe ile karşılaştırılır. Bir bileşen değeri aranan değere eşitse, onun indisi yazılır. Böylece aranan öğenin hem array içinde olduğu hem arrayin kaçıncı bileşeni olduğu belirlenmiş olur. Program i n t main ( ) { 5 i n t x= 3 ; i n t a [ ] = { 1, 5, 8, 7, 2, 3 ; p r i n t f ( "%d ", bul ( a, 3) ) ; 8 i n t bul ( i n t a [ ], i n t aranan ) { 11 i n t i ; i n t bayrak =0; f o r ( i =0; i <6; i ++) { 14 i f ( a [ i ]==aranan ) { bayrak =1;
24 24 BÖLÜM 1. ARRAY r e t u r n i +1; 17 b r e a k ; 20 i f ( bayrak==0) { r e t u r n 0 ; 23 1 / 6 / Burada a[ ] arrayinin bul() fonksiyonuna parametre oluşuna dikkat ediniz. İzleyen kesimde bunu konu edineceğiz. Arrayler fonksiyonlarda paramatre olarak kullanılırken izlenen yöntemlerden birisi şudur: Çağrılan fonksiyonun argümanı olarak arrayin adı yazılır. Arrayin kaç öğesinin kullanılacağını belirtmek için, ikinci bir argümana gerek vardır. Program?? o yöntemi kullanıyor. Program / f o n k s i y o n b i l d i r g e s i ( prototype ) / d o u b l e ortalamahesapla ( i n t a r r [ ], i n t boy ) ; 6 i n t main ( ) { / 5 o g e l i i n t a r r a y i / i n t puan [ 5 ] = {97, 38, 34, 75, 8 9 ; 9 d o u b l e ortalama ; / a r r a y i argument o l a r a k g e c i r / 12 ortalama = ortalamahesapla ( puan, 5 ) ; / c i k t i y i y a z d i r / 15 p r i n t f ( " Ortalama : %l f ", ortalama ) ; 18 r e t u r n 0 ; d o u b l e ortalamahesapla ( i n t a r r [ ], i n t boy ) { 21 i n t i ; d o u b l e o r t ; d o u b l e toplam ; 24 f o r ( i = 0 ; i < boy ; ++i ) { toplam += a r r [ i ] ; o r t = toplam / boy ; r e t u r n o r t ;
25 1.17. ÇOK BOYUTLU ARRAYLER 25 1 / ortalama : / Açıklamalar: satır: ortalamahesapla() fonksiyonunu tanımlıyor. 3.satır: bildirge. 12.satır: ortalamahesapla() fonksiyonunu çağırıyor. Çağrıda, 6.satırda tanımlanan arrayi parametre olarak kullanıyor. Fonksiyonun ikinci parametresi yerine arrayin boyu olan 5 sayısı konuluyor. Fonksiyonun verdiği double tipinden olan değer ortalama değişkenine atanıyor. 15.satır bu değeri yazıyor. 26.satır: arrayin bileşen değerlerini topluyor. Bileşen değerleri int tipinden olduğu için toplam int olur. 29.satır: toplamı bileşen sayısına bölerek ortalamayı buluyor. Bulunan ortalama iki tamsayının bölümü olarak int tipinden olmalıdır. Ama 23.satırda ort değişkeni double olarak bildirildiği için, ort sayısı otomatik olarak double tipe dönüştürülüyor. İstenirse, o r t = toplam / boy ; tip dönüşümü yapılabilir. Uyarı 1.1. Arrayin bileşenleri sayısal veri tipleri arasındaki genel dönüşüm kuralına uyar (bkz.??). Buna göre, int tipinden float ve double tiplere dönüşümü C derleyicisi gerektiğinde otomatik olarak yapar. Buna istençsiz dönüşüm (implicit conversion) diyoruz. Ama, daha büyük bellek adresi olan sayısal verileri daha küçük bellek adreseri olan sayısal veri tiplerine dönüştürürken veri kaybı oluşur Çok Boyutlu Arrayler Çok boyutlu arrayler, bileşenleri birden çok indise (damga,index) bağlı olan arrayler dir. Çok boyutlu arraylerin bildirimi, yaratılması ve bileşenlerine değer atanması eylemleri, bir boyutlu arraylerde yapılanlar gibidir. Aşağıdaki bildirimler, sırasıyla 2, 3 ve 4 boyutlu birer array bildirimidir. Liste 1.4.
26 26 BÖLÜM 1. ARRAY i n t [ ] [ ] arr2boyut ; // 2 boyutlu array b i l d i r i m i 2 f l o a t [ ] [ ] [ ] arr3boyut ; // 3 boyutlu array b i l d i r i m i f l o a t [ ] [ ] [ ] [ ] arr4boyut ; // 4 boyutlu array b i l d i r i m i Bir boyutlu arrayler için yaptığımız gibi, çok boyutlu arraylerin bileşenlerine de bildirim anında değer atayabiliriz. Liste 1.5 örneğindeki array, bileşenleri int tipi olan 2-boyutlu bir arraydir. Liste 1.5. i n t i k i l S a y ı [ ] [ ] = new i n t [ ] [ ] { {1, 2, {3, 4, {5, 6 ; İki boyutlu arrayleri birer matris gibi düşünebiliriz. Örneğin, ikilsayı adlı arrayin bileşenleri 3x2 tipi bir matris gibi dizilebilir. ikilsayi[][] arrayinde, köşeli parantezlerinden ilki temsil ettiği matrisin satır numaralarını, ikincisi ise kolon (sütun) numaralarını belirler Çok Boyutlu Arraylerin Bileşenlerine Erişim Çok boyutlu arraylerin bileşenlerine erişim, tek boyutlularda olduğu gibidir. Değer atama ve atanan değeri okumak için seçkili (direk, random) erişim yapılabilir. Değer atarken seçkili ya da sıralı atama yapılabilir. Program 1.6 örneği, iki boyutlu arrayin bileşenlerine seçkili atama ayapıyor, sonra onları bir döngü ile sırayla yazıyor. Liste i n t main ( ) { i n t i, j ; 5 i n t a r r [ 2 ] [ 3 ] ; a r r [ 0 ] [ 0 ] = 1 ; a r r [ 0 ] [ 1 ] = 2 ; 8 a r r [ 0 ] [ 2 ] = 3 ; a r r [ 1 ] [ 0 ] = 4 ; a r r [ 1 ] [ 1 ] = 5 ; 11 a r r [ 1 ] [ 2 ] = 6 ; // a r r a y i b i r t a b l o h a l i n d e yaz f o r ( i =0; i < 2 ; i ++) { 14 f o r ( j =0; j < 3 ; j++) p r i n t f ( "%d ", a r r [ i ] [ j ] ) ; p r i n t f ( " \n " ) ; 17 / /
27 1.17. ÇOK BOYUTLU ARRAYLER 27 Tek boyutlu arrayler için söylediğimiz gibi, C dilinde çok boyutlu array yapıları üzerinde topluca işlem yapan hazır fonksiyonlar yoktur. Ancak, çok boyutlu arrayleri kurmaya ve onlar üzerinde işlem yapacak fonksiyonların serbestçe tanımlanmasına izin verir. Örneğin, veri_tipi C dilinde bir veri tipi olsun. b1, b2, b3,..., bn birer pozitif tamsayı olmak üzere, Liste 1.7. v e r i _ t i p i a r r [ b1 ] [ b2 ] [ b3 ]... [ bn ] bildirimi N boyutlu bir array tanımlar. Bu bildirimde geçen terimlerin anlamları Tablo 1.1 de yazılıdır. veri tipi arr N bk arayin veri tipi; bileşenlerinin alacağı değer tipi arrayin adı arrayin boyut sayısı K = 1, 2, 3,..., N olmak üzere, her boyuttaki bileşen sayısı Tablo 1.1: Dizim Bildirgesi Daha somuta indirgersek, d o u b l e puan [ 4 ] [ 1 0 ] [ 5 ] bildirimi puan adlı, üç boyutlu ve bileşenleri double tipten olan bir dizim (array) bildirimidir. Tek boyutlu arraylerde olduğu gibi, çok boyutlu arrayin her boyutundaki bileşenler sıra numarasıyla indislenir. İndisler 0 dan başlar, o boyuttaki bileşen sayısının 1 eksiğine kadar gider. Bu bildirimde arrayin boyutlarının indisleri, Birinci boyut indisleri 0,1,2,3 İkinci boyut indisleri 0,1,2,3,4,5,6,7,8,9 Üçüncü boyut indisleri 0,1,2,3,4 Tablo 1.2: İndisler
28 28 BÖLÜM 1. ARRAY olur. Çok boytlu dizimlerin her buyutu bir boyutlu array gibi kullanılabilir. Dolayısyla, konuyu yalınlaştırmak için iki boyutlu dizimlerin kullanımlarına örnekler vermekle yetineceğiz. İki boyutlu dizimler, günlük yaşamda her zaman karşımıza çıkan tablolardır. Ayrıca bilimsel ve teknik uygulamalarda da onlarla çok sık karşılaşırız. Örneğin, bir sınavda öğrencilerin aldığı puanlar, adlarının karşılarına yazılarak düzenlenen Tablo 1.3 listesi iki boyutlu bir araydir. Ad puanlar Can 86 Hacer 97 Yunus 89 Melih 46 Mehmet 54 Emre 39 Batıhan 76 Yaşar 75 Tablo 1.3: İki Boyutlu Dizim Bu arrayin bildirimi Liste 1.8. i n t puan [ 8 ] [ 2 ] olacaktır. Bu bildirimde Can 86 satırı gibi yatay yazılanlara arrayin satırları, Ad ve puanlar sütunları gibi düşey olanlara da arrayin kolonları (sütun) denilir. iki boyutlu arrayde ilk boyut [b1] satır sayısını, ikinci boyut [b2] kolon sayısını belirtir Çok Boyutlu Arraylerin Öndeğerleri Çok boyutlu arraylerin öndeğerleri, Kesim 1.9 de açıklanan kurallara uyar. Çok boyutlu arrayin bileşenleri birer değişken olduğundan, öndeğerleri (default values) değişkenlerin öndeğerleri gibidir. auto depo sınıfında olanlar (yerel değişkenler) çöp toplar. static, global ve extern depo sınıfında
29 1.17. ÇOK BOYUTLU ARRAYLER 29 olanların öndeğerleri 0 olur. Buna göre, Program 1.18 örneğinde iki boyutlu arr arrayi main() içinde yerel değişkendir; yani bütün bileşenleri auto depo sınıfına aittir. Dolayısıyla, bileşenlere değer atanmazsa, onlar çöp toplar. Program i n t main ( ) { i n t i, j ; 5 i n t a r r [ 1 0 ] [ 5 ] ; // a r r a y i b i r t a b l o h a l i n d e yaz 8 f o r ( i =0; i < 1 0 ; i ++) { f o r ( j =0; j < 5 ; j++) p r i n t f ( "%d ", a r r [ i ] [ j ] ) ; 11 p r i n t f ( " \n " ) ; Program 1.18 örneğinin aksine, array tanımını global yaparsak, bütün bileşenleri global depo sınıfına ait olur. Dolayısıyla, bütün bileşenlerin öndeğerleri 0 olur. Böyle olduğunu Program 1.19 örneğindeki arrayin bileşenlerini yazdırarak görebiliriz. Program i n t a r r [ 1 0 ] [ 5 ] ; i n t main ( ) { 5 i n t i, j ; // a r r a y i b i r t a b l o h a l i n d e yaz 8 f o r ( i =0; i < 1 0 ; i ++) { f o r ( j =0; j < 5 ; j++) p r i n t f ( "%d ", a r r [ i ] [ j ] ) ; 11 p r i n t f ( " \n " ) ; / /
30 30 BÖLÜM 1. ARRAY 1.18 Array in parametre olarak kullanılması Arrayler fonksiyonlarda parametre olarak kullanılabilir. Program 1.16 buna basit bir örnektir. Bu konuyu ilerleyen kesimlerde daha ayrıntılı olarak ele alacağız Matris ve Array İki boyutlu array lerin bileşenlerinin matris biçiminde yazılışı birer dikdörtgen görüntüsü veriyor. O nedenle, bazı kaynaklar bir ve birden çok boyutlu array lere dikdörtgensel array derler. m satır ve n kolonu olan m n tipinden A = (a m,n ) matrisi a 1,1 a 1,2 a 1,n a 2,1 a 2,2 a 2,n A m,n = a m,1 a m,2 a m,n biçiminde bir tablodur. Matematiksel uygulamalarda matrislerin toplanması, çarpılması gibi işlemlerle çok karşılaşılır. Daha önce de söylediğimiz gibi, kaynak programda a i,j ya da a i,j alt ve üst indislerini yazamayacağımız için a i,j yerine a[i][j] yazacağız. Buna göre 4 satırı ve 5 kolonu olan 4 5 tipi bir matrisi a[0][0] a[0][1] a[0][2] a[0][3] a[0][4] a[1][0] a[1][1] a[1][2] a[1][3] a[1][4] A 4,5 = a[2][0] a[2][1] a[2][2] a[2][3] a[2][4] a[3][0] a[3][1] a[3][2] a[3][3] a[3][4] biçiminde bir tablo ile gösterebiliriz. Bunun bileşenlerine değer atama eylemi, tek boyutlu arraylerde yaptığımız gibidir. Her bileşenine seçkili (random) değer atayabiliriz. a[0][0]= -3 a[0][1] = 6 a[0][2]= 0 a[0][3] = 6 a[0][4]= 0 a[1][0]= 7 a[1][1] = 9 a[1][2]= 7 a[1][3] = 4 a[1][4]=-4 a[2][0]= 0 a[2][1] = 2 a[2][2]= 3 a[2][3] = 2 a[2][4]= 5 a[3][0]= 2 a[3][1] = 0 a[3][2]= 8 a[3][3] =-2 a[3][4]= 0 Tablo 1.4: Matrisin bileşenlere değer atama
31 1.19. MATRIS VE ARRAY 31 A ve B matrislerinin çarpılabilmesi için A nın kolon sayısı B nin satır sayısına eşit olmalıdır. İki matrisin toplanabilmesi için satır ve kolon sayıları karşılıklı eşit olmalıdır. Aşağıda 2 2 tipinden iki matrisin çarpımı ve toplamı görülüyor. ( ( ) ( ) + ) ( = ) ( = ) ( Program 1.20 örneği, 3 5 tipi bir matrisin bileşen değerlerinin klavyeden girilmesini sağlıyor. Program ) i n t main ( ) { 3 / 2 boyutlu matris / i n t a [ 3 ] [ 5 ] ; 6 / B i l e ş e n d e ğ e r l e r i n i g i r d i r e n döngü / i n t i, j ; 9 f o r ( i =0; i <=2; i ++) { f o r ( j =0; j <=4; j++) { p r i n t f ( " M a t r i s i n a[%d ][% d ] b i l e s e n i n i n d e g e r i n i g i r i n i z : ", i, j ) ; 12 s c a n f ( "%d ", &a [ i ] [ j ] ) ; 15 r e t u r n 0 ; Matris Çarpımı Program 1.21, çarpılacak matrislerin satır ve kolon sayısı ile bileşen değerlerinin klavyeden girilmesini sağlıyor ve çarpılabilen matrisler için çarpma işlemini yapıyor. Program i n c l u d e <s t d i o. h> i n t main ( ) { i n t m, n, p, q, c, d, k, toplam = 0 ;
32 32 BÖLÜM 1. ARRAY 5 i n t i l k [ 1 0 ] [ 1 0 ], i k i n c i [ 1 0 ] [ 1 0 ], carp [ 1 0 ] [ 1 0 ] ; p r i n t f ( " İ l k m a t r i s i n s a t ı r ve kolon s a y ı l a r ı n ı g i r i n i z \n " ) ; 8 s c a n f ( "%d%d ", &m, &n ) ; p r i n t f ( " İ l k m a t r i s i n b i l e ş e n d e ğ e r l e r i n i g i r i n i z \n " ) ; 11 f o r ( c = 0 ; c < m; c++) f o r ( d = 0 ; d < n ; d++) s c a n f ( "%d ", &i l k [ c ] [ d ] ) ; 14 p r i n t f ( " i k i n c i m a t r i s i n s a t ı r ve kolon s a y ı l a r ı n ı g i r i n i z \n " ) ; s c a n f ( "%d%d ", &p, &q ) ; 17 i f ( n!= p ) p r i n t f ( "Bu m a t r i s l e r çarpılamaz. \ n " ) ; 20 e l s e { p r i n t f ( " i k i n c i m a t r i s i n b i l e ş e n d e ğ e r l e r i n i g i r i n i z \n " ) ; 23 f o r ( c = 0 ; c < p ; c++) f o r ( d = 0 ; d < q ; d++) s c a n f ( "%d ", &i k i n c i [ c ] [ d ] ) ; 26 f o r ( c = 0 ; c < m; c++) { f o r ( d = 0 ; d < q ; d++) { 29 f o r ( k = 0 ; k < p ; k++) { toplam = toplam + i l k [ c ] [ k ] i k i n c i [ k ] [ d ] ; carp [ c ] [ d ] = toplam ; toplam = 0 ; 38 p r i n t f ( " M a t r i s l e r i n çarpımı : \n " ) ; f o r ( c = 0 ; c < m; c++) { 41 f o r ( d = 0 ; d < q ; d++) p r i n t f ( "%d\ t ", carp [ c ] [ d ] ) ; 44 p r i n t f ( " \n " ) ; 47 r e t u r n 0 ; / 2 i l k m a t r i s i n s a t ı r ve kolon s a y ı l a r ı n ı g i r i n i z i l k m a t r i s i n b i l e ş e n d e ğ e r l e r i n i g i r i n i z i k i n c i m a t r i s i n s a t ı r ve kolon s a y ı l a r ı n ı g i r i n i z
33 1.20. ARRAY E ELEŞTIRI 33 i k i n c i m a t r i s i n b i l e ş e n d e e r l e r i n i g i r i n i z M a t r i s l e r i n çarpımı : / 1.20 Array e Eleştiri Array Yapısının Kısıtları: Procedural dillerde olduğu gibi, C dili de elbette array yaratmaya ve array üzerinde işlem yapacak metotları tanımlama yeteneğine sahiptir. Array yapısı, hemen her dilde veri koleksiyonlarını işlemek için vazgeçilemeyen kullanışlı bir yapıdır. Ama bu yapının iki kısıtı vardır: 1. Array in boyu değiştirilemez. Yukarıda yaptığımız gibi, array in boyunu (boyutunu, bileşenlerinin sayısını) ya bildiriminde belirtiriz ya da bileşenlerine ilk değerlerini atayarak arrayin boyutunu belirlemiş oluruz. Her durumda, arrayin boyu başlangıçta kesinkes belirlenmiş olur. Ancak, bazı durumlarda, arrayi yarattıktan sonra, array in bileşen sayısını artırmak ya da azaltmak gerekebilir. Ne var ki, aynı bellek adresinde o iş yapılamaz. O zaman yeni uzunluğa göre yeni bir array tanımlayıp, eski arrayin öğelerini yeni arraye taşımak gerekir. Bu işi yapan fonksiyonları yazmak mümkündür. Ama bu iş yapılırken ana bellekte hem yeni, hem eski array bileşenleri yer alır. Eski arrayin öğelerini yenisine taşımak için fonksiyonlar yazılır. Bütün bunlar, arrayin boyunu değiştirmenin bedelidir. Bu işler, eski array e ayrılan bellek bölgesinde yapılamadığı için, array boyu değiştirilemez (immutable), denilir. Bunun anlamı, array in boyunun, ilk tanımlandığı bellek bölgesinde değiştirilemeyeceğidir. 2. Array in bileşen değerleri aynı veri tipindendir. Bazı durumlarda farklı veri tiplerinden oluşan veri koleksiyonlarını işlemek gerekebilir. O zaman, bileşenleri aynı veri tipinden olan array yapısı işimize yaramaz. Java, C#, Python, Ruby gibi yeni diller farklı veri tiplerinden oluşan koleksiyonlarla iş yapmayı sağlayan yapılar getirmişlerdir.
34 34 BÖLÜM 1. ARRAY Array Yerine Başka Yapılar Prosedural dillerde array yapısı çok önemli bir yapıdır; ondan vazgeçilemez. C dili array yapısı, array ile yapılabilecek bütün işlerle ilgili metotları tanımlama yteneğine sahiptir. Ayrıca, her veri tipindn array kurulabilir. Ancak, array in değişemez (immutable) oluşu, boyu sık sık değişen arraylerin kullanılmasında programcıya zorluklar çıkarır. Bu sorunu aşmak için, C Collections Framework (JCF) (bkz. Kaynak [?]) içinde yer alan Vector, Arraylist, LinkedList, TreeSet gibi veri yapılarının kullanılması tercih edilir. Tabii, JCF içinde array den başka yapılara ve başka yapılardan array yapısına dönüşümler yapan metotlar vardır. Özellikle yeni yazılan programlarda array yapısı yerine ArryList yapısının kullanılması, programcının hayatını çok kolaylaştıracaktır Paramatre Olarak Array Kullanımı Bir arrayi fonksiyon parametresi olarak kullanmak için, fonksiyonun aşağıdaki üç biçimden birisine benzer olarak tanımlanması gerekir. Başka bir deyişle, fonksiyonlarda array leri üç farklı biçimde parametre olarak kullanabiliriz. Parametre olarak kullanılacak arrayi param[ ] diyelim. Program d i s p ( c h a r ch ) 3 { p r i n t f ( "%c ", ch ) ; 6 i n t main ( ) { c h a r a r r [ ] = { a, b, c, d, e, f, g, h, I, j ; 9 i n t i ; f o r ( i =0; i <=10; i ++) { 12 / a r r a y i n her ö ğ e s i tek tek d i s p ( ) fonksiyonuna parametre o l a r a k g e ç i y o r / d i s p ( a r r [ i ] ) ; 15 r e t u r n 0 ; 18 / a b c d e f g h i j 21 / 1. Parametre olarak pointer kullanmak:
35 1.21. PARAMATRE OLARAK ARRAY KULLANIMI 35 Liste 1.9. v o i d denemea ( i n t param ) { Array adı pointer olarak kullanılabilir. Pointer konusu Bölüm?? de işlenecektir. 2. Uzunluğu belirli array Liste v o i d denemea ( i n t param [ 1 2 ] ) { Uzunluğu belirsiz array Liste v o i d denemeb ( i n t param [ ] ) { Kaç terim alınacağı belirlenerek Liste v o i d denemea ( i n t param [ ], i n t uzunluk ) { Örnekler:
36 36 BÖLÜM 1. ARRAY Daha Az Bileşeni Geçirme Program 1.23 örneğinde, dikkat edilise, arrayin boyunun 10 olduğu, ama ortalamabul() fonksiyonu çağrılırken parametre olarak 5 yazıldığı görülür. Böylece, arrayin bütün terimlerinin değil, ilk beş teriminin aritmetik ortalaması hesaplanır. Program d o u b l e ortalamabul ( i n t a r r [ ], i n t boy ) ; i n t main ( ) { 6 i n t a [ ] = { 1 3, 2, 3 1, 2 4, 4 5, 6 3, 7 7 7, 8 9, 9 4, 1 0 ; p r i n t f ( "%f ", ortalamabul ( a, 5 ) ) ; r e t u r n 0 ; 9 d o u b l e ortalamabul ( i n t a r r [ ], i n t boy ) 12 { i n t i ; d o u b l e o r t ; 15 d o u b l e toplam ; f o r ( i = 0 ; i < boy ; ++i ) 18 { toplam += a r r [ i ] ; 21 o r t = toplam / boy ; 24 r e t u r n o r t ; / / Bütün Bileşenleri Geçirme: Program 1.24 örneğinde, arrayin tamamı fonksiyona paramatre olarak geçiyor. Program / b i l d i r g e ( prototype ) / d o u b l e getaverage ( i n t a r r [ ], i n t s i z e ) ; 6 i n t main ( ) { / 5 b i l e ş e n l i array tanımı / 9 i n t a [ 5 ] = {100, 27, 3, 172, ; d o u b l e o r t ;
37 1.21. PARAMATRE OLARAK ARRAY KULLANIMI / Array argümanı o l a r a k p o i n t e r g e ç i ş i / o r t = ortalamabul ( a, 5 ) ; 15 / Bulunan o r t a l a m a y ı yaz / p r i n t f ( " Ortalama değer : %f ", o r t ) ; 18 r e t u r n 0 ; Ortalama değer Tek Bileşenin Geçmesi Program 1.25 örneğinde, arrayin bir tek bileşeni fonksiyona parametre olarak geçiyor. Program v o i d d i s p l a y ( i n t a ) { p r i n t f ( "%d ", a ) ; 5 i n t main ( ) { i n t c [ ] = { 2, 3, 4 ; 8 d i s p l a y ( c [ 2 ] ) ; // Passing array element c [ 2 ] only. r e t u r n 0 ; 4 Geometrik Ortalama Program #i n c l u d e <math. h> d o u b l e geometrikort ( d o u b l e a r r [ ], i n t ) ; 5 i n t main ( ) { 8 d o u b l e a []= { 1, 2, 3, 4, 5 ; p r i n t f ( " Geometrik Ortalama : %l f ", geometrikort ( a, 5 ) ) ; 11 d o u b l e geometrikort ( d o u b l e a r r [ ], i n t boy ) { i n t i ; 14 d o u b l e geoort ; d o u b l e carpim = 1. 0 ; 17 f o r ( i = 0 ; i < boy ; i ++)
38 38 BÖLÜM 1. ARRAY carpim = a r r [ i ] ; 20 geoort = pow( carpim, ( 1. 0 / boy ) ) ; 23 r e t u r n geoort ; 26 / / Çok Boyutlu Arraylerin Parametre Olması Program v o i d g o s t e r ( i n t a r r [ 2 ] [ 2 ] ) ; 5 i n t main ( ) { i n t a [ 2 ] [ 2 ], i, j ; p r i n t f ( " 4 s a y i g i r i n i z : \ n " ) ; 8 f o r ( i =0; i <2;++ i ) f o r ( j =0; j <2;++ j ) { s c a n f ( "%d ",&a [ i ] [ j ] ) ; 11 / çok boyutlu a r r a y i n f o n k s i y o n a parametre o l a r a k geçmesi / g o s t e r ( a ) ; 14 r e t u r n 0 ; v o i d g o s t e r ( i n t a r r [ 2 ] [ 2 ] ) { 17 i n t i, j ; p r i n t f ( " G ö s t e r i l i y o r : \ n " ) ; f o r ( i =0; i <2;++ i ) 20 f o r ( j =0; j <2;++ j ) p r i n t f ( " \n%d\ t ", a r r [ i ] [ j ] ) ; r e t u r n ; s a y ı g i r i n i z : G ö s t e r i l i y o r : Prog- Parametrenin referans olarak geçmesi (Pass by Reference): ram 1.28 örneğinde,
39 1.23. BILEŞENLER ARASINDA AKTARMA 39 arrayin adı fonksiyona paramatre olarak geçiyor (pointer) Ad, taban adrestir [0-ınci bileşenin adresi] Arrayin bileşen değerleri fonksiyon içinde güncelleniyor main() içinde bileşenler görünüyor Program v o i d dizim ( i n t a r r [ ] ) { 4 i n t i ; f o r ( i =0; i < 5 ; i ++) a r r [ i ] = a r r [ i ] ; 7 i n t main ( ) 10 { i n t a r r [ 5 ], i ; 13 p r i n t f ( " \ narrayin b i l e ş e n d e ğ e r l e r i n i g i r i n i z : " ) ; f o r ( i =0; i < 5 ; i ++) s c a n f ( "%d ",& a r r [ i ] ) ; p r i n t f ( " \nbütün a r r a y i g e ç i r... " ) ; dizim ( a r r ) ; // Yalnızca a r r a y i n adı g e ç s i n ( p o i n t e r ) f o r ( i =0; i < 5 ; i ++) p r i n t f ( " \ nfonksiyon ç a ğ r ı s ı n d a n sonra : a[%d ] : %d ", i, a r r [ i ] ) ; r e t u r n 0 ; / 3 Arrayin b i l ş e n d e ğ e r l e r i n i g i r i n i z : Bütün a r r a y i g e ç i r... 6 Fonksiyon ç a ğ r ı s ı n d a n sonra a [ 0 ] : 11 Fonksiyon ç a ğ r ı s ı n d a n sonra a [ 1 ] : 12 Fonksiyon ç a ğ r ı s ı n d a n sonra a [ 2 ] : 13 9 Fonksiyon ç a ğ r ı s ı n d a n sonra a [ 3 ] : 14 Fonksiyon ç a ğ r ı s ı n d a n sonra a [ 4 ] : 15 / 1.23 Bileşenler Arasında Aktarma Array in bileşenlerden başka değişkenlere ya da başka değişkenlerden array in bileşenlerine veri aktarmalarında istençli (explicit) ve istençsiz (implicit) döküm kuralları aynen geçerlidir (bkz.??).
40 40 BÖLÜM 1. ARRAY Program 1.29 örneği short tipinden long tipine istençsiz (implicit) döküm yapılabileceğini göstermektedir. Program i n t main ( ) { 4 i n t i, j ; s h o r t a [ ] = { 8, 7, 6, 5 ; l o n g b [ ] = { , , , , ; 7 f o r ( i =0; i <4; i ++) { b [ i ] = a [ i ] ; / v e r i kaybı oluşmaz / 10 p r i n t f ( " b[%d ] = a[%d ] \n ", i, i ) ; p r i n t f ( " \n " ) ; 13 f o r ( j =0; j <4; j++) { p r i n t f ( " \nb[%d ] = %d\n ", j, b [ j ] ) ; 16 / 2 b [ 0 ] = a [ 0 ] b [ 1 ] = a [ 1 ] b [ 2 ] = a [ 2 ] 5 b [ 3 ] = a [ 3 ] 8 b [ 0 ] = 8 11 b [ 1 ] = 7 b [ 2 ] = 6 14 b [ 3 ] = 5 / Bu dönüşümde, kaynak verilerde bir kayıp oluşmuyor. Program 1.30 örneği, long tip verileri short tipe dönüştürüyor. Kaynak değerler ile hedef değerleri karşılaştırdığımızda, çok ciddi hatalar oluştuğu görüyoruz. Bunun nedeni, C derleyicisinin veri denetimi yapmaması ve daha büyük bellek adresinden daha küçük bir bellek adresine aktarma (döküm, cast) yapmamızdır. Program 1.31 örneği long tipten short tipe istençsiz döküm (implicit casting) yapıyor ve ciddi veri kayıplarına yol açıyor. Programcı bu tür yanılgılara düşmemelidir. Program 1.30.
41 1.24. İSTENÇLI DÖKÜM 41 3 i n t main ( ) { i n t i, j ; s h o r t a [ ] = { 8, 7, 6, 5 ; 6 l o n g b [ ] = { , , , , ; f o r ( i =0; i <4; i ++) { 9 a [ i ] = b [ i ] ; / hata : v e r i kaybı o l u ş u y o r / p r i n t f ( " a[%d ] = b[%d ] \n ", i, i ) ; 12 p r i n t f ( " \n " ) ; f o r ( j =0; j <4; j++) { p r i n t f ( " \na[%d ] = %d\n ", j, a [ j ] ) ; 15 / 2 a [ 0 ] = b [ 0 ] a [ 1 ] = b [ 1 ] a [ 2 ] = b [ 2 ] 5 a [ 3 ] = b [ 3 ] 8 a [ 0 ] = a [ 1 ] = a [ 2 ] = a [ 3 ] = / Buradaki veri kaybı ciddi hatalara yol açacaktır. Böyle bir dönüşüm yapılacaksa, programcı meydana gelebilecek veri kaybını göze alarak istemli döküm (casting) yapmalıdır İstençli Döküm Program 1.31 örneği float tipten int tipe istençli döküm (explicit casting) yapıyor. Program i n t main ( ) { i n t i, j ; i n t a [ ] = { 8, 7, 6, 5 ; 6 f l o a t b [ ] = { , , , ; f o r ( i =0; i <4; i ++) {
42 42 BÖLÜM 1. ARRAY 9 a [ i ] = ( s h o r t ) b [ i ] ; / i s t e n ç l i döküm / p r i n t f ( " a[%d ] = b[%d ] \n ", i, i ) ; 12 p r i n t f ( " \n " ) ; f o r ( j =0; j <4; j++) { p r i n t f ( " \na[%d ] = %d\n ", j, a [ j ] ) ; 15 / 2 a [ 0 ] = b [ 0 ] a [ 1 ] = b [ 1 ] a [ 2 ] = b [ 2 ] 5 a [ 3 ] = b [ 3 ] 8 a [ 0 ] = a [ 1 ] = 304 a [ 2 ] = a [ 3 ] = 0 Burada sayıların kesir kısımları yok oluyor. Eğer, programda, sayıların kesir kısımlarının atılıp, tamsayı kısımlarının elde edilmesi amaçlanıyorsa, 9.satırda olduğu gibi, istençli döküm (explicit casting) yapılabilir. Program 1.32 örneğinde, iki boyutlu arrayin bileşenlerine içiçe bir döngü ile değer atanıyor ve atanan değerler yazılıyor. Program // i n t a r r [ 5 ] [ 4 ] ; 4 i n t main ( ) { i n t i, j ; i n t a r r [ 5 ] [ 4 ] ; 7 f o r ( j = 0 ; j < 5 ; j++) { // s a t ı r döngüsü f o r ( i = 0 ; i < 4 ; i ++) { // kolon döngüsü a r r [ j ] [ i ] = i j ; // b i l e ş e n l e r e değer a t a r 10 p r i n t f ( "%d\ t ", a r r [ j ] [ i ] ) ; p r i n t f ( " \n " ) ; 13 1 / /
43 1.25. ALIŞTIRMALAR Alıştırmalar 1. Program 1.33 örneği, bir metotla array kurmakta, başka bir metotla arrayin bileşen değerlerini okutmaktadır. Metotların parametreleri kurulan array nesnedir. arrkur() metodunun parametresi yaratacağı arraydir. arroku() metodunun parametresi yaratılan arraydir. Her iki fonksiyon, arrayin parametre olarak kullanılışını gösteriyor. Burada array adı arr pointer işlevini görüyor. Program v o i d arrkur ( i n t p [ ] ) ; 4 v o i d arroku ( i n t r [ ] ) ; i n t a r r [ 1 0 ] ; i n t n = 10, u ; 7 i n t main ( ) { 10 arrkur ( a r r ) ; arroku ( a r r ) ; r e t u r n 0 ; 13 v o i d arrkur ( i n t p [ ] ) { 16 i n t i ; f o r ( i = 0 ; i < 1 0 ; i ++) p [ i ] = i 3 ; 19 v o i d arroku ( i n t r [ ] ) { 22 i n t i ; f o r ( i = 0 ; i < 1 0 ; i ++) p r i n t f ( "%d\ t ", r [ i ] ) ; 25 / / 2. Bir kurumda çalışanların aylık ücretlerini bir array ile gösteriniz. Sonra ücretlerden kesilen %30 gelir vergisi miktarını başka bir array ile gösteren C programı yazınız. Program i n t main ( ) { i n t i ;
44 44 BÖLÜM 1. ARRAY f l o a t a y l i k U c r e t [ 3 ] ; 6 a y l i k U c r e t [ 0 ] = f ; a y l i k U c r e t [ 1 ] = f ; a y l i k U c r e t [ 2 ] = f ; 9 f l o a t g e l i r V e r g i s i [ 3 ] ; f o r ( i = 0 ; i < 3 ; i ++) { 12 g e l i r V e r g i s i [ i ] = a y l i k U c r e t [ i ] 30 / ; p r i n t f ( "%f TL ü c r e t i n g e l i r v e r g i s i = %f d i r \n ", a y l i k U c r e t [ i ], g e l i r V e r g i s i [ i ] ) ; 15 / TL ü c r e t i n g e l i r v e r g i s i = d i r TL ü c r e t i n g e l i r v e r g i s i = d i r TL ü c r e t i n g e l i r v e r g i s i = d i r / 3. Program 1.35 örneğinde arrayin fonksiyona parametre olarak geçişi Liste 1.11 deki gibidir. Program f l o a t ortalama ( f l o a t a [ ] ) ; i n t main ( ) { 4 f l o a t ort, c []= { , 43, , 4, , 1 7 ; o r t=ortalama ( c ) ; / Only name o f array i s passed as argument. / p r i n t f ( " Average age=%.2 f ", o r t ) ; 7 r e t u r n 0 ; f l o a t ortalama ( f l o a t a [ ] ) { 10 i n t i ; f l o a t ort, sum=0.0; f o r ( i =0; i <6; ++i ) { 13 sum+=a [ i ] ; o r t =(sum/6) ; 16 r e t u r n o r t ; 1 Ortalama yaş : Program 1.36 örneğinde arrayin fonksiyona parametre olarak geçişi 1.12 deki gibidir. Program v o i d d e g i s t i r ( i n t b [ 3 ] ) ;
45 1.25. ALIŞTIRMALAR 45 i n t main ( ) { 5 i n t i ; i n t a r r [ 3 ] = { 1, 2, 3 ; d e g i s t i r ( a r r ) ; 8 f o r ( i = 0 ; i < 3 ; i ++) p r i n t f ( "%d\ t ", a r r [ i ] ) ; 11 r e t u r n 0 ; 14 v o i d d e g i s t i r ( i n t a [ 3 ] ) { i n t i ; 17 f o r ( i =0; i <3; i ++) a [ i ] = a [ i ] a [ i ] ; / / 5. Program?? örneğinde arrayin fonksiyona parametre olarak geçişi, Liste 1.10 deki gibi yapılıyor. Program i n t maksimum( i n t [ ] ) ; / prototype / main ( ) 6 { i n t a r r [ 5 ], i, max ; 9 p r i n t f ( " Beş s a y i g i r i n i z \n " ) ; f o r ( i = 0 ; i < 5 ; ++i ) s c a n f ( "%d ", &a r r [ i ] ) ; max = maksimum( a r r ) ; p r i n t f ( " \ n G i r d i ğ i n i z s a y i l a r i n maksimumu : %d\n ", max ) ; i n t maksimum( i n t a r r [ 5 ] ) 18 { i n t max_deger, i ; 21 max_deger = a r r [ 0 ] ; f o r ( i = 0 ; i < 5 ; ++i ) i f ( a r r [ i ] > max_deger ) 24 max_deger = a r r [ i ] ; 27 r e t u r n max_deger ;
46 46 BÖLÜM 1. ARRAY / 5 s a y ı s a y i g i r i n i z / G i r d i ğ i n i z s a y i l a r i n maksimumu : Bir zar 1000 kez atılıyor. Her yüzün kaç kez geldiğini bulan bir C fonksiyonu yazınız. [Zar gelişi rasgele sayı olacak]. Program #i n c l u d e <math. h> 3 v o i d zarat ( ) ; i n t zar [ 6 ] ; 6 i n t main ( ) { zarat ( ) ; r e t u r n 0 ; 9 v o i d zarat ( ) { 12 i n t i ; srand ( time (NULL) ) ; f o r ( i = 0 ; i <= ; i ++) 15 s w i t c h ( rand ( ) %6+1) { c a s e 1 : zar [1]++; 18 b r e a k ; c a s e 2 : zar [2]++; 21 b r e a k ; c a s e 3 : zar [3]++; 24 b r e a k ; c a s e 4 : zar [4]++; 27 b r e a k ; c a s e 5 : zar [5]++; 30 b r e a k ; c a s e 6 : zar [6]++; 33 b r e a k ; 36 f o r ( i = 1 ; i <= 6 ; i ++) p r i n t f ( " \n%d ", zar [ i ] ) ; 39 r e t u r n ; /
47 1.25. ALIŞTIRMALAR / 7. Program #d e f i n e SIZE f l o a t medianbul ( f l o a t [ ], i n t ) ; i n t main ( ) { 7 i n t i, n, c h o i c e ; f l o a t array [ SIZE ], mean, median, mode ; 10 p r i n t f ( " Kaç b i l e ş e n e değer a t a y a c a k s i n i z?\n " ) ; s c a n f ( "%d ",&n ) ; p r i n t f ( "%d f l o a t s a y i g i r i z \n ", n ) ; 13 f o r ( i =0; i <n ; i ++) s c a n f ( "%f ",& array [ i ] ) ; median=medianbul ( array, n ) ; 16 p r i n t f ( " \n\ tmedian = %f \n ", median ) ; 19 f l o a t medianbul ( f l o a t a [ ], i n t n ) { 22 f l o a t temp ; i n t i, j ; 25 // array artan s ı r a y a konuluyor f o r ( i =0; i <n ; i ++) 28 f o r ( j=i +1; j<n ; j++) { i f ( a [ i ]>a [ j ] ) { temp=a [ j ] ; 31 a [ j ]=a [ i ] ; a [ i ]=temp ; 34 i f ( n%2==0) r e t u r n ( a [ n/2]+ a [ n/2 1]) / 2 ; 37 e l s e r e t u r n a [ n / 2 ] ; / Kaç b i l e ş e n e değer a t a y a c a k s ı n ı z? f l o a t s a y i g i r i z / Median =
48 48 BÖLÜM 1. ARRAY 8. Klavyeden girien sayıların modunu bulan bir fonksiyon yazınız. [Yol gösterme: Bir sayı kümesinde en çok tekrar edene o kümenin modu denilir. Girilen sayılarıdan bir array oluşturunuz. Arrayin hangi bileşen değerinin en çok tekrar ettiğini bulunuz.] Program i n t main ( ) { 4 i n t i, j, k=1,p, a [ 2 0 ], b [ 2 0 ], n, cnt =1, big ; p r i n t f ( " Kaç s a y ı g i r e c e k s i n i z \n " ) ; s c a n f ( "%d ",&n ) ; 7 p r i n t f ( "%d tane tam s a y ı g i r i n i z \n ", n ) ; f o r ( i =1; i<=n ; i ++) s c a n f ( "%d ",&a [ i ] ) ; 10 f o r ( i =1; i<=n ; i ++) { f o r ( j=i +1; j<=n ; j++) { i f ( a [ i ]==a [ j ] ) 13 cnt++; b [ k]= cnt ; 16 k++; cnt =1; 19 big=b [ 1 ] ; p=1; 22 f o r ( i =2; i<=n ; i ++) { i f ( big<b [ i ] ) { big=b [ i ] ; 25 p=i ; 28 p r i n t f ( "En çok t e k r a r l a n a n s a y ı : %d\n ", a [ p ] ) ; p r i n t f ( "Bu s a y ı %d kez t e k r a r l a n d ı \n ", b [ p ] ) ; r e t u r n 0 ; 31 / 2 Kaç s a y ı g i r e c e k s i n i z 5 5 tane tam s a y ı g i r i n i z En çok t e k r a r l a n a n s a y ı : 7 Bu s a y ı 2 kez t e k r a r l a n d ı 8 /
Pointer Kavramı. Veri Yapıları
Pointer Kavramı Veri Yapıları Pointer Kavramı- Pointer Nedir? Göstericiler, işaretçiler ya da pointer adı da verilmektedir. Gösterici (pointer); içerisinde bellek adresi tutan değişkenlerdir. Şu ana kadar
Göstericiler (Pointers)
C PROGRAMLAMA Göstericiler (Pointers) C programlama dilinin en güçlü özelliklerinden biridir. Göstericiler, işaretçiler yada pointer adı da verilmektedir. Gösterici (pointer); içerisinde bellek adresi
Mantıksal İşlemler. 7.1 true, false, nil
7 Mantıksal İşlemler 7.1 true, false, nil Doğru ya da Yanlış değer alan önermelere (ifadelere) mantıksal (logic) deyimler ya da boolean deyimler denilir ([5]). Bir çok dilde mantıksal işlemler true ve
Bölüm 07 Array. Array Nedir? Array Yaratma [] Operatörü Array'in Bileşenleri Seçkili (random) Erişim Array Türleri
Bölüm 07 Array Array Nedir? Array Yaratma [] Operatörü Array'in Bileşenleri Seçkili (random) Erişim Array Türleri Bir Boyutlu Array Çok Boyutlu Array Array Arrayi (çentikli array) Array Nedir? Array, aynı
Metotlar. d e f metot_adı [ ( [ arg [= d e f a u l t ] ]... [, arg [, &expr ] ] ) ] deyim ( l e r ) end
4 Metotlar Hemen her programlama dilinde var olan metot kavramı Ruby için de aynıdır. Bazı kaynaklarda metot terimi yerine fonksiyon terimi kullanılır. Bu kitapta iki terimi eşanlamlı kullanacağız. Ruby
ALGORİTMA VE PROGRAMLAMA I
ALGORİTMA VE PROGRAMLAMA I Yrd. Doç. Dr. Deniz KILINÇ [email protected] YZM 1101 Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi Genel Bakış 2 Diziler Dizi Nedir? Dizilerin Bildirimi
Aynı tipten çok sayıda değişken topluluğudur. X Y Score1 Score2 (0) (1) (2)...
Array (Diziler) Array Aynı tipten çok sayıda değişken topluluğudur. Birden fazla aynı tipteki değerle işlem yapmayı kolaylaştırır. X Y Score1 Score2 40 56 Grade 40 56 80 (0) (1) (2)... (13) Array tanımlama:
HSancak Nesne Tabanlı Programlama I Ders Notları
DİZİLER Bellekte ard arda yer alan aynı türden nesneler kümesine dizi (array) denilir. Bir dizi içerisindeki bütün elemanlara aynı isimle ulaşılır. Yani dizideki bütün elemanların isimleri ortaktır. Elemanlar
C Programlama Dilininin Basit Yapıları
Bölüm 2 C Programlama Dilininin Basit Yapıları İçindekiler 2.1 Sabitler ve Değişkenler......................... 13 2.2 Açıklamalar (Expresions)........................ 14 2.3 İfadeler (Statements) ve İfade
Her veri tipine yetecek ve ancak o kadar anabellek alanı ayrılır. Programcı, ana bellekte ayrılacak adresin büyüklüğünü bilerek değişkenlerini
1 Veri Tipleri Bazı diller veri tiplerini önceden ayırır, bazıları ayırmaz. Teknik olarak, veri tipini önceden belirleyen diller, anabelleğe yerleşecek verileri, orada kapsayacakları alanlara göre gruplara
3.1 Pointer in Yararları
3 Pointers Pointer, başka bir değişkenin bellekteki adresini işaret eden bir değişkendir. O nedenle, pointere işaretçi, gösterici adları verilir. Değişkenler için olduğu gibi, pointerin değeri, işaret
DİZİLER-KATARLAR ALGORİTMA VE PROGRAMLAMA II
DİZİLER-KATARLAR ALGORİTMA VE PROGRAMLAMA II DİZİLER Dizi, aynı tipteki verilere tek bir isimle erişmek için kullanılan bir kümedir. Bir dizi bildirildikten sonra, dizinin bütün elemanları bellekte peşpeşe
Pointers (İşaretçiler)
Pointers (İşaretçiler) Pointers (İşaretçiler) Verilerin bilgisayar hafızasında tutulduğu fiziki alan adres olarak tanımlanabilir. Adres, hem donanımla hem de yazılımla ile ilişkilidir. Donanımsal açıdan
BMÜ-111 Algoritma ve Programlama. Bölüm 5. Tek Boyutlu Diziler
BMÜ-111 Algoritma ve Programlama Bölüm 5 Tek Boyutlu Diziler Yrd. Doç. Dr. İlhan AYDIN 1 Problem 100 adet sayı okumak istediğimizi düşünelim. Bu sayıların ortalaması hesaplanacak ve sayıların kaç tanesinin
Özyineleme (Recursion)
C PROGRAMLAMA Özyineleme (Recursion) Bir fonksiyonun kendisini çağırarak çözüme gitmesine özyineleme (recursion), böyle çalışan fonksiyonlara da özyinelemeli (recursive) fonksiyonlar denilir. Özyineleme,
Değişkenler. Geçerli değişken isimleri : baslamazamani, ad_soyad, x5 Geçersiz değişken isimleri : 3x, while
Değişkenler Değişkenler bir bilginin bellekteki konumunu temsil eden sembolik isimlerdir. Bilgisayarda hemen hemen tüm işlemler bellekte yapılır. Program çalıştırıldığında değişken ve bu değişkenin türüne
ALGORİTMA VE PROGRAMLAMA I
ALGORİTMA VE PROGRAMLAMA I YZM 1101 Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi Genel Bakış 2 Diziler Dizi Nedir? Dizilerin Bildirimi Dizilere Başlangıç Değeri Verme Dizilerde Arama
Değişkenler, içerisinde tek bir değer tutabilen yapılardır. Örneğin haftanın günlerini değişkenlerde tutmak istersek, her bir gün adı için bir
DİZİLER (ARRAYS) Değişkenler, içerisinde tek bir değer tutabilen yapılardır. Örneğin haftanın günlerini değişkenlerde tutmak istersek, her bir gün adı için bir değişken tanımlamak gereklidir. string gun1,
ELN1001 BİLGİSAYAR PROGRAMLAMA I
ELN1001 BİLGİSAYAR PROGRAMLAMA I DEPOLAMA SINIFLARI DEĞİŞKEN MENZİLLERİ YİNELEMELİ FONKSİYONLAR Depolama Sınıfları Tanıtıcılar için şu ana kadar görülmüş olan özellikler: Ad Tip Boyut Değer Bunlara ilave
Toplama işlemi için bir ikili operatör olan artı işareti aynı zamanda tekli operatör olarak da kullanılabilir.
www.csharpturk.net Türkiye nin C# Okulu Yazar Yunus Özen Eposta [email protected] Tarih 08.04.2006 Web http://www.yunusgen.tr ARİTMETİK OPERATÖRLER VE KULLANIM ŞEKİLLERİ Bilgisayarlar yapıları gereği,
(Sözlük, dictionary, birleşik array, map)
14 hash (Sözlük, dictionary, birleşik array, map) 14.1 Hash Sınıfı Array ambarı, içindekileri tamsayılarla (index) damgalayıp sıralayan harika bir yapıdır. Ama bazı durumlarda indis ya yoktur ya da kullanılması
Bilgisayar Teknolojileri Bölümü Bilgisayar Programcılığı Programı. Öğr. Gör. Cansu AYVAZ GÜVEN
Bilgisayar Teknolojileri Bölümü Bilgisayar Programcılığı Programı Öğr. Gör. Cansu AYVAZ GÜVEN NESNE TABANLI PROGRAMLAMA Java Değişkenler ve Veri Tipleri Operatörler JAVA Java Java SUN bilgisayar şirketince
C#(Sharp) Programlama Dili
Değişkenler C#(Sharp) Programlama Dili Program yazarken her zaman sabit verilerle çalışmayız, çoğu zaman programımızda bir verinin kullanıcının davranışına göre değişmesi gerekir. Kullanıcıdan bir metin
Uzaktan Eğitim Uygulama ve Araştırma Merkezi
JAVA PROGRAMLAMA Öğr. Gör. Utku SOBUTAY İÇERİK 2 Java da Diziler Dizi Tanımlama ve İlk Değer Atama Dizi Elemanlarının Kullanılması Dizi İşlemleri Java da Diziler JAVA DA DİZİLER 4 Dizi; tek bir veri tipinde,
ArrayList Uygulamaları
ArrayList Uygulamaları Aşağıdaki program önce boş bir ArrayList yaratıyor. Sonra sırasıyla şu işleri yapıyor: Listenin boş olup olmadığını yaz. Ambara üç tane öğe ekle. İndisi 2 olan yere bir öğe sokuştur.
Uzaktan Eğitim Uygulama ve Araştırma Merkezi
JAVA PROGRAMLAMA Öğr. Gör. Utku SOBUTAY İÇERİK 2 Java da Fonksiyon Tanımlamak Java da Döngüler Java da Şart İfadeleri Uygulamalar Java da Fonksiyon Tanımlamak JAVA DA FONKSİYON TANIMLAMAK 4 Fonksiyonlar;
ALGORİTMA VE PROGRAMLAMA I DERS NOTU#8
ALGORİTMA VE PROGRAMLAMA I DERS NOTU#8 YZM 1105 Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi 6. BÖLÜM 2 Çok Boyutlu Diziler Çok Boyutlu Dizi 3 Bir dizi aşağıdaki gibi bildirildiğinde
Bil101 Bilgisayar Yazılımı I. M. Erdem ÇORAPÇIOĞLU Bilgisayar Yüksek Mühendisi
Bil101 Bilgisayar Yazılımı I Bilgisayar Yüksek Mühendisi Editör Disk 1)Kaynak kodlar editör aracılığı ile oluşturulur. (.c) Kaynak dosya Önişleyici Disk 2)Önişleyici kodlar içerisindeki ilk işleme işini
Veri Yapıları. Amaçlar: Temel Veri Yapılarını Tanımlamalı Veri Yapılarını Veri Modeli ve Türlerini Öğreneceksiniz. İçindekiler:
Veri Yapıları Amaçlar: Temel Veri Yapılarını Tanımlamalı Veri Yapılarını Veri Modeli ve Türlerini Öğreneceksiniz İçindekiler: Giriş Temel Veri Yapıları Tanımlamalı Veri Yapıları Veri Modeli ve Türleri
Program Çözümleme. Aşağıdaki örneklerde printf() ve scanf() fonksiyonlarının işlevleri gösterilmektedir. Liste 1.1. Çözümleme:
1 Program Çözümleme Bir bilgisayar programını çözümleme eylemini, onun her satırının (deyiminin) yaptığı işi açıklamak olarak anlayacağız. Bazı kaynaklarda bu eyleme analiz der. Daha ileri düzeyde "trace"
// hataları işaret eden referans
System sınıfı java.lang.object java.lang.system public final class System extends Object System sınıfı, java.lang paketi içindedir. Platformdan bağımsız olarak sistem düzeyindeki eylemleri belirleyen dingin
enum bolumler{elektronik, insaat, bilgisayar, makine, gida};
BÖLÜM 12: Giriş C programlama dilinde programcı kendi veri tipini tanımlayabilir. enum Deyimi (Enumeration Constants) Bu tip, değişkenin alabileceği değerlerin belli (sabit) olduğu durumlarda programı
Diziler İndisli Değişkenler
Diziler İndisli Değişkenler Aynı tür bilgileri (öğrenci isimleri, şehir isimleri, kapı numaraları, fakülteler vbg.) bellekte tutmak için kullanabileceğimiz listelere dizi adı verilir. Dizi kullanmanın
Programlama Dilleri. C Dili. Programlama Dilleri-ders02/ 1
Programlama Dilleri C Dili Programlama Dilleri-ders02/ 1 Değişkenler, Sabitler ve Operatörler Değişkenler (variables) bellekte bilginin saklandığı gözlere verilen simgesel isimlerdir. Sabitler (constants)
C PROGRAMLAMA D İ L İ
C PROGRAMLAMA DİLİ Diziler Dizi bir kümedir. Aynı tipteki verilere tek bir isimle erişmek için kullanılır. Bir dizi bildirildikten sonra, dizinin bütün elemanları bellekte peşpeşe saklanır. Bu yüzden dizilere
Diziler. Yrd.Doç.Dr.Bülent ÇOBANOĞLU
Diziler Yrd.Doç.Dr.Bülent ÇOBANOĞLU Dizi (Array) Nedir? Bellekte sürekli yer kaplayan artarda sıralanmış aynı türden verilerin oluşturduğu kümeye dizi (array) denir. Dizi, çok fazla miktardaki tek tip
Programın Akışının Denetimi. Bir arada yürütülmesi istenen deyimleri içeren bir yapıdır. Söz dizimi şöyledir:
Programın Akışının Denetimi Bir program komutların yazıldığı sırada akar. Ama çoğunlukla, bu akışı yönlendirmek gerekir. Bu iş için denetim yapılarını kullanırız. Bunlar iki gruba ayrılabilir: Yönlendiriciler
JAVADA DİZİ İŞLEMLERİ
JAVADA DİZİ İŞLEMLERİ Javada diziler nesnedirler, cdeki gibi hafızada yer kaplayan pointer değillerdir. Javada diziler, cye göre daha güvenilirdir. Dizilerin elemanlarına gelişigüzel değerler atayamazsınız.
BLM 112- Programlama Dilleri II. Hafta 4 İşaretçiler (Pointers)
1 BLM 112- Programlama Dilleri II Hafta 4 İşaretçiler (Pointers) Dr. Öğr. Üyesi Caner Özcan İyilik insanları birbirine bağlayan altın zincirdir. ~Goethe Hafıza Yapısı 2 Bir değişken tanımlandığında arka
ALGORİTMA VE PROGRAMLAMA II
ALGORİTMA VE PROGRAMLAMA II Yrd. Doç. Dr. Deniz KILINÇ [email protected] YZM 1102 Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi Genel Bakış 2 Yapılar ve Birlikler enum Deyimi
Programlama Dilleri 3
Diziler (Arrays) 1 Dizi Kavramı Bellekte ard arda yer alan aynı türden nesneler kümesine dizi (array) denilir. Bir dizi içerisindeki bütün elemanlara aynı isimle ulaşılır. Yani dizideki bütün elemanların
Fonksiyonlar (Altprogram)
Fonksiyonlar (Altprogram) C Programlama Dili fonksiyon olarak adlandırılan alt programların birleştirilmesi kavramına dayanır. Bir C programı bir ya da daha çok fonksiyonun bir araya gelmesi ile oluşur.
ALGORİTMA VE PROGRAMLAMA II
ALGORİTMA VE PROGRAMLAMA II Yrd. Doç. Dr. Deniz KILINÇ [email protected] YZM 1102 Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi Genel Bakış 2 Bellek ve Adresleme İşaretçi Kavramı
YZM 2105 Nesneye Yönelik Programlama
YZM 2105 Nesneye Yönelik Programlama Yrd. Doç. Dr. Deniz KILINÇ Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi Yazılım Mühendisliği 1 BÖLÜM - 5 Nesneye Yönelik Programlamaya Giriş Bu
Genel Programlama II
Genel Programlama II 22.03.2011 1 Yapılar ( Structures ) Yapılar ( structures ); tam sayı, karakter vb. veri tiplerini gruplayıp, tek bir çatı altında toplar. Bu gruplandırma içinde aynı ya da farklı veri
Interface Comparator. Kılgılayan sınıf: Collator. Bildirimi: public interface Comparator
Interface Comparator java.util Interface Comparator Kılgılayan sınıf: Collator Bildirimi: public interface Comparator Comparator arayüzü Java Collections Framework un bir üyesidir. Bir nesneler koleksiyonu
Algoritma Geliştirme ve Veri Yapıları 9 Ağaç Veri Modeli ve Uygulaması. Mustafa Kemal Üniversitesi
Algoritma Geliştirme ve Veri Yapıları 9 Ağaç Veri Modeli ve Uygulaması Ağaç, verilerin birbirine sanki bir ağaç yapısı oluşturuyormuş gibi sanal olarak bağlanmasıyla elde edilen hiyararşik yapıya sahip
Diziler (Arrays) Çok Boyutlu Diziler
Diziler (Arrays) Çok Boyutlu Diziler ÇOK BOYUTLU DİZİLER Birden fazla indis numarası ile elemanlarına ulaşılan dizilere çok boyutlu diziler denir. Bunlardan en sık kullanılanı çift boyutlu dizilerdir.
Java Koleksiyonları (Java Collections)
Java Koleksiyonları (Java Collections) Giriş Bu bölümde, java standart kütüphanesinde yer alan Collections topluluğunu ele alacağız. Amaçlar Bu dersin sonunda öğrenci şunları biliyor olacaktır: Java Collctions
2 ALGORİTMA VE AKIŞ DİYAGRAMLARI
İÇİNDEKİLER IX İÇİNDEKİLER 1 GİRİŞ 1 Kitabın Amacı 1 Algoritmanın Önemi 2 Bilgisayarın Doğuşu ve Kullanım Amaçları 3 Programlama Dili Nedir? 3 Entegre Geliştirme Ortamı (IDE) Nedir? 4 2 ALGORİTMA VE AKIŞ
Adı soyadı :... Öğrenci no :... İmza :... Tarih, Süre : dak.
Selçuk Üniversitesi Mühendislik Fakültesi Harita Mühendisliği Bölümü ra Sınavı Test Soruları dı soyadı :... Öğrenci no :... İmza :... Tarih, Süre :13.04.2017 60 dak. Dikkat!!! Soru kitapçığında ve cevap
Bir dizinin boyutları sabittir ve kullanılmadan önce belirlenmelidir. Dizi boyutunu belirlemek için başka bir değişkende kullanabilirsiniz.
C# da Diziler Diziler için aynı tipteki verilerin tutulduğu bir koleksiyon diyebiliriz. Örneğin integer verinin bir yığın şeklinde tutulması için dizileri kullanırız. C# da diziler referans tipinde değişkenlerdendir.
BLM 111 ALGORİTMA VE PROGRAMLAMA I
1 BLM 111 ALGORİTMA VE PROGRAMLAMA I ÇOK BOYUTLU DİZİLER, YAPILAR [MULTIDIMENSIONAL ARRAYS, STRUCTURES] ÇOK BOYUTLU DİZİLER Çok boyutlu diziler tanımlayabiliriz. İki boyutta, çok boyutlu diziler bellek
Görsel Programlama DERS 04. Görsel Programlama - Ders04/ 1
Görsel Programlama DERS 04 Görsel Programlama - Ders04/ 1 Diziler ve Kolleksiyonlar(Collections) Diziler aynı tipli değişkenleri tutmak için kullanılan veri yapılarıdır. Diziler sabit uzunlukludur. Birkez
Binary Search. (Yarılama) Bölüm Dizide Bir Öğe Arama
Bölüm 39 Binary Search (Yarılama) 39.1 Dizide Bir Öğe Arama İkil aramayı (yarılama yöntemi) sıralı veri kümelerinde sık sık kullanırız. Örneğin, sözlükte bir sözcüğü ararken, sözlüğün bütün sayfalarını
Yrd. Doç. Dr. Caner ÖZCAN
Yrd. Doç. Dr. Caner ÖZCAN Hafıza Yapısı Bir değişken tanımlandığında arka planda bilgisayarın hafızasında bir konuma yerleştirilir. Hafıza küçük hücrelerden oluşmuş bir blok olarak düşünülebilir. Bir değişken
Integer Sınıfı. 9.1 Integer Sınıfına Uygulanan Başlıca Metotlar. Ruby de tamsayılar için kullanılan Fixnum ve Bignum sınıflarını üreten sınıftır.
9 Integer Sınıfı Ruby de tamsayılar için kullanılan Fixnum ve Bignum sınıflarını üreten sınıftır. Integer Literal Tamsayı gösteren metinler, 1 0, 1, 123, 123456789012345678901234567890 biçiminde yalnızca
Ders 4: Diziler (Arrays( Arrays) barisgokce.com
Ders 4: Diziler (Arrays( Arrays) Hazırlayan : Öğr. Grv.. Barış GÖKÇE Đletişim im : www.barisgokce barisgokce.com Diziler Aynı tipteki bir veri gurubunun bir değişken içinde saklanmasıdır. Veriler Hafızada
Dizi türündeki referanslar, dizi nesnelerine bağlanmaktadır. Dizi referansları tanımlamak bu dizinin hemen kullanılacağı anlamına gelmez...
Javada Diziler Java da diziler nesnedir; içerisinde belirli sayıda eleman bulunur. Eğer bu sayı sıfır ise, dizi boş demektir. Dizinin içerisindeki elemanlara eksi olmayan bir tam sayı ile ifade edilen
Sınav tarihi : Süre : 60 dak. a) strstr b) strchr c) strcat d) strcpy e) strlen. a) b) d) e) 0
Selçuk Üniversitesi, Mühendislik Fakültesi, Harita Mühendisliği Bölümü Bitirme Sınavı Test Soruları Adı soyadı : Öğrenci no : Sınav tarihi : 01.06.2017 Süre : 60 dak. 1. t değişkeni hakkında aşağıdakilerden
5.HAFTA. Sınıf ve Nesne Kavramı, Metot Oluşturma, Kurucu Metot, this Deyimi
5.HAFTA Sınıf ve Nesne Kavramı, Metot Oluşturma, Kurucu Metot, this Deyimi Sınıf Kavramı: Sınıf (class) soyut bir veri tipidir. Nesne (object) onun somutlaşan bir cismidir. Java da sınıf (class) kavramını
I Java Veri Yapıları 1
İçindekiler Önsöz xix I Java Veri Yapıları 1 1 Giriş 3 1.1 Veri Nedir?............................... 3 1.2 Algoritma Nedir?............................ 4 1.3 Veri Yapıları..............................
Uzaktan Eğitim Uygulama ve Araştırma Merkezi
JAVA PROGRAMLAMA Öğr. Gör. Utku SOBUTAY İÇERİK 2 Java da Kapsülleme (Erişim Denetleyiciler) Java da Sınıf Oluşturmak Java da Nesne Oluşturmak Java da Constructor Kavramı Java da This Kavramı Java da Constructor
Temel Giriş/Çıkış Fonksiyonları
Temel Giriş/Çıkış Fonksiyonları Temel giriş/çıkış fonksiyonları, bütün programla dillerinde mevcuttur. Bu tür fonksiyonlar, kullanıcıya ekrana veya yazıcıya bilgi yazdırmasına, ve bilgisayara klavyeden
Görsel Programlama DERS 03. Görsel Programlama - Ders03/ 1
Görsel Programlama DERS 03 Görsel Programlama - Ders03/ 1 Java Dili, Veri Tipleri ve Operatörleri İlkel(primitive) Veri Tipleri İLKEL TİP boolean byte short int long float double char void BOYUTU 1 bit
Değişkenler tanımlanırken onlara ne tür veriler atanabileceği de belirtilir. Temel veri türleri oldukça azdır:
C VERİ TÜRLERİ BASİT VERİ TÜRLERİ Değişkenler, program içinde üzerinde işlem yapılan, veri saklanan ve durumlarına göre programın akışı sağlanan nesnelerdir. C de bir değişken kullanılmadan önce tanımlanmalıdır.
PROGRAMLAMAYA GİRİŞ DERS 2
PROGRAMLAMAYA GİRİŞ DERS 2 Program editörde oluşturulur ve diske kaydedilir Tipik Bir C Programı Geliştirme Ortamının Temelleri 1. Edit 2. Preprocess 3. Compile 4. Link 5. Load 6. Execute Önişlemci programı
Fonksiyonlar. C++ ve NESNEYE DAYALI PROGRAMLAMA 51. /* Fonksiyon: kup Bir tamsayının küpünü hesaplar */ long int kup(int x) {
Fonksiyonlar Kendi içinde bağımsız olarak çalışabilen ve belli bir işlevi yerine getiren program modülleridir. C programları bu modüllerden (fonksiyonlar) oluşurlar. Fonksiyonların yazılmasındaki temel
Dizi nin Önemi. Telefon rehberindeki numaralar, haftanın günleri gibi v.b.
Diziler Dizi Nedir Ortak özelliğe sahip birden fazla bilginin oluşturduğu bütün bilgi kümelerine veya hafızada art arda sıralanmış aynı türden verilerin oluşturduğu yapıya dizi denir. Kısaca; Bellekte
C de Detaylı Üs Alma Programı. C# Dilinde Metot Tanımlama ve Yazdırma
C de Detaylı Üs Alma Programı Bu uygulama yazısında C de pow() fonksiyonunu kullanmadan üs hesabı yapan programı yazmaya çalıştım. Başta tanımladığım float tipinde 2 fonksiyon sayesinde + lı ve li üs değerleriyle
Algoritmalar ve Karmaşıklık
Algoritmalar ve Karmaşıklık Ders 11 Algoritma Ayrık matematikte karşılaşılan bir çok problem sınıfı mevcuttur. Örneğin, verilen tamsayı grubu içindeki en büyük olanının bulunması, verilen bir kümenin bütün
Dizi nin Önemi. Telefon rehberindeki numaralar, haftanın günleri gibi v.b.
Diziler Dizi Nedir Ortak özelliğe sahip birden fazla bilginin oluşturduğu bütün bilgi kümelerine veya hafızada art arda sıralanmış aynı türden verilerin oluşturduğu yapıya dizi denir. Kısaca; Bellekte
ALGORİTMA VE PROGRAMLAMA II
ALGORİTMA VE PROGRAMLAMA II Yrd. Doç. Dr. Deniz KILINÇ [email protected] YZM 1102 Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi Genel Bakış 2 İşaretçiler ve Diziler Fonksiyon
Fonksiyonlar -Genel Test- A
1 Fonksiyonlar -Genel Test- A 1. C dilinde fonksiyon bildirimi için hangisi gereklidir? (a) Fonksiyonun döndüreceği veri tipi (b) Fonksionun adı (c) Fonksiyon parantezi ( ) (d) Hepsi 2. C dilinde fonksion
Aşağıdaki programı inceleyip ekrana ne yazacağını söyleyebilir misiniz?
PYTHON DERS-8 LİSTELER-2 Geçen ders listeler oluşturmayı, listedeki her elemanın bir index numarası olduğu ve bu numaranın 0'dan başladığını, listenin tamamını veya index numarası sayesinde belirli bir
HSancak Nesne Tabanlı Programlama I Ders Notları
SABİTLER VE DEĞİŞKENLER Değişken, verilerin bellekte geçici olarak kaydedilmesini ve gerektiğinde kullanılmasını sağlayan değerdir. Nesne tabanlı programlama dilinde değişken kullanımı diğer programlama
AYRIK YAPILAR ARŞ. GÖR. SONGÜL KARAKUŞ- FIRAT ÜNİVERSİTESİ TEKNOLOJİ FAKÜLTESİ YAZILIM MÜHENDİSLİĞİ BÖLÜMÜ, ELAZIĞ
AYRIK YAPILAR P r o f. D r. Ö m e r A k ı n v e Y r d. D o ç. D r. M u r a t Ö z b a y o ğ l u n u n Ç e v i r i E d i t ö r l ü ğ ü n ü ü s t l e n d i ğ i «A y r ı k M a t e m a t i k v e U y g u l a
3. Hafta Tablo İşlemleri BPR255 Veritabanı. Bu Derste Öğrenecekleriniz: 1. Tablo İşlemleri. 1.2. Kısıtlamalar (Constraints)
Bu Derste Öğrenecekleriniz: 1. Tablo İşlemleri 1.1. Tablo Oluşturma 1.2. Tablo Oluşturmada Kısıtlamalar Constraints 1.3. Tablo Silme a. NULL, NOT NULL b. PRIMARY KEY c. UNIQUE d. FOREIGN KEY e. CHECK f.
Yrd. Doç. Dr. Caner ÖZCAN
Yrd. Doç. Dr. Caner ÖZCAN Hafıza Yapısı Bir değişken tanımlandığında arka planda bilgisayarın hafızasında bir konuma yerleştirilir. Hafıza küçük hücrelerden oluşmuş bir blok olarak düşünülebilir. Bir değişken
Programlama Dilleri 1. Ders 4: Diziler
Programlama Dilleri 1 Ders 4: Diziler Genel Bakış Tanım Dizilerin tanımlanması Dizilere ilk değer verilmesi Yerel ve Global diziler Dizilerin birbirine atanması Diziler ile ilgili örnekler Çalışma soruları
YAPILAR (STRUCTURES)
YAPILAR (STRUCTURES) Yapılar, dizilere benzeyen ancak farklı tipten verileri bir arada tutan bütün olarak tanımlanabilir. Yapıların kullanılmasının esas sebebi de budur. Yapı tipi aslında yeni bir tip
NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 2
NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 2 JAVA DA PROGRAM DENETİMİ VE OPERATÖRLER Java programlama dilinde temel tipleri ve nesneleri yönlendirmek ve değiştirmek için operatörler kullanılır. Atamalar sağ taraftaki
Programlama Dilleri. C Dili. Programlama Dilleri-ders08/ 1
Programlama Dilleri C Dili Programlama Dilleri-ders08/ 1 Yapısal Veri Tipleri C dili genişletilebilen bir dildir. Var olan veri tipleri kullanılarak yeni veri tipleri tanımlanıp kullanılabilir. Programlama
Sunum İçeriği. Programlamaya Giriş 22.03.2011
Programlamaya Giriş Nesne Tabanlı Programlamaya Giriş ve FONKSİYONLAR Sunum İçeriği Nesne Tabanlı Programlama Kavramı Fonksiyon tanımlama ve kullanma Formal Parametre nedir? Gerçel Parametre nedir? Fonksiyon
Operatörler. 6.1 Operatör Nedir?
6 Operatörler 6.1 Operatör Nedir? Operatör, bir veri tipi üzerinde tanımlı fonsiyondur. En basit örneği sayılar üzerindeki toplama işlemidir. 1 + 2 = 3 işleminde (+) simgesi bir operatördür. 1 ve 2 sayıları
BLM-111 PROGRAMLAMA DİLLERİ I. Ders-10 Diziler. Yrd. Doç. Dr. Ümit ATİLA
BLM-111 PROGRAMLAMA DİLLERİ I Ders-10 Diziler Yrd. Doç. Dr. Ümit ATİLA [email protected] http://web.karabuk.edu.tr/umitatilla/ Diziler Bilgisayarlar yardımıyla yapılan işlemlerde, çok sayıda veri
Bölüm 8, Yrd. Doç. Dr. A. Kadir YALDIR PAÜ Bilgisayar Mühendisliği Bölümü BÖLÜM 8: DİZİLER
BÖLÜM 8: DİZİLER Dizi bir kümedir. Aynı tipte verilere tek bir isimle erişmek için kullanılır. Bir dizinin bütün elemanları bellekte peş peşe saklanır. Dizi Tipi Tek boyutlu İki boyutlu Çok boyutlu Genel
Temel Bilgisayar Programlama
BÖLÜM 9: Fonksiyonlara dizi aktarma Fonksiyonlara dizi aktarmak değişken aktarmaya benzer. Örnek olarak verilen öğrenci notlarını ekrana yazan bir program kodlayalım. Fonksiyon prototipi yazılırken, dizinin
for döngüsü for (başlangıç değeri; şart; artım) ifade; for (başlangıç değeri; şart; artım) { ifadeler; }
for döngüsü for (başlangıç değeri; şart; artım) ifade; for (başlangıç değeri; şart; artım) ifadeler; Başlangıç değeri; koşul içinde tanımladığımız değişkene ilk değerin atanmasını sağlar. Koşul: Döngünün
ÜNİT E ÜNİTE GİRİŞ. Algoritma Mantığı. Algoritma Özellikleri PROGRAMLAMA TEMELLERİ ÜNİTE 3 ALGORİTMA
PROGRAMLAMA TEMELLERİ ÜNİTE 3 ALGORİTMA GİRİŞ Bilgisayarların önemli bir kullanım amacı, veri ve bilgilerin kullanılarak var olan belirli bir problemin çözülmeye çalışılmasıdır. Bunun için, bilgisayarlar
Biçem Belirteçleri (Format Specifiers)
1 Biçem Belirteçleri (Format Specifiers) Bilgisayara, girdiler ve çıktılar insanın anlayacağı biçemdedir. Harfler, sayılar ve diğer krakterler, kültürlere bağlı olan simgelerdir. Bir bakıma, onlar birer
Ders 8: Metotlar. barisgokce.com
Ders 8: Metotlar Hazırlayan : Öğr. Grv.. Barış GÖKÇE Đletişim im : www.barisgokce barisgokce.com Metotlar C# içerisinde bir veya birden fazla kod bulunduran kod bloklarıdır. Bir nesnenin veya sınıfın programı
İstanbul Teknik Üniversitesi IEEE Öğrenci Kolu DİZİLER
DİZİLER Dizi Nedir? Aynı türden nesnelerin oluşturduğu, bellekte bitişik bir biçimde bulunan veri yapısına dizi denir.mesela alfabe diye bir dizi tanımlarız, harfleri a,b,c,d... diye sıralarız.dizinin
Çoktan Seçmeli Değerlendirme Soruları Akış Şemaları İle Algoritma Geliştirme Örnekleri Giriş 39 1.Gündelik Hayattan Algoritma Örnekleri 39 2.Say
İÇİNDEKİLER 1. Bilgisayarın Yapısı Ve Programlama Dilleri Giriş 1 Bilgisayar ve Programlamanın Kısa Bir Tarihçesi 2 Donanım ve Yazılım Kavramları 3 Bilgisayarın Donanımsal yapısı 4 Giriş Birimi (Input
Bölüm 6. Diziler (arrays) Temel kavramlar Tek boyutlu diziler Çok boyutlu diziler
Bölüm 6 Diziler (arrays) Temel kavramlar Tek boyutlu diziler Çok boyutlu diziler Chapter 6 Java: an Introduction to Computer Science & Programming - Walter Savitch 1 Genel Bakış Dizi: Hepsi aynı türde
Temel Bilgisayar Programlama Final Sınavı Çalışma Notları
Diziler Temel Bilgisayar Programlama Final Sınavı Çalışma Notları (Dr. Övünç ÖZTÜRK, Dr. Tahir Emre KALAYCI) (İnşaat Mühendisliği ve Gıda Mühendisliği Grupları İçin) Diziler aynı türden bilgileri saklamak
Nesne Tabanlı Programlama
Nesne Tabanlı Programlama Ders Notu - 1 Dicle Üniversitesi Mühendislik Fakültesi Elektrik Elektronik Mühendisliği Bölümü 1 Değerler ve Değişkenler Values & Variables 2 1 Değişkenlerin Özellikleri Tipi
String Sınıfını Yönetmek
String Sınıfı String Sınıfını Yönetmek Stringler karakterlerden oluşur. Bir string sabiti çift tırnak arasında verilmiş karakterler listesidir. "Bu örnek bir string dir" 2 Yukardaki string 27 adet karakterden
Veri Tipleri Aşağıdaki programdaki 5 hatayı bulunuz.
Aşağıdaki programdaki 5 hatayı bulunuz. class hata public static void main() int x; int y; Console.WriteLine("X in degeri = "x); y = x / 2 Console.Write("y nin değeri = x / 2 = "); Console.WriteLine(y);
