معناه : التركيب structure معناه ان تضع مجموعة من البيانات التى تختلف فى النوع معاً. بحيث يمكن التعامل معها كوحدة واحدة أو يمكن التعامل مع العناصر المفردة داخلها.
- ومن اهم التطبيقات فى عالم البرامج ( تطبيقات قواعد البيانات ). فمثلا لكتابة برنامج تسجيل بيانات الموظفين فى الشركة التى تعمل فى هذه الحالة انت تحتاج الى تخزين :
· اسم الموظف وعنوان ( سلسلة حروف من نوع char )
· سن الموظف ( عدد صحيح int )
· راتب الموظف ( عدد ذو علامة عشرية float )
فى هذه الحالة نقوم بعمل تركيب structure يضم هذه العناصر سوياً كوحدة واحدة. وبعد ذلك سوف نتمكن من التعامل مع هذه البيانات المختلفة كوحدة واحدة او نتعامل مع كل عنصر فيها على حدة
* الاعلان عن التركيب :-
عندما ترغب فى الاعلان عن تركيب جديد أتبع الصيغة التالية :-
- ومن اهم التطبيقات فى عالم البرامج ( تطبيقات قواعد البيانات ). فمثلا لكتابة برنامج تسجيل بيانات الموظفين فى الشركة التى تعمل فى هذه الحالة انت تحتاج الى تخزين :
· اسم الموظف وعنوان ( سلسلة حروف من نوع char )
· سن الموظف ( عدد صحيح int )
· راتب الموظف ( عدد ذو علامة عشرية float )
فى هذه الحالة نقوم بعمل تركيب structure يضم هذه العناصر سوياً كوحدة واحدة. وبعد ذلك سوف نتمكن من التعامل مع هذه البيانات المختلفة كوحدة واحدة او نتعامل مع كل عنصر فيها على حدة
* الاعلان عن التركيب :-
عندما ترغب فى الاعلان عن تركيب جديد أتبع الصيغة التالية :-
FPRIVATE "TYPE=PICT;ALT="
وكلمة struct من الكلمات الاساسية فى لغة C
· إذا رغبت فى عمل تركيب ليحمل بيانات الموظفين :-
· إذا رغبت فى عمل تركيب ليحمل بيانات الموظفين :-
struct employee
{
char name[40];
char address[40];
int age;
float salary;
};- التركيب employee يعتبر ( وصفه ) نعطيها للمترجم حتى يتعرف على نوع التركيب وحجمه
- عندما ترغب فى استخدام التركيب فعلاً يجب ان تعلن عن متغير من نفس النوع مثل:
- عندما ترغب فى استخدام التركيب فعلاً يجب ان تعلن عن متغير من نفس النوع مثل:
struct employee emp1;- أصبح لدينا المتغير emp1 وسيقوم المترجم بحجز الذاكرة له حسب ( الوصفة ) السابقة وبالتالى سيكون حجم emp1 يساوى 86 byte ويتكون من اربعة عناصر هى :-
* الاسم (40 byte ) * العنوان (40 byte ) * العمر (2 byte ) * المرتب (4 byte )
* استخدام التركيب :-
- للتعامل مع اى عنصر داخل التركيب أذكر اسم التركيب ثم حرف النقطة ثم اسم العنصر داخل التركيب مثلاً : emp1.age
- وإذا أردت ان تضع الرقم 30 فى المتغير age الموجود فى التركيب نكتب التالى : emp1.age=30;
- كذلك إذا أردت ان تنقل القيمة الموجودة فى العنصر الى متغير آخر اكتب : a.emp1.salary;
- كذلك يمكن ان تمرر عناصر التركيب إلى إجراءات مكتبة التشغيل كما نفعل مع المتغيرات الأخرى مثل : gets(emp1.name); هنا نستدعى الإجراء gets ليقرأ سلسلة حروف من لوحة المفاتيح ويضعها فى المتغير name الموجود داخل التركيب emp1
* الاسم (40 byte ) * العنوان (40 byte ) * العمر (2 byte ) * المرتب (4 byte )
* استخدام التركيب :-
- للتعامل مع اى عنصر داخل التركيب أذكر اسم التركيب ثم حرف النقطة ثم اسم العنصر داخل التركيب مثلاً : emp1.age
- وإذا أردت ان تضع الرقم 30 فى المتغير age الموجود فى التركيب نكتب التالى : emp1.age=30;
- كذلك إذا أردت ان تنقل القيمة الموجودة فى العنصر الى متغير آخر اكتب : a.emp1.salary;
- كذلك يمكن ان تمرر عناصر التركيب إلى إجراءات مكتبة التشغيل كما نفعل مع المتغيرات الأخرى مثل : gets(emp1.name); هنا نستدعى الإجراء gets ليقرأ سلسلة حروف من لوحة المفاتيح ويضعها فى المتغير name الموجود داخل التركيب emp1
* البرنامج التالى يوضح كيفية الإعلان عن التركيبات واستخدامها :-
كود:
# include
void main(void)
{
struct employee
{
char name[40];
char address[40];
int age;
float salary;
}
void main(void)
{
struct employee
{
char name[40];
char address[40];
int age;
float salary;
}
كود:
struct employee emp1;
printf(“ enter name :”);
gets(emp1.name);
printf(“enter address: “);
gets(emp1.address);
printf(“ enter age : “);
scanf(“%d”, &emp1.age);
pruntf(“enter salary : “ );
scanf(“%d”,&emp1.salary);
printf(“\n\n you entered: \n “;
printf(“ employee name :\t%s\n “, emp1.name);
printf(“ employee address :\t%s\n “, emp1.address);
printf(“ employee age :\t%d\n “, emp1.age);
printf(“ employee salary :\t%f\n “, emp1.salary);
}
printf(“ enter name :”);
gets(emp1.name);
printf(“enter address: “);
gets(emp1.address);
printf(“ enter age : “);
scanf(“%d”, &emp1.age);
pruntf(“enter salary : “ );
scanf(“%d”,&emp1.salary);
printf(“\n\n you entered: \n “;
printf(“ employee name :\t%s\n “, emp1.name);
printf(“ employee address :\t%s\n “, emp1.address);
printf(“ employee age :\t%d\n “, emp1.age);
printf(“ employee salary :\t%f\n “, emp1.salary);
}
* مصفوفات من التركيبات *
- لكى نعلن عن مصفوفة من التركيبات يجب أن تعلن عن التركيب أولاً ثم نعلن عن المصفوفة
- مثلاً لو أردنا تخزين 100 موظف
- لكى نعلن عن مصفوفة من التركيبات يجب أن تعلن عن التركيب أولاً ثم نعلن عن المصفوفة
- مثلاً لو أردنا تخزين 100 موظف
struct employee
{
char namr[40];
char namr[40];
char address[40];
int age;
float salary;
};
struct employee emp[100]- هنا اعلانا عن التركيب employee ثم اعلنا عن المصفوفة emp التى تتسع لتخزين معلومات عن 100 موظف
- بعد ذلك عند التعامل مع احد التركيبات فى المصفوفة فأنك تذكر رقمه داخل المصفوفة أولاً.
- فمثلاً إذا أردنا ان تدخل بيانات الموظف الخامس فى المصفوفة نكتب emp[4].age=35;
- كذلك emp[count].salary = 123.5 هنا نشير الى رقم التركيب داخل المصفوفة باستخدام المتغير count
* البرنامج الآتي يعطى مثالاً على كيفية إنشاء مصفوفة من التركيبات والتعامل مع العناصر المختلفة فيها :-
- بعد ذلك عند التعامل مع احد التركيبات فى المصفوفة فأنك تذكر رقمه داخل المصفوفة أولاً.
- فمثلاً إذا أردنا ان تدخل بيانات الموظف الخامس فى المصفوفة نكتب emp[4].age=35;
- كذلك emp[count].salary = 123.5 هنا نشير الى رقم التركيب داخل المصفوفة باستخدام المتغير count
* البرنامج الآتي يعطى مثالاً على كيفية إنشاء مصفوفة من التركيبات والتعامل مع العناصر المختلفة فيها :-
كود:
#inclide
#include
#include
#define max 10 // عدد الكتب
#include
#include
#define max 10 // عدد الكتب
void main(void)
{
struct booktag
{
char title[40];
char author[40];
int pages;
int year;
char edition;
};
struct bootag book[max]; // مصفوفة الكتب
{
struct booktag
{
char title[40];
char author[40];
int pages;
int year;
char edition;
};
struct bootag book[max]; // مصفوفة الكتب
int c ,c1 , result;
char temp[10];
// أبدأ فى استقبال المعلومات من المستخدم
char temp[10];
// أبدأ فى استقبال المعلومات من المستخدم
for(c = 0 ; c < max ; c++)
{
printf(“ enter data for record no[%d]\n “m c+1);
printf(“ or enter \ “ quit \ “ to end \n\n”;
printf”enter title : “ );
gets(boo[c].title);
/* إذا كتب المستخدم كلمة (خروج) فإننا نخرج من التكرار
result = strcmp (book[c].title,”quit”);
if (result = = 0 )
break;
printf(“enter author : “);
gets(book[c].author);
printf(“enter number of pages : “ );
gets(temp);
book[c].pages = atoi(temp);
printf(“enter year of publication : “ );
gets(temp);
book[c].year = atoi(temp);
printf(“enter edition : “ );
gets(temp);
book[c].edition = atoi(temp);
}
// اطبع المعلومات
{
printf(“ enter data for record no[%d]\n “m c+1);
printf(“ or enter \ “ quit \ “ to end \n\n”;
printf”enter title : “ );
gets(boo[c].title);
/* إذا كتب المستخدم كلمة (خروج) فإننا نخرج من التكرار
result = strcmp (book[c].title,”quit”);
if (result = = 0 )
break;
printf(“enter author : “);
gets(book[c].author);
printf(“enter number of pages : “ );
gets(temp);
book[c].pages = atoi(temp);
printf(“enter year of publication : “ );
gets(temp);
book[c].year = atoi(temp);
printf(“enter edition : “ );
gets(temp);
book[c].edition = atoi(temp);
}
// اطبع المعلومات
printf(“record no. %d\n:, c1++);
printf(“book title : \t\%\n “, book[c1].title);
printf(“ book author : \t%d\n”, book[c1].author);
printf(“no of pages :\t%d \n “, book[c1].pages);
printf(“date of pub. \t%d\n”,book[c1].year);
printf(“edition : \t%d\n\n “,book[c1].edition);
}
printf(“book title : \t\%\n “, book[c1].title);
printf(“ book author : \t%d\n”, book[c1].author);
printf(“no of pages :\t%d \n “, book[c1].pages);
printf(“date of pub. \t%d\n”,book[c1].year);
printf(“edition : \t%d\n\n “,book[c1].edition);
}
** ملاحظات على البرنامج **
- هذا البرنامج ينشئ مصفوفة باسم book تستخدم لتخزين المعلومات عن الكتب فى مكتبة ما
- البرنامج يتوقف ليسأل المستخدم عن المعلومات الخاصة بكل كتاب ثم تخزن هذه المعلومات فى المصفوفة ثم طباعة هذه المعلومات
- هذا البرنامج ينشئ مصفوفة باسم book تستخدم لتخزين المعلومات عن الكتب فى مكتبة ما
- البرنامج يتوقف ليسأل المستخدم عن المعلومات الخاصة بكل كتاب ثم تخزن هذه المعلومات فى المصفوفة ثم طباعة هذه المعلومات
فى بداية البرنامج نعلن عن التركيب booktag الذى سيستخدم لحمل بيانات الكتب - هذا التركيب يتكون من خمسة عناصر هى :-
* العنوان * المؤلف * عدد الصفحات * سنة النشر * الطبعة
- بعد ذلك نعلن عن مصفوفة مكونة من 10 تركيبات struct booktag boo[max]
- بعد ذلك نستخدم التكرار for لإدخال المعلومات الخاصة بالكتب من المستخدم ويستمر ذلك حتى يدخل المستخدم معلومات خاصة بـ 10 كتب او يدخل كلمة quit للخروج بدلاً من عنوان الكتاب
- لذلك عندما نطلب من المستخدم غدخال عنوان الكتب نقارن ما ادخله بكلمة quit فغن ادخل هذه الكلمة فإننا نستخدم كلمة break لنخرج من التكرار
result = strcmp(book[c].title , “quit”);
if(result = = 0
break;
- فهنا نستدعى الإجراء strcmp ليقارن العنوان بكلمة quit فإذا كانا متطابقين فإن الإجراء strcmp سيعود بالقيمة صفر ويضعها فى المتغير result وبذلك نخرج من التكرار fot
* العنوان * المؤلف * عدد الصفحات * سنة النشر * الطبعة
- بعد ذلك نعلن عن مصفوفة مكونة من 10 تركيبات struct booktag boo[max]
- بعد ذلك نستخدم التكرار for لإدخال المعلومات الخاصة بالكتب من المستخدم ويستمر ذلك حتى يدخل المستخدم معلومات خاصة بـ 10 كتب او يدخل كلمة quit للخروج بدلاً من عنوان الكتاب
- لذلك عندما نطلب من المستخدم غدخال عنوان الكتب نقارن ما ادخله بكلمة quit فغن ادخل هذه الكلمة فإننا نستخدم كلمة break لنخرج من التكرار
result = strcmp(book[c].title , “quit”);
if(result = = 0
break;
- فهنا نستدعى الإجراء strcmp ليقارن العنوان بكلمة quit فإذا كانا متطابقين فإن الإجراء strcmp سيعود بالقيمة صفر ويضعها فى المتغير result وبذلك نخرج من التكرار fot