الدرس 8 (موسع): المصفوفات أحادية البعد (المتجهات) وطرق الفرز
حتى الآن، كل متغير عرفناه كان قادرًا على حمل قيمة واحدة فقط في كل مرة. لكن ماذا لو أردنا التعامل مع 30 علامة للطلاب في قسم واحد؟ أو قائمة أسعار 100 منتج؟ تعريف 30 أو 100 متغير منفصل هو أمر غير عملي على الإطلاق. لحل هذه المشكلة، نقدم لكم أقوى أدوات تنظيم البيانات: المصفوفات (Arrays).
تشبيه: خزانة الملفات
تخيل أن لديك 50 وثيقة مهمة. يمكنك أن تبعثرها على مكتبك (مثل تعريف 50 متغيرًا منفصلاً)، أو يمكنك استخدام خزانة ملفات بها 50 درجًا مرقمًا من 1 إلى 50. هذه الخزانة هي "المصفوفة". لها اسم واحد ("خزانة قسم المحاسبة")، وتحتوي على أدراج مرقمة (الفهارس)، وكل درج يحمل وثيقة واحدة (عنصر). الوصول إلى أي وثيقة يصبح سهلاً ومنظمًا.
1. ما هي المصفوفة أحادية البعد (المتجه)؟
المصفوفة أحادية البعد (One-Dimensional Array)، وتسمى أيضًا المتجه (Vector) أو الجدول (Tableau)، هي بنية بيانات تسمح بتخزين مجموعة من العناصر من نفس النوع تحت اسم واحد. يتم الوصول إلى كل عنصر في المصفوفة من خلال رقم فريد يسمى الفهرس (Index).
الخاصيتان الأساسيتان:
- حجم ثابت (Fixed Size): عند تعريف المصفوفة، نحدد عدد العناصر التي يمكنها استيعابها، وهذا الحجم لا يتغير.
- نوع متجانس (Homogeneous Type): جميع العناصر المخزنة في المصفوفة يجب أن تكون من نفس نوع البيانات (كلها
Entier
، أو كلهاRéel
، أو كلهاChaîne de caractères
، إلخ).
2. تعريف (إعلان) مصفوفة
لإخبار الخوارزمية بأننا نريد حجز مساحة لمصفوفة، نستخدم صيغة تعريف خاصة.
الصيغة العامة:
nom_tableau
: الاسم الذي نطلقه على مصفوفتنا.TABLEAU [...] DE ...
: الكلمات المفتاحية التي تعرف بنية المصفوفة.taille_max
: عدد صحيح ثابت يمثل أقصى عدد من العناصر التي يمكن للمصفوفة استيعابها.type_des_elements
: نوع البيانات المشترك لجميع عناصر المصفوفة.
أمثلة على التعريف:
3. الوصول إلى عناصر المصفوفة والتعامل معها
يكمن سر قوة المصفوفات في كيفية الوصول إلى عناصرها. نستخدم اسم المصفوفة متبوعًا برقم الفهرس بين قوسين مربعين [ ]
. وكما ذكرنا، تبدأ الفهارس عادةً من 1.
nom_tableau[index]
يتصرف تمامًا مثل أي متغير عادي من نفس النوع.
أمثلة على التعامل مع العناصر:
4. العمليات الأساسية على المصفوفات (باستخدام الحلقات)
نادرًا ما نتعامل مع عنصر واحد فقط. القوة الحقيقية تظهر عند دمج المصفوفات مع الحلقات التكرارية لمعالجة جميع العناصر بشكل منهجي. هنا نستخدم متغير الحلقة (مثل i
) كفهرس للمصفوفة tableau[i]
.
أ. تعبئة وعرض مصفوفة
هاتان هما العمليتان الأكثر شيوعًا. نستخدم حلقة Pour
للمرور على جميع الفهارس من 1 إلى حجم المصفوفة.
خوارزمية لتعبئة وعرض 5 أعداد:
ب. البحث عن عنصر (البحث الخطي)
البحث الخطي (Linear Search) هو أبسط طريقة للبحث. نقوم بالمرور على عناصر المصفوفة واحدًا تلو الآخر ونقارنه بالقيمة التي نبحث عنها.
خوارزمية للبحث عن رقم في مصفوفة:
5. مقدمة في فرز المصفوفات (Sorting)
الفرز (أو الترتيب) هو عملية إعادة تنظيم عناصر مصفوفة وفقًا لترتيب معين (تصاعدي أو تنازلي). إنها من أشهر المشكلات في علوم الحاسوب وهناك العشرات من الخوارزميات لحلها. سنتعلم واحدة من أبسطها وأكثرها تعليمية: الفرز الفقاعي.
خوارزمية الفرز الفقاعي (Bubble Sort / Tri à bulles)
تعتمد فكرتها على مقارنة كل عنصر بالعنصر الذي يليه بشكل متكرر، وتبديل أماكنهما إذا لم يكونا في الترتيب الصحيح. مع كل مرور كامل على المصفوفة، "تطفو" أكبر قيمة (أو أصغر، حسب الترتيب) إلى مكانها الصحيح في النهاية، تمامًا مثل فقاعة الهواء في الماء.
آلية عمل الفرز الفقاعي:
- نستخدم حلقتين متداخلتين. الحلقة الخارجية تتحكم في عدد المرورات الكاملة على المصفوفة.
- الحلقة الداخلية تقوم بعملية المقارنة والتبديل بين العناصر المتجاورة.
- في كل دورة من الحلقة الداخلية، نقارن
T[j]
معT[j+1]
. إذا كانا في غير الترتيب (مثلاًT[j] > T[j+1]
في الفرز التصاعدي)، نقوم بتبديل قيمتيهما. - عملية التبديل (Swap) تتطلب متغيرًا مساعدًا (
temp
) للاحتفاظ بإحدى القيم مؤقتًا.
خوارزمية الفرز الفقاعي لترتيب مصفوفة تصاعديًا:
خلاصة الدرس الثامن
- المصفوفات أحادية البعد تسمح بتخزين مجموعة من العناصر من نفس النوع تحت اسم واحد.
- يتم الوصول لكل عنصر عبر فهرسه (
tableau[index]
)، مما يجعلها مثالية للاستخدام مع الحلقات التكرارية. - العمليات الشائعة تشمل التعبئة، العرض، حساب المجموع/المعدل، البحث، وإيجاد الأكبر/الأصغر.
- الفرز هو عملية ترتيب العناصر، والفرز الفقاعي هو خوارزمية بسيطة وفعالة تعليميًا لتحقيق ذلك.
- إتقان المصفوفات هو بوابة لفهم هياكل البيانات الأكثر تعقيدًا وقوة.