Menu
Coddy logo textTech

enum לקבועים בעלי שם

חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-C של Coddy. שיעור 55 מתוך 63.

בעת כתיבת תוכניות C, לעיתים קרובות יש צורך לעבוד עם קבוצות של ערכי קבועים קשורים. לדוגמה, ייתכן שתצטרך לייצג את ימי השבוע, את חודשי השנה או מצבים שונים בתוכנית. במקום להשתמש במספרים גולמיים כמו 0, 1, 2, אפשר להשתמש ב־enum כדי ליצור שמות בעלי משמעות עבור הקבועים האלה.

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

enum DayOfWeek {
    MONDAY,
    TUESDAY,
    WEDNESDAY,
    THURSDAY,
    FRIDAY,
    SATURDAY,
    SUNDAY
};

כברירת מחדל, השם הראשון מקבל את הערך 0, השני מקבל 1, וכן הלאה. לכן MONDAY שווה ל־0, TUESDAY שווה ל־1, ו־SUNDAY שווה ל־6. הגישה הזאת ברורה הרבה יותר מלזכור שיום 0 פירושו יום שני או שיום 6 פירושו יום ראשון.

השימוש ב-enum הופך את הקוד שלך לתיעודי בפני עצמו ועוזר למנוע שגיאות שעלולות להתרחש כשמשתמשים במספרי קסם לאורך התוכנית.

אפשר להצהיר על משתנים מטיפוס enum ולהקצות להם ערכי enum:

enum DayOfWeek today;
today = MONDAY;  // מקצה 0 ל-today
challenge icon

אתגר

קל

כתבו תוכנית C שמגדירה enum עבור צבעי רמזור ומדגימה את השימוש בו. על התוכנית שלכם:

  1. להגדיר enum בשם TrafficLight עם הקבועים הבאים בסדר המדויק הזה:
    • RED
    • YELLOW
    • GREEN
  2. בפונקציה הראשית:
    • להכריז על משתנה מסוג enum TrafficLight בשם currentLight
    • לקרוא מספר שלם מהקלט שמייצג את מצב הרמזור (0, 1 או 2)
    • להקצות את ערך ה-enum המתאים ל-currentLight בהתאם לקלט:
      • אם הקלט הוא 0, להקצות RED
      • אם הקלט הוא 1, להקצות YELLOW
      • אם הקלט הוא 2, להקצות GREEN
    • להדפיס את מצב הרמזור הנוכחי בפורמט המדויק הזה: Current light: [enum_name]
    • להדפיס את הערך המספרי של הרמזור הנוכחי בפורמט המדויק הזה: Numeric value: [number]
    • לקבוע ולהדפיס את הפעולה בהתאם למצב הרמזור הנוכחי:
      • אם RED: להדפיס Action: Stop
      • אם YELLOW: להדפיס Action: Caution
      • אם GREEN: להדפיס Action: Go
    • לחשב ולהדפיס את הרמזור הבא ברצף:
      • אם הרמזור הנוכחי הוא RED (0), הבא הוא GREEN (2)
      • אם הרמזור הנוכחי הוא YELLOW (1), הבא הוא RED (0)
      • אם הרמזור הנוכחי הוא GREEN (2), הבא הוא YELLOW (1)
    • להדפיס את הרמזור הבא בפורמט המדויק הזה: Next light: [enum_name]

האתגר הזה מדגים כיצד קבועי enum הופכים את הקוד לקריא יותר משימוש במספרים גולמיים. במקום לזכור ש-0 מייצג אדום, 1 מייצג צהוב ו-2 מייצג ירוק, אפשר להשתמש בשמות בעלי משמעות כמו RED, YELLOW ו-GREEN. תתרגלו להגדיר enum, להשתמש בקבועי enum בהקצאות ובהשוואות, ולגשת לערכים השלמים הבסיסיים של קבועי enum.

נסו בעצמכם

#include <stdio.h>

// TODO: להגדיר כאן את ה-enum ‏TrafficLight

int main() {
    // לקרוא קלט
    int input;
    scanf("%d", &input);
    
    // TODO: להכריז על המשתנה currentLight ולהקצות לו ערך enum על סמך הקלט
    
    // TODO: להדפיס את מצב הרמזור הנוכחי
    
    // TODO: להדפיס את הערך המספרי
    
    // TODO: להדפיס את הפעולה בהתאם למצב הרמזור הנוכחי
    
    // TODO: לחשב ולהדפיס את מצב הרמזור הבא
    
    return 0;
}
quiz iconבחנו את עצמכם

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

כל השיעורים ביחידה לוגיקה וזרימת תוכנית

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