Bölüm 7 - Göstericiler İndeks 7.1 Giriş

Slides:



Advertisements
Benzer bir sunumlar
Dizi Kullanan Örnekler
Advertisements

STRİNG FONKSİYONLARI.
Diziler.
Bölüm 8 Diziler Dizi Tanımı Dizi Elemanlarına Değer Atama
Değişkenler ve bellek Değişkenler
Göstericiler (Pointers)
Nesneye Yönelik Programlama
Bölüm 7 Fonksiyonlar GÖSTERGELER Gösterge Tanımı
Tanım Birbirleriyle ilişkili ve bitişik iki ya da daha fazla bellek hücresinden oluşan yapı Örnek dizi tanımı: int tamsayiDizi[10]; tamsayiDizi[0] /*ilk.
Atama ve Girdi/Çıktı Komutları
4 Kontrol Yapıları: 1.Bölüm.
Elektrik-Elektronik Mühendisliği Bölümü DİZİLER C Programlama Dili Yaz Stajı Cengiz TEPE SAMSUN 2007.
BPR152 ALGORİTMA VE PROGRAMLAMA - II
String Kütüphanesindeki Arama Fonksiyonları
BPR151 ALGORİTMA VE PROGRAMLAMA - I
Bölüm 10 Yapılar ve Birleşimler
Bölüm 3 – Yapısal Programlama
BPR152 ALGORİTMA VE PROGRAMLAMA - II
Diziler.
NESNEYE YÖNELİK PROGRAMLAMA
Fonksiyonlar.
While Döngüsü Tekrarlama deyimidir. Bir küme ya da deyim while kullanılarak bir çok kez yinelenebilir. Yinelenmesi için koşul sınaması döngüye girilmeden.
SINIFLAR VE DİNAMİK BELLEK YÖNETİMİ
Görsel C# Programlama Güz 2009 (6. Hafta).
FONKSİYONLAR.
Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi
Bölüm 2 – Kontrol Yapıları
Chapter 6: Using Arrays.
© Copyright by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 1 Gelişmiş Envanter Uygulaması.
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. Fonksiyonlar –Programı modüler hale getirir –Yerel değişkenler,
Bölüm 5 - Fonksiyonlar index 5.1 Giriş 5.2 C de Program Modülleri
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 1 Bölüm 10 - Yapılar, Birlikler, Bit İşleme ve Sayma.
© Copyright by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 1 Bu derste şunları öğreneceğiz: –CheckBox es kullanımı.
Bölüm 6 - Diziler indeks 6.1 Giriş 6.2 Diziler
Diziler Adres Kavramı Nesnelerin Adresleri sizeof Operatörü
Bilgisayar Programlama
Diziler Dizi Tanımı Dizi Elemanlarına Değer Atama Diziler ve Göstergeler 2-Boyutlu Diziler.
C PROGRAMLAMA DİZİLER (ARRAYS).
Bölüm 4 – C’de Program Kontrolü
Fonksiyonlar Fonksiyon Tanımı Değer Döndürmeyen Fonksiyonlar
Fonksiyonlar Fonksiyon Tanımı
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 1 Bölüm 6 - Diziler indeks 6.1Giriş 6.2Diziler 6.3Dizilerin.
JAVA’DA DİZİLER Dr.Galip AYDIN.
Bölüm 8 - Karakterler ve Dizgiler
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 1 Bölüm 2 - C ile Programlamaya Giriş Başlıklar 2.1Giriş.
Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi
SINIFLAR VE DİNAMİK BELLEK YÖNETİMİ VE SINIFLARIN DİĞER ÖZELLİKLERİ Yılmaz Kılıçaslan.
Bölüm 5 - Fonksiyonlar index 5.1 Giriş 5.2 C de Program Modülleri
© Copyright by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 1 Faiz Hesaplama Uygulaması Amaçlar Bu derste öğrenilecekler:
© Copyright by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 1 Amaçlar Bu derste öğrenilecekler: –Uygulamaları “method”
Bölüm 3: Diziler BTEP 102 – Veri Yapıları ve Programlama
Diziler. Dizi Tanımı Dizi Elemanlarına Değer Atama Diziler ve Göstergeler 2-Boyutlu Diziler.
C PROGRAMLAMA FONKSİYONLAR Adres ile Fonksiyon Çağırma Pointer (İşaretçiler) ile Fonksiyon Çağırma Rekürsif Fonksiyonlar.
© Copyright by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 1 Tutorial 9 – Araba Ödeme Hesaplaması Uygulaması Bu.
Bölüm 7 - Diziler İçerik 7.1 Giriş 7.2 Diziler 7.3 Dizileri Tanımlama 7.4 Dizileri Kullanan Örnekler 7.5 Referanslar ve Referans Parametreler.
DİZİLER Arrays.
Outline 4.1 Giriş 4.2 Algoritmalar 4.3 Pseudocode 4.4 Kontrol İfadeleri 4.5 if tek-seçimli ifadeler 4.6 if else seçimli ifadeler 4.7 while döngü ifadeleri.
Değerler ve Değişkenler
Görsel C# ile Windows Programlama
1 7. HAFTA. 2 Referanslar  Referanslar adres temsilcisidir  İşaretçilerin görevlerini kısmi olarak yapabilirler  Değişken değildirler.  Bellekte yer.
İbrahim Olgaç PROGRAMLAMA DİLLERİ SUNUMU C#
Fonksiyonlar ve Diziler
YAPISAL PROGRAMLAMA Hafta-5
BİLGİSAYAR PROGRAMLAMA Ders 6: Diziler
C’de Fonsiyonlar Aslı Ergün.
C Programlama Yrd.Doç.Dr. Ziynet PAMUK BMM211-H11
ARDUİNO Arduino Eğitimleri Bölüm 3 Programlama Dili Temelleri
BLM-111 PROGRAMLAMA DİLLERİ I Ders-2 Değişken Kavramı ve Temel Operatörler Yrd. Doç. Dr. Ümit ATİLA
JAVA’DA DİZİLER. Özet  Dizi: belirli sayıda ve aynı veri türünden de ğ işkenlere aynı adla erişilmesini sa ğ layan bir yapıdır.  Dizilerde döngü işlemleri.
YAPISAL PROGRAMLAMA Hafta-8
Sunum transkripti:

Bölüm 7 - Göstericiler İndeks 7.1 Giriş 7.2 Gösterici Değişkenleri Bildirmek ve Gösterici Değişkenlerine Atama yapmak 7.3 Gösterici Operatörleri 7.4 Fonksiyonları Referansa Göre Çağırmak 7.5 const Belirtecini Göstericilerle Kullanmak 7.6 Referansa Göre Çağırma Kullanan Kabarcık Sırlama 7.7 Gösterici İfadeleri ve Gösterici Aritmetiği 7.8 Göstericiler ve Diziler Arasındaki İlişki 7.9 Gösterici Dizileri 7.10 Örnek: Kart Karma ve Dağıtma 7.11 Fonksiyonları Gösteren Göstericiler

Bu Bölümde Öğreneceklerimiz: Amaçlar Bu Bölümde Öğreneceklerimiz: Göstericileri kullanabilmek. Referansa göre çağrılan fonksiyonlara argümanları geçirmede göstericileri kullanabilme Göstericilerin Diziler ve Karakterler (Strings) arasındaki yakın ilişkiyi anlama, Fonksiyonlarda göstericilerin kullanımını anlama. Karakter dizilerini tanımlayabilme ve kullanma.

Göstericiler hakkında yorumlar: 7.1 Giriş Göstericiler hakkında yorumlar: Güçlü, fakat yönetilmesi zor Öğrenmek zor Göstericilerle herşey yapılır. C bilenler ikiye ayrılır: Göstericiyi bilenler ve bilmeyenler Göstericiler bir C klasiğidir. Düşük seviyeli programlamaya en iyi örnektir. Göstericiler C’ve onun uzantısı olan dillere özgü bir konudur.

Gösterici Değişkenleri 7.2 Gösterici Değişkenleri Bildirmek ve Gösterici Değişkenlerine Atama yapmak Gösterici Değişkenleri İçinde , başka değişkenin bellek adresini tutar. Normal değişkenler kesin bir değer taşır (direk referans) Göstericiler kesin bir değişkene sahip(direk referans) bir değişkenin adresini taşır (Dolaylama)Direkt olmayan – bir gösterici değeri referans etme count 7   count 7 countPtr

Adres Operatörü: & Değişkenin hangi adreste olacağına biz karar veremeyiz. Ancak alınan bölgenin adresini öğrenebiliriz. int deneme printf(“%x”,&deneme); int i; &i=“240DE4F”;Yanlış atama

Gösterici tanımlamaları 7.2 Gösterici Değişkenleri Bildirmek ve Gösterici Değişkenlerine Atama yapmak Gösterici tanımlamaları * gösterici değişkenleri ile kullanılır int *myPtr; Bir sayısal gösterici olarak tanımlar int (gösterici tipi int *) Çoklu gösterici tanımlarken her bir değişken tanımından önce bir * kullanılır int *myPtr1, *myPtr2; Herhangi bir veri tipi için gösterici tanımlanabilir Göstericilere ilk değer olarak 0,NULL veya bir adres atanabilir 0 veya NULL – gösterici hiçbir şey referans etmez

7.3 Gösterici Operatörleri & (adres operatörleri) Değişkenin adresini geriye döndürür int y = 5; int *yPtr; yPtr = &y; /* yPtr, y değişkeninin adresini tutar */ yPtr, “y” değişkenini gösterir denir yPtr y 5 yptr 500000 600000 Y değişkeninin adresi yptr göstericisinin değeridir

