in ,

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

أشرنا في مقال سابق عن وجوب تحديد البنى المناسبة لتخزين البيانات أثناء العمل، وتحدّثنا عن أبسط بنى التخزين: ” المصفوفة أحادية البعد

لكن المصفوفات ليست فقط أحادية البعد، أي ليست مجرّد شعاع. يمكن أن تكون متعددة الأبعاد، والنمط الأكثر استخداماً هو المصفوفة ذات البعد الثنائي.

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

كما قلنا في تعريف المصفوفة أحادية البعد أنها مجموعة من المتغيرات المفهرسة تحوي عناصر من النوع نفسه، المصفوفة ثنائية البعد هي كذلك، لكن تخزين البيانات يكون بنمط مُجدوَل يحتوي على صفوف وأعمدة.

كيف يمكن الوصول إلى عناصر المصفوفة؟

يمكن الوصول إلى أحد عناصر المصفوفة عن طريق الدليل index أي موقع العنصر في المصفوفة (رقم الخانة التي تحوي العنصر)، لكن طريقة تحديد الخانة هنا مختلفة.

لنفترض مصفوفة حجمها (3 في 5)  أي 3 صفوف و 5 أعمدة، ويمكن تعميم هذا الترميز بالشكل ( N x M)، إذْ تُرقّم الأسطر من 0 حتى N-1، أما الأعمدة فتُرقّم من 0 حتى M-1( N عدد الأسطر و M  عدد الأعمدة).

يمكن الوصول إلى أي عنصر من عناصر المصفوفة( ولتكن arr) عبر تحديد موقع الخانة التي تحوي العنصر من خلال الأدلة i وj بالشكل التالي:

 arr[i][j]

حيث

0 <= i < N ،و0 <= j < M

(أي: i هو الدليل على الأسطر وj هو الدليل على الأعمدة) ،مثلاً، ضمن المصفوفة أدناه، القيمة المخزنة في الخانة

  arr[1][3]

هي 14، ستتضح الفكرة بعد قليل.

كيف يتم التصريح عن المصفوفة:

يتم التصريح عن المصفوفة بحجز مكان لها في الذاكرة باسم معيّن، وتحديد نمط المعطيات المُراد تخزينها، وتحديد حجمها( عدد العناصر) بتعيين عدد الصفوف وعدد الأعمدة.

نأخذ كمثال على التصريح عن المصفوفة بلغة C++:

int arr[3][5];

انظر المصفوفة أعلاه.

ماذا عن تهيئة المصفوفة؟

يجب ملئ المصفوفة بالبيانات المُراد معالجتها، يمكن ذلك بأسلوبين، إما أثناء التصريح عن المصفوفة، أو بعده، فلنرى كيف بمثال..

** تهيئة المصفوفة أثناء التصريح عنها :

https://gist.github.com/YassineBajdou/14adbd14939b4154930c7c902a59c40f

** تعبئة المصفوفة بعد التصريح عنها :

https://gist.github.com/YassineBajdou/c954082d42dbf60ef657aa947e3c0220

إحدى العمليات الأساسية على المصفوفات، قراءة عناصر المصفوفة باستخدام حلقة for، لكن باستخدام حلقتين for  متداخلين، للمرور على أدلة الأسطر والأعمدة. أو يمكن الوصول إلى عنصرٍ معين عبر الدليل الذي يُحدد موقعه ضمنها، كما وضّحنا سابقاً.

for i from 0 to row_size

    for j from 0 to column_size

        print arr[i][j]

هذا الكود يقوم بطباعة عناصر المصفوفة، عناصر السطر الأول ثم عناصر السطر الثاني، وهكذا.

مثال كامل بلغة C++ عن كل ما سبق:

https://gist.github.com/YassineBajdou/97cbe93b99971e0463057d36cce2747c

  • إعداد: صامد الحجاجلة.
  • مراجعة: نور عبدو.
  • تدقيق لغوي: مروى بوسطه جي.

اترك تعليقاً

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

قدرات خارقة: تمساح النيل

العُقال: تاريخ موجز للبشرية