Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

مقارنة عامة

جزء من قسم البرمجة كائنية التوجه في رحلة C على Coddy. الدرس 52 من 61.

تحتاج الدوال العامة مثل qsort وbsearch في المكتبة القياسية للغة C إلى طريقة لمقارنة العناصر من دون معرفة أنواعها. والحل هو دالة مقارنة: دالة تكتبها وتستدعيها الخوارزمية العامة كلما احتاجت إلى مقارنة عنصرين.

التوقيع القياسي لدوال المقارنة هو:

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

المعاملان كلاهما const void* لأن الدالة العامة لا تعرف نوع البيانات الذي تقوم بترتيبه. تتبع القيمة المُعادة اصطلاحًا محددًا:

القيمة المُعادةالمعنى
سالبةيأتي a قبل b
صفريساوي a قيمة b
موجبةيأتي a بعد b

داخل دالة المقارنة، تحوّل مؤشري void* إلى النوع الفعلي وتقارن القيم. إليك كيفية مقارنة الأعداد الصحيحة:

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

تعمل حيلة الطرح جيدًا مع الأعداد الصحيحة: إذا كانت a أصغر، تكون النتيجة سالبة؛ وإذا كانتا متساويتين، تكون صفرًا؛ وإذا كانت أكبر، تكون موجبة. يمكن الآن تمرير هذه الدالة إلى qsort لفرز مصفوفة من الأعداد الصحيحة بترتيب تصاعدي.

challenge icon

التحدي

سهل
اكتب دالة compare_ints تقارن بين عددين صحيحين باتباع اصطلاح دالة المقارنة القياسي المستخدم في الخوارزميات العامة مثل qsort.

يجب أن تقارن دالتك بين القيمتين وتُرجع نتيجة تشير إلى العلاقة الترتيبية بينهما.

اصطلاح القيمة المُرجعة:

  • أعد قيمة سالبة إذا كان العدد الصحيح الأول يأتي قبل الثاني (first < second)
  • أعد صفرًا إذا كان العددان الصحيحان متساويين
  • أعد قيمة موجبة إذا كان العدد الصحيح الأول يأتي بعد الثاني (first > second)

المعاملات:

  • a (int): العدد الصحيح الأول المراد مقارنته
  • b (int): العدد الصحيح الثاني المراد مقارنته

القيمة المُرجعة: عدد صحيح يشير إلى الترتيب: قيمة سالبة إذا كان a < b، وصفر إذا كان a == b، وقيمة موجبة إذا كان a > b.

تلميح: توفر حيلة الطرح من الدرس حلًا أنيقًا مكوّنًا من سطر واحد.

جرّب بنفسك

int compare_ints(int a, int b) {
    // اكتب الكود هنا
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس البرمجة كائنية التوجه

تدرّب بنفسك: مترجم C عبر الإنترنت