הכרזה על Enums ושימוש בהם
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-C של Coddy. שיעור 56 מתוך 63.
כעת, לאחר שהגדרת enum, תוכל ליצור משתנים מסוג ה־enum הזה ולהקצות להם ערכים בעלי משמעות. כאן enums באמת באים לידי ביטוי — במקום לעבוד עם מספרים מבלבלים, משתמשים בשמות תיאוריים.
כדי להצהיר על משתנה מטיפוס enum, משתמשים באותו תחביר כמו להצהרה על כל משתנה אחר:
enum DayOfWeek today;
enum DayOfWeek weekend_day;לאחר מכן תוכל להקצות ערכים למשתנים האלה באמצעות הקבועים בעלי השמות מתוך ה-enum שלך:
today = WEDNESDAY;
weekend_day = SATURDAY;השווה זאת לשימוש במספרים גולמיים: today = 2; ו־weekend_day = 5;. גרסת ה־enum אומרת לך מיד עם איזה יום את/ה עובד/ת, בעוד שהמספרים מחייבים אותך לזכור מה מייצג כל ערך. כך הקוד שלך קריא הרבה יותר ופחות מועד לטעויות.
אתגר
קלכתבו תוכנית C שמדגימה הכרזה על משתני enum ושימוש בהם במערכת פשוטה לניהול משימות. התוכנית שלכם צריכה:
- להגדיר
enumבשםTaskStatusעם הקבועים הבאים בסדר המדויק הזה:PENDINGIN_PROGRESSCOMPLETEDCANCELLED
- בפונקציה הראשית:
- להכריז על שלושה משתנים מטיפוס
enum TaskStatusבשםtask1,task2ו-task3 - לקרוא מהקלט שלושה מספרים שלמים שמייצגים את המצב של כל משימה (0, 1, 2 או 3)
- להקצות לכל משתנה של משימה את ערך ה-enum המתאים על סמך הקלט:
- אם הקלט הוא 0, להקצות
PENDING - אם הקלט הוא 1, להקצות
IN_PROGRESS - אם הקלט הוא 2, להקצות
COMPLETED - אם הקלט הוא 3, להקצות
CANCELLED
- אם הקלט הוא 0, להקצות
- להדפיס את המצב של כל משימה באמצעות ערכי ה-enum בפורמט המדויק הזה:
Task 1 status: [numeric_value]Task 2 status: [numeric_value]Task 3 status: [numeric_value]
- לספור ולהדפיס כמה משימות נמצאות בכל קטגוריית מצב:
Pending tasks: [count]In progress tasks: [count]Completed tasks: [count]Cancelled tasks: [count]
- לחשב ולהדפיס את המספר הכולל של המשימות הפעילות (משימות שמצבן הוא
PENDINGאוIN_PROGRESS) בפורמט המדויק הזה:Active tasks: [count]
- להכריז על שלושה משתנים מטיפוס
האתגר הזה מדגים כיצד משתני enum הופכים את הקוד לקריא יותר באמצעות שמות בעלי משמעות במקום מספרים גולמיים. תתרגלו להכריז על משתני enum, להקצות ערכי enum על סמך קלט, להשתמש בקבועי enum בהשוואות ולבצע חישובים עם ערכי enum.
נסו בעצמכם
#include <stdio.h>
// TODO: הגדירו כאן את ה-enum TaskStatus
int main() {
// קראו קלט עבור הסטטוסים של שלוש משימות
int status1, status2, status3;
scanf("%d", &status1);
scanf("%d", &status2);
scanf("%d", &status3);
// TODO: הכריזו על שלושה משתנים מסוג enum TaskStatus (task1, task2, task3)
// TODO: הקצו ערכי enum על סמך הקלט
// TODO: הדפיסו את הסטטוסים של המשימות
// TODO: ספרו את המשימות בכל קטגוריה
// TODO: חשבו והדפיסו את מספר המשימות הפעילות
return 0;
}השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
1יסודות המצביעים
מהו מצביע?הכרזה על מצביעיםאופרטור לקיחת הכתובת (&)אופרטור ביטול ההפניה (*)מצביעי NULLסיכום: יסודות המצביעים7מבנים (structs)
מהו struct?הכרזה על structיצירת משתני structגישה לאיברי structאתחול structסיכום: struct לנתוני תלמיד10Enums ו־typedef
enum לקבועים בעלי שםהכרזה על Enums ושימוש בהםEnums במשפטי switchשימוש ב־typedef ליצירת כינויים לטיפוסיםtypedef עם Structsסיכום: תרגול typedef ו־Enum2מצביעים ומערכים
שמות מערכים כמצביעיםאיברי מערך ומצביעיםאריתמטיקה של מצביעיםהשוואת מצביעיםסיכום: מעבר על מערך באמצעות מצביעים5מצביעים ופונקציות
העברה לפי ערךהעברת מצביעים לפונקציותשינוי משתנים באמצעות מצביעיםדוגמה קלאסית: החלפההעברת מערכים לפונקציותחזרה: ארגומנטים של מצביעי פונקציה3מערכי תווים ומחרוזות
מחרוזות כמערכי charתו הסיום nullקלט מחרוזת באמצעות scanfשימוש ב־strlen()שימוש ב־strcpy()שימוש ב־strcat()שימוש ב־strcmp()סיכום: פונקציות מחרוזת בסיסיותתרגלו בעצמכם: קומפיילר C אונליין