280 likes | 483 Views
C++ Programming. L6 . Arrays. Array :. المصفوفة هي بنية تمكننا من تخزين سلسلة من العناصر من نفس النمط بحيث تتوضع هذه العناصر بأماكن متجاورة في الذاكرة . بحيث يكون اسم المصفوفة يشير إلى أول عناصر من عناصرها. كل عنصر من عناصر المصفوفة له دليل index .
E N D
C++ Programming L6 . Arrays
Array : • المصفوفة هي بنية تمكننا من تخزين سلسلة من العناصر من نفس النمط بحيث تتوضع هذه العناصر بأماكن متجاورة في الذاكرة . • بحيث يكون اسم المصفوفة يشير إلى أول عناصر من عناصرها. • كل عنصر من عناصر المصفوفة له دليل index . • أول عنصر في المصفوفة له الدليل 0 وثاني عنصر له الدليل 1 وهكذا ..... • العنصر n يكون له الدليل n-1 . • لمعرفة القيمة الموجودة في دليل ما عن طريق ArrayName [ index ] .
Array : • يكون الـ syntax لتعريف المصفوفة بالشكل التالي :
Array : • مثلاً لتعريف مصفوفة من 100 عنصر من النمط int يكون بالشكل التالي : • تعريف مصفوفتين من النمط int .
Array Initialization : • في حال تعريف مصفوفة عن طريق التعليمة int n [5] ; نميز الحالات الثلاث التالية : • في حال كانت n هي متحول عام global فإن جميع عناصر المصفوفة ستأخذ قيمة افتراضية هي الصفر . • في حال كانت n هي متحول ساكنstatic فإن جميع عناصر المصفوفة ستأخذ قيمة افتراضية هي الصفر . • في حال كانت n هي متحول محلي local فإن جميع العناصر لم يتم تهيئتها إلى الآن !! وإن محاولة طباعة أحد عناصر المصفوفة سيعطينا خطأ أثناء التنفيذ runtime error . • هل تعلم أن هذا الأمر ينطبق أيضاً على المتحولات !!! Try it please .
Array Initialization : • يوجد عدة طرق لتهيئة المصفوفة : • تهيئة عناصر المصفوفة يدوياً عنصر تلو الآخر . • إذا كانت العناصر المدخلة غير كافية فإن باقي العناصر ستأخذ القيمة صفر .... ففي المثال التالي سيأخذ العنصران الرابع والخامس القيمة صفر . • وأيضاً في حال عدم إدخال أي قيمة ستأخذ جميع العناصر القيمة صفر .
Array Initialization : • في حال كانت القيم المدخلة عددها أكبر من عدد عناصر المصفوفة فإنه سينتج لدينا compiler error . • يمكننا أيضاً تهيئة المصفوفة باستخدام loop عن طريق المرور على كل عنصر من عناصر المصفوفة وإسناد قيمة معينة لهذا العنصر .
Array Size : • يجب أن يكون حجم المصفوفة ثابت . • إما قيمة ثابتة . • أو متحول معرف على أنه ثابت . • الثابت باستخدام const • الثابت باستخدام #define
Array Size : • في هذه الحالة لم نقوم بإدخال بعد المصفوفة ... عندها يقوم المترجم بمعرفة بُعد المصفوفة من خلال عدد العناصر المدخلة .
Array of Chars (string): • يمكن تعريف نص ما على أنه سلسلة من المحارف . • جميع السلاسل النصية تنتهي بالمحرف ‘\0’ كدلالة على انتهاء السلسلة . • في حال تعريف مصفوفة من النمط char وإسناد سلسلة نصية لها عندها تتم إضافة \0 إلى نهاية السلسلة تلقائياً . • عند طباعة سلسلة نصية نتوقف عن الطباعة عندما نصل لـ \0
Array of Chars (string): • يمكن تعريف نص ما على أنه سلسلة من المحارف . • جميع السلاسل النصية تنتهي بالمحرف ‘\0’ كدلالة على انتهاء السلسلة .
Array of Chars (string): • يمكن تعريف نص ما على أنه سلسلة من المحارف . • جميع السلاسل النصية تنتهي بالمحرف ‘\0’ كدلالة على انتهاء السلسلة .
Static Array : • نتذكر أن المتحول الـ static داخل تابع يكون على مستوى التابع وليس على مستوى الاستدعاء إذ تتم عملية التهيئة لمرة واحدة فقط .
Arrays : passing elements of array • تمرير عنصر من عناصر المصفوفة لتابع يكون تمرير بالقيمةby value . • أي أنه سيتم أخذ نسخة من العنصر وإدخاله للتابع . • أي تعديل داخل التابع سيتم على النسخة وليس على الأصل .
Arrays : array passing • تمرير المصفوفة لتابع يكون تمرير بالعنوان by reference . • اسم المصفوفة هو عنوان أول عنصر فيها . • أي أنه سيتم أخذ المصفوفة نفسها وإدخالها للتابع . • الذي يحدث فعلاً هو إدخال عنوان أول عنصر فقط (اسم المصفوفة). • أي تعديل داخل التابع سيتم على الأصل.
Constant Array : • يمكننا وضع مصفوفة الدخل على أنها const بحيث نضمن بأن المبرمج لن يخطئ بتعديل قيم المصفوفة ... • في حال تعديل قيم المصفوفة سينتج لدينا compiler error لأننا نحاول تعديل قيمة const . • التابع print وظيفته طباعة عناصر مصفوفة فهو لن يقوم بتعديل عناصرها لذلك يفضل أن تكون المصفوفة كدخل ثابت .
Constant Array : • هنا ينتج لدينا compiler error لأننا نحاول تعديل قيمة ثابتة وهذا خطأ .
Multidimensional Arrays : • يمكن تعريف مصفوفة ثنائية على أنها مصفوفة مصفوفات . • المثال التالي يقوم بتعريف مصفوفة ثنائية تحوي 3 أسطر و 5 أعمدة . • كل سطر من أسطر المصفوفة الثنائية هو مصفوفة أحادية (شعاع) .
Multidimensional Arrays : • للوصول إلى العنصر الموجود في السطر الثاني والعمود الرابع نستخدم التعليمة التالية : • يمكن تعريف مصفوفة من أكثر من بعدين ... لاحظ المثال التالي يقوم بتعريف مصفوفة من خمس أبعاد.
Multidimensional Arrays : • يمكن للمبرمج أحياناً أن يقوم باستخدام شعاع (مصفوفة أحادية) عوضاً عن مصفوفة ثنائية ، أي :
اكتب برنامج يقوم بالتعامل مع مصفوفات ثنائية بحيث يمكنه أن يجمع مصفوفتين ثنائيتين ويعطينا النتيجة في مصفوفة جديدة