Menu
Coddy logo textTech

סיכום: שינוי מבנה באמצעות מצביע

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

challenge icon

אתגר

קל

צרו תוכנית ב-C שמדגימה מערכת מלאה לניהול עובדים באמצעות הקצאת זיכרון דינמית, מצביעים למבנים ופונקציות. התוכנית שלכם צריכה:

  1. להגדיר struct בשם Employee עם האיברים הבאים:
    • מספר שלם id לאחסון מזהה העובד
    • מערך תווים name בגודל 50 לאחסון שם העובד
    • מערך תווים department בגודל 30 לאחסון שם המחלקה
    • מספר ממשי מסוג float בשם salary לאחסון שכר העובד
    • מספר שלם yearsOfService לאחסון שנות הוותק
  2. לכתוב פונקציה בשם fillEmployeeData ש:
    • מקבלת מצביע למבנה Employee כפרמטר
    • קוראת את פרטי העובד מהקלט בסדר הבא: מזהה, שם, מחלקה, שכר, שנות ותק
    • משייכת את הערכים לאיברי המבנה באמצעות אופרטור החץ
    • מחשבת בונוס על סמך שנות הוותק: אם מספר השנים >= 5, הבונוס הוא 10% מהשכר, אחרת 5% מהשכר
    • מוסיפה את הבונוס לשכר: empPtr->salary += bonus;
  3. לכתוב פונקציה בשם displayEmployee ש:
    • מקבלת מצביע למבנה Employee כפרמטר
    • מדפיסה את פרטי העובד בדיוק בפורמט הזה:
      • Employee Details:
      • ID: [id]
      • Name: [name]
      • Department: [department]
      • Salary: [salary]
      • Years of Service: [yearsOfService]
  4. לכתוב פונקציה בשם promoteEmployee ש:
    • מקבלת מצביע למבנה Employee כפרמטר
    • מגדילה את השכר ב-15% באמצעות אופרטור החץ
    • מגדילה את שנות הוותק ב-1
    • מדפיסה Employee promoted successfully!
  5. בפונקציה הראשית:
    • להצהיר על מצביע למבנה Employee בשם empPtr
    • להשתמש ב-malloc() כדי להקצות באופן דינמי זיכרון למבנה Employee אחד
    • לבדוק אם הקצאת הזיכרון הצליחה:
      • אם empPtr הוא NULL, להדפיס Memory allocation failed ולצאת מהתוכנית
      • אם ההקצאה הצליחה, להדפיס Memory allocated successfully
    • לקרוא ל-fillEmployeeData כדי למלא את פרטי העובד
    • להדפיס Initial employee data:
    • לקרוא ל-displayEmployee כדי להציג את פרטי העובד הראשוניים
    • לקרוא ל-promoteEmployee כדי לקדם את העובד
    • להדפיס After promotion:
    • לקרוא שוב ל-displayEmployee כדי להציג את הפרטים המעודכנים
    • לשחרר את הזיכרון שהוקצה באופן דינמי באמצעות free(empPtr)
    • להדפיס Memory freed successfully

האתגר הזה משלב את כל המושגים המרכזיים מהפרק: הגדרת מבנים, הקצאת זיכרון דינמית באמצעות malloc(), בדיקה אם ההקצאה נכשלה, העברת מצביעים למבנים לפונקציות, שימוש באופרטור החץ כדי לגשת לאיברי המבנה ולשנות אותם, וניקוי זיכרון תקין באמצעות free(). הפונקציות מדגימות כיצד מצביעים מאפשרים לשנות ישירות את נתוני המבנה המקורי.

נסו בעצמכם

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// TODO: להגדיר כאן את המבנה Employee

// TODO: לממש כאן את הפונקציה fillEmployeeData

// TODO: לממש כאן את הפונקציה displayEmployee

// TODO: לממש כאן את הפונקציה promoteEmployee

int main() {
    // TODO: להכריז על empPtr ולהקצות זיכרון
    
    // TODO: לבדוק אם הקצאת הזיכרון הצליחה
    
    // TODO: למלא את נתוני העובד, להציג את הנתונים הראשוניים, לקדם את העובד ולהציג את הנתונים לאחר הקידום
    
    // TODO: לשחרר את הזיכרון ולהדפיס הודעת הצלחה
    
    return 0;
}

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

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