7.3 Gösterici Operatörleri * (İçerik/geri referans operatorü) Operandının (yani göstericinin) gösterdiği nesnenin değerini döndürür. *yptr geriye y döndürür (çünkü yptr “y” yi gösterir) * atama içinde kullanılabilir Nesneye benzerini döndürür *yptr = 7; /* changes y to 7 */ Geri referans edilmiş göstericiler (*’ın operandı) bir değer almak zorundadır (sabit değer değil) * ve & birbirinin eşleniğidir. Art arda uygulandıklarında aynı sonucu verirler.

A nın adresi aPtr nin değeridir. fig07_04.c

Program Output A ‘nın adresi 0012FF7C aPtr değişkeninin değeri 0012FF7C   A’nın değeri 7 *aPtr’nin değeri 7 * ve & birbirinin eşleniğidir. &*aPtr = 0012FF7C *&aPtr = 0012FF7C Program Output

7.3 Gösterici Operatörleri

7.7 Gösterici İfadeleri ve Gösterici Aritmetiği Aritmetik operatörler göstericilerde de uygulanabilir Gösterici artırma/azaltma (++ veya --) Göstericiye bir tam sayı değer ekleme( + or += , - or -=) Göstericiler birbirlerinden çıkarılabilirler Operatörler bir dizi üzerinde uygulanmadıkça anlamsızdır  

