الفصل السادس
وحدات البيانات :
راجعنا في ماسبق واستعرضنا الكثير من مميزات لغة السي والمبادئ العامه فيها , ولكننا لم نقم بعد بمناقشة جزء من الاجزاء المهمه وهو المنشئات structures
دعنا اولا نقوم بوضع مثال كارت لطالب
الكارت يحتوي علي اسم الطالب , نوعه , سنه , فصية الدم , سنة دراسته
يمكننا ان نقوم بعمل متغيرات منفصله لكل جزء من هذه الاجزاء , ولكن ماذا اذا اردنا ان نقوم بعمل نوع جديد من البيانات يسمي طالب ؟ هذا النوع يمكنه ان يأخذ اسم الطلب وسنه ونوعه وفصيلة دمه وسنة دراسته ؟ هل هذا ممكن ؟ بالتأكيد لانه وبالتأكيد لن تكون ابدا فكرة جيده ان نقوم بعمل مصفوفات منفصلة لكل بيان نريد ادخاله ! وكالعاده دعنا من النثر الفارغ ولنبدأ في عرض مثال
struct name
{
data;
};
قمنا بتعريف منشأة جديده عن طريقة الكلمه struct ومن ثم قمنا بفتح اقواس جديده {} لوضع المتغيرات المطلوبه بداخلها ثم انهينا التعريف ب ; لا تنساها
والي مثال حي
#include <stdio.h>
struct students
{
char name[100];
int age;
char blood[3];
char type;
int grade;
};
int main(void)
{
struct students student;
printf("Student name 100 char max: ");
scanf("%s",student.name); //array name is a pointer to its first element
getchar();
printf("\nAge:");
scanf("%d",&student.age);
getchar();
printf("\nBlood type:");
scanf("%s",student.blood);
getchar();
printf("\nGender [m/f]:");
scanf("%c",&student.type);
getchar();
printf("\nGrade:");
scanf("%d",&student.grade);
getchar();
printf("We are now printing student information\n");
printf("Name:%s",student.name);
printf("\nAge:%d",student.age);
printf("\nBlood type:%s",student.blood);
printf("\nGender:%c",student.type);
printf("\nGrade:%dth\n",student.grade);
return 0;
}
شرح المثال سهل جدا , اولا قمنا بتعريف منشاة جديده في بداية الشفره , يمكنك تعريفها بداخل الداله ولكننا عرفناها بخارج الداله بدون سبب
ومن ثم قمنا باعلان عن متغير جديد من نوع المنشأة students التي قمنا بتعريفها فيما سبق باسم student لاحظ الفرق
ثم قمنا بالاستعلام عن قيم المتغيرات من خلال الداله scanf التي تقوم بأدخال مايكتبه المستخدم
ومن ثم قمنا بعرضها , لاحظ اولا اننا في حالة المصفوفات لم نقم باستخدام المعامل & حيث ان اسم الداله فقط يعبر عن مؤشر لبدايتها
اما الان فسوف نقوم باسخدام الدوال لكي نملأ هذه المنشاه , سوف نقوم بتمرير مؤشر الي المنشأه للداله لكي تتعامل معها وسوف نعرف الفارق الان
#include <stdio.h>
struct students
{
char name[100];
int age;
char blood[3];
char type;
int grade;
};
void fill(struct students *t)
{
printf("Student name 100 char max: ");
scanf("%s",t->name); //array name is a pointer to its first element
getchar();
printf("\nAge:");
scanf("%d",&(t->age));
getchar();
printf("\nBlood type:");
scanf("%s",t->blood);
getchar();
printf("\nGender [m/f]:");
scanf("%c",&(t->type));
getchar();
printf("\nGrade:");
scanf("%d",&(t->grade));
getchar();
}
int main(void)
{
struct students student;
fill(&student);
printf("We are now printing student information\n");
printf("Name:%s",student.name);
printf("\nAge:%d",student.age);
printf("\nBlood type:%s",student.blood);
printf("\nGender:%c",student.type);
printf("\nGrade:%dth\n",student.grade);
return 0;
}
[code]
[rtl]
الفوارق بسيطه , اولا لكي نتصل بعنصر داخل مؤشر لمنشأة نستخدم المعامل -> بدلا من . في المثال السابق , حيث ان هذه المعاملات تستخدم في الاتصال بالعناصر الموجوده بداخل المنشأة
ثانيا , لاحظ الاقواس في المثال السابق في دالة fill قمنا باحاطة اسماء المتغيرات بالاقواس قبل علامة ال & لان هذا مطلوب حيث ان هناك اسبقية للمعاملات في جدول محدد من اللغه وسوف تحدث اخطاء اذا لم نقم بعمل ذلك
ثالثا , لاحظ انه في كلتا المثالين قمنا باستخدام الداله getchar() وذلك لكي نتخلص من ضغطة الزرار Enter حيث انها تقوم بتسجيل حرف في المخزن الخاص بالادخال , وهذا سوف يسبب مشاكل في ملء باقي العناصر ولذلك قمنا باستخدامها لكي نتخلص من هذا الحرف الخاص
والان :
1- يمكنك اسناد قيم منشاة الي منشاة اخري مثل
[/rtl]
[code]
someone = student;
شرط ان يكون الاثنان من نفس النوع
2- لا يمكنك جمع منشأتين ببعض
3- لا يمكنك ان تختبر مساوة منشأتين ببعض باستخدام == كما في الامثله في الفصول السابقه
انتهي الدرس الي هذا الوقت وفي فصل تصميم برنامج سوف نقوم باستخدام كل ماتعلمناه لكي نقوم بعمل برنامج بسيط يقوم بالقراءه من ملف ما ويتسخلص اسماء الطلاب وعناوينهم من هذا الملف بطريقه بسيطه ثم يقوم بطباعتها علي الشاشه , فكر كيف يمكن ان يكون هذا البرنامج , اطرح اسالتك واهلا بك في عالمة لغة ال C , سوف اقوم لاحفا بوضع مقال اين يمكنك ان تذهب بعد ذلك بعد ان تعلمت المبادئ

مع تحياتي