Ünite 7: Chapter 10: C Structures and Bit Manipulations — Alıştırmalar
Ders kitabının açık uçlu alıştırmaları. Bunlar çoktan seçmeli sınav sorusu değil — düşünmeni, araştırmanı, kendi cümlelerinle anlatmanı isteyen etkinlikler. Kitabın verdiği örnek yanıtlar kapalı duruyor; önce kendin dene.
Alıştırma 1myders hazırladı
Bir dizinin (array) homojen yapısı ile bir yapının (struct) heterojen yapısını karşılaştırarak, hangi durumlarda struct kullanmanın daha avantajlı olduğunu bir örnekle açıklayınız.
Yanıt / ipucu
Diziler sadece aynı veri tipindeki elemanları bir arada tutabilirken, yapılar (struct) farklı veri tiplerini tek bir isim altında gruplayabilir. Örneğin, bir öğrencinin hem metinsel adını, hem tamsayı numarasını hem de ondalıklı not ortalamasını tek bir 'Ogrenci' yapısı içinde tutmak, ayrı ayrı diziler yönetmekten çok daha avantajlı ve düzenlidir.
Alıştırma 2myders hazırladı
Kendi yapısını doğrudan üye olarak barındıran bir struct tanımı neden derleme hatasına yol açar? Bunun yerine dinamik veri yapıları oluşturmak için nasıl bir yöntem izlenmelidir?
Yanıt / ipucu
Bir struct kendi türünden bir örneği doğrudan içerirse, yapının boyutu sonsuz bir döngüye girerek hesaplanamaz hale gelir ve derleme hatası oluşur. Bunun yerine, yapının kendisine işaret eden bir gösterici (pointer) kullanılarak 'öz-referanslı yapılar' (self-referential structures) oluşturulmalıdır.
Alıştırma 3myders hazırladı
Bir struct değişkenine işaret eden bir pointer tanımlandığında, üyelere erişmek için kullanılan ok (->) operatörü ile nokta (.) operatörü arasındaki ilişkiyi ve parantez kullanımının önemini açıklayınız.
Yanıt / ipucu
'sptr->id' ifadesi, doğrudan pointer üzerinden üyeye erişimi sağlar ve '(*sptr).id' ifadesine tamamen eşdeğerdir. Nokta operatörünün önceliği derecelendirme (*) operatöründen yüksek olduğu için, parantez kullanılmazsa derleyici '*sptr.id' ifadesini '*(sptr.id)' olarak yorumlar ve hata verir.
Alıştırma 4myders hazırladı
Çok büyük boyutlu bir struct verisini bir fonksiyona parametre olarak gönderirken 'değer ile çağırma' (call by value) yerine neden 'referans ile çağırma' (call by reference) tercih edilmelidir?
Yanıt / ipucu
Değer ile çağırmada yapının bellekteki tam bir kopyası oluşturulur, bu da büyük yapılar için yüksek bellek ve zaman tüketimine yol açar. Referans ile çağırmada ise sadece yapının bellek adresi (pointer) gönderildiğinden işlem çok daha hızlı ve performanslı gerçekleşir.
Alıştırma 5myders hazırladı
Bit düzeyinde VE (&) ve VEYA (|) operatörlerinin çalışma mantığını açıklayarak, bir tamsayının belirli bir bitini sıfırlamak (maskelemek) için hangi operatörün nasıl kullanılması gerektiğini araştırınız.
Yanıt / ipucu
Bit düzeyinde VE (&) operatörü her iki bit de 1 ise 1, aksi halde 0 üretirken; VEYA (|) operatörü en az bir bit 1 ise 1 üretir. Belirli bir biti sıfırlamak için, sıfırlanmak istenen bit konumu 0, diğer konumları 1 olan bir maske ile sayı VE (&) işlemine tabi tutulmalıdır.