7.7 Gösterici İfadeleri ve Gösterici Aritmetiği 4 byte tamsayılar (ints) kullanan bir makinada 5 elemanlı tamsayı(int) dizisi vPtr , v[ 0 ] ilk elemanını gösterir 3000 deki konumu (vPtr = 3000) vPtr += 2; vPtr 3008 olarak değiştirir vPtr ,v[ 2 ]’yi gösterir (2 artırılmış), fakat makina 4 byte tamsayılara sahiptir, öyleyse vPtr 3008 adresini gösterir   konum 3000 3004 3008 3012 3016 v[0] v[1] v[2] v[3] v[4] pointer variable vPtr

7.7 Gösterici İfadeleri ve Gösterici Aritmetiği Göstericileri çıkarma Birinden diğerine elemanların sayısını döndürür. Eğer vPtr2 = &v[ 2 ]; vPtr = &v[ 0 ]; vPtr2 - vPtr 2 ‘yi üretir Gösterici karşılaştırma ( <, == , > ) Dizilerde adres değeri karşılaştırılarak dizide önceki eleman mı yoksa sonraki eleman mı olduğu tespit edilebilir. Bir gösterici içinde adres barındırıp barındırmadığı karşılaştırılabilir.

7.7 Gösterici İfadeleri ve Gösterici Aritmetiği Aynı tip göstericiler birbirlerine atanabilirler Eğer aynı tip değilse, dönüşüm (casting) yapılmak zorunda void (tipi void *) gösteren göstericiler istisnadır Genel göstericiler herhangi biri tipi temsil edebilir Dönüşüme ihtiyaç yoktur, bütün göstericiler void göstericiye atanabilir void göstericilerin gösterdiği nesneye erişilemez. void göstericiler üzerinde aritmetik işlemler de yapılamaz. Tek işleri adres bilgisini tutmak ve zamanı geldiğinde bu adres bilgisini diğer uygun göstericilere atamaktır.

