الدرس 8 : المصفوفات أحادية البعد (المتجهات) وطرق الفرز

الدرس 8 (موسع): المصفوفات أحادية البعد (المتجهات) وطرق الفرز

الدرس 8 (موسع): المصفوفات أحادية البعد (المتجهات) وطرق الفرز

حتى الآن، كل متغير عرفناه كان قادرًا على حمل قيمة واحدة فقط في كل مرة. لكن ماذا لو أردنا التعامل مع 30 علامة للطلاب في قسم واحد؟ أو قائمة أسعار 100 منتج؟ تعريف 30 أو 100 متغير منفصل هو أمر غير عملي على الإطلاق. لحل هذه المشكلة، نقدم لكم أقوى أدوات تنظيم البيانات: المصفوفات (Arrays).

تشبيه: خزانة الملفات

تخيل أن لديك 50 وثيقة مهمة. يمكنك أن تبعثرها على مكتبك (مثل تعريف 50 متغيرًا منفصلاً)، أو يمكنك استخدام خزانة ملفات بها 50 درجًا مرقمًا من 1 إلى 50. هذه الخزانة هي "المصفوفة". لها اسم واحد ("خزانة قسم المحاسبة")، وتحتوي على أدراج مرقمة (الفهارس)، وكل درج يحمل وثيقة واحدة (عنصر). الوصول إلى أي وثيقة يصبح سهلاً ومنظمًا.

1. ما هي المصفوفة أحادية البعد (المتجه)؟

المصفوفة أحادية البعد (One-Dimensional Array)، وتسمى أيضًا المتجه (Vector) أو الجدول (Tableau)، هي بنية بيانات تسمح بتخزين مجموعة من العناصر من نفس النوع تحت اسم واحد. يتم الوصول إلى كل عنصر في المصفوفة من خلال رقم فريد يسمى الفهرس (Index).

الخاصيتان الأساسيتان:

  1. حجم ثابت (Fixed Size): عند تعريف المصفوفة، نحدد عدد العناصر التي يمكنها استيعابها، وهذا الحجم لا يتغير.
  2. نوع متجانس (Homogeneous Type): جميع العناصر المخزنة في المصفوفة يجب أن تكون من نفس نوع البيانات (كلها Entier، أو كلها Réel، أو كلها Chaîne de caractères، إلخ).

2. تعريف (إعلان) مصفوفة

لإخبار الخوارزمية بأننا نريد حجز مساحة لمصفوفة، نستخدم صيغة تعريف خاصة.

الصيغة العامة:

Variables     nom_tableau : TABLEAU [taille_max] DE type_des_elements
  • nom_tableau: الاسم الذي نطلقه على مصفوفتنا.
  • TABLEAU [...] DE ...: الكلمات المفتاحية التي تعرف بنية المصفوفة.
  • taille_max: عدد صحيح ثابت يمثل أقصى عدد من العناصر التي يمكن للمصفوفة استيعابها.
  • type_des_elements: نوع البيانات المشترك لجميع عناصر المصفوفة.

أمثلة على التعريف:

// مصفوفة لتخزين علامات 30 طالبًا notes_classe : TABLEAU [30] DE Réel // مصفوفة لتخزين أسماء 5 فائزين gagnants : TABLEAU [5] DE Chaîne de caractères

3. الوصول إلى عناصر المصفوفة والتعامل معها

يكمن سر قوة المصفوفات في كيفية الوصول إلى عناصرها. نستخدم اسم المصفوفة متبوعًا برقم الفهرس بين قوسين مربعين [ ]. وكما ذكرنا، تبدأ الفهارس عادةً من 1.

nom_tableau[index] يتصرف تمامًا مثل أي متغير عادي من نفس النوع.

أمثلة على التعامل مع العناصر:

// إسناد قيمة للعنصر الثالث في مصفوفة العلامات notes_classe[3] ← 17.5 // قراءة قيمة من المستخدم ووضعها في العنصر الأول Écrire("أدخل اسم الفائز الأول: ") Lire(gagnants[1]) // استخدام قيمة عنصر في عملية حسابية note_double ← notes_classe[3] * 2 // عرض قيمة عنصر Écrire("الفائز الثاني هو: ", gagnants[2])

4. العمليات الأساسية على المصفوفات (باستخدام الحلقات)

نادرًا ما نتعامل مع عنصر واحد فقط. القوة الحقيقية تظهر عند دمج المصفوفات مع الحلقات التكرارية لمعالجة جميع العناصر بشكل منهجي. هنا نستخدم متغير الحلقة (مثل i) كفهرس للمصفوفة tableau[i].

أ. تعبئة وعرض مصفوفة

هاتان هما العمليتان الأكثر شيوعًا. نستخدم حلقة Pour للمرور على جميع الفهارس من 1 إلى حجم المصفوفة.

خوارزمية لتعبئة وعرض 5 أعداد:

