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

مراجعة: Calculator Dispatch

جزء من قسم Object Oriented Programming في رحلة C على Coddy — الدرس 37 من 61.

challenge icon

التحدي

سهل

قم ببناء آلة حاسبة باستخدام جدول التوزيع (dispatch table). ستقوم بإنشاء مصفوفة من مؤشرات الدوال (function pointers) التي تربط رموز العمليات بالدوال المقابلة لها، ثم تستخدمها لإجراء الحسابات.

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

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

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

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

7

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

المفتاح هنا هو استخدام فهرسة المصفوفة لاختيار الدالة — لا حاجة لاستخدام جمل if أو switch. يجب أن يبدو جدول التوزيع الخاص بك كما يلي:

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

جميع دروس Object Oriented Programming