Gösterici argümanları ile referansa göre çağırma 7.4 Göstericilerin Fonksiyonlarla Kullanımı (Fonksiyonları Referansa Göre Çağırmak) Gösterici argümanları ile referansa göre çağırma & operatörünü kullanarak argümanın adresini geçirme Hafızadaki gerçek pozisyonu değiştirmenize izin verir Diziler & operatörü ile geçirilmez çünkü dizinin adresini otomatik olarak geçirir * operatörü Fonksiyonun içerdiği değişken için takma ad kullanılır void double( int *number ) { *number = 2 * ( *number ); } *number geçirilmiş değişken için takma ad olarak kullanılır

fig07_06.c

Dikkat!! Fonksiyon prototipi bir tam sayı için gösterici aldı fig07_07.c referansaGoreKup ‘ün içinde, *nPtr kullanıldı (*nPtr bir sayıdır).

Sayının esas degeri 5 Sayının yeni degeri 125 Program Output

Sayının esas degeri 5 Sayının yeni degeri 125 Program Output

main, değer fonksiyonunu çağırmadan önce : int main() sayi int degereGoreKup( int n ) { { int sayi = 5 ; 5 return n * n * n; } sayi =degereGoreKup(sayi ); n } tanımlanmamış degereGoreKup fonksiyonu çağrıldığında int main() sayi int degereGoreKup ( int n) { { int sayi = 5 ; 5 return n * n * n; } sayi = degereGoreKup( sayi ); n } 5 degereGoreKup fonksiyonunu n parametresinin küpünü aldıktan sonra : int main() sayi int degereGoreKup( int n ) { { 125 int sayi = 5 ; 5 return n * n * n; } sayi = degereGoreKup(sayi ); n } 5 Fig. 7.8 tipik bir değere göre çağırma işleminin analizi (Part 1 of 2.)

degerGoreKup fonksiyonundan main fonksiyonuna dönüldükten sonra : int main() sayi int degereGoreKup( int n ) { { int sayi = 5 ; 5 return n * n * n; 125 } sayi = degereGoreKup( number ); n } tanımlanmamış Main sayi değişkenine atanma işlemini bitirdiği zaman : int main() sayi int degereGoreKup( int n ) { { int number = 5 ; 125 return n * n * n; 125 125 } sayi = degereGoreKup(sayi ); n } tanımlanmamış Fig. 7.8 tipik bir değere göre çağırma işleminin analizi. (Part 2 of 2.)

*nPtr’nin küpü alındıktan sonra referansaGoreKup fonksiyonunu referansa göre çağrılmadan önce : int main() sayi void referansaGoreKup( int *nPtr ) { { 5 int sayi = 5 ; *nPtr = *nPtr * *nPtr * *nPtr; } referansaGoreKup( & sayi); nPtr } tanımlanmamış referansaGoreKup fonksiyonu referansa göre çağrıldıktan sonra ve *nPtr nin küpü int main() sayi void referansaGoreKup( int *nPtr ) { { 5 int sayi = 5 ; *nPtr = *nPtr * *nPtr * *nPtr; } referansaGoreKup( & sayi); nPtr } *nPtr’nin küpü alındıktan sonra int main() sayi void referansaGoreKup( int *nPtr ) { { 125 125 int sayi = 5 ; *nPtr = *nPtr * *nPtr * *nPtr; } referansaGoreKup( & sayi); nPtr } Fig. 7.9 bir gösterici argümanıyla tipik bir referansa göre çağırma işleminin analizi.

