סיכום: שינוי מבנה באמצעות מצביע
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-C של Coddy. שיעור 49 מתוך 63.
אתגר
קלצרו תוכנית ב-C שמדגימה מערכת מלאה לניהול עובדים באמצעות הקצאת זיכרון דינמית, מצביעים למבנים ופונקציות. התוכנית שלכם צריכה:
- להגדיר
structבשםEmployeeעם האיברים הבאים:- מספר שלם
idלאחסון מזהה העובד - מערך תווים
nameבגודל 50 לאחסון שם העובד - מערך תווים
departmentבגודל 30 לאחסון שם המחלקה - מספר ממשי מסוג float בשם
salaryלאחסון שכר העובד - מספר שלם
yearsOfServiceלאחסון שנות הוותק
- מספר שלם
- לכתוב פונקציה בשם
fillEmployeeDataש:- מקבלת מצביע למבנה
Employeeכפרמטר - קוראת את פרטי העובד מהקלט בסדר הבא: מזהה, שם, מחלקה, שכר, שנות ותק
- משייכת את הערכים לאיברי המבנה באמצעות אופרטור החץ
- מחשבת בונוס על סמך שנות הוותק: אם מספר השנים >= 5, הבונוס הוא 10% מהשכר, אחרת 5% מהשכר
- מוסיפה את הבונוס לשכר:
empPtr->salary += bonus;
- מקבלת מצביע למבנה
- לכתוב פונקציה בשם
displayEmployeeש:- מקבלת מצביע למבנה
Employeeכפרמטר - מדפיסה את פרטי העובד בדיוק בפורמט הזה:
Employee Details:ID: [id]Name: [name]Department: [department]Salary: [salary]Years of Service: [yearsOfService]
- מקבלת מצביע למבנה
- לכתוב פונקציה בשם
promoteEmployeeש:- מקבלת מצביע למבנה
Employeeכפרמטר - מגדילה את השכר ב-15% באמצעות אופרטור החץ
- מגדילה את שנות הוותק ב-1
- מדפיסה
Employee promoted successfully!
- מקבלת מצביע למבנה
- בפונקציה הראשית:
- להצהיר על מצביע למבנה
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;
}כל השיעורים ביחידה לוגיקה וזרימת תוכנית
1יסודות המצביעים
מהו מצביע?הכרזה על מצביעיםאופרטור לקיחת הכתובת (&)אופרטור ביטול ההפניה (*)מצביעי NULLסיכום: יסודות המצביעים2מצביעים ומערכים
שמות מערכים כמצביעיםאיברי מערך ומצביעיםאריתמטיקה של מצביעיםהשוואת מצביעיםסיכום: מעבר על מערך באמצעות מצביעים5מצביעים ופונקציות
העברה לפי ערךהעברת מצביעים לפונקציותשינוי משתנים באמצעות מצביעיםדוגמה קלאסית: החלפההעברת מערכים לפונקציותחזרה: ארגומנטים של מצביעי פונקציה8מבנים ומצביעים
מצביעים למבניםאופרטור החץ (->)העברת מבנים לפי ערךהעברת מצביעים למבניםהקצאה דינמית של מבניםסיכום: שינוי מבנה באמצעות מצביע3מערכי תווים ומחרוזות
מחרוזות כמערכי charתו הסיום nullקלט מחרוזת באמצעות scanfשימוש ב־strlen()שימוש ב־strcpy()שימוש ב־strcat()שימוש ב־strcmp()סיכום: פונקציות מחרוזת בסיסיותתרגלו בעצמכם: קומפיילר C אונליין