Menu
Coddy logo textTech

סיכום: ניתוב במחשבון

חלק מהיחידה תכנות מונחה עצמים במסלול ה-C של Coddy. שיעור 37 מתוך 61.

challenge icon

אתגר

קל

בנו מחשבון באמצעות טבלת ניתוב. תיצרו מערך של מצביעים לפונקציות שממפה קודי פעולות לפונקציות המתאימות, ואז תשתמשו בו כדי לבצע חישובים.

כתבו תוכנית ש:

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

כל השיעורים ביחידה תכנות מונחה עצמים

תרגלו בעצמכם: קומפיילר C אונליין