7.8 Göstericiler ve Diziler Arasındaki İlişki Diziler ve Göstericiler arasındaki yakın ilişki Dizi adı gösterici sabitine benzer Göstericiler her işlemde kullanılabilir Bir 5 elemanlı b dizisi tanımlansın ve bir göstericiyi bPtr tanımlansın. Dizinin ilk elemanına eşitleme: bPtr = b; b dizisinin ilk elemanının adresini atama bPtr = &b[ 0 ] b dizisinin ilk elemanının adresini bPtr ye atamanın diğer yolu

7.8 Göstericiler ve Diziler Arasındaki İlişki Eleman b[ 3 ] *( bPtr + 3 ) olarak da belirtilebilir 3 (n) göstericinin offset’idir . Bu gösterime gösterici/offset gösterimi denir. bptr[ 3 ] olarak kullanım Gösterici/belirteç gösterimi denir bPtr[ 3 ] ile b[ 3 ] aynı şeyi ifade eder Dizinin kendisinde de bir gösterici olarak kullanılabilir ve gösterici aritmetiğinde kullanılabilir *( b + 3 )

fig07_20.c (Part 1 of 2)

fig07_20.c (Part 2 of 2)

Program Output B dizisi aşağıdaki metodla yazılmıştır: Dizi belirteçleri yöntemi b[ 0 ] = 10 b[ 1 ] = 20 b[ 2 ] = 30 b[ 3 ] = 40 Gösterici/offset yöntemi Gösterici dizinin ismidir *( b + 0 ) = 10 *( b + 1 ) = 20 *( b + 2 ) = 30 *( b + 3 ) = 40   Gösterici/belirteç yöntemi bPtr[ 0 ] = 10 bPtr[ 1 ] = 20 bPtr[ 2 ] = 30 bPtr[ 3 ] = 40 *( bPtr + 0 ) = 10 *( bPtr + 1 ) = 20 *( bPtr + 2 ) = 30 *( bPtr + 3 ) = 40 Program Output

7.5 const Belirtecini Göstericilerle Kullanmak Değişkenler değiştirilemez Eğer fonksiyonun bir değişkeni değiştirmeye ihtiyacı yok ise const kullanılır Bir const değişkeni değiştirmeyi denemek bir hata üretir const göstericileri Bir sabit hafıza pozisyonunu gösterme Tanımlanırken ilk değer atanmalıdır int *const myPtr = &x; Tipi int *const – bir tamsayıyı gösteren sabit gösterici const int *myPtr = &x; sabit bir tamsayıyı gösteren gösterici const int *const Ptr = &x; Sabit bir tamsayıyı sabit gösterici x değiştirilebilir, fakat *Ptr değil

fig07_10.c (Part 1 of 2)

fig07_10.c (Part 2 of 2) Program Output Çevrilmeden önceki string : karakter ve $32.98 Çevrildikten sonraki string : karakter ve $32.98

fig07_11.c (Part 1 of 2)

fig07_11.c (Part 2 of 2) Program Output string: String karakterini yaz

fig07_12.c

Program Output Compiling... FIG07_12.c d:\books\2003\chtp4\examples\ch07\fig07_12.c(22) : error C2166: l-value specifies const object Error executing cl.exe.   FIG07_12.exe - 1 error(s), 0 warning(s) Program Output

fig07_13.c Program Output Compiling... FIG07_13.c D:\books\2003\chtp4\Examples\ch07\FIG07_13.c(15) : error C2166: l-value specifies­ const object Error executing cl.exe.   FIG07_13.exe - 1 error(s), 0 warning(s)

fig07_14.c

