Jenerik Karşılaştırma
Coddy'nin C Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 52 / 61.
C'nin standart kütüphanesindeki qsort ve bsearch gibi genel işlevler, türlerini bilmeden öğeleri karşılaştırmanın bir yoluna ihtiyaç duyar. Çözüm bir karşılaştırma işlevidir: genel algoritmanın iki öğeyi karşılaştırması gerektiğinde çağırdığı, sizin yazdığınız bir işlev.
Karşılaştırma işlevleri için standart imza şöyledir:
int compare(const void* a, const void* b);Her iki parametre de const void* türündedir, çünkü genel işlev hangi türü sıraladığınızı bilmez. Dönüş değeri belirli bir kuralı izler:
| Dönüş Değeri | Anlamı |
|---|---|
| Negatif | a, b'den önce gelir |
| Sıfır | a, b'ye eşittir |
| Pozitif | a, b'den sonra gelir |
Karşılaştırma işlevinizin içinde void* işaretçilerini gerçek türe dönüştürür ve değerleri karşılaştırırsınız. Tamsayıları şu şekilde karşılaştırabilirsiniz:
int compare_ints(const void* a, const void* b) {
int val_a = *(const int*)a;
int val_b = *(const int*)b;
return val_a - val_b;
}Çıkarma yöntemi tamsayılar için iyi çalışır: a daha küçükse sonuç negatiftir; eşitse sıfırdır; daha büyükse pozitiftir. Bu işlev artık bir tamsayı dizisini artan düzende sıralamak için qsort işlevine aktarılabilir.
Görev
Kolayqsort gibi genel algoritmalar tarafından kullanılan standart karşılaştırma işlevi kuralını izleyerek iki tamsayıyı karşılaştıran bir compare_ints işlevi yazın.
İşleviniz iki değeri karşılaştırmalı ve bunların sıralama ilişkisini belirten bir sonuç döndürmelidir.
Döndürülen Değer Kuralı:
- İlk tamsayı ikinciden önce geliyorsa (first < second) negatif bir değer döndürün
- Her iki tamsayı da eşitse sıfır döndürün
- İlk tamsayı ikinciden sonra geliyorsa (first > second) pozitif bir değer döndürün
Parametreler:
a(int): Karşılaştırılacak ilk tamsayıb(int): Karşılaştırılacak ikinci tamsayı
Döndürür: Sıralamayı belirten bir tamsayı: a < b ise negatif, a == b ise sıfır, a > b ise pozitif.
İpucu: Dersteki çıkarma hilesi, tek satırlık zarif bir çözüm sunar.
Kendin dene
int compare_ints(int a, int b) {
// Buraya kod yazın
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Nesne Yönelimli Programlama bölümündeki tüm dersler
1Modüler Programlama Temelleri
Başlık DosyalarıInclude Guard'larKaynak DosyalarıStatik FonksiyonlarÖzet: Modüler Hesap Makinesi4Kapsülleme
Opaque Pointer KavramıOpaque Struct TanımlamaGetter ve Setter MetotlarıSetter Metotlarında DoğrulamaÖzet: Gizli Kutu7Fonksiyon İşaretçileri
Fonksiyon İşaretçilerini TanımlamaFonksiyon İşaretçilerini ÇağırmaFonksiyon İşaretçileri için TypedefFonksiyonları Argüman Olarak GeçirmeÖzet: Hesap Makinesi Yönlendirme10Jenerik Kapsayıcılar
Void İşaretçiler ÖzetiJenerik SarmalayıcıJenerik Yer DeğiştirmeJenerik KarşılaştırmaÖzet: Jenerik Dizi2Nesneler ve Metotlar
Nesne Olarak Struct'lar'Self' İşaretçisiConst Doğruluğuİşaretçi vs DeğerYardımcı MetotlarÖzet: Point Manager5Proje: Basit Banka Hesabı
Proje KurulumuHesabın Oluşturulması3Nesne Yaşam Döngüsü
Constructor DeseniDestructor DeseniStack İlklendirmeDerin KopyalamaÖzet: String Wrapper6Kompozisyon Yoluyla Kalıtım
Struct Gömmeİlk Üye KuralıÜst Üyelere ErişimUpcastingÖzet: Şekil HiyerarşisiKendi başına pratik yap: Online C derleyicisi