Menu
Coddy logo textTech

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ğeriAnlamı
Negatifa, b'den önce gelir
Sıfıra, b'ye eşittir
Pozitifa, 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.

challenge icon

Görev

Kolay
qsort 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
}
quiz iconKendini test et

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

Kendi başına pratik yap: Online C derleyicisi