Program Output Compiling... FIG07_14.c D:\books\2003\chtp4\Examples\ch07\FIG07_14.c(17) : error C2166: l-value specifies­ const object D:\books\2003\chtp4\Examples\ch07\FIG07_14.c(18) : error C2166: l-value Error executing cl.exe.   FIG07_12.exe - 2 error(s), 0 warning(s) Program Output

fig07_21.c (Part 1 of 2)

fig07_21.c (Part 2 of 2) Program Output string1 = Merhaba string3 = Güle güle

7.6 Referansa Göre Çağırma Kullanan Kabarcık Sıralama Gösterici kullanarak kabarcıksıralama’yı uygulama İki elemanı yer değiştir Yer değiştirme fonksiyonu dizi elemanlarının adresini içermek zorundadır (& kullanarak) Dizi elemanları varsayılan olarak değere göre çağrılmayla geçirilir Göstericileri ve * operatörü kullanarak dizi elemanlarının yerlerini değiştirme Psuedocode (Sahte kodlar) diziye ilk değer atama veri orijinal sırasında yazdır Kabarcık sıralama fonksiyonunu çağır sıralanmış diziyi yazdır Kabarcık sıralamayı tanımla

7.6 Referansa Göre Çağırma Kullanan Kabarcık Sıralama sizeof Operandın boyutunu byte cinsinden geriye döndürür Diziler için: 1 elemanın boyutu * elemanların sayısı Eğer sizeof( int ) eşit 4 byte ise, int myArray[ 10 ]; printf( "%d", sizeof( myArray ) ); 40 yazılacak sizeof aşağıdakiler ile birlikte kullanılabilir Değişken adları Tip adı Sabit değişkenler

fig07_15.c (Part 1 of 3)

fig07_15.c (Part 2 of 3)

fig07_15.c (Part 3 of 3) Program Output Veriler orijinal sırada 2 6 4 8 10 12 89 68 45 37 Veriler artan sırada 2 4 6 8 10 12 37 45 68 89

fig07_16.c Program Output Dizinin byte büyüklüğü 80 buyukluguBul ile döndürülen byte sayısı 4

fig07_17.c (Part 1 of 2)

fig07_17.c (Part 2 of 2) Program Output sizeof c = 1 sizeof(char) = 1 sizeof s = 2 sizeof(short) = 2 sizeof i = 4 sizeof(int) = 4 sizeof l = 4 sizeof(long) = 4 sizeof f = 4 sizeof(float) = 4 sizeof d = 8 sizeof(double) = 8 sizeof ld = 8 sizeof(long double) = 8 sizeof dizi = 80 sizeof ptr = 4

7.9 Gösterici Dizileri Diziler göstericiler içerebilir. Örnek: karakterler dizisi char *suit[ 4 ] = { "Hearts", "Diamonds", "Clubs", "Spades" }; Stringler ilk karakteri gösteren göstericilerdir char * –takım dizisinin her elemanının char gösteren tipte bir gösterici olduğunu belirtir Gerçekte stringler takım dizisinde saklanmazlar, sadece stringlerin göstericileri saklanır Takim dizisi sabit bir boyuta sahiptir,fakat stringler farklı olabilir   takim[3] takim[2] takim[1] takim[0] ’H’ ’e’ ’a’ ’r’ ’t’ ’s’ ’\0’ ’D’ ’i’ ’m’ ’o’ ’n’ ’d’ ’C’ ’l’ ’u’ ’b’ ’S’ ’p’

7.10 Örnek: Kart Karma ve Dağıtma Kart karma ve dağıtma programı Göstericilerin dizisini karakterleri göstermede kullanma İki boyutlu takım dizisi kullan (satır, sütun) 1-52 arasındaki sayılar diziye gönderilir Bu noktada deste tamamen karılmış olur   As iki üç Dört beş altı yedi sekiz dokuz on vale kız papaz 1 2 3 4 5 6 7 8 9 10 11 12 Kupa Karo 1 2 Sinek Maça 3 deste[ 2 ][ 12 ] sinek papazı gösterir sinek papaz

7.10 Örnek: Kart Karma ve Dağıtma Pseudocode (Sahte kodlar) İlk olarak: 52 kartı kar ve dağıt İlk iyileştirme: takım dizisine ilk değer atama Taraf dizisine değerler ata Deste dizisine değerler ata Desteyi kar 52 kartı dağıt

