إذا ماذا بعد هذه الفقرة ؟
الجواب :
-
إما أن تكمل جميع مراحل اللغة C خطوة خطوة، وهذا هو الأفضل ثم ++C ثم JAVA ...
-
وإما أن تذهب إلى المرحلة الثالثة من اللغة C (بنيات المعطيات) ثم ++C ثم JAVA ...
-
أو أن تذهب مباشرة إلى اللغة ++C ثم JAVA ...أو إلى اللغة JAVA مباشرة
1. الأدوات const و define# و typedef
1.1 الأداة const
تقوم هذه الأداة بتثبيت متغير بقيمة معينة حيث لا يتغير عند استعماله في المشروع
مثال :
const dim = 100; int tab1[dim], tab2[dim][dim*2]; |
1.2 الأداة define#
تقوم هذه الأداة بتعويض متغير بقيمة معينة وهي شبيهة بالأداة const إلا أنها تعتبر خير منها.
-
عند استعمال const يقوم C بحجز مكان في الذاكرة حسب تحديده لنوع المتغير
-
عند استعمال define# لا يقوم C بحجز مكان في الذاكرة للمتغير بل يقوم بتعويض جميع مماثلاته في المشروع بالقيمة المحددة له قبل أن يبدأ بالتنفيد.
ملاحظة : لا تحتاج هذه الأداة إلى الفاصلة المنقطة ( ; ) في نهايتها.
مثال :
#define dim 100 /* نعوض كل dim في المشروع بالقيمة 100*/ /* لتحديد القيمة القصوية لعددين كيفما كان نوعهما (الأقواس ضرورية)*/ #define abs(x) ((x) > 0 ? (x) : -(x)) void main() int tab1[dim], tab2[dim][dim*2] , x=-20 , y= -10 , z ; |
1.3 الأداة typedef
تقوم هذه الأداة بتعويض نوع المتغيرات باسم آخر يختاره المبرمج.
مثال :
typdef int integer /* نعوض int بـ integer*/ void main() .... |
ملاحظة : إن تعويض نوع ما لا يعني عدم استعماله مرة أخرى.
2. البنية enum
تقوم هذه البنية بتعريف مجال لمجموعة من الثوابت من النوع int.
مثال 1 :
enum ayam {itnayn,tholata,arbe3a,khamis,jomo3a,sabte,ahad}; |
كما نلاحظ أنه أصبح لدينا نوع جديد يسمى enum ayam.
يمكنك اختصار هذه الكتابة بكلمة ayame باستعمال الأداة typedef.
مثال 2 :
enum ayam {itnayn,tholata,arbe3a,khamis,jomo3a,sabte,ahad};
for(i=0;i<=6;i++) printf("\n%s",ch[i]); |
3. البنية struct
3.1 استعمال عادي
هذه البنية هي أهم هذه البنيات، ورغم بساطتها إلا أنها تقوم بتسهيل عدة مفاهيم ستتلقاها مستقبليا في مجال البرمجة.
المهم :
إذا أردنا أن نعرف مجموعة من المتغيرات ذات النوع int يكفي أن نعرف جدولا من النوع int في هذه الحالة.
إذا أردنا أن نعرف مجموعة من المتغيرات ذات النوع float يكفي أن نعرف جدولا من النوع float في هذه الحالة.
إذا أردنا أن نعرف مجموعة من المتسلسلات يكفي أن نعرف جدولا للمتسلسلات من النوع char في هذه الحالة.
لكن :
إذا أردنا أن نعرف مجموعة من المتغيرات ذات النوع int وكذلك متغيرات من النوع float أو متسلسلات في جدول واحد فهذا بالطبع غير ممكن، وهنا يأتي دور البنية struct.
ونكتب إذا :
struct <اسم البنية> |
مثال 1 :
struct employee {int age; |
ملاحظة : لتحديد المتغير الذي سنستعمله نقوم بكتابة متغير البنية متبوعا بالنقطة متبوعة هي الأخرى باسم المتغير.
وكما نلاحظ أنه أصبح لدينا نوع جديد يسمى struct employee .
يمكنك اختصار هذه الكتابة بكلمة employee باستعمال الأداة typedef.
مثال 2 :
typdef struct {int age; |
3.1 استعمال المؤشر
مثال 1 : انتبه إلى الملاحظات فهي جد مهمة مستقبليا
typedef struct {int age; |
كما تلاحظ أن استعمال العامل <- فقط لتسهيل الكتابة واختصارها.
4. البنية union
هذه البنية شبيهة شيئا ما بالبنية السابقة إلا أن هناك فرق ضئيل، حيث أن جميع المتغيرات التي تحتويها تستعمل نفس المكان للتحفيظ.
(ليس المطلوب منك الفهم الدقيق لها)
هذه البنية تُسْتَعمل كالبنية struct.
مثال :
union int_or_long { int i; |
ملاحظة : المتغير a_number من النوع union int_or_long وليس جزءا من البنية، حيث قمنا بتعريفه مباشرة، كما أنه يمكننا تعريفه داخل المشروع أو في إحدى الدوال .
تمارين تطبيقية
التمرين 12.1
أنجز مشروعا يقوم بتحديد القيمة القصوية لعددين مطلوب إدخالهما من طرف المستعمل، لكن باستعمال define
التمرين 12.2
أنجز مشروعا يقوم بحساب مربعات الأعداد من 0 إلى 10، لكن باستعمال define
التمرين 12.3
أنجز مشروعا يقوم بحساب مجموع عددين عقديين ينتميان إلى المجموعة C، لكن باستعمال struct ودالة تكون نتيجتها بنية.
struct COMPLEXE {float re;
float im; }
مثال :
x + i y= ( a + ib ) + ( c + id )
x = a + c حيث
y = b + d و
التمرين 12.4
باستعمال جدول للأشخاص (الاسم ، النسب، رقم الزنقة، الشارع، الرقم البريدي، المدينة، رقم الهاتف)، أنجز مشروعا يقوم بالبحث التلقائي عن معلومات شخص معين انطلاقا من اسمه أو ...، نفترض أن جدول الأشخاص مهيأ سابقا بالمعلومات.
تأليف
المؤلف الأصلي: محمد عبد الرحمان