المصفوفات بتنسيق C++ | أعلن | تهيئة | مؤشر إلى أمثلة المصفوفة
ما هي المصفوفة؟
المصفوفة عبارة عن بنية بيانات تقوم بتخزين عنصر من نفس نوع البيانات بشكل تسلسلي. أ C++ المصفوفة لها حجم ثابت.
يمكنك رؤية المصفوفة كمجموعة من المتغيرات من نفس نوع البيانات. بدلاً من الإعلان عن كل متغير وتعيين قيمة له على حدة، يمكنك الإعلان عن متغير واحد (المصفوفة) وإضافة قيم المتغيرات المختلفة إليه. يتم تحديد كل قيمة مضافة إلى المصفوفة بواسطة فهرس.
لماذا نحتاج المصفوفات؟
المصفوفات مهمة جدًا في أي لغة برمجة. أنها توفر طريقة أكثر ملاءمة لتخزين المتغيرات أو مجموعة من البيانات من نوع بيانات مماثل معًا بدلاً من تخزينها بشكل منفصل. سيتم الوصول إلى كل قيمة من المصفوفة بشكل منفصل.
قم بالإعلان عن مصفوفة في C++
إعلان المصفوفة في C++ يتضمن تحديد نوع وعدد العناصر التي سيتم تخزينها بواسطة المصفوفة. بناء الجملة:
type array-Name [ array-Size ];
قواعد الإعلان عن مصفوفة أحادية البعد C++.
- النوع: النوع هو نوع العناصر التي سيتم تخزينها في المصفوفة، ويجب أن يكون صالحًا C++ نوع البيانات.
- اسم الصفيف: اسم المصفوفة هو الاسم الذي سيتم تعيينه للمصفوفة.
- حجم الصفيف: حجم المصفوفة هو عدد العناصر التي سيتم تخزينها في المصفوفة. يجب أن يكون عددًا صحيحًا وأكبر من 0.
على سبيل المثال، يمكنك إنشاء مصفوفة باسم العمر وتخزين أعمار 5 طلاب كما يلي:
int age[5];
سيخزن عمر المصفوفة 5 أعداد صحيحة تمثل أعمار الطلاب المختلفين.
تهيئة الصفيف
تهيئة المصفوفة هي عملية تعيين/تخزين العناصر في المصفوفة. يمكن إجراء التهيئة في عبارة واحدة أو واحدة تلو الأخرى. لاحظ أن العنصر الأول في المصفوفة يتم تخزينه في الفهرس 0، بينما يتم تخزين العنصر الأخير في الفهرس n-1، حيث n هو العدد الإجمالي للعناصر في المصفوفة.
في حالة المصفوفة العمرية، سيتم تخزين العنصر الأول في الفهرس 0، بينما سيتم تخزين العنصر الأخير في الفهرس 4.
دعونا نستخدم المصفوفة العمرية لتوضيح كيفية إجراء تهيئة المصفوفة:
int age[5] = {19, 18, 21, 20, 17};
لا يمكن أن يتجاوز العدد الإجمالي للعناصر داخل { } القيمة المذكورة داخل [ ]. العنصر 19 موجود في الفهرس 0، و18 في الفهرس 1، و21 في الفهرس 2، و20 في الفهرس 3، و17 في الفهرس 4. إذا لم تذكر عدد العناصر التي سيتم تخزينها في المصفوفة داخل [ ]، فإن المصفوفة ستكون كبيرة بما يكفي لاستيعاب العناصر المضافة داخل { }. على سبيل المثال:
int age[] = {19, 18, 21, 20, 17};
سيقوم البيان أعلاه بإنشاء نفس المصفوفة تمامًا مثل العبارة السابقة. يمكنك أيضًا تعيين عنصر واحد لمصفوفة باستخدام فهرسه. على سبيل المثال:
age[3] = 20;
سيقوم البيان أعلاه بتخزين القيمة 20 في الفهرس 3 للمصفوفة المسماة age. وهذا يعني أن 20 سيكون 4th عنصر من المصفوفة.
أنواع المصفوفات
هناك نوعان من C++ المصفوفات:
- مصفوفة ذات بعد واحد
- صفيف متعدد الأبعاد
- مؤشر إلى صفيف
مصفوفة أحادية البعد
هذه مصفوفة يتم فيها ترتيب عناصر البيانات خطيًا في بُعد واحد فقط. يطلق عليه عادةً مصفوفة أحادية الأبعاد. بناء الجملة:
datatype array-name[size];
- اسم المصفوفة هو اسم المصفوفة.
- الحجم هو عدد العناصر التي سيتم تخزينها في المصفوفة.
فمثلا:
#include <iostream> using namespace std; int main() { int age[5] = { 19, 18, 21, 20, 17 }; for (int x = 0; x < 5; x++) { cout <<age[x]<<"\n"; } }
الإخراج:
فيما يلي لقطة شاشة للكود:
شرح الكود:
- بما في ذلك ملف رأس iostream في التعليمات البرمجية الخاصة بنا. سيسمح لنا بالقراءة من وحدة التحكم والكتابة إليها.
- تضمين مساحة الاسم std لاستخدام فئاتها ووظائفها دون استدعائها.
- استدعاء الوظيفة الرئيسية () التي يجب إضافة منطق البرنامج بداخلها.
- بداية نص الدالة main().
- الإعلان عن مصفوفة اسمها age لتخزين 5 أعداد صحيحة. تمت أيضًا تهيئة الأعداد الصحيحة الخمسة.
- أنشئ متغيرًا صحيحًا x باستخدام حلقة for.
- بداية جسم الحلقة.
- استخدام متغير الحلقة x للتكرار على قيم عمر المصفوفة وطباعتها على وحدة التحكم. "\n" هو حرف سطر جديد ويتم طباعته في سطر جديد بعد كل تكرار.
- نهاية الجسم لحلقة.
- نهاية نص الدالة main().
صفيف متعدد الأبعاد
هذه مصفوفة يتم فيها ترتيب عناصر البيانات لتكوين مصفوفة من المصفوفات. يمكن أن تحتوي المصفوفة متعددة الأبعاد على أي عدد من الأبعاد، ولكن المصفوفات ثنائية الأبعاد وثلاثية الأبعاد شائعة. بناء الجملة:
datatype array-name[d1][d2][d3]...[dn];
اسم المصفوفة هو اسم المصفوفة التي سيكون لها أبعاد n. على سبيل المثال:
مصفوفة ثنائية الأبعاد
تخزن المصفوفة ثنائية الأبعاد البيانات في قائمة باستخدام مصفوفة أحادية الأبعاد. وهي عبارة عن مصفوفة تحتوي على صفوف وأعمدة. لإعلان مصفوفة ثنائية الأبعاد، استخدم بناء الجملة التالي:
type array-Name [ x ][ y ];
يجب أن يكون النوع صالحًا C++ نوع البيانات. شاهد مصفوفة ثنائية الأبعاد كجدول، حيث يشير x إلى عدد الصفوف بينما يشير y إلى عدد الأعمدة. هذا يعني أنك تحدد كل عنصر في مصفوفة ثنائية الأبعاد باستخدام النموذج a[x][y]، حيث x هو عدد الصفوف وy عدد الأعمدة التي ينتمي إليها العنصر.
فيما يلي مثال لكيفية تهيئة مصفوفة ثنائية الأبعاد:
int a[2][3] = { {0, 2, 1} , /* row at index 0 */ {4, 3, 7} , /* row at index 1 */ };
في المثال أعلاه، لدينا مصفوفة ثنائية الأبعاد والتي يمكن اعتبارها مصفوفة 2×2. هناك صفين و3 أعمدة. يمكن الوصول إلى العنصر 2 باعتباره [3] [0] لأنه يقع عند تقاطع الصف المفهرس 0 والعمود المفهرس 1. يمكن الوصول إلى العنصر 0 باعتباره [1] [3] لأنه يقع في تقاطع الصف المفهرس 1 والعمود المفهرس 2.
لاحظ أننا أضفنا ببساطة أقواسًا متعرجة للتمييز بين صفوف العناصر المختلفة. كان من الممكن أيضًا إجراء التهيئة على النحو التالي:
int a[2][3] = {0, 2, 1, 4, 3, 7}; };
ما يلي C++ يوضح المثال كيفية تهيئة مصفوفة ثنائية الأبعاد وعبورها:
#include <iostream> using namespace std; int main() { // a 2x3 array int a[3][2] = { {0, 2}, {1, 4}, {3, 7} }; // traverse array elements for (int i=0; i<3; i++) for (int j=0; j<2; j++) { cout << "a[" <<i<< "][" <<j<< "]: "; cout << a[i][j] << endl; } return 0; }
الإخراج:
فيما يلي لقطة شاشة للكود أعلاه:
شرح الكود:
- بما في ذلك ملف رأس iostream في التعليمات البرمجية الخاصة بنا. سيسمح لنا بالقراءة من وحدة التحكم والكتابة إليها.
- تضمين مساحة الاسم std لاستخدام فئاتها ووظائفها دون استدعائها.
- استدعاء الدالة main() التي يجب إضافة الكود بداخلها.
- بداية نص الدالة main().
- تعليق. ال C++ سوف المترجم تخطي هذا.
- الإعلان عن مصفوفة ثنائية الأبعاد مكونة من 2 صفوف وعمودين. تمت إضافة العناصر أيضًا إلى المصفوفة.
- تعليق. ال C++ سوف المترجم تخطي هذا.
- إنشاء متغير باستخدام حلقة. سوف يتكرر هذا المتغير على فهارس الصفوف في المصفوفة.
- إنشاء متغير j باستخدام حلقة. سوف يتكرر هذا المتغير عبر فهارس الأعمدة في المصفوفة.
- بداية جسم الحلقات.
- اطبع قيم المتغيرات i وj على وحدة التحكم داخل الأقواس المربعة في وحدة التحكم.
- اطبع القيمة المخزنة في الفهرس [i] [j] للمصفوفة a.
- نهاية جسم الحلقات.
- يجب أن تقوم الدالة main() بإرجاع قيمة عددية إذا كان البرنامج يعمل بشكل جيد.
- نهاية نص الدالة main().
مصفوفة ثلاثية الأبعاد
المصفوفة ثلاثية الأبعاد هي مصفوفة من المصفوفات. يتم تحديد كل عنصر في مصفوفة ثلاثية الأبعاد من خلال مجموعة من 3 فهارس. للوصول إلى عناصر مصفوفة ثلاثية الأبعاد، نستخدم ثلاث حلقات for. على سبيل المثال:
#include<iostream> using namespace std; void main() { int a[2][3][2] = {{{4, 8},{2, 4},{1, 6}}, {{3, 6},{5, 4},{9, 3}}}; cout << "a[0][1][0] = " << a[0][1][0] << "\n"; cout << "a[0][1][1] = " << a[0][1][1] << "\n"; }
الإخراج:
فيما يلي لقطة شاشة للكود:
شرح الكود:
- بما في ذلك ملف رأس iostream في التعليمات البرمجية الخاصة بنا. سيسمح لنا بالقراءة من وحدة التحكم والكتابة إليها.
- تضمين مساحة الاسم std لاستخدام فئاتها ووظائفها دون استدعائها.
- استدعاء الوظيفة الرئيسية () التي يجب إضافة منطق البرنامج بداخلها.
- بداية نص الدالة main().
- الإعلان عن مصفوفة ثلاثية الأبعاد تسمى بحجم 3x2x3. تمت أيضًا تهيئة قيم المصفوفة.
- الوصول إلى العنصر المخزن في الفهرس [0] [1] [0] الخاص بالمصفوفة وطباعته على وحدة التحكم.
- الوصول إلى العنصر المخزن في الفهرس [0] [1] [1] الخاص بالمصفوفة وطباعته على وحدة التحكم.
- نهاية نص الدالة main().
مؤشر إلى صفيف
A مؤشر هو متغير يحمل عنوانا. بخلاف استخدام المؤشر لتخزين عنوان المتغير، يمكننا استخدامه لتخزين عنوان خلية المصفوفة. يشير اسم المصفوفة باستمرار إلى عنصرها الأول. النظر في الإعلان الوارد أدناه:
int age[5];
العمر هو مؤشر إلى $age[0]، وهو عنوان العنصر الأول في المصفوفة المسماة age. ضع في اعتبارك المثال التالي:
#include <iostream> using namespace std; int main() { int *john; int age[5] = { 19, 18, 21, 20, 17 }; john = age; cout << john << "\n"; cout << *john; }
الإخراج:
لاحظ أن القيمة الأولى للمخرجات أعلاه قد تُرجع قيمة مختلفة اعتمادًا على العنوان المخصص للعنصر الأول من المصفوفة في ذاكرة جهاز الكمبيوتر الخاص بك.
فيما يلي لقطة شاشة للكود:
شرح الكود:
- بما في ذلك ملف رأس iostream في التعليمات البرمجية الخاصة بنا. سيسمح لنا بالقراءة من وحدة التحكم والكتابة إليها.
- تضمين مساحة الاسم std لاستخدام فئاتها ووظائفها دون استدعائها.
- استدعاء الوظيفة الرئيسية () التي يجب إضافة منطق البرنامج بداخلها.
- بداية نص الدالة main().
- الإعلان عن متغير المؤشر المسمى *john.
- الإعلان عن مصفوفة أعداد صحيحة تسمى age لتخزين 5 أعداد صحيحة. تمت أيضًا تهيئة قيم الأعداد الصحيحة.
- تعيين المتغير john قيمة عنوان العنصر المخزن في الفهرس الأول لعمر المصفوفة.
- طباعة قيمة المتغير john وهو عنوان العنصر المخزن في الفهرس الأول لعمر المصفوفة.
- طباعة القيمة الأولى المخزنة في عمر المصفوفة.
- نهاية نص الدالة main().
يمكن استخدام أسماء المصفوفات كمؤشرات ثابتة، والعكس صحيح أيضًا. هذا يعني أنه يمكنك الوصول إلى القيمة المخزنة في الفهرس 3 لعمر المصفوفة باستخدام *(age + 3). على سبيل المثال:
#include <iostream> using namespace std; int main() { // an array of 5 elements. int age[5] = { 19, 18, 21, 20, 17 }; int *p; p = age; // output array values cout << "Using pointer: " << endl; for (int x=0; x<5; x++) { cout << "*(p + " << x << ") : "; cout << *(p + x) << endl; } cout << "Using age as address: " << endl; for (int x = 0; x < 5; x++) { cout << "*(age + " << x << ") : "; cout << *(age + x) << endl; } return 0; }
الإخراج:
فيما يلي لقطة شاشة للكود:
شرح الكود:
- بما في ذلك ملف رأس iostream في التعليمات البرمجية الخاصة بنا. سيسمح لنا بالقراءة من وحدة التحكم والكتابة إليها.
- تضمين مساحة الاسم std لاستخدام فئاتها ووظائفها دون استدعائها.
- استدعاء الدالة main() وبدء نص الدالة main().
- تعليق. ال C++ سوف المترجم تخطي هذا.
- الإعلان عن مصفوفة اسمها age لتخزين 5 أعداد صحيحة.
- إنشاء مؤشر عدد صحيح ص.
- تعيين p قيمة عنوان العنصر الأول لعمر المصفوفة.
- تعليق. ال C++ سوف المترجم تخطي هذا.
- اطبع بعض النص على وحدة التحكم.
- أنشئ عددًا صحيحًا x باستخدام حلقة for. يمثل { بداية نص الحلقة.
- اطبع قيم x مع بعض النصوص الأخرى على وحدة التحكم.
- اطبع قيم *(p + x) على وحدة التحكم.
- نهاية جسم الحلقة.
- اطبع بعض النص على وحدة التحكم.
- قم بإنشاء متغير x باستخدام حلقة for. يمثل { بداية جسم الحلقة.
- اطبع قيم x من 0 إلى 4 بجانب بعض النصوص الأخرى.
- اطبع قيم *(العمر + x).
- نهاية جسم الحلقة.
- إرجاع القيمة إذا تم تشغيل البرنامج بنجاح.
- نهاية نص الدالة main().
الوصول إلى قيم المصفوفة
يتم الوصول إلى عناصر المصفوفة باستخدام الفهارس الخاصة بها. تتم إضافة فهرس العنصر المراد الوصول إليه بين قوسين مربعين [ ] مباشرة بعد اسم المصفوفة. على سبيل المثال:
int john = age[2];
في المثال أعلاه، نشير ببساطة إلى أن عمر جون مخزن في الفهرس 2 للمصفوفة المسماة age. وهذا يعني أن عمر جون هو 3rd القيمة في عمر المصفوفة هنا كاملة C++ مثال يوضح كيفية الوصول إلى هذه القيمة وطباعتها:
#include<iostream> using namespace std; int main() { int age[5] = { 19, 18, 21, 20, 17 }; int john = age[2]; cout << "The age of John is:"<<john; }
الإخراج:
فيما يلي لقطة شاشة للكود:
شرح الكود:
- بما في ذلك ملف رأس iostream في التعليمات البرمجية الخاصة بنا. سيسمح لنا بالقراءة من وحدة التحكم والكتابة إليها.
- تضمين مساحة الاسم std لاستخدام فئاتها ووظائفها دون استدعائها.
- استدعاء الدالة main() التي يجب إضافة الكود بداخلها.
- بداية نص الدالة main().
- الإعلان عن مصفوفة اسمها age لتخزين 5 عناصر صحيحة.
- الوصول إلى القيمة المخزنة في الفهرس 2 لعمر المصفوفة وتخزين قيمتها في متغير اسمه john.
- طباعة قيمة المتغير john على وحدة التحكم بجانب نص آخر.
مزايا المصفوفة في C++
فيما يلي إيجابيات/فوائد استخدام Array in C++:
- يمكن اجتياز عناصر المصفوفة بسهولة.
- من السهل التعامل مع بيانات المصفوفة.
- يمكن الوصول إلى عناصر المصفوفة بشكل عشوائي.
- تسهل المصفوفات تحسين التعليمات البرمجية؛ ومن ثم، يمكننا تنفيذ الكثير من العمل باستخدام كود أقل.
- من السهل فرز بيانات المصفوفة.
عيوب المصفوفة في C++
- المصفوفة لها حجم ثابت؛ وبالتالي لا يمكننا إضافة عناصر جديدة إليه بعد التهيئة.
- يؤدي تخصيص ذاكرة أكبر من المطلوب إلى إهدار مساحة الذاكرة، وقد يؤدي تخصيص ذاكرة أقل إلى حدوث مشكلة.
- يجب معرفة عدد العناصر التي سيتم تخزينها في المصفوفة مسبقًا.
الملخص
- المصفوفة عبارة عن بنية بيانات تقوم بتخزين عناصر من نفس نوع البيانات.
- يتم تخزين عناصر المصفوفة بالتسلسل.
- تتم الإشارة إلى عناصر المصفوفة باستخدام الفهارس الخاصة بها. العنصر الأول موجود في الفهرس 0، بينما العنصر الأخير موجود في الفهرس n-1، حيث يوجد العدد الإجمالي لعناصر المصفوفة.
- يتضمن إعلان المصفوفة تحديد أنواع البيانات لعناصر المصفوفة بالإضافة إلى عدد العناصر التي سيتم تخزينها في المصفوفة.
- تقوم المصفوفة أحادية البعد بتخزين العناصر بالتسلسل.
- تقوم المصفوفة ثنائية الأبعاد بتخزين العناصر في صفوف وأعمدة.
- المصفوفة ثلاثية الأبعاد هي مصفوفة من المصفوفات.
- يمكن إضافة العناصر إلى المصفوفة باستخدام فهارسها.
- يتم الوصول إلى عناصر المصفوفة باستخدام فهارسها.
- المصفوفة متعددة الأبعاد لها أكثر من بعد واحد.
- يشير اسم المصفوفة إلى العنصر الأول الخاص بها.
- المصفوفات لها حجم ثابت، مما يعني أنه لا يمكن إضافة عناصر جديدة إلى المصفوفة بعد تهيئتها.