Menu
CoddyTech

Perbandingan Generik

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan C di Coddy. Pelajaran 52 dari 61.

Fungsi generik seperti qsort dan bsearch dalam standard library C memerlukan cara untuk membandingkan elemen tanpa mengetahui tipe datanya. Solusinya adalah fungsi pembanding: fungsi yang kamu tulis dan dipanggil oleh algoritma generik setiap kali perlu membandingkan dua item.

Signature standar untuk fungsi perbandingan adalah:

int compare(const void* a, const void* b);

Kedua parameter bertipe const void* karena fungsi generik tidak mengetahui tipe apa yang sedang kamu urutkan. Nilai kembaliannya mengikuti konvensi tertentu:

Nilai KembalianMakna
Negatifa berada sebelum b
Nola sama dengan b
Positifa berada setelah b

Di dalam fungsi pembandingmu, kamu mengubah pointer void* ke tipe sebenarnya dan membandingkan nilainya. Berikut cara membandingkan bilangan bulat:

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;
}

Trik pengurangan bekerja dengan baik untuk bilangan bulat: jika a lebih kecil, hasilnya negatif; jika sama, nol; jika lebih besar, positif. Fungsi ini sekarang dapat diteruskan ke qsort untuk mengurutkan array bilangan bulat dalam urutan menaik.

challenge icon

Tantangan

Mudah
Tulis sebuah fungsi compare_ints yang membandingkan dua bilangan bulat mengikuti konvensi fungsi perbandingan standar yang digunakan oleh algoritma generik seperti qsort.

Fungsimu harus membandingkan kedua nilai dan mengembalikan hasil yang menunjukkan hubungan urutannya.

Konvensi Nilai Kembalian:

  • Kembalikan nilai negatif jika bilangan bulat pertama berada sebelum yang kedua (first < second)
  • Kembalikan nol jika kedua bilangan bulat sama
  • Kembalikan nilai positif jika bilangan bulat pertama berada setelah yang kedua (first > second)

Parameter:

  • a (int): Bilangan bulat pertama yang dibandingkan
  • b (int): Bilangan bulat kedua yang dibandingkan

Nilai kembalian: Bilangan bulat yang menunjukkan urutan: negatif jika a < b, nol jika a == b, positif jika a > b.

Petunjuk: Trik pengurangan dari pelajaran ini memberikan solusi satu baris yang elegan.

Coba sendiri

int compare_ints(int a, int b) {
    // Tulis kodemu di sini
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler C online