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

مراجعة: Calculator Dispatch

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

challenge icon

التحدي

سهل

أنشئ آلة حاسبة باستخدام جدول dispatch. ستنشئ array من مؤشرات إلى function يربط رموز operation بالدوال المقابلة لها، ثم تستخدمه لإجراء العمليات الحسابية.

اكتب برنامجًا يقوم بما يلي:

  1. ينشئ typedef باسم Operation لمؤشر إلى function يأخذ معاملين من النوع int وreturns قيمة من النوع int
  2. يعرّف four دوال حسابية:
    • add: returns a + b
    • sub: returns a - b
    • mul: returns a * b
    • divide: returns a / b (قسمة صحيحة)
  3. داخل main، ينشئ جدول dispatch: ‏array من 4 مؤشرات Operation إلى function، حيث يكون الفهرس 0 هو add، والفهرس 1 هو sub، والفهرس 2 هو mul، والفهرس 3 هو divide
  4. يقرأ ثلاثة مدخلات: عددين صحيحين ورمز operation (0-3)
  5. يستخدم رمز operation للفهرسة داخل جدول dispatch واستدعاء الدالة المناسبة
  6. يطبع النتيجة

ستتلقى ثلاثة مدخلات: العدد الأول، والعدد الثاني، ورمز operation (0 من أجل add، و1 من أجل sub، و2 من أجل mul، و3 من أجل divide).

يجب أن يكون إخراجك عددًا صحيحًا واحدًا: نتيجة العملية:

7

في هذا المثال، مع المدخلات 10 و3 و1: يختار رمز operation‏ 1 الدالة sub من جدول dispatch، لذلك نحسب 10 - 3 = 7.

النقطة الأساسية هنا هي استخدام فهرسة array لاختيار الدالة: لا حاجة إلى عبارات if أو switch. يجب أن يبدو جدول dispatch لديك كما يلي:

Operation ops[4] = {add, sub, mul, divide};

ثم استدعِ الدالة باستخدام: ops[code](a, b)

جرّب بنفسك

#include <stdio.h>

// TODO: أنشئ typedef يسمى 'Operation' لمؤشر دالة
// تأخذ معاملين من نوع int وتُرجع int


// TODO: عرّف الدوال الحسابية الأربع: add, sub, mul, divide


int main() {
    // اقرأ المدخلات
    int a, b, code;
    scanf("%d", &a);
    scanf("%d", &b);
    scanf("%d", &code);
    
    // TODO: أنشئ جدول التوزيع (مصفوفة من 4 مؤشرات دوال من نوع Operation)
    // Operation ops[4] = { ... };
    
    // TODO: استخدم رمز العملية لاستدعاء الدالة المناسبة
    // واخزن النتيجة
    int result;
    
    // اطبع النتيجة
    printf("%d\n", result);
    
    return 0;
}

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

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