Programming Basics SQL HTML CSS JavaScript React Python C++ Java JavaFX Swing Problem Solving English English Conversations Computer Fundamentals Linux Learn Typing

أساسيات البرمجةالمصفوفات الأحادية

  • مفهوم المصفوفات الأحادية
  • تعريف مصفوفة أحادية
  • عرض قيم المصفوفة
  • تغيير قيم عناصر المصفوفة
  • الحصول على عدد عناصر المصفوفة
  • التعامل مع المصفوفة بواسطة حلقة
  • مشاكل شائعة عند التعامل مع المصفوفات
  • تمارين شاملة حول المصفوفات الأحادية

مفهوم المصفوفات الأحادية

المصفوفة الأحادية ( One Dimensional Array ) عبارة عن سلسلة من العناصر و كل عنصر فيها يملك قيمة و رقم فهرس يحدد موقعه في المصفوفة.

في هذا الدرس ستتعلم كيف تعرّف مصفوفة جديدة، كيف تضيف قيم فيها، كيف تعرف عدد القيمة الموجودة فيها و كيف تمر على جميع قيمها بواسطة حلقة خطوة خطوة.


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

تعريف مصفوفة أحادية

هناك طريقتين أساسيتين لتعريف المصفوفات:

  • تعريف المصفوفة مع تحديد عدد العناصر المراد تخزينها فيها و هذا الأمر نفعله بواسطة الدالة array().
  • تعريف المصفوفة و تمرير القيم التي تريد تخزينها فيها بشكل مباشر، و في هذه الحالة عدد عناصرها يساوي عدد القيم التي نمررها لها.

إنشاء مصفوفة أحادية بواسطة الدالة array()

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

مثال

var a = array(3);

إذاً المصفوفة a تحتوي 3 عناصر و كل عنصر فيها يملك رقم فهرس يحدد موقعه فيها كالتالي.


إنشاء مصفوفة أحادية و إعطاءها قيم أولية

يمكنك إنشاء مصفوفة أحادية و تمرير قيم لها بواسطة الرمز [] و عندها عدد القيم الذي تضعه فيها يعتبر عدد عناصرها.

مثال

var a = [10, 20, 30];

إذاً المصفوفة a تحتوي 3 عناصر و كل عنصر فيها يملك رقم فهرس و قيمة كالتالي.

عرض قيم المصفوفة

لعرض جميع القيم التي تحتويها المصفوفة بشكل سهل في محرر هرمش، يمكنك تمرير إسم المصفوفة للدالة write() و هي ستعرض لك قيمها.

مثال

var a = [10, 20, 30];
write(a);

سنحصل على النتيجة التالية عند التشغيل.

[10, 20, 30]

جرب الكود


في حال كان العنصر فارغ، بمعنى أنه لا يوجد فيه أي قيمة و حاولت طباعة قيمته سيظهر لك أن قيمته undefined للإشارة إلى أنه بالأساس لا يحتوي أي شيء.


في المثال التالي قمنا بتعريف مصفوفة تحتوي ثلاث عناصر و لم نضع أي قيم فيها.
بعدها قمنا بعرض جميع قيم العناصر الموجودة فيها حتى تلاحظ أنه سيظهر لك undefined عند محاولة طباعة قيمة أي عنصر لا يملك أساساً أي قيمة.

مثال

var a = array(3);
write(a);

سنحصل على النتيجة التالية عند التشغيل.

[undefined, undefined, undefined]

جرب الكود


عرض قيمة عنصر محدد

لعرض قيمة عنصر محدد في المصفوفة عليك تمرير إسم المصفوفة و رقم فهرس العنصر الذي تريد عرض قيمته كالتالي.

مثال

var a = [10, 20, 30];

write("a[0] = " + a[0] + "\n");
write("a[1] = " + a[1] + "\n");
write("a[2] = " + a[2]);

سنحصل على النتيجة التالية عند التشغيل.

a[0] = 10
a[1] = 20
a[2] = 30

جرب الكود

تغيير قيم عناصر المصفوفة

يمكنك تغيير قيمة أي عنصر في المصفوفة من خلال رقم الفهرس الخاص به كالتالي.

مثال

var a = array(3);

write("Before a = " + a);

a[0] = 10;
a[1] = 20;
a[2] = 30;

write("\nAfter a = " + a);

سنحصل على النتيجة التالية عند التشغيل.

Before a = [undefined, undefined, undefined]
After a = [10, 20, 30]

جرب الكود

الحصول على عدد عناصر المصفوفة

أي مصفوفة يتم تعريفها تملك بشكل تلقائي خاصيّة ( property ) إسمها length يمكن من خلالها معرفة عدد عناصر المصفوفة كالتالي.

مثال

var a = [10, 20, 30];

write("Number of elements is " + a.length);

سنحصل على النتيجة التالية عند التشغيل.

Number of elements is 3

جرب الكود


قاعدة

رقم الفهرس الخاص بآخر عنصر في المصفوفة يساوي دائماً عدد عناصر المصفوفة ناقص واحد. فمثلاً إذا كان عندك مصفوفة تتألف من 3 عناصر فإن رقم فهرس العنصر الأخير سيكون 2.

مثال

var a = [10, 20, 30];

write("a[2] = " + a[a.length -1]);

سنحصل على النتيجة التالية عند التشغيل.

a[2] = 30

جرب الكود

التعامل مع المصفوفة بواسطة حلقة

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

مثال

var a = [10, 20, 30];

for (var i=0; i<a.length; i++)
{
    write(a[i] + "\n");
}

سنحصل على النتيجة التالية عند التشغيل.

10
20
30

جرب الكود


في المثال السابق سواء قلنا i<a.length أو i<=a.length-1 فالنتيجة هي نفسها تماماً:

  • i<a.length تعني أن الحلقة ستتكرر من 0 إلى ما قبل 3 و هذا يعني من 0 إلى 2.
  • i<=a.length-1 تعني أن الحلقة ستتكرر من 0 إلى 3-1 و هذا يعني من 0 إلى 2 أيضاً.

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

مشاكل شائعة عند التعامل مع المصفوفات

من الأخطاء الشائعة التي يقع فيها المبتدئين عند استخدام الخاصية length هو نسيان إنقاص واحد عندما يريدون الوصول للعنصر الأخير في المصفوفة.

في محرر هرمش، إن حاولت طباعة قيمة عنصر هو أساساً غير موجود في المصفوفة فإنه سيظهر لك undefined بمعنى أنه لا يوجد عنصر في المصفوفة حتى يتم طباعة قيمته.


ماذا يحدث في حال إعطاء قيمة لعنصر غير موجود في المصفوفة؟

إن فعلت ذلك في محرر هرمش فإنه سيتم إضافة العنصر على المصفوفة و في حال كان هناك أرقام فهرس متاحة بين آخر عنصر حالي موجود في المصفوفة و رقم فهرس العنصر الجديد الذي تريد إضافته فإنه سيتم إنشاء كل العناصر الموجودة بين هذا الفهرسين و إضافتها كذلك على المصفوفة.

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

مثال

var a = [10, 20, 30];

a[6] = 70;

write(a);

بعد إضافة العنصر السابع على المصفوفة a أصبحت تحتوي 7 عناصر كالتالي.

سنحصل على النتيجة التالية عند التشغيل.

[10, 20, 30, undefined, undefined, undefined, 70]

جرب الكود


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

لا تشغل بالك بهذا الأمر فهذا الشيء يمر معك أثناء تعلمك للغة برمجة.

تمارين شاملة حول المصفوفات الأحادية


التمرين الأول

  1. أكتب برنامج يطلب من المستخدم إعطائه عدد عناصر مصفوفة إسمها arr و يخزنه في متغير إسمه n مع الإشارة إلى أن العدد الذي يدخله يجب أن يكون أكبر من صفر.
  2. ثم ينشئ المصفوفة arr و يحدد أن عدد عناصرها هو العدد الذي أدخله المستخدم.
  3. ثم يطلب من المستخدم إدخال قيمة لكل عنصر من عناصر المصفوفة arr.
  4. ثم يعرض عدد عناصر المصفوفة arr للمستخدم باستخدام الخاصية length.
  5. ثم يعرض للمستخدم جميع قيم عناصر المصفوفة arr.

الحل و التفسير


التمرين الثاني

  1. أكتب برنامج يطلب من المستخدم إعطائه عدد عناصر مصفوفة إسمها arr و يخزنه في متغير إسمه n مع الإشارة إلى أن العدد الذي يدخله يجب أن يكون أكبر من صفر.
  2. ثم يطلب من المستخدم إدخال قيمة لكل عنصر من عناصر المصفوفة arr.
  3. ثم يعرض للمستخدم ناتج جمع جميع قيم عناصر المصفوفة arr.

الحل و التفسير


التمرين الثالث

  1. أكتب برنامج يقوم بإنشاء مصفوفة فيها أعداد صحيحة جاهزة مثل [-2, 5, 3, 0, -4, 8].
  2. بعدها يعرض عدد العناصر التي تملك قيم أكبر من صفر، و عدد العناصر التي تملك قيم أصغر من صفر, و عدد العناصر التي تملك قيم تساوي صفر كالتالي:
Number of positive values = 3
Number of negative values = 2
Number of zero values = 1

الحل و التفسير


التمرين الرابع

  1. أكتب برنامج يطلب من المستخدم إدخال 5 قيم و يخزنهم في مصفوفة إسمها arr تتألف من 5 عناصر.
  2. بعدها يقوم بترتيب قيم عناصر المصفوفة من الأصغر إلى الأكبر.
  3. في الأخير يعرض للمستخدم قيم المصفوفة بعد أن تم ترتيبها.

الحل و التفسير


التمرين الخامس

  1. أكتب برنامج يطلب من المستخدم إدخال 5 قيم و يخزنهم في مصفوفة إسمها arr تتألف من 5 عناصر.
  2. بعدها يقوم بالمرور على جميع عناصر المصفوفة و يفعل التالي: كل قيمة يجدها أكبر من صفر يحولها إلى 1 و كل قيمة يجدها أصغر من صفر يحولها إلى -1.
  3. في الأخير يعرض للمستخدم قيم المصفوفة الجديدة.

الحل و التفسير


التمرين السادس

  1. أكتب برنامج يقوم بتعريف ثلاث مصفوفات A و B و C.
  2. ثم يطلب من المستخدم إدخال عدد يمثل عدد عناصر المصفوفات الثلاثة مع الإشارة إلى أن العدد الذي يدخله يجب أن يكون أكبر من صفر، لأن عدد عناصر المصفوفات لا يمكن أن يكون صفر أو أقل من صفر.
  3. بعدها يطلب من المستخدم إدخال قيمة لجميع عناصر المصفوفتين A و B و يجمعهم في المصفوفة C.
  4. في الأخير يعرض للمستخدم القيم التي أصبحت تحتويها المصفوفة C.

الحل و التفسير