Algorithme RemplirAfficherTableau Variables     T : TABLEAU [5] DE Entier     i : Entier Début     // --- مرحلة التعبئة (القراءة) ---     Écrire("الرجاء إدخال 5 أعداد صحيحة:")     Pour i AllantDe 1 A 5 Faire         Écrire("أدخل العنصر رقم ", i, ": ")         Lire(T[i]) // قراءة القيمة في الخانة i     FinPour          // --- مرحلة العرض (الكتابة) ---     Écrire("عناصر المصفوفة التي أدخلتها هي:")     Pour i AllantDe 1 A 5 Faire         Écrire(T[i])     FinPour Fin

ب. البحث عن عنصر (البحث الخطي)

البحث الخطي (Linear Search) هو أبسط طريقة للبحث. نقوم بالمرور على عناصر المصفوفة واحدًا تلو الآخر ونقارنه بالقيمة التي نبحث عنها.

خوارزمية للبحث عن رقم في مصفوفة:

Algorithme RechercheLineaire // ... نفترض أن المصفوفة T معرفة ومملوءة مسبقًا ... Variables     val_recherchee, i : Entier     trouve : Booléen Début     Écrire("ما هي القيمة التي تبحث عنها؟")     Lire(val_recherchee)          trouve ← Faux // نفترض أننا لم نجده بعد (نرفع علمًا كاذبًا)     Pour i AllantDe 1 A 5 Faire         Si (T[i] = val_recherchee) Alors             trouve ← Vrai // وجدناه! نرفع علمًا صحيحًا         FinSi     FinPour          Si (trouve = Vrai) Alors         Écrire("القيمة موجودة في المصفوفة.")     Sinon         Écrire("القيمة غير موجودة.")     FinSi Fin

5. مقدمة في فرز المصفوفات (Sorting)

الفرز (أو الترتيب) هو عملية إعادة تنظيم عناصر مصفوفة وفقًا لترتيب معين (تصاعدي أو تنازلي). إنها من أشهر المشكلات في علوم الحاسوب وهناك العشرات من الخوارزميات لحلها. سنتعلم واحدة من أبسطها وأكثرها تعليمية: الفرز الفقاعي.

خوارزمية الفرز الفقاعي (Bubble Sort / Tri à bulles)

تعتمد فكرتها على مقارنة كل عنصر بالعنصر الذي يليه بشكل متكرر، وتبديل أماكنهما إذا لم يكونا في الترتيب الصحيح. مع كل مرور كامل على المصفوفة، "تطفو" أكبر قيمة (أو أصغر، حسب الترتيب) إلى مكانها الصحيح في النهاية، تمامًا مثل فقاعة الهواء في الماء.

آلية عمل الفرز الفقاعي:

  1. نستخدم حلقتين متداخلتين. الحلقة الخارجية تتحكم في عدد المرورات الكاملة على المصفوفة.
  2. الحلقة الداخلية تقوم بعملية المقارنة والتبديل بين العناصر المتجاورة.
  3. في كل دورة من الحلقة الداخلية، نقارن T[j] مع T[j+1]. إذا كانا في غير الترتيب (مثلاً T[j] > T[j+1] في الفرز التصاعدي)، نقوم بتبديل قيمتيهما.
  4. عملية التبديل (Swap) تتطلب متغيرًا مساعدًا (temp) للاحتفاظ بإحدى القيم مؤقتًا.

خوارزمية الفرز الفقاعي لترتيب مصفوفة تصاعديًا:

Algorithme TriABulles // ... نفترض أن المصفوفة T بحجم N مملوءة مسبقًا ... Variables     i, j, temp : Entier // temp هو المتغير المساعد للتبديل Début     // الحلقة الخارجية للمرور على المصفوفة N-1 مرة     Pour i AllantDe 1 A N-1 Faire         // الحلقة الداخلية لمقارنة العناصر المتجاورة         Pour j AllantDe 1 A N-i Faire             Si (T[j] > T[j+1]) Alors // إذا كان العنصر أكبر من الذي يليه                 // -- عملية التبديل (Swap) --                 temp ← T[j]                 T[j] ← T[j+1]                 T[j+1] ← temp             FinSi         FinPour     FinPour          // الآن المصفوفة T مرتبة، يمكننا عرضها للتحقق Fin

خلاصة الدرس الثامن

  • المصفوفات أحادية البعد تسمح بتخزين مجموعة من العناصر من نفس النوع تحت اسم واحد.
  • يتم الوصول لكل عنصر عبر فهرسه (tableau[index])، مما يجعلها مثالية للاستخدام مع الحلقات التكرارية.
  • العمليات الشائعة تشمل التعبئة، العرض، حساب المجموع/المعدل، البحث، وإيجاد الأكبر/الأصغر.
  • الفرز هو عملية ترتيب العناصر، والفرز الفقاعي هو خوارزمية بسيطة وفعالة تعليميًا لتحقيق ذلك.
  • إتقان المصفوفات هو بوابة لفهم هياكل البيانات الأكثر تعقيدًا وقوة.
google-playkhamsatmostaqltradent