أهلاً وسهلاً بكم في الدرس السادس عشر من دورة تعلم لغة البرمجة C . شرحنا في الدرس السابق مقدمة عن موضوع المصفوفات وتعرفنا على أنواعها وشرحنا النوع الاول منها ( مصفوفات احادية البعد ) , وهنا في هذا الدرس سنكمل موضوع المصفوفات ونتعرف على النوع الثاني منها وهي المصفوفات متعددة الأبعاد .
إن المصفوفات متعددة الابعاد Multidimensional arrays كما واضح من إسمها فهي تتكون من اكثر من بعد واحد لذلك فأن طريقة تعريفها تكون بالشكل التالي :
data type array name[size1][size2].......[sizeN];
وفي هذا الدرس والدروس القادمة سنأخذ المصفوفة ثنائية البعد كمثال لمصفوفة متعددة الأبعاد لانها الاكثر إستعمالاُ من غيرها وسيتم شرحها وشرح كل مايتعلق بها بالتفصيل .
المصفوفات ثنائية الابعاد :
هي أسهل وأبسط مثال للمصفوفات متعددة الأبعاد . لانها تتكون من بعدين فقط x , y أو يمكن تسميتها أيضا بالصفوف والأعمدة .
طريقة تعريف مصفوفة ثنائية تكون بالصيغة التالية :
type arrayName [ x ][ y ];
حيث أن :
type : يشير ويمثل نوع البيانات ونوع المصفوفة فقد تكون ( int,float,double,string ) .
arrayName : يشير الى إسم المصفوفة ويمكن أن يكون أي إسم حسب رغبتك لكنه يخضع لشروط تسمية المتغيرات التي سبق شرحها .
x : تكون قيمته رقم ويمثل عدد صفوف المصفوفة .
y : تكون قيمته رقم ويمثل عدد أعمدة المصفوفة .
فمثلا نريد أن نقوم بتعريف مصفوفة من نوع العدد الصحيح وإسمها a وتتكون من 3 صفوف و 4 اعمدة فالتعريف يكون بالشكل التالي :
int a [ 3 ][ 4 ];
إذن المصفوفة اعلاه هي مثال لمصفوفة ثنائية البعد تتكون من ثلاث صفوف وأربع أعمدة وعدد عناصرها تساوي 12 عنصر , أي نقوم بعملية ضرب عدد الصفوف * عدد الأعمدة .
ذكرنا في الدرس السابق إن المصفوفة تحجز في الذاكرة مجموعة من الأماكن الخالية ويمكننا إعتبار كل عنصر من عناصر المصفوفة كأنه متغير ومن الأساس فأن المصفوفات وجدت للتقليل من عدد المتغيرات في البرامج الطويلة .
لذلك يمكننا تمثيل المصفوفة أعلاه والتي تتكون من ثلاث صفوف وأربع أعمدة بالشكل التالي :
في الذاكرة فأن المصفوفة الثنائية تتمثل كما في الصورة . لذلك يمكننا التعامل مع المصفوفة ككل أو التعامل مع كل عنصر من عناصر المصفوفة لوحده .
طريقة إعطاء قيم لعناصر المصفوفة :
إن إعطاء قيم لعناصر المصفوفة الثنائية يتشابه مع المصفوفة الاحادية كما شرحنا في الدرس السابق , ويتم بطريقتين أما من قبل المبرمج أي أن يعطي قيم ابتدائية لعناصر مصفوفته أو يتم عن طريق إدخال القيم عن طريق مستخدم البرنامج ويتم بإستخدام أدوات التكرار وجملة for ولكن الاختلاف هنا إن جملة for سيتم إستخدامها مرتين واحدة بداخل الاخرى لكي نستطيع تمثيل البعدين . وكلما زادت الابعاد إزدادت بقدرها جمل for .
يمكن إعطاء قيم لعناصر المصفوفة بعدة طرق حيث نستطيع إعطاء قيم لكل عنصر لوحدة وبالشكل التالي :
a [0 ][0 ] = 3;
a [1][ 0 ]= 5;
a [ 2][ 0]= 1;
وهكذا بالنسبة لبقية العناصر أي أن تتكرر 12 مرة . وهي طريقة مزعجة وطويلة ويمكن إعطاء القيم بالشكل التالي والاسهل :
int a[3][4] = {
{0, 1, 2, 3} , // السطر الاول
{4, 5, 6, 7} , // السطر الثاني
{8, 9, 10, 11 } }; // السطر الثالث
أو يمكن أن يكون إعطاء القيم بسطر واحد كالتالي :
int a[3][4] = { {0, 1, 2, 3} , {4, 5, 6, 7} , {8, 9, 10, 11} };
أما طريقة إدخال قيم المصفوفة عن طريق المستخدم فيتم بإستخدام إسلوب nested for اي جملة for متداخلة وستستخدمها مرتين لان المصفوفة تتكون من بعدين . وكذلك عملية الطباعة للمصفوفة فهي حالها حال الادخال ومثلها تماماً والاختلاف الوحيد هو استخدام دالة الطباعة printf في حين نستخدم للإدخال جملة scanf . وسيتم التوضيح عن طريق البرامج التالية :
مثال برمجي : برنامج لتعريف مصفوفة تتكون من 5 صفوف و 2 عمود وإعطائها قيم وثم طباعتها .
مثال برمجي 2 : برنامج لإدخال مصفوفة عن طريق المستخدم وطباعتها .
المربع الاخضر في الكود يمثل طريقة عمل قراءة للمصفوفة ثنائية البعد وإدخال قيمها من قبل المستخدم وهي ثابتة في كل البرامج بإستثناء حجم المصفوفة هو الذي يتغير ويتغير معه قيمة العداد الخاص بجملة for الاولى والذي يجب ان يكون نفس عدد الصفوف وجملة for الثانية الداخلية والذي يكون خاص بالاعمدة .
أما المربع الاحمر من الكود فهو خاص بجملة الطباعة للمصفوفة والطريقة ايضا ثابتة في جميع المصفوفات وينطبق عليها كل الكلام السابق .
الى هنا نأتي الى ختام هذا الدرس .
نلتقي في الدرس القادم