17 - سلسلة تبسيط البرمجة – أنواع المعطيات المركبة

17 - سلسلة تبسيط البرمجة – أنواع المعطيات المركبة

السلام عليكم ورحمة الله وبركاته

بسم الله الرحمن الرحيم

قررت إحدى الشركات الكبرى بمناسبة مرور 10 سنوات على تأسيس الشركة أن تمنح موظفيها هدية قيمة عبارة عن ساعة قيّمة وقلم ثمين وميدالية من البرونز ومحفظة نقود من الجلد الطبيعي

واقترح أحد أعضاء اللجنة المسؤولة عن عملية التوزيع وضع لصاقات على كل قطعة مكتوب عليها اسم الموظف لتصبح الأقلام تحمل ملصق عليه اسم كل موظف على حدا ونفس الشيء بالنسبة للساعات والميداليات والمحافظ

وأن يتم جمعها كلها في صندوق كرتوني واحد

وعندما يحين وقت التوزيع يقوموا بإخراج القطع سواء كانت ساعة أو قلم أو غيرها وينظروا اسم الموظف ثم يعطوه إياها

إلا أن أحد المنظمين قدم اقتراح آخر

فقال لماذا لا نحضر علب صغيرة نضع في كل واحدة ساعة وقلم وميدالية ومحفظة

ثم نضع على العلبة اسم الموظف

بهذا الشكل نتعامل مع نوع واحد وهو علب الهدايا بدل من خليط من الهدايا

ويكون لدينا ملصق واحد على العلبة بدل من أربع ملصقات على أربع قطع لأننا نعرف أن العلبة تحوي قطعة واحدة فقط من كل نوع وأن العلبة بما فيها هي للموظف

إن الاقتراح الثاني هو الذي يمثل نوع المعطيات المركب

أي أنه نوع جديد معرف من قبل المستخدم يضم في داخله عدة متغيرات من أنواع أخرى سواء بسيطة أو مركبة سبق تعريفها

وعلى فرض أننا نريد عمل برنامج لأرشفة سجلات الطلاب في أحد المعاهد

فيلزمنا أن نسجل لكل طالب رقم تعريفي يكون وحيد حتى لا يختلط مع طلاب آخرين بنفس الاسم

ومتغير رمزي لحفظ الاسم

ومتغير رمزي آخر لحفظ اسم العائلة

ومتغير رقمي لحفظ العمر ويكفي متحول من النوع بايت لأن العمر يستحيل أن يتجاوز 255 أو أن يكون سالب

ومتغير من النوع تاريخ لحفظ تاريخ الالتحاق

ومتغير من النوع رقم عشري لحفظ النسبة المحصلة في نهاية العام

مما سبق ليس من المجدي أن نعرف متغير مصفوفي لكل من الأنواع السابقة ثم الوصول إلى كل طالب بالوصول إلى الحجرة ذات رقم معين لكل منها

و لهذا فالأنسب أن نطبق الاقتراح الثاني

فنستطيع أن نعرف نوع جديد من المعطيات نسميه

سجل طالب

يضم في داخله متغير وحيد لكل نوع من الانواع المذكورة أعلاه

وكتمثيل رمزي

عرف نوع مركب اسمه "سجل طالب"

مكون من

الاسم من النوع نص

العائلة من النوع نص

العمر من النوع رقم بايت

الالتحاق من النوع تاريخ

النسبة المحصلة من النوع عدد عشري

والآن حتى نحفظ معلومات الطلاب فيكفي حجز متغير مصفوفي من النوع المركب "سجل طالب"

ولنسمه سجلات الطلاب وليكن بحجم 500

احجز "سجلات الطلاب" من النوع سجل طالب[500]

وبالتالي لو اعتبرنا أن الطالب خالد مخزن في الحجرة 216 حينها نستطيع الوصول إلى كل معلوماته من خلال اسم المتغير ذو الترتيب 216 ثم نقطة ثم اسم المتغير الداخلي

كمثال لو أردنا الوصول إلى عُمْر خالد فيكون لدينا

سجلات الطلاب(216).العمر فنجد فيه مثلا 26

سجلات الطلاب(216).الالتحاق فنجد قيمته 16-09-2010

سجلات الطلاب(216).النسبة وتكون 67.13

وهكذا

كما يمكن أن تكون حقول النوع المركب هي من أنواع مركبة أخرى

فعلى فرض نريد برنامج لإدارة الجامعة

فنستطيع أن نعرف نوع مركب يمثل الكلية يضم متغير يمثل عدد القاعات ومتغير لعدد الأقسام

و متغير من النوع المركب سجل طالب لتمثيل طلاب هذه الجامعة

ومتغير مركب يمثل الكادر التدريسي

وهكذا

ألقاكم على خير والسلام عليكم

يرجى الدخول لحسابك أو تسجيل حساب لتستطيع إضافة تعليق
حساب جديد دخول

التعليقات