7.10 Örnek: Kart Karma ve Dağıtma İkinci iyileştirme desteyi karma şu şekilde genişletilebilir 52 kartın her biri için (for) Destenin rasgele seçilmiş boş bir alanına kart sayısını yerleştir 52 kartı dağıtma şu şekilde genişletilebilir 52 kartın her biri için (for) Deste dizisinde kart sayısını bul ve kartın hangi desteye ait olduğunu ve değerini yazdır

7.10 Örnek: Kart Karma ve Dağıtma Üçüncü iyileştirme desteyi karma şu şekilde genişletilebilir Destedeki alanı rasgele seç Destedeki bu alan daha önceden seçildiği sürece (While) Destedeki alanı rasgele seçmeye devam et Destede seçilen alana kart sayısını yerleştir 52 kartı dağıtma şu şekilde genişletilebilir Deste dizisindeki her alan için (For) Eğer alan kart sayısı içeriyorsa (if) Kartın hangi desteye ait olduğunu ve değerini yazdır

fig07_24.c (Part 1 of 4)

fig07_24.c (Part 2 of 4)

fig07_24.c (Part 3 of 4)

fig07_24.c (Part 4 of 4)

Program Output Karo Sekiz Kupa AS Sinek Sekiz Sinek Beş Kupa Yedi Karo iki Sienk As Karo on Maça iki Karo altı Maça yedi Sinek iki Sinek vale Maça on Kupa papaz Karo Vale Kupa üç Karo üç Sinek üç Sinek dokuz Kupa on Kupa iki Sinek on Karo yedi Sinek altı Maça kız Kupa altı Maça üç Karo dokuz Karo as Maça vale Sinek beş Karo papaz Sinek yedi Maça dokuz Kupa dört Maça altı Maça sekiz Karo kız Karo beş Maça as Kupa dokuz Sinek papaz Kupa beş Maça papaz Karo dört Kupa kız Kupa sekiz Maça dört Kupa vale Sinek dört Sinek kız Program Output

7.11 Fonksiyonları Gösteren Göstericiler Fonksiyonların adreslerini tutarlar Dizi adının dizinin ilk elemanın adresi olmasına benzer Fonksiyon ismi, fonksiyonun görevini yapan kodun hafızadaki başlangıç adresidir Fonksiyon göstericileri Fonksiyonlara geçirilebilir Dizilerde saklanabilir Başka fonksiyon göstericilerine atanabilir

7.11 Fonksiyonları Gösteren Göstericiler Örnek: kabarcık sıralama Kabarcık fonksiyonu bir fonksiyon göstericisi alır Kabarcık bu yardım fonksiyonu cağırır azalan veya artan sıralamayı belirler Fonksiyon göstericisi için kabarcıksıralama’daki argüman: int ( *karsilastir)( int, int ) tells bubblesort to expect a pointer to a function that takes two ints and returns an int Kabarcık fonksiyonuna iki tamsayı parametresi alan ve bir tamsayı sonucunu döndüren bir fonksiyonu gösteren bir gösterici alacağını söyler Eğer parantezleri dahil etmeseydik: int * karsilastir( int, int ) İki tamsayıyı alan ve bir tamsayıyı gösteren bir gösterici döndüren bir fonksiyon bildirir

fig07_26.c (Part 1 of 4)

fig07_26.c (Part 2 of 4)

fig07_26.c (Part 3 of 4)

fig07_26.c (Part 4 of 4)

Program Output Artan sıralama için 1 girin, Azalan sıralama için 2 girin: 1   Veriler orijinal sırasında 2 6 4 8 10 12 89 68 45 37 Veriler artan sırada 2 4 6 8 10 12 37 45 68 89 Program Output Artan sıralama için 1 girin, Azalan sıralama için 2 girin:2   Veriler orijinal sırasında 2 6 4 8 10 12 89 68 45 37 Veriler azalan sırada 89 68 45 37 12 10 8 6 4 2