© 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 Sabitleri (Enumarations) Taslak 10.1 Giriş 10.2 Yapı Tanımlamaları 10.3 Yapılara İlk Değer Atamak 10.4 Yapı Elemanlarına Ulaşmak 10.5 Yapıları Fonksiyonlarla Kullanmak 10.6 Typedef 10.7 Örnek: Yüksek Performanslı Kart Karma ve Dağıtma 10.8 Birlikler (Unions) 10.9 Bit Operatörleri Bit Alanları Sayma Sabitleri
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 2 Bu dökümanda,aşağıdaki konular gösterilecek: –Yapıları, birlikleri ve Sayma sabitlerini oluşturup kullanabilmek. –Yapıları fonksiyonlara değere göre çağırma ve fonksiyona göre çağırma yöntemleri ile kullanabilme –Bit operetörlerini veriler üzerinde kullanabilmek. –Verileri compact bir şekilde kaydetmek için bit alanları oluşturabilme.
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved Giriş Yapılar –Yapılar, diğer tipte nesneler kullanılarak oluşturulan, türetilmiş veri tipleridir. Farklı veri tiplerinde değişkenler içerebilirler. –Genelde verileri dosyalara kaydetmek için kullanılır. –Göstericilerle birlikte kullanılarak, linked list,stack, queue ve tree oluşturulabilir.
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved Yapı Tanımlamaları Örnek struct isim { char *adi; char *soyadi; }; –Struct anahtar kelimesi yapı tanımı başlatır. Kart tanıtıcısı yapı etiketidir. –Yapı etiketleri,yapı tanımına isim verir ve struct anahtar kelimesiyle kullanılarak yapı tipinde değişkenler bildirir. –kart tanımı,char * tipinde iki eleman içermektedir. adi ve soyadi
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved Yapı Tanımlamaları Struct : –Bir struct kendi cinsinden bir değişken içeremez –Aynı yapı tipini gösteren bir işaretçiyi barındırabilir –Bir yapı tanımı hafızada yer ayırtmaz Tanımlar: –Diğer değişkenler gibi tanımlanır: struct isim a, sinif[ 52 ], *cPtr; –Virgülle ayrılmmış liste kullanabilir: struct isim { char *adi; char *soyadi; } a, sinif[ 52 ], *cPtr;
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved Yapı Tanımlamaları
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved Yapı Tanımlamaları Geçerli İşlemler –Bir yapıyı aynı tipteki bir yapıya atamak –Bir yapının adresini ( & ) almak –Bir yapının elemanlarına ulaşmak – sizeof operatörü ile yapının boyutunu belirlemek
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved Yapılara İlk Değer Atamak Atama listesi –örnek: struct isim birisim = {"Murat", "Kara" }; Atama –Örnek: struct isim ogr1 = birisim; – ogr1’ı aşağıdaki gibi tanımlanabilir: struct isim ogr1; ogr1.adi = “Murat”; ogr1.soyadi = “Kara”;
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved Yapı Elemanlarına Ulaşmak Yapı elemanına ulaşmak –Nokta operatörü (. ) ile ulaşılabilir struct isim ogr; printf( "%s", ogr.adi ); –Yapı gösterici operatörü ( -> ) ile ulaşılabilir struct isim *iPtr = &ogr; printf( "%s", iPtr->adi ); –iPtr->adi ile ( *iptr ).adi aynı sonucu verir.
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 10 fig10_02.c (Part 1 of 2)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 11 fig10_02.c (Part 2 of 2) Program Output Ace of Spades
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved Yapıları Fonksiyonlarla Kullanmak Yapıları fonksyonlara geçirmek –Tüm yapıyı geçirmek Ya da sadece elemanları geçirmek –İkisi de değerle çağırılmakla geçirilir Referansla çağırarak fonksiyona geçirmek: –Adresi geçirmek Dizileri değerle geçirmek –Elemanı dizi olan bir yapı oluşturmak –Yapıyı geçirmek
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved typedef typedef –Önceden belirlenmiş data tiplerine eşanlamlı sözcükler oluşturur – typedef ile daha kısa tip isim oluşturur –Örnek: typedef struct Card *CardPtr; –Tip adı olan CardPtr ’ı struct Card *’ın eşanlamlısı olarak oluşturur –typedef Yeni data tipi oluşturmaz Sadece eşanlamlısını oluşturur
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved Örnek: Yüksek Performanslı Kart Karma ve Dağıtma Pseudocode: –Kart yapısı dizisini oluşturmak –Kartları dizmek –Kartları karıştırmak –Kartları dağıtmak
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 15 fig10_03.c (Part 1 of 4)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 16 fig10_03.c (Part 2 of 4)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 17 fig10_03.c (3 of 4)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 18 fig10_03.c (4 of 4)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 19 Program Output Four of Clubs Three of Hearts Three of Diamonds Three of Spades Four of Diamonds Ace of Diamonds Nine of Hearts Ten of Clubs Three of Clubs Four of Hearts Eight of Clubs Nine of Diamonds Deuce of Clubs Queen of Clubs Seven of Clubs Jack of Spades Ace of Clubs Five of Diamonds Ace of Spades Five of Clubs Seven of Diamonds Six of Spades Eight of Spades Queen of Hearts Five of Spades Deuce of Diamonds Queen of Spades Six of Hearts Queen of Diamonds Seven of Hearts Jack of Diamonds Nine of Spades Eight of Hearts Five of Hearts King of Spades Six of Clubs Eight of Diamonds Ten of Spades Ace of Hearts King of Hearts Four of Spades Jack of Hearts Deuce of Hearts Jack of Clubs Deuce of Spades Ten of Diamonds Seven of Spades Nine of Clubs King of Clubs Six of Diamonds Ten of Hearts King of Diamonds
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved Birlikler (Unions) union –Hafıza zaman içinde çok değişken kullanılır –Bir anda tek data elemanı içerir –union elamanları yeri paylaşırlar –Hafızayı korur –Son tanımlanan elemana ulaşılabilir union tanımları –Struct ile aynıdır union Number { int x; float y; }; union Number value;
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved Birlikler (Unions) Geçerli union operatörleri –union aynı tip: = –Adres alırken: & –union elemanına ulaşmak için:. –Elemana işaretçiile ulaşmak için: ->
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 22 fig10_05.c (1 of 2)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 23 fig10_05.c (2 of 2) Put a value in the integer member and print both members. int: 100 double: Put a value in the floating member and print both members. int: 0 double:
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved Bit Operatörleri Tüm data bit operatörleri ile gösterilir –Bit 0 ya da 1 olur –8 bit =1 byte
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 25 fig10_07.c (1 of 2)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 26 fig10_07.c (2 of 2) Enter an unsigned integer: =
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved Bit Operatörleri
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 28 fig10_09.c (1 of 4)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 29 fig10_09.c (2 of 4)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 30 fig10_09.c (3 of 4)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 31 fig10_09.c (4 of 4) Program Output The result of combining the following = = using the bitwise AND operator & is 1 = The result of combining the following 15 = = using the bitwise inclusive OR operator | is 255 = The result of combining the following 139 = = using the bitwise exclusive OR operator ^ is 76 = The one's complement of = is =
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved Bit Operatörleri
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved Bit Operatörleri
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 34 fig10_13.c (1 of 2)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 35 fig10_13.c (2 of 2)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 36 Program Output The result of left shifting 960 = bit positions using the left shift operator << is = The result of right shifting 960 = bit positions using the right shift operator >> is 3 =
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved Bit Operatörleri
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved Bit Operatörleri
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved Bit Alanları Bit alanı –Bit boyutu olan yapının elemanı belirlenir –Daha iyi hafıza sağlar –int ya da unsigned tanımlanır –Tek başına bitlere erişilemez Bit alanı tanımlama –Bit alanıunsigned yada int bir eleman isminden sonra iki nokta üste( : ) ve alanın genişliğini belirten bir tamsayı sabiti ile bildirilir. –Örnek: struct BitCard { unsigned face : 4; unsigned suit : 2; unsigned color : 1; };
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved Bit Alanları İsimsiz bit alanı –Alan yapıda hizalamakta kullanılır –Bitlerde hiç birşeyde saklanmayabilir struct Example { unsigned a : 13; unsigned : 3; unsigned b : 4; }
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 41 fig10_16.c (1 of 3)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 42 fig10_16.c (2 of 3)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 43 fig10_16.c (3 of 3)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 44 Program Output Card: 0 Suit: 0 Color: 0 Card: 0 Suit: 2 Color: 1 Card: 1 Suit: 0 Color: 0 Card: 1 Suit: 2 Color: 1 Card: 2 Suit: 0 Color: 0 Card: 2 Suit: 2 Color: 1 Card: 3 Suit: 0 Color: 0 Card: 3 Suit: 2 Color: 1 Card: 4 Suit: 0 Color: 0 Card: 4 Suit: 2 Color: 1 Card: 5 Suit: 0 Color: 0 Card: 5 Suit: 2 Color: 1 Card: 6 Suit: 0 Color: 0 Card: 6 Suit: 2 Color: 1 Card: 7 Suit: 0 Color: 0 Card: 7 Suit: 2 Color: 1 Card: 8 Suit: 0 Color: 0 Card: 8 Suit: 2 Color: 1 Card: 9 Suit: 0 Color: 0 Card: 9 Suit: 2 Color: 1 Card: 10 Suit: 0 Color: 0 Card: 10 Suit: 2 Color: 1 Card: 11 Suit: 0 Color: 0 Card: 11 Suit: 2 Color: 1 Card: 12 Suit: 0 Color: 0 Card: 12 Suit: 2 Color: 1 Card: 0 Suit: 1 Color: 0 Card: 0 Suit: 3 Color: 1 Card: 1 Suit: 1 Color: 0 Card: 1 Suit: 3 Color: 1 Card: 2 Suit: 1 Color: 0 Card: 2 Suit: 3 Color: 1 Card: 3 Suit: 1 Color: 0 Card: 3 Suit: 3 Color: 1 Card: 4 Suit: 1 Color: 0 Card: 4 Suit: 3 Color: 1 Card: 5 Suit: 1 Color: 0 Card: 5 Suit: 3 Color: 1 Card: 6 Suit: 1 Color: 0 Card: 6 Suit: 3 Color: 1 Card: 7 Suit: 1 Color: 0 Card: 7 Suit: 3 Color: 1 Card: 8 Suit: 1 Color: 0 Card: 8 Suit: 3 Color: 1 Card: 9 Suit: 1 Color: 0 Card: 9 Suit: 3 Color: 1 Card: 10 Suit: 1 Color: 0 Card: 10 Suit: 3 Color: 1 Card: 11 Suit: 1 Color: 0 Card: 11 Suit: 3 Color: 1 Card: 12 Suit: 1 Color: 0 Card: 12 Suit: 3 Color: 1
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved Sayma Sabitleri Sayma –Değerleri otomatik belirlenen sembolik sabitler kümesidir 0dan başlar ve 1 artar = ile değerler eşitlenir Sabit isimlerle gösterilir –Örnek: enum Months { JAN = 1, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC}; enum Months adında 0 ve 12 değerleri içeren yeni bir yapı oluşturur
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 46 fig10_18.c
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 47 Program Output 1 January 2 February 3 March 4 April 5 May 6 June 7 July 8 August 9 September 10 October 11 November 12 December