شكرا لك أستاذ على كل الدروس بالفعل كانت توضيحية لدي سؤال بخصوص هذا الدرس:

في الدرس السابق ألحت على أهمية تحديد سعة التخزين ولكن في هذا الدرس نجد أن سعة التخزين للبيانات (معطيات) يكون تقريبا في أنماط مختلفة فهناك قيم عددية وأخرى نصية وأخرى من نوع تاريخ

السؤال هو : هل من الضروري أن يكون المعطى محددا مسبقا بسعته أم أن الحاسوب يتكفل بهذه المهمة ونقدم له فقط البيان ليحدد بنفسه السعة الممكنة للقيام بالأمر ؟

سبب هذا السؤال أنه بدا لي لو أنه العكس فستكون البرمجة شيئا عقيما إذ أنه في كل مرة نريد إدخال بيان نضطر فيها إلا تحديد السعة ... أتمنى أن تفهم سؤالي لأنني لم أعرف كيف أصيغه جيدا ... :)

السعة تحدد من البداية ولا يحتاج تعديلها كلما غيرنا القيمة

الأمر أشبه بوعاء الطبخ (طنجرة) فأنت كفرد لا يتطلب الأمر أن تستخدم وعاء ضخم كالذي يستخدم في المطاعم الكبيرة

حتى لو أدى الغرض ولكنه بالنسبة لك مربك حين تريد أن تنظفه وحين تريد أن تضعه على الرف

فقط يستخدم في حال الحاجة إليه مثلا كنت تعيش في منزل كبير يضم عدة عوائل وكان المطبخ واحد حينها لا ينفع وعاء صغير وتحتاج إلى الكبير

طبعا يوجد أنواع ديناميكية قابلة للتغير طبقا للحاجة ولكن هذا على حساب الوقت لأنه يحتاج فحص وإعادة تشكيل في كل مرة يتم تغير القيمة

الآن بعد أن أصبحت السعات التخزينية كبيرة وسريعة ورخيصة لم يعد مسألة تحديد السعات بالأمر المهم جدا وإنما التركيز على الأداء

أخي الكريم السلسلة لها تتمة عملية لكني توقفت هنا ظنا مني أن لا أحد يتابع لأنه لم يسألني أحد عن التتمة

فإن كنت متابع ويهمك الأمر حتى أتابع بتيسير الله

لأنه إن وجد ولو واحد متابع فواجب علي الإكمال

أما إن لم يوجد فهناك أمور أخرى أولى

وأخيرا انتهيت من قراءة السلسلة، وحسب تعليقك ترى بأنه من الأفضل لك التوقف، أعتقد أن هناك سببين لقلة المتابعين:

أن أغلب أعضاء المجتمع (النشطاء طبعا) يتقنون البرمجة، لذا فهم يتجاوزون الموضوع لأنه مستهلك في نظرهم.

حتى المبتدؤون (من طينتي) يتجنبون ردود الشكر، أعتقد لأنه مجتمع وليس منتدى.

أو خوفا من نظهر في القاع (فالمجتمع مليء بالمحترفين).

ولدي سؤال ^_^ في حالة استأنفت السلسلة (وهذا ما أتمناه).

سيكون التطبيق العملي على الفيجوال بيسك أم ستغيره للغة أخرى (فأنا مهتم بالبايثون)

وذلك كون هذه اللغة ذات مقروئية عالية وتعمل على عدة منصات

أعتقد وحسب

الحمد لله ،

وأرجو الله أن تكون قد استفدت جيدا .

بصراحة ليس لي معرفة بلغة بايثون و الدروس جاهزة لأني كما ذكرت في المقدمة أني كتبتها من أكثر من سنة

ويمكن في حال استأنفت طرح الدروس أن يتعاون معنا الأخ عبد المجيد ليطبق نفس الدروس على البايثون كما فعل في الحلقات الأخيرة السابقة

ودمت بخير

وقد استأنفت بالفعل

وأرجو من الأخ عبد المجيد (لو أجاب الدعوة) أن لا يطرح تطبيق الدرس بالبايثون في أول تعليق، حتى نقوم بالتجربة وبعدها يقوم بتصحيح أخطائنا البرمجية

أخي الغالي عبدالرحمن ..

جزاك الله خيراً لمساهماتك البناءة في المجتمع ....

أقترح عليك أن تنشر هذه السلسلة في كتاب موضحة بالكود ..

مع خالص حبي واحترامي

بوركت أخي

تعمدت أن يكون في الكلام في البداية مجردا من الكود للتركيز على المفهوم

والكود بدء بالفعل من درس 19 إلى 30 ثم انتقلنا للبرمجة مع الواجهات من 31 ومستمرين بعد أن وصلنا لل 33

أما عن توثيق السلسلة في كتاب إلكتروني فقد تكون خطوة قادمة عندما يسمح الوقت

إلا إذا وجد من يتطوع لعمل ذلك فله كامل السماحية لذلك

ودمت بخير

مقدمة السلسلة

الدرس السابق 16

الدرس التالي 18