الدرس 9 : المصفوفات ثنائية البعد (المصفوفات/الجداول)

الدرس 9 (موسع): المصفوفات ثنائية البعد (المصفوفات/الجداول)
الدرس 9 : المصفوفات ثنائية البعد (المصفوفات/الجداول)

الدرس 9 (موسع): المصفوفات ثنائية البعد (المصفوفات/الجداول)

في الدرس السابق، تعلمنا كيف ننظم البيانات في قائمة أحادية البعد (متجه). الآن، سنتقدم خطوة للأمام ونتعلم كيف ننظم البيانات في شكل جدول له صفوف وأعمدة. هذا هو عالم المصفوفات ثنائية البعد، أو كما تسمى أحيانًا المصفوفات (Matrices). هذا المفهوم ضروري لتمثيل أي بيانات لها هيكل جدولي.

تشبيه: جدول الحصص المدرسي أو شاشة السينما

فكر في جدول الحصص الأسبوعي. لتحديد حصة معينة، تحتاج إلى معلومتين: اليوم (الصف) والساعة (العمود). لا يمكنك تحديدها بمعلومة واحدة فقط. وبالمثل، فكر في مقاعد السينما. لتحديد مقعدك، تحتاج إلى رقم الصف ورقم المقعد في ذلك الصف. هذه هي بالضبط فكرة المصفوفة ثنائية البعد: كل عنصر يتم تحديده بزوج من الفهارس (صف، عمود).

1. ما هي المصفوفة ثنائية البعد؟

المصفوفة ثنائية البعد (Two-Dimensional Array / Matrice): هي بنية بيانات يمكن تخيلها على أنها جدول يتكون من M من الصفوف (Lignes) و N من الأعمدة (Colonnes). مثل المصفوفة أحادية البعد، جميع عناصرها يجب أن تكون من نفس نوع البيانات.

بشكل أساسي، يمكن اعتبارها "مصفوفة من المصفوفات". كل صف في الجدول هو في حد ذاته مصفوفة أحادية البعد.

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

صيغة التعريف تشبه تلك الخاصة بالمصفوفة أحادية البعد، لكننا نحدد حجمين بدلاً من حجم واحد.

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

Variables     nom_matrice : TABLEAU [nb_lignes, nb_colonnes] DE type_des_elements
  • nb_lignes: أقصى عدد من الصفوف.
  • nb_colonnes: أقصى عدد من الأعمدة.

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

// مصفوفة لتخزين علامات 20 طالبًا في 5 مواد // 20 صفًا (طالب)، 5 أعمدة (مادة) bulletin : TABLEAU [20, 5] DE Réel // مصفوفة لتمثيل لوحة لعبة تيك-تاك-تو (3x3) jeu_tictactoe : TABLEAU [3, 3] DE Caractère // ستخزن 'X', 'O' أو ' '

3. الوصول إلى عناصر المصفوفة ثنائية البعد

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

الصيغة هي: nom_matrice[index_ligne, index_colonne].

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

// إسناد العلامة 15 للطالب رقم 5 في المادة رقم 2 bulletin[5, 2] ← 15.0 // وضع علامة 'X' في الخانة الوسطى للعبة (الصف 2، العمود 2) jeu_tictactoe[2, 2] ← 'X' // قراءة قيمة ووضعها في الخانة الأولى (الصف 1، العمود 1) Lire(bulletin[1, 1]) // عرض قيمة عنصر Écrire(jeu_tictactoe[2, 2])

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

هنا تكمن القوة الحقيقية. بما أن لدينا بُعدين (صفوف وأعمدة)، فإننا نحتاج إلى حلقتين متداخلتين (Nested Loops) للمرور على جميع عناصر المصفوفة.

  • الحلقة الخارجية: عادة ما تمر على الصفوف (من 1 إلى عدد الصفوف).
  • الحلقة الداخلية: تمر على جميع الأعمدة داخل الصف الحالي (من 1 إلى عدد الأعمدة).

تعبئة وعرض مصفوفة ثنائية البعد

خوارزمية لتعبئة وعرض مصفوفة 3x4:

Algorithme RemplirAfficherMatrice Constantes     NB_LIGNES = 3     NB_COLONNES = 4 Variables     M : TABLEAU [NB_LIGNES, NB_COLONNES] DE Entier     i, j : Entier // i للصفوف, j للأعمدة Début     // --- مرحلة التعبئة (القراءة) ---     Pour i AllantDe 1 A NB_LIGNES Faire // الحلقة الخارجية على الصفوف         Pour j AllantDe 1 A NB_COLONNES Faire // الحلقة الداخلية على الأعمدة             Écrire("أدخل العنصر في الصف ", i, " والعمود ", j, ": ")             Lire(M[i, j])         FinPour     FinPour          // --- مرحلة العرض (الكتابة) بشكل جدولي ---     Écrire("المصفوفة التي أدخلتها هي:")     Pour i AllantDe 1 A NB_LIGNES Faire         // في بداية كل صف، نكتب عناصره في نفس السطر         Pour j AllantDe 1 A NB_COLONNES Faire             ÉcrireSansRetour(M[i, j], " ") // اكتب العنصر ومسافة بجانبه         FinPour         Écrire("") // بعد انتهاء كل صف، ننتقل إلى سطر جديد     FinPour Fin

ملاحظة: استخدمنا هنا تعليمة افتراضية ÉcrireSansRetour لطباعة العناصر بجانب بعضها البعض. Écrire("") تستخدم للنزول إلى سطر جديد بعد طباعة كل صف، للحصول على شكل جدولي أنيق.

5. تطبيق عملي: حساب معدل كل طالب في مصفوفة العلامات

لنفترض أن لدينا مصفوفة العلامات bulletin[20, 5]. نريد حساب معدل كل طالب (كل صف) على حدة.

خوارزمية حساب معدلات الطلاب:

Algorithme CalculMoyennesEtudiants // ... نفترض أن المصفوفة bulletin مملوءة مسبقًا ... Variables     i, j : Entier     somme_notes, moyenne_etudiant : Réel Début     // نمر على كل طالب (كل صف)     Pour i AllantDe 1 A 20 Faire         somme_notes ← 0 // نصفر المجموع لكل طالب جديد                  // نجمع علامات هذا الطالب (نمر على جميع أعمدة الصف i)         Pour j AllantDe 1 A 5 Faire             somme_notes ← somme_notes + bulletin[i, j]         FinPour                  // نحسب ونعرض معدل الطالب الحالي         moyenne_etudiant ← somme_notes / 5         Écrire("معدل الطالب رقم ", i, " هو: ", moyenne_etudiant)     FinPour Fin

خلاصة الدرس التاسع

  • المصفوفات ثنائية البعد تنظم البيانات في شكل جدول من صفوف وأعمدة.
  • يتم تعريفها بتحديد عدد الصفوف وعدد الأعمدة: TABLEAU [lignes, colonnes].
  • للوصول إلى عنصر، نحتاج إلى فهرسين: واحد للصف والآخر للعمود (matrice[i, j]).
  • التعامل مع جميع عناصر المصفوفة يتطلب عادةً حلقتين متداخلتين، واحدة للصفوف والأخرى للأعمدة.
  • هذا المفهوم أساسي لتمثيل البيانات الجدولية، الصور، الخرائط، وغيرها من الهياكل ثنائية الأبعاد.
google-playkhamsatmostaqltradent