You are on page 1of 6

‫المصفوفات ‪ARRAY‬‬

‫❖ تمهيد‬

‫كثير ففي الخوارزميات المختلفة‪ ،‬وهي عدد ثابت من‬


‫من هياكل البيانات المهمة في البرمجة والمستخدمة ًا‬
‫العناصر المخزنة والتي يكون لها نفس النوع‪ ،‬وكل عنصر من عناصر المصفوفة له رقم او فهرس ‪Index‬‬
‫ويتم تخزين المصفوفة بشكل متجاور في الذاكرة‪ .‬يمكننا الوصول إلى كل عنصر من المصفوفة لتعديله او‬
‫حذفه او الحصول على قيمته عن طريق هذا الفهرس ‪ Index.‬يمكن كتابة الكود لإلعالن عن المصفوفة‬
‫بطرق مختلفة على حسب اللغة المستخدمة‬

‫❖ تعريف المصفوفة‬

‫المصفوفة )‪ (Array‬هي مجموعة من عناصر تنتمي إلى نفس النوع‪ ،‬وموضوعة في أماكن متجاورة في‬
‫سمى الفهرس‪.‬‬ ‫الذاكرة‪ ،‬ويمكن الرجوع إلى كل عنصر من عناصر المصفوفة على حدة عبر ُم ِّ‬
‫عرف فريد ُي َّ‬
‫ويسمح ذلك بالتصريح عن قيم متعددة لمتغير ما ومن ثم الوصول إلى كل واحدة منها بشكل منفرد دون‬
‫الحاجة إلى التصريح عن متغير لكل قيمة‪.‬‬

‫ين متجاورٍة؛ فعند تشابهها تخزن ً‬


‫معا مما يسهل حساب موقعها‬ ‫تحتفظ المصفوفات بالعناصر في أماكن تخز ٍ‬
‫متغيرا‪ .‬وتتصف بما يلي‪- :‬‬
‫ً‬ ‫واستعادتها بسهولة وقد يكون طول المصفوفة ثابتًا أو‬

‫‪ .1‬جميع المواقع تكون من نوع بياني واحد‪ ،‬حسب صيغة التعريف ‪float ,int ,char…..‬‬
‫‪ .2‬يمكن الوصول عشوائيا )‪ ( Randomly accessed‬الى اي موقع من مواقعها دون االعتماد على‬
‫اي موقع في المصفوفة فمقدار الوقت المطلوب للوصول الى اي موقع هو مقدار ثابت ‪.‬‬
‫‪ .3‬مواقع عناصر المصفوفة تبقى ثابتة وال تتغير اثناء التعامل مع اي من عناصر المصفوفة‪.‬‬
‫‪ .4‬تمثل المصفوفة في مواقع متعاقبة في الذاكرة‪.‬‬

‫‪1‬‬ ‫‪ENG : MAJDI AMEEN‬‬


‫المصفوفات ‪ARRAY‬‬

‫❖ أنواع المصفوفات‬

‫من حيث البعد‬

‫• ذات بعد واحد‬


‫• ذات بعدين‬

‫• متعددة االبعاد (رغم وجودها ال تستخدم كثي ار والكن وجب التنويه)‬

‫من حيث الديناميكية‬

‫• مصفوفة ثابتة (ال يمكن تغير حجمها)‬


‫• مصفوفة ديناميكية (ال يتم تحديد حجم المصفوفة)‬
‫❖ ما هي المصفوفة الديناميكية؟‬

‫المصفوفة الديناميكية تشبه إلى حد كبير المصفوفة العادية‪ ،‬لكن حجمها قابل للتعديل أثناء تشغيل البرنامج‪.‬‬
‫تشغل عناصر ‪ DynamArray‬كتلة متجاورة من الذاكرة‪.‬‬

‫بمجرد إنشاء المصفوفة‪ ،‬ال يمكن تغيير حجمها‪ .‬ومع ذلك‪ ،‬مجموعة ديناميكية مختلفة‪ .‬يمكن للمصفوفة‬
‫الديناميكية توسيع حجمها حتى بعد ملئها‪.‬‬

‫أثناء إنشاء المصفوفة‪ ،‬يتم تخصيص مقدار محدد مسبًقا من الذاكرة‪ .‬ليس هذا هو الحال مع المصفوفة‬
‫الديناميكية‪ ،‬حيث إنها تزيد حجم ذاكرتها بعامل معين عند الحاجة‪.‬‬

‫‪2‬‬ ‫‪ENG : MAJDI AMEEN‬‬


‫المصفوفات ‪ARRAY‬‬

‫❖ فوائد المصفوفات‬
‫• تقليل عدد المتغيرات المتشابهة‪ ،‬فمثالً إذا كنا نريد تعريف ‪10‬متغيرات نوعهم ‪ int,‬نقوم بتعريف‬
‫مصفوفة واحدة تتألف من ‪10‬عناصر‪.‬‬
‫• التعامل مع الكود يصبح أسهل‪ ،‬ألنك إذا قمت بتخزين المعلومات داخل مصفوفة‪ ،‬تستطيع تعديلهم‪،‬‬
‫مقارنتهم أو جلبهم كلهم دفعة واحدة بكود صغير جداً باستخدام حلقة‪.‬‬
‫• تستطيع الوصول ألي عنصر من خالل رقم الـ ‪ index‬الخاص به‪.‬‬

‫❖ تهيئة المصفوفة‬

‫المصفوفة هي كتلة مكونة من مواقع متسلسلة في الذاكرة والمخصصة لنوع معين من المتغيرات‪ .‬تخصيص‬
‫المصفوفات يشبه تخصيص المتغيرات العادية‪ ،‬ولكن مع إضافة قوسين مربعين إلى اسمها ][يحتويان على‬
‫عدد يمثل عدد العناصر التي يمكن أن تحتويها ذاكرة المصفوفة‪.‬‬

‫يستخدم المثال التالي مصفوفة تستخدم نوع ‪ ،int‬واسم المتغير ‪ ،arrayOfInts‬وعدد عناصرها هو ‪[ 5 ]:‬‬

‫;]‪int arrayOfInts[5‬‬

‫يمكن التصريح عن المصفوفة وتهيئتها في نفس الوقت على النحو التالي‪:‬‬

‫;}‪int arrayOfInts[5] = {10, 20, 30, 40, 50‬‬

‫إذا هيأت مصفوفة بسرد جميع عناصرها فال يلزمك تضمين عدد عناصر المصفوفة داخل القوسين‬
‫تلقائيا‪ .‬في المثال التالي‪ ،‬تعداد المصفوفة هو ‪5‬‬
‫ً‬ ‫المصرف‬
‫سيحسبه ُ‬
‫ُ‬ ‫المعقوفين‪ ،‬إذ‬

‫;}‪int arrayOfInts[] = {10, 20, 30, 40, 50‬‬

‫كذلك نستطيع تهيئة العناصر األولى فقط‪ ،‬مع تخصيص مساحة للمزيد من العناصر‪ ،‬وفي هذه الحالة يلزمك‬
‫كتابة طول المصفوفة بين القوسين المعقوفين‪ .‬انظر الشيفرة التالية حيث نخصص مصفوف ًة خماسية (تحتوي‬

‫‪3‬‬ ‫‪ENG : MAJDI AMEEN‬‬


‫المصفوفات ‪ARRAY‬‬

‫سيهيئ المصرف بقية العناصر بالقيمة االفتراضية لنوع العنصر (في هذه‬
‫‪ 5‬عناصر) مع تهيئتها جزئيًّا‪ُ ،‬‬
‫الحالة‪ ،‬تلك القيمة هي ‪.)0‬‬

‫;}‪int arrayOfInts[5] = {10,20‬‬

‫أي أن عناصر المصفوفة السابقة هي (‪ .)0 ,0 ,0 ,20 ,10‬كذلك يمكن تهيئة مصفوفات أنواع البيانات‬
‫األساسية األخرى بالطريقة نفسها‪ .‬انظر المثال التالي للتصريح عن مصفوفة وتخصيص مساحة ذاكرة لها‬
‫دون تهيئتها‪:‬‬

‫;]‪char arrayOfChars[5‬‬
‫أو للتصريح عنها مع تهيئتها‪:‬‬

‫; } '‪char arrayOfChars[5] = { 'a', 'b', 'c', 'd', 'e‬‬


‫‪double arrayOfDoubles[5] = {1.14159, 2.14159, 3.14159,‬‬
‫;}‪4.14159, 5.14159‬‬
‫‪string arrayOfStrings[5] = { "C++", "is", "super",‬‬
‫;}"!‪"duper", "great‬‬

‫الحظ أنه عند الوصول إلى عناصر المصفوفة فإن فهرس المصفوفة (أو موضعها) يبدأ عند القيمة ‪ .0‬انظر‬
‫المثال التالي‪ ،‬حيث يكون العنصر ‪ 10‬هو العنصر رقم ‪ ،0‬و‪ 20‬هو العنصر رقم ‪ ،1‬وهكذا‪.‬‬

‫;}‪int array[5] = { 10, 20, 30, 40, 50‬‬


‫‪cout << array[4]; // 50‬‬
‫‪cout << array[0]; // 10‬‬

‫أمثلة حول طريقة تعريف مصفوفة ثنائية ‪( Two Dimensional Array ).‬‬

‫;]‪int arr[4][3‬‬

‫تعريف مصفوفة ثنائية مع اسناد قيم أولية اليها‬

‫‪4‬‬ ‫‪ENG : MAJDI AMEEN‬‬


‫المصفوفات ‪ARRAY‬‬

‫{ = ]‪int arr[4][3‬‬
‫‪{1, 2, 3},‬‬
‫}‪{4, 5, 6‬‬
‫;}‬

‫تم شرح كافة األساسيات والمفاهيم والخطوات األساسية للتعامل مع المصفوفات في ما سبق اما التالي‬
‫فسيكون عبارة عن امثلة عن المصفوفات‪..‬‬

‫األمثلة‬

‫مثال ‪: 1‬‬

‫في ما يلي برنامج لمصفوفة أحادية تتكون من ‪ 5‬خانات تحتوي على القيم الموضحة ‪ 10‬و ‪ 20‬و ‪ 30‬و‬
‫‪ 40‬و ‪ 50‬ومن ثم استخدام الدوارة ‪ for‬لطباعة عناصر المصفوفة وعمل مسافات فارغة بين عناصر‬
‫المصفوفة وعن االنتهاء من طباعة جميع عناصر المصفوفة ينزل سطر واحد وهكذا انتهى البرنامج‬

‫‪5‬‬ ‫‪ENG : MAJDI AMEEN‬‬


‫المصفوفات ‪ARRAY‬‬

‫مثال ‪2‬‬

‫يتبع البرنامج الحالي البرنامج السابق والكن مع بعض التغيرات حيث ان الحجم يحدد من قبل المستخدم فيقوم‬
‫المستخدم بتحديد عدد الخانات التي يحتاجها في المصفوفة ثم يقوم بإدخال البيانات من الكيبورد ومن ثم‬
‫عرض ما ادخلة المستخدم‬

‫مثال ‪3‬‬

‫‪6‬‬ ‫‪ENG : MAJDI AMEEN‬‬

You might also like