المصفوفات Arrays:
تمھيد:
فى كثير من االحيان قد يرتبط مجموعة من العناصر المتشابھة فى النوع معا بحيث يتم التعامل مع ھذه العناصر بطريقة واحدة مما يستلزم أن يتم ربط ھذه العناصر معا برابط واحد مشترك بحيث يتم التعامل مع ھذه العناصر عن طريق ھذا الرابط المشترك.
ونظرا لتشابھه ھذه العناصر وإرتباطھا معا، فإنه من الضروري إيجاد وسيلة الصطفاء عنصر أو أكثر من ھذه العناصر عن طريق شرط محدد.
لذلك خلص مبرمجو لغات البرمجة اليجاد طريقة لتوفير حل ھذه االحتياجات.
و الحل ھو تعريف ما يسمى بالمصفوفات (Arrays) أو ما يطلق عليه البعض بالمنظومات.
لذلك فاننا سننطلق خالل مناقشتنا ھذه عن طريق أربعة عناوين ھي:
1. ما ھي المصفوفة.
2. ما ھي أنواع المصفوفات.
3. كيفية الإعالن عن مصفوفة.
4. كيفية التعامل مع مصفوفة.
5. أمثلة إلستخدام المصفوفات.
أوال: تعريف المصفوفة :
بالنسبة الى تعريف المصفوفة ووفق ما تقدمنا به من تمھيد، فانه يمكن القول بأن :
“المصفوفة ھي عبارة عن تجمع بعض من العناصر المتشابھة فى النوع والمرتبطة معا بصفة مشتركة”.
و لما كانت عناصر المصفوفة عبارة عن بيانات متشابھة فى النوع،فانه من الممكن أن يكون أنواع البيانات لھذه العناصر ھى بيانات حرفية(char) وبيانات رقمية(int) وبيانات حقيقية (float) وتسمى ھذه األنواع (float, int, char) على الترتيب وھذه االنواع ھى ألنواع الرئيسية للبيانات، حيث ال يمكن تجزئتھا أقل من ذلك. وفى الوقت الذى نرى فيه فى معظم تعامالتنا مع المصفوفات ان المصفوفة تتكون من عناصر من بيانات بسيطة، فاننا نجد فى أوقات أخرى أن المصفوفة ممكن ان تتكون من عناصر مركبة. فقد تتكون المصفوفة من مصفوفات و أحيانا من كائنات والتى تتعامل مع إجراءات ودوال وھو ما تتميز به لغة ++c.
لذلك فإن لدراسة المصفوفات أثر بالغ االھمية فى إتقان واحتراف البرمجة بلغات الحاسب وعلى رأسھا لغة ++c.
ثانيا :نواع المصفوفات و بالنسبة الى أنواع المصفوفات فيمكن تقسيمھا الى نوعين أساسيين ھما:
• مصفوفات أحادية البعد One Dimensional Arrays وھى عن مصفوفات يمكن النظر اليھا على انھا متجه سواء كان ذلك صفا واحدا أو عمودا واحدا ومثل ھذا النوع من المصفوفات يحتاج دليل واحد النتقاء عناصره. و الشكل التالي يوضح االشكال االعتبارية لھذا النوع من المصفوفات. عمود صف و فى كلتا الحالتين ، فانه يتم تمثيل المصفوفة أحادية البعد بطريقة واحدة فى ذاكرة الحاسوب وھو ما سنعتبره بشكل عمود.
• مصفوفات متعددة االبعاد Multidimensional Arrays وقد يكون ھذا النوع ثنائى البعد، ثالثى االبعاد وھو قليل االستخدام، أو ما ھو أكثر من ذلك وھو نادر االستخدام. و سنتناول فى دراستنا المصفوفات احادية البعد و تلك التى ھى ثنائية البعد أما المصفوفات ذات االبعاد االكبر فيمكن التعامل معھا بنفس االسلوب لذلك فلن نتناولھا.
و المصفوفات ثنائية البعد تتكون من صفوف و أعمدة و ھى تحتاج الى دليلين الصطفاء أى عنصر من عناصرھا. ويوضح الشكل التالى مصفوفة ثنائية البعد وھى تتكون من 5 صفوف و6 أعمدة.
ثالثا: الاعالن عن المصفوفة :
يتم االعالن عن المصفوفات بذكر نوع عناصر المصفوفة يليه أسم المصفوفة ثم عدد زوجى من االقواس المتحاورة يوضع بداخلھا الحد االقصى لعناصر المصفوفة لھذا البعد و أخيرا الفاصلة المنقوطة إعالنا لنھاية جملة التعريف.
رابعا :كيفية التعامل مع المصفوفة :
لما كان من الممكن وجود أكثر من مصفوفة في ذاكرة الحاسوب، لذلك فانه يتم التعامل مع المصفوفة عن طريق أسمھا و دليل أو مجموعة أدلة لتحديد موضع العنصر داخل المصفوفة. ولما كان التعامل مع المصفوفة يتطلب التعامل مع عدد كبير من عناصرھا قد يتجاوزز االالف، لذلك فإنه من الحكمة إن لم يكم من الضرورى إستخدام حلقات تكرارية عن طريق أي من الجمل التكرارية السابق دراستھا مثل جملة for أو جملة while أو جملة do while إال اننا نفضل أستخدام جملة for التكرارية وذلك الننا نعلم البداية والنھاية ومقدار الزيادة.
ويتم اإلشارة إلى عناصر المصفوفة أحادية البعد بتحيد موضع العنصر بداخلھا نسبا الى أول عنصر فيھا (أسم المصفوفة، كم سيتضح ذلك عند دراسة المؤشرات) كما يتم اإلشارة إلى عناصر المصفوفة ثنائية البعد برقم الصف ورقم العمود الذي يقع عندھما العنصر. ويمكن التعامل مع المصفوفة عن طريق المراحل االتية:
• معرفة العدد الفعلى لعناصر المصفوفة ومن ثم قرأة عناصر المصفوفة عن طريق الحلقات التكرارية.
• معالجة عناصر المصفوفة المصفوفة عن طريق الحلقات التكرارية.
• طباعة و إظھار النتائج ويمكن استخدام الحلقات التكرارية اذا كان المطلوب إظھار العديد من عناصر المصفوفة عند المعالجة. وھنا يجب التأكيد على أنه من الضروري استخدام عدد من الحلقات التكرارية المتداخلة يتساوى مع بعد الممصفوفة
خامسا : أمثلة إلستخدام المصفوفات
سنتعرض فى ھذا الجزء لمجمزعة من االمثلة لتوضيح كيفية انشاء برامج لمعالجة المصفوفات بأنواعھا.
برنامج 1 :
انشئ برنامج لقراءة درجات عدد من الطالب فى مادة الحاسب االلى وحساب وطباعة
مجموع ومتوسط الدرجات.
الحل:
#include<iostream.h>
void main()
{
int degrees[25],i,n;
float sum,average;
cout<<”Enter number of students n please /n”;
cin>>n;
sum=0;
for(i=0;i<n;i++)
{
cout<<”Enter the degree of student no. “<<i<<”please \n”;
cin<<degrees[i];
sum=sum+degrees[i];
}
average=sum/n;
cout <<” The average of degrees is “ <<average<<”\n”;
}
برنامج 2:
انشئ برنامج لقراءة مصفوفتين مربعتين ووضع الناتج فى مصفوفة مربعة أخري وطباعة الناتج على
الشاشة:
الحل:
#include<iostream.h>
void main()
{
int a[10][10],b[10][10],c[10][10],i,j,m,n;
cout<<”Enter number of rows and columns please m and nplease /n”;
cin>>m>>n;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
cout<<”Enter the the elements of matrices a and b for row #”<<i<<”and col. #”<<j<<”
please\n”;
cin>>a[i][j]<<b[i][j];
cout<<”The sum of the matrix is given by= “<<c[i][j]<<”\n”;
}
}