أخبار الموقع

المصفوفات (Tableaux) في لغة Pascal — أحادية وثنائية البعد — الثانية ثانوي (شعبة تقني رياضي) — الإعلام الآلي

📘 بطاقة الدرس

المادة الإعلام الآلي
المستوى الثانية ثانوي (شعبة تقني رياضي)
الوحدة البرمجة بلغة Pascal — المصفوفات (Tableaux)
المدة الزمنية 3 حصص (4 ساعات)
الأسبقيات هياكل التحكم (If, For, While, Repeat)

🎯 أهداف التعلم

  • التعرف على مفهوم المصفوفة (Tableau) في لغة Pascal
  • التصريح عن مصفوفة أحادية البعد وتعبئتها ومعالجتها
  • التصريح عن مصفوفة ثنائية البعد وتعبئتها ومعالجتها
  • استخدام الحلقات التكرارية في التعامل مع المصفوفات
  • حل تمارين بكالوريا باستخدام المصفوفات

💡 تمهيد

في الدروس السابقة تعلمنا كيفية التعامل مع المتغيرات البسيطة (Integer, Real, Char, Boolean)، حيث يمكن لكل متغير أن يخزّن قيمة واحدة فقط. ولكن ماذا لو أردنا تخزين 100 درجة لـ 100 طالب؟ هل سنصرّح عن 100 متغير منفصل؟ هذا غير عملي أبداً! هنا تأتي أهمية المصفوفات (Tableaux) التي تسمح بتخزين مجموعة من القيم من نفس النوع تحت اسم واحد، والوصول إليها باستخدام مؤشر (Index).

1. مفهوم المصفوفة (Tableau)

المصفوفة هي بنية بيانات (Structure de données) تتكون من مجموعة من العناصر من نفس النوع (Integer, Real, Char…)، تخزّن في أماكن متجاورة في الذاكرة ويتم الوصول إلى كل عنصر بواسطة مؤشر رقمي (Index).

الخاصية الوصف
النوع جميع العناصر من نفس النوع (متجانسة — Homogène)
الحجم عدد ثابت من العناصر يُحدّد عند التصريح
الترقيم يبدأ من 1 في Pascal (بعكس C/C++ حيث يبدأ من 0)
الوصول عبر اسم المصفوفة + المؤشر: NomTableau[Index]

2. المصفوفة أحادية البعد (Tableau à une dimension)

هي مصفوفة خطية تشبه قائمة (Liste) من العناصر. كل عنصر يُعرف بمؤشر واحد.

أ. التصريح عن مصفوفة أحادية البعد

يتم التصريح عن المصفوفة في قسم Var باستخدام الكلمة المفتاحية Array:

📝 الصيغة العامة للتصريح

Var
  NomTableau : Array[1..N] Of TypeElement;

حيث:

  • N: عدد العناصر (الحجم الأقصى للمصفوفة)
  • TypeElement: نوع العناصر (Integer, Real, Char, Boolean, String)

مثال عملي — التصريح عن مصفوفة من 10 أعداد صحيحة:

Program ExempleTableau;
Var
  Notes : Array[1..10] Of Integer;  { مصفوفة من 10 أعداد صحيحة }
  i     : Integer;                   { متغير الحلقة }
Begin
  { تعبئة المصفوفة }
  For i := 1 To 10 Do
  Begin
    Write('أدخل العنصر ', i, ': ');
    ReadLn(Notes[i]);
  End;

  { طباعة المصفوفة }
  WriteLn('عناصر المصفوفة:');
  For i := 1 To 10 Do
    Write(Notes[i], ' ');

  ReadLn;
End.

ب. العمليات الأساسية على المصفوفة أحادية البعد

1. التعبئة (Remplissage) — يدوياً من المستخدم:

For i := 1 To N Do
Begin
  Write('T[', i, '] = ');
  ReadLn(T[i]);
End;

2. التعبئة — بقيم عشوائية باستخدام Random:

Randomize;
For i := 1 To N Do
  T[i] := Random(100);  { قيم عشوائية بين 0 و 99 }

3. طباعة عناصر المصفوفة (Affichage):

For i := 1 To N Do
  Write(T[i], ' ');

4. البحث عن أكبر قيمة (Maximum):

Max := T[1];
For i := 2 To N Do
  If T[i] > Max Then
    Max := T[i];
WriteLn('أكبر قيمة هي: ', Max);

5. حساب مجموع العناصر (Somme):

Somme := 0;
For i := 1 To N Do
  Somme := Somme + T[i];
WriteLn('مجموع العناصر = ', Somme);
WriteLn('المعدل = ', Somme / N:0:2);

3. المصفوفة ثنائية البعد (Tableau à deux dimensions)

المصفوفة ثنائية البعد تشبه جدولاً (Tableau / Matrice) يتكون من صفوف (Lignes) وأعمدة (Colonnes). كل عنصر يُعرف بمؤشرين: T[Ligne, Colonne].

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

Var
  NomMatrice : Array[1..L, 1..C] Of TypeElement;

حيث:

  • L: عدد الصفوف (Lignes)
  • C: عدد الأعمدة (Colonnes)
  • TypeElement: نوع العناصر

مثال عملي — مصفوفة 3×4 (3 صفوف و 4 أعمدة):

Program Matrice3x4;
Const
  L = 3;
  C = 4;
Var
  M : Array[1..L, 1..C] Of Integer;
  i, j : Integer;
Begin
  { تعبئة المصفوفة — حلقتان متداخلتان }
  For i := 1 To L Do
    For j := 1 To C Do
    Begin
      Write('M[', i, ',', j, '] = ');
      ReadLn(M[i, j]);
    End;

  { طباعة المصفوفة — على شكل جدول }
  WriteLn('المصفوفة:');
  For i := 1 To L Do
  Begin
    For j := 1 To C Do
      Write(M[i, j]:4);
    WriteLn;  { سطر جديد بعد كل صف }
  End;

  ReadLn;
End.

أ. العمليات الأساسية على المصفوفة ثنائية البعد

1. ملء المصفوفة بقيم عشوائية بين 10 و 50:

Randomize;
For i := 1 To L Do
  For j := 1 To C Do
    M[i, j] := 10 + Random(41);  { قيم بين 10 و 50 }

2. حساب مجموع عناصر مصفوفة:

Somme := 0;
For i := 1 To L Do
  For j := 1 To C Do
    Somme := Somme + M[i, j];
WriteLn('مجموع كل العناصر = ', Somme);

3. إيجاد أكبر قيمة في مصفوفة:

Max := M[1, 1];
For i := 1 To L Do
  For j := 1 To C Do
    If M[i, j] > Max Then
      Max := M[i, j];
WriteLn('أكبر قيمة في المصفوفة = ', Max);

4. ✏️ تمرين بكالوريا محلول — المصفوفات أحادية البعد

📌 التمرين (من مواضيع بكالوريا تقني رياضي)

المعطيات: لديك مصفوفة T من N عدداً صحيحاً (1 < N ≤ 100).

المطلوب: كتابة برنامج Pascal يقوم بما يلي:

  1. إدخال عدد العناصر N وعناصر المصفوفة T.
  2. حساب وعرض مجموع العناصر الزوجية في المصفوفة.
  3. حساب وعرض عدد العناصر الفردية (الأعداد التي لا تقبل القسمة على 2).
  4. عرض المصفوفة بعد ترتيبها تصاعدياً (اختياري: استخدم خوارزمية الفرز الفقاعي).
🟢 انقر هنا لرؤية الحل الكامل
Program ExerciceBac;
Var
  T : Array[1..100] Of Integer;
  N, i, j, SommePair, NbImpair, Temp : Integer;
Begin
  { 1. إدخال عدد العناصر }
  Repeat
    Write('أدخل عدد العناصر (2 إلى 100): ');
    ReadLn(N);
  Until (N > 1) And (N <= 100);

  { 2. إدخال عناصر المصفوفة }
  For i := 1 To N Do
  Begin
    Write('T[', i, '] = ');
    ReadLn(T[i]);
  End;

  { 3. حساب مجموع العناصر الزوجية }
  SommePair := 0;
  For i := 1 To N Do
    If T[i] Mod 2 = 0 Then
      SommePair := SommePair + T[i];
  WriteLn('مجموع العناصر الزوجية = ', SommePair);

  { 4. حساب عدد العناصر الفردية }
  NbImpair := 0;
  For i := 1 To N Do
    If T[i] Mod 2 <> 0 Then
      NbImpair := NbImpair + 1;
  WriteLn('عدد العناصر الفردية = ', NbImpair);

  { 5. ترتيب المصفوفة تصاعدياً — Bubble Sort }
  For i := 1 To N - 1 Do
    For j := 1 To N - i Do
      If T[j] > T[j + 1] Then
      Begin
        Temp := T[j];
        T[j] := T[j + 1];
        T[j + 1] := Temp;
      End;

  { 6. عرض المصفوفة مرتبة }
  Write('المصفوفة بعد الترتيب: ');
  For i := 1 To N Do
    Write(T[i], ' ');
  WriteLn;

  ReadLn;
End.

🔍 الشرح:

  • استخدمنا Repeat..Until للتحقق من أن N بين 2 و 100.
  • استخدمنا العملية Mod للتحقق من الزوجية (T[i] Mod 2 = 0 يعني أن العدد زوجي).
  • طبقنا خوارزمية الفرز الفقاعي (Bubble Sort) لحلقة مزدوجة لترتيب العناصر.
  • قمنا بتبديل قيمتين باستخدام متغير مؤقت Temp.

📌 التمرين 2 — المصفوفات ثنائية البعد (بكالوريا)

أكتب برنامج Pascal يُنشئ مصفوفة ثنائية البعد M من L صفوفاً و C أعمدة (3 ≤ L,C ≤ 10)، يملؤها بقيم عشوائية بين 1 و 100، ثم يقوم بما يلي:

  1. عرض المصفوفة على شكل جدول.
  2. حساب وعرض مجموع عناصر كل صف على حدة.
  3. إيجاد وعرض أكبر قيمة في المصفوفة وموقعها (رقم الصف ورقم العمود).
🟢 انقر هنا لرؤية الحل
Program MatriceAleatoire;
Const
  L = 4;
  C = 5;
Var
  M : Array[1..L, 1..C] Of Integer;
  i, j, Max, LigneMax, ColMax : Integer;
Begin
  Randomize;

  { تعبئة المصفوفة بقيم عشوائية }
  For i := 1 To L Do
    For j := 1 To C Do
      M[i, j] := 1 + Random(100);

  { 1. عرض المصفوفة }
  WriteLn('المصفوفة:');
  For i := 1 To L Do
  Begin
    For j := 1 To C Do
      Write(M[i, j]:4);
    WriteLn;
  End;

  { 2. مجموع كل صف }
  WriteLn;
  For i := 1 To L Do
  Begin
    Max := 0;  { نستخدم Max مؤقتاً كمجموع }
    For j := 1 To C Do
      Max := Max + M[i, j];
    WriteLn('مجموع الصف ', i, ' = ', Max);
  End;

  { 3. أكبر قيمة وموقعها }
  Max := M[1, 1];
  LigneMax := 1;
  ColMax := 1;
  For i := 1 To L Do
    For j := 1 To C Do
      If M[i, j] > Max Then
      Begin
        Max := M[i, j];
        LigneMax := i;
        ColMax := j;
      End;
  WriteLn;
  WriteLn('أكبر قيمة = ', Max, ' في الصف ', LigneMax, ' والعمود ', ColMax);

  ReadLn;
End.

📋 ملخص الدرس — المصفوفات في Pascal

  • المصفوفة أحادية البعد (Tableau 1D): تُصرّح بـ Array[1..N] Of Type، وتُعامل كقائمة خطية.
  • المصفوفة ثنائية البعد (Tableau 2D): تُصرّح بـ Array[1..L, 1..C] Of Type، وتُعامل كجدول بصفوف وأعمدة.
  • الوصول إلى العناصر يتم باستخدام المؤشر: Nom[Index] للمصفوفة أحادية البعد، و Nom[L, C] لثنائية البعد.
  • للمعالجة نستخدم حلقة واحدة مع المصفوفات أحادية البعد، و حلقتين متداخلتين مع المصفوفات ثنائية البعد.
  • المصفوفات أساسية في خوارزميات الفرز والبحث ومعالجة البيانات في البكالوريا.

📍 دروس مشابهة:

شاهد أيضا

الإحصاء في الرياضيات: المجتمع، العينة، التواتر، التكرار — الثانية ثانوي

الإحصاء في الرياضيات: المجتمع، العينة، التواتر، التكرار — الثانية ثانوي أهداف الدرس: فهم المفاهيم الأساسية …

التنسيق الوظيفي عند النبات: الهرمونات النباتية والاستجابات — الثانية ثانوي علوم طبيعة وحياة

التنسيق الوظيفي عند النبات: الهرمونات النباتية والاستجابات — الثانية ثانوي أهداف الدرس: فهم مفهوم التنسيق …

مشكلة المعرفة بين العقل والتجربة: العقلانية والتجريبية — الثالثة ثانوي (بكالوريا) فلسفة

مشكلة المعرفة بين العقل والتجربة: العقلانية والتجريبية — فلسفة — بكالوريا أهداف الدرس: فهم طبيعة …

Conditional Sentences (If-clauses): Types 0, 1, 2, 3 — 3rd Year Secondary School (Bac) English

Conditional Sentences (If-clauses): Types 0, 1, 2, 3 — Bac English Lesson Objectives: Understand the …

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *