PDA

צפייה בגרסה מלאה : מדריך תכנות עם מבנים (Structures) מורכבים בשפת C



Tamir
06-09-2024, 11:27 PM
תכנות עם מבנים (Structures) מורכבים בשפת C


מבנים (Structures) בשפת C הם כלי חשוב לארגון נתונים, המאפשרים לשלב מספר משתנים מסוגים שונים לתוך אובייקט אחד. שימוש במבנים מורכבים מאפשר ארגון טוב יותר של נתונים ותכנות בצורה נקייה ומסודרת.


הגדרת מבנה פשוט


מבנה פשוט הוא אובייקט המורכב ממספר משתנים (שדות) מסוגים שונים:



c
#include <stdio.h>


// הגדרת מבנה פשוט
struct Person {
char name[50];
int age;
float height;
};


int main() {
struct Person person1;


// הגדרת ערכים לשדות המבנה
snprintf(person1.name, sizeof(person1.name), "Alice");
person1.age = 30;
person1.height = 5.6;


// הדפסת ערכים
printf("Name: %s\n", person1.name);
printf("Age: %d\n", person1.age);
printf("Height: %.2f\n", person1.height);


return 0;
}



שימוש במבנים מורכבים


מבנים מורכבים מאפשרים לכלול מבנים אחרים בתוכם, מה שמאפשר יצירת מבנים עם היררכיות מורכבות יותר:


1. הגדרת מבנה עם מבנים פנימיים:



c
#include <stdio.h>


// הגדרת מבנה פנימי
struct Address {
char street[100];
char city[50];
int zip;
};


// הגדרת מבנה הכולל מבנה פנימי
struct Person {
char name[50];
int age;
struct Address address;
};


int main() {
struct Person person1;


// הגדרת ערכים לשדות המבנה הפנימי
snprintf(person1.name, sizeof(person1.name), "Bob");
person1.age = 40;
snprintf(person1.address.street, sizeof(person1.address.street), "123 Main St");
snprintf(person1.address.city, sizeof(person1.address.city), "Anytown");
person1.address.zip = 12345;


// הדפסת ערכים
printf("Name: %s\n", person1.name);
printf("Age: %d\n", person1.age);
printf("Address: %s, %s %d\n", person1.address.street, person1.address.city, person1.address.zip);


return 0;
}



2. הגדרת מבנים עם מצביעים (Pointers):



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


// הגדרת מבנה עם מצביעים
struct Person {
char name[50];
int age;
float *height; // מצביע למשתנה מסוג float
};


int main() {
struct Person person1;
float height = 5.9;


// הגדרת ערכים לשדות המבנה
snprintf(person1.name, sizeof(person1.name), "Charlie");
person1.age = 25;
person1.height = &height;


// הדפסת ערכים
printf("Name: %s\n", person1.name);
printf("Age: %d\n", person1.age);
printf("Height: %.2f\n", *(person1.height));


return 0;
}



שימוש במבנים עם פונקציות


ניתן להגדיר פונקציות העובדות עם מבנים, כגון יצירת מבנה חדש, עדכון שדות, והדפסת ערכים:



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


// הגדרת מבנה
struct Person {
char name[50];
int age;
};


// פונקציה להדפסת פרטי המבנה
void printPerson(struct Person p) {
printf("Name: %s\n", p.name);
printf("Age: %d\n", p.age);
}


// פונקציה ליצירת מבנה חדש
struct Person createPerson(char* name, int age) {
struct Person p;
snprintf(p.name, sizeof(p.name), "%s", name);
p.age = age;
return p;
}


int main() {
struct Person person1 = createPerson("Diana", 35);
printPerson(person1);
return 0;
}



הטמעה עם קבצים ומערכים


מבנים יכולים לשמש עם קבצים ומערכים, כגון יצירת מערך של מבנים, קריאה וכתיבה של נתונים:



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


#define SIZE 3


// הגדרת מבנה
struct Person {
char name[50];
int age;
};


int main() {
struct Person people[SIZE];
FILE *file;


// פתיחת קובץ לכתיבה
file = fopen("people.dat", "wb");


for (int i = 0; i < SIZE; i++) {
snprintf(people[i].name, sizeof(people[i].name), "Person %d", i + 1);
people[i].age = 20 + i;
fwrite(&people[i], sizeof(struct Person), 1, file);
}


fclose(file);


// קריאה מהקובץ
file = fopen("people.dat", "rb");
while (fread(&people, sizeof(struct Person), SIZE, file)) {
for (int i = 0; i < SIZE; i++) {
printf("Name: %s, Age: %d\n", people[i].name, people[i].age);
}
}


fclose(file);
return 0;
}



סיכום


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


אם יש לכם שאלות נוספות או אתם זקוקים לעזרה נוספת, אתם מוזמנים